Return ticket IDs and resolve external links
This commit is contained in:
@@ -15,6 +15,8 @@
|
|||||||
<TicketConfiguration>
|
<TicketConfiguration>
|
||||||
<DisableAutomaticTimeTracking Policy="Mandatory" Value="true" />
|
<DisableAutomaticTimeTracking Policy="Mandatory" Value="true" />
|
||||||
<CompletitionPolicy Policy="Mandatory" Value="ifRequired" />
|
<CompletitionPolicy Policy="Mandatory" Value="ifRequired" />
|
||||||
|
<UseSimplifiedCaseCompletionDialog Policy="Hidden" Value="false" />
|
||||||
|
<SimplifiedCaseCompletionTicketOpenMode Policy="Hidden" Value="Preview" />
|
||||||
<NotesMandatory Policy="Mandatory" Value="true" />
|
<NotesMandatory Policy="Mandatory" Value="true" />
|
||||||
<ShowOverview Policy="Mandatory" Value="false" />
|
<ShowOverview Policy="Mandatory" Value="false" />
|
||||||
<TicketProcessing Policy="Mandatory" Value="extern">
|
<TicketProcessing Policy="Mandatory" Value="extern">
|
||||||
|
|||||||
@@ -44,6 +44,14 @@
|
|||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="TicketExternalOpenModeEnum">
|
||||||
|
<xs:restriction base="xs:NCName">
|
||||||
|
<xs:enumeration value="None"/>
|
||||||
|
<xs:enumeration value="Preview"/>
|
||||||
|
<xs:enumeration value="Edit"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
<xs:simpleType name="HorizontalAlignmentEnum">
|
<xs:simpleType name="HorizontalAlignmentEnum">
|
||||||
<xs:restriction base="xs:NCName">
|
<xs:restriction base="xs:NCName">
|
||||||
<xs:enumeration value="Default"/>
|
<xs:enumeration value="Default"/>
|
||||||
@@ -150,6 +158,22 @@
|
|||||||
</xs:complexContent>
|
</xs:complexContent>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element name="UseSimplifiedCaseCompletionDialog" minOccurs="0" maxOccurs="1">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:complexContent>
|
||||||
|
<xs:extension base="BoolNode"></xs:extension>
|
||||||
|
</xs:complexContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SimplifiedCaseCompletionTicketOpenMode" minOccurs="0" maxOccurs="1">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:complexContent>
|
||||||
|
<xs:extension base="PolicyNode">
|
||||||
|
<xs:attribute name="Value" type="TicketExternalOpenModeEnum" use="required"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:complexContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
<xs:element name="ShowOverview" minOccurs="0" maxOccurs="1">
|
<xs:element name="ShowOverview" minOccurs="0" maxOccurs="1">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:complexContent>
|
<xs:complexContent>
|
||||||
|
|||||||
@@ -606,6 +606,20 @@ namespace C4IT.DataHistoryProvider
|
|||||||
return GlobalConfig;
|
return GlobalConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Task<cTicketExternalLinkResult> GetTicketExternalLinkAsync(Guid ticketId, enumTicketExternalOpenMode mode, cF4sdWebRequestInfo requestInfo, int logDeep, CancellationToken token)
|
||||||
|
{
|
||||||
|
if (M42WpmCollector == null)
|
||||||
|
{
|
||||||
|
return Task.FromResult(new cTicketExternalLinkResult
|
||||||
|
{
|
||||||
|
Success = false,
|
||||||
|
Mode = enumTicketExternalOpenMode.None
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return M42WpmCollector.GetTicketExternalLinkAsync(ticketId, mode, requestInfo, logDeep, token);
|
||||||
|
}
|
||||||
|
|
||||||
private void RegisterSearchRelationProviders(IEnumerable<ISearchResultRelationProvider> providers)
|
private void RegisterSearchRelationProviders(IEnumerable<ISearchResultRelationProvider> providers)
|
||||||
{
|
{
|
||||||
_searchResultRelationProviders.AddRange(providers);
|
_searchResultRelationProviders.AddRange(providers);
|
||||||
|
|||||||
@@ -1574,6 +1574,49 @@ namespace C4IT.DataHistoryProvider
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<cTicketExternalLinkResult> GetTicketExternalLinkAsync(Guid ticketId, enumTicketExternalOpenMode mode, cF4sdWebRequestInfo requestInfo, int logDeep, CancellationToken token)
|
||||||
|
{
|
||||||
|
var result = new cTicketExternalLinkResult
|
||||||
|
{
|
||||||
|
Success = false,
|
||||||
|
Mode = enumTicketExternalOpenMode.None
|
||||||
|
};
|
||||||
|
|
||||||
|
if (ticketId == Guid.Empty || mode == enumTicketExternalOpenMode.None)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
var ticketDetails = await GetTicketMainTableAsync(ticketId, requestInfo, logDeep + 1, token);
|
||||||
|
var ticketTable = ticketDetails?.FirstOrDefault();
|
||||||
|
if (ticketTable?.Columns == null)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
string previewUrl = null;
|
||||||
|
if (ticketTable.Columns.TryGetValue("DirectLinkPreview", out var previewColumn))
|
||||||
|
previewUrl = previewColumn.Values?.FirstOrDefault()?.ToString();
|
||||||
|
|
||||||
|
var resolvedMode = mode;
|
||||||
|
var url = previewUrl;
|
||||||
|
if (mode == enumTicketExternalOpenMode.Edit)
|
||||||
|
{
|
||||||
|
string editUrl = null;
|
||||||
|
if (ticketTable.Columns.TryGetValue("DirectLinkEdit", out var editColumn))
|
||||||
|
editUrl = editColumn.Values?.FirstOrDefault()?.ToString();
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(editUrl))
|
||||||
|
url = editUrl;
|
||||||
|
else
|
||||||
|
resolvedMode = enumTicketExternalOpenMode.Preview;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(url))
|
||||||
|
return result;
|
||||||
|
|
||||||
|
result.Success = true;
|
||||||
|
result.Url = url;
|
||||||
|
result.Mode = resolvedMode;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private object ConvertToF4sdType(object objVal, enumFasdValueType ValueType)
|
private object ConvertToF4sdType(object objVal, enumFasdValueType ValueType)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -472,6 +472,16 @@ namespace C4IT.DataHistoryProvider
|
|||||||
, "NotesMandatory"
|
, "NotesMandatory"
|
||||||
, "<NotesMandatory Policy=\"Hidden\" Value=\"false\" />"
|
, "<NotesMandatory Policy=\"Hidden\" Value=\"false\" />"
|
||||||
);
|
);
|
||||||
|
RetVal |= DoXmlInsertElement(XmlRoot
|
||||||
|
, "TicketConfiguration"
|
||||||
|
, "UseSimplifiedCaseCompletionDialog"
|
||||||
|
, "<UseSimplifiedCaseCompletionDialog Policy=\"Hidden\" Value=\"false\" />"
|
||||||
|
);
|
||||||
|
RetVal |= DoXmlInsertElement(XmlRoot
|
||||||
|
, "TicketConfiguration"
|
||||||
|
, "SimplifiedCaseCompletionTicketOpenMode"
|
||||||
|
, $"<SimplifiedCaseCompletionTicketOpenMode Policy=\"Hidden\" Value=\"{enumTicketExternalOpenMode.Preview}\" />"
|
||||||
|
);
|
||||||
RetVal |= DoXmlInsertElement(XmlRoot
|
RetVal |= DoXmlInsertElement(XmlRoot
|
||||||
, "TicketConfiguration"
|
, "TicketConfiguration"
|
||||||
, "ShowOverview"
|
, "ShowOverview"
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
<TicketConfiguration>
|
<TicketConfiguration>
|
||||||
<DisableAutomaticTimeTracking Policy="Mandatory" Value="true" />
|
<DisableAutomaticTimeTracking Policy="Mandatory" Value="true" />
|
||||||
<CompletitionPolicy Policy="Mandatory" Value="ifRequired" />
|
<CompletitionPolicy Policy="Mandatory" Value="ifRequired" />
|
||||||
|
<UseSimplifiedCaseCompletionDialog Policy="Hidden" Value="false" />
|
||||||
|
<SimplifiedCaseCompletionTicketOpenMode Policy="Hidden" Value="Preview" />
|
||||||
<NotesMandatory Policy="Mandatory" Value="true" />
|
<NotesMandatory Policy="Mandatory" Value="true" />
|
||||||
<ShowOverview Policy="Mandatory" Value="false" />
|
<ShowOverview Policy="Mandatory" Value="false" />
|
||||||
<TicketProcessing Policy="Mandatory" Value="extern">
|
<TicketProcessing Policy="Mandatory" Value="extern">
|
||||||
|
|||||||
@@ -18,32 +18,55 @@ namespace F4SDwebService.Controllers.Matrix42
|
|||||||
public async Task<IHttpActionResult> Matrix42TicketFinalization([FromBody] cApiM42Ticket jsonRequest)
|
public async Task<IHttpActionResult> Matrix42TicketFinalization([FromBody] cApiM42Ticket jsonRequest)
|
||||||
{
|
{
|
||||||
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
|
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
|
||||||
var requestInfo = new cF4sdWebRequestInfo("Matrix42TicketFinalization", jsonRequest.Action?.ToString() + " + " + jsonRequest.Ticket?.ToString() ?? "", cAuthentication.GetUserInfo(ActionContext));
|
var requestInfo = new cF4sdWebRequestInfo("Matrix42TicketFinalization", jsonRequest?.Action?.ToString() + " + " + jsonRequest?.Ticket?.ToString() ?? "", cAuthentication.GetUserInfo(ActionContext));
|
||||||
if (cPerformanceLogger.IsActive && requestInfo != null) { cPerformanceLogger.LogPerformanceStart(0, requestInfo.requestName, requestInfo.id, requestInfo.created); }
|
if (cPerformanceLogger.IsActive && requestInfo != null) { cPerformanceLogger.LogPerformanceStart(0, requestInfo.requestName, requestInfo.id, requestInfo.created); }
|
||||||
var apiError = 0;
|
var apiError = 0;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (jsonRequest == null)
|
||||||
|
return BadRequest();
|
||||||
|
|
||||||
if (string.Equals(jsonRequest.StatusIdValue, "Closed", StringComparison.InvariantCultureIgnoreCase))
|
if (string.Equals(jsonRequest.StatusIdValue, "Closed", StringComparison.InvariantCultureIgnoreCase))
|
||||||
await WebApiApplication.Collector.M42WpmCollector.ReopenM42TicketAsync(jsonRequest, requestInfo, 1, CancellationToken.None);
|
await WebApiApplication.Collector.M42WpmCollector.ReopenM42TicketAsync(jsonRequest, requestInfo, 1, CancellationToken.None);
|
||||||
|
|
||||||
|
string operationResult = null;
|
||||||
switch (jsonRequest.Action)
|
switch (jsonRequest.Action)
|
||||||
{
|
{
|
||||||
case enumCloseCaseTicketStatus.Save:
|
case enumCloseCaseTicketStatus.Save:
|
||||||
if (jsonRequest.Ticket == null || jsonRequest.Ticket.HasValue && jsonRequest.Ticket.Equals(Guid.Empty))
|
if (jsonRequest.Ticket == null || jsonRequest.Ticket.HasValue && jsonRequest.Ticket.Equals(Guid.Empty))
|
||||||
return Ok(await WebApiApplication.Collector.M42WpmCollector.CreateM42TicketAsync(jsonRequest, requestInfo, 1, CancellationToken.None));
|
operationResult = await WebApiApplication.Collector.M42WpmCollector.CreateM42TicketAsync(jsonRequest, requestInfo, 1, CancellationToken.None);
|
||||||
else
|
else
|
||||||
return Ok(await WebApiApplication.Collector.M42WpmCollector.UpdateM42TicketAsync(jsonRequest, requestInfo, 1, CancellationToken.None));
|
operationResult = await WebApiApplication.Collector.M42WpmCollector.UpdateM42TicketAsync(jsonRequest, requestInfo, 1, CancellationToken.None);
|
||||||
|
break;
|
||||||
case enumCloseCaseTicketStatus.Close:
|
case enumCloseCaseTicketStatus.Close:
|
||||||
return Ok(await WebApiApplication.Collector.M42WpmCollector.CloseM42TicketAsync(jsonRequest, requestInfo, 1, CancellationToken.None));
|
operationResult = await WebApiApplication.Collector.M42WpmCollector.CloseM42TicketAsync(jsonRequest, requestInfo, 1, CancellationToken.None);
|
||||||
|
break;
|
||||||
case enumCloseCaseTicketStatus.OnHold:
|
case enumCloseCaseTicketStatus.OnHold:
|
||||||
return Ok(await WebApiApplication.Collector.M42WpmCollector.PauseM42TicketAsync(jsonRequest, requestInfo, 1, CancellationToken.None));
|
operationResult = await WebApiApplication.Collector.M42WpmCollector.PauseM42TicketAsync(jsonRequest, requestInfo, 1, CancellationToken.None);
|
||||||
|
break;
|
||||||
case enumCloseCaseTicketStatus.Forward:
|
case enumCloseCaseTicketStatus.Forward:
|
||||||
return Ok(await WebApiApplication.Collector.M42WpmCollector.ForwardM42TicketAsync(jsonRequest, requestInfo, 1, CancellationToken.None));
|
operationResult = await WebApiApplication.Collector.M42WpmCollector.ForwardM42TicketAsync(jsonRequest, requestInfo, 1, CancellationToken.None);
|
||||||
|
break;
|
||||||
default: break;
|
default:
|
||||||
|
return BadRequest();
|
||||||
}
|
}
|
||||||
return Ok(jsonRequest);
|
|
||||||
|
if (operationResult == null)
|
||||||
|
return InternalServerError();
|
||||||
|
|
||||||
|
var ticketId = jsonRequest.Ticket;
|
||||||
|
if ((!ticketId.HasValue || ticketId.Value == Guid.Empty) && Guid.TryParse(operationResult, out var createdTicketId))
|
||||||
|
ticketId = createdTicketId;
|
||||||
|
|
||||||
|
if (!ticketId.HasValue || ticketId.Value == Guid.Empty)
|
||||||
|
return InternalServerError();
|
||||||
|
|
||||||
|
return Ok(new cTicketFinalizationResult
|
||||||
|
{
|
||||||
|
Success = true,
|
||||||
|
TicketId = ticketId
|
||||||
|
});
|
||||||
}
|
}
|
||||||
catch (Exception E)
|
catch (Exception E)
|
||||||
{
|
{
|
||||||
|
|||||||
58
F4SDwebService/Controllers/TicketingController.cs
Normal file
58
F4SDwebService/Controllers/TicketingController.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
using C4IT.DataHistoryProvider;
|
||||||
|
using C4IT.FASD.Base;
|
||||||
|
using C4IT.Logging;
|
||||||
|
using F4SDwebService;
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Web.Http;
|
||||||
|
using static C4IT.Logging.cLogManager;
|
||||||
|
|
||||||
|
namespace FasdWebService.Controllers
|
||||||
|
{
|
||||||
|
[RoutePrefix("api/Ticketing")]
|
||||||
|
public class TicketingController : ApiController
|
||||||
|
{
|
||||||
|
[HttpGet]
|
||||||
|
[Route("GetExternalLink")]
|
||||||
|
public async Task<IHttpActionResult> GetExternalLink(Guid ticketId, enumTicketExternalOpenMode mode)
|
||||||
|
{
|
||||||
|
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
|
||||||
|
|
||||||
|
var requestInfo = new cF4sdWebRequestInfo("Ticketing.GetExternalLink", ticketId.ToString(), cAuthentication.GetUserInfo(ActionContext));
|
||||||
|
if (cPerformanceLogger.IsActive && requestInfo != null) { cPerformanceLogger.LogPerformanceStart(0, requestInfo.requestName, requestInfo.id, requestInfo.created); }
|
||||||
|
|
||||||
|
var apiError = 0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (ticketId == Guid.Empty || mode == enumTicketExternalOpenMode.None)
|
||||||
|
return BadRequest();
|
||||||
|
|
||||||
|
var result = await WebApiApplication.Collector.GetTicketExternalLinkAsync(ticketId, mode, requestInfo, 1, CancellationToken.None);
|
||||||
|
return Ok(result ?? new cTicketExternalLinkResult
|
||||||
|
{
|
||||||
|
Success = false,
|
||||||
|
Mode = enumTicketExternalOpenMode.None
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception E)
|
||||||
|
{
|
||||||
|
apiError = E.HResult;
|
||||||
|
LogException(E);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (WebApiApplication.Debug_apiTiming) WebApiApplication.SaveApiTimingEntry(requestInfo.requestName, requestInfo.id, requestInfo.created, apiError);
|
||||||
|
if (cPerformanceLogger.IsActive && requestInfo != null) { cPerformanceLogger.LogPerformanceEnd(0, requestInfo.requestName, requestInfo.id, requestInfo.created, requestInfo.created, ErrorCode: apiError); }
|
||||||
|
if (CM != null) LogMethodEnd(CM);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ok(new cTicketExternalLinkResult
|
||||||
|
{
|
||||||
|
Success = false,
|
||||||
|
Mode = enumTicketExternalOpenMode.None
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -324,6 +324,7 @@
|
|||||||
<Compile Include="Controllers\RemoteDesktopController.cs" />
|
<Compile Include="Controllers\RemoteDesktopController.cs" />
|
||||||
<Compile Include="Controllers\SearchDefault.cs" />
|
<Compile Include="Controllers\SearchDefault.cs" />
|
||||||
<Compile Include="Controllers\F4SDAnalyticsDataController.cs" />
|
<Compile Include="Controllers\F4SDAnalyticsDataController.cs" />
|
||||||
|
<Compile Include="Controllers\TicketingController.cs" />
|
||||||
<Compile Include="Controllers\TicketOverviewController.cs" />
|
<Compile Include="Controllers\TicketOverviewController.cs" />
|
||||||
<Compile Include="Controllers\StagedSearchRelationController.cs" />
|
<Compile Include="Controllers\StagedSearchRelationController.cs" />
|
||||||
<Compile Include="Controllers\UsageController.cs" />
|
<Compile Include="Controllers\UsageController.cs" />
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
<TicketConfiguration>
|
<TicketConfiguration>
|
||||||
<DisableAutomaticTimeTracking Policy="Mandatory" Value="true" />
|
<DisableAutomaticTimeTracking Policy="Mandatory" Value="true" />
|
||||||
<CompletitionPolicy Policy="Mandatory" Value="ifRequired" />
|
<CompletitionPolicy Policy="Mandatory" Value="ifRequired" />
|
||||||
|
<UseSimplifiedCaseCompletionDialog Policy="Hidden" Value="false" />
|
||||||
|
<SimplifiedCaseCompletionTicketOpenMode Policy="Hidden" Value="Preview" />
|
||||||
<NotesMandatory Policy="Mandatory" Value="true" />
|
<NotesMandatory Policy="Mandatory" Value="true" />
|
||||||
<ShowOverview Policy="Mandatory" Value="false" />
|
<ShowOverview Policy="Mandatory" Value="false" />
|
||||||
<TicketProcessing Policy="Mandatory" Value="extern">
|
<TicketProcessing Policy="Mandatory" Value="extern">
|
||||||
|
|||||||
@@ -44,6 +44,14 @@
|
|||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="TicketExternalOpenModeEnum">
|
||||||
|
<xs:restriction base="xs:NCName">
|
||||||
|
<xs:enumeration value="None"/>
|
||||||
|
<xs:enumeration value="Preview"/>
|
||||||
|
<xs:enumeration value="Edit"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
<xs:simpleType name="HorizontalAlignmentEnum">
|
<xs:simpleType name="HorizontalAlignmentEnum">
|
||||||
<xs:restriction base="xs:NCName">
|
<xs:restriction base="xs:NCName">
|
||||||
<xs:enumeration value="Default"/>
|
<xs:enumeration value="Default"/>
|
||||||
@@ -150,6 +158,22 @@
|
|||||||
</xs:complexContent>
|
</xs:complexContent>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element name="UseSimplifiedCaseCompletionDialog" minOccurs="0" maxOccurs="1">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:complexContent>
|
||||||
|
<xs:extension base="BoolNode"></xs:extension>
|
||||||
|
</xs:complexContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SimplifiedCaseCompletionTicketOpenMode" minOccurs="0" maxOccurs="1">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:complexContent>
|
||||||
|
<xs:extension base="PolicyNode">
|
||||||
|
<xs:attribute name="Value" type="TicketExternalOpenModeEnum" use="required"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:complexContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
<xs:element name="ShowOverview" minOccurs="0" maxOccurs="1">
|
<xs:element name="ShowOverview" minOccurs="0" maxOccurs="1">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:complexContent>
|
<xs:complexContent>
|
||||||
|
|||||||
Reference in New Issue
Block a user