Add simplified ticket completion flow
This commit is contained in:
@@ -1515,6 +1515,12 @@ namespace C4IT.FASD.Cockpit.Communication
|
||||
return output;
|
||||
}
|
||||
public override async Task<bool> Matrix42TicketFinalization(cApiM42Ticket ticketData)
|
||||
{
|
||||
var result = await FinalizeTicketAsync(ticketData);
|
||||
return result?.Success == true;
|
||||
}
|
||||
|
||||
public override async Task<cTicketFinalizationResult> FinalizeTicketAsync(cApiM42Ticket ticketData)
|
||||
{
|
||||
var CM = MethodBase.GetCurrentMethod();
|
||||
LogMethodBegin(CM);
|
||||
@@ -1522,7 +1528,6 @@ namespace C4IT.FASD.Cockpit.Communication
|
||||
var apiError = 0;
|
||||
var timeStart = DateTime.UtcNow;
|
||||
|
||||
bool output = false;
|
||||
try
|
||||
{
|
||||
var http = GetHttpHelper(true);
|
||||
@@ -1532,7 +1537,7 @@ namespace C4IT.FASD.Cockpit.Communication
|
||||
var result = await http.PostJsonAsync(url, payload, 20000, CancellationToken.None);
|
||||
|
||||
if (result.IsOk)
|
||||
return true;
|
||||
return ParseTicketFinalizationResult(result.Result, ticketData?.Ticket);
|
||||
else
|
||||
apiError = (int)result.Status;
|
||||
}
|
||||
@@ -1547,7 +1552,102 @@ namespace C4IT.FASD.Cockpit.Communication
|
||||
LogMethodEnd(CM);
|
||||
}
|
||||
|
||||
return output;
|
||||
return new cTicketFinalizationResult { Success = false };
|
||||
}
|
||||
|
||||
internal static cTicketFinalizationResult ParseTicketFinalizationResult(string response, Guid? fallbackTicketId)
|
||||
{
|
||||
if (fallbackTicketId == Guid.Empty)
|
||||
fallbackTicketId = null;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(response))
|
||||
{
|
||||
try
|
||||
{
|
||||
var token = JToken.Parse(response);
|
||||
if (token.Type == JTokenType.Object)
|
||||
{
|
||||
var result = token.ToObject<cTicketFinalizationResult>();
|
||||
if (result != null)
|
||||
{
|
||||
if (result.Success && (!result.TicketId.HasValue || result.TicketId.Value == Guid.Empty))
|
||||
result.TicketId = fallbackTicketId;
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
else if (token.Type == JTokenType.String &&
|
||||
Guid.TryParse(token.Value<string>(), out var createdTicketId))
|
||||
{
|
||||
return new cTicketFinalizationResult
|
||||
{
|
||||
Success = true,
|
||||
TicketId = createdTicketId
|
||||
};
|
||||
}
|
||||
}
|
||||
catch (JsonException)
|
||||
{
|
||||
if (Guid.TryParse(response.Trim().Trim('"'), out var createdTicketId))
|
||||
{
|
||||
return new cTicketFinalizationResult
|
||||
{
|
||||
Success = true,
|
||||
TicketId = createdTicketId
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Older providers returned an empty JSON value for successful updates.
|
||||
return new cTicketFinalizationResult
|
||||
{
|
||||
Success = true,
|
||||
TicketId = fallbackTicketId
|
||||
};
|
||||
}
|
||||
|
||||
public override async Task<cTicketExternalLinkResult> GetTicketExternalLinkAsync(Guid ticketId, enumTicketExternalOpenMode mode)
|
||||
{
|
||||
var CM = MethodBase.GetCurrentMethod();
|
||||
LogMethodBegin(CM);
|
||||
|
||||
var apiError = 0;
|
||||
var timeStart = DateTime.UtcNow;
|
||||
|
||||
try
|
||||
{
|
||||
if (ticketId == Guid.Empty || mode == enumTicketExternalOpenMode.None)
|
||||
return new cTicketExternalLinkResult { Success = false, Mode = enumTicketExternalOpenMode.None };
|
||||
|
||||
var http = GetHttpHelper(true);
|
||||
var url = $"api/Ticketing/GetExternalLink?ticketId={ticketId:D}&mode={Uri.EscapeDataString(mode.ToString())}";
|
||||
var result = await http.GetHttpJson(url, 20000, CancellationToken.None);
|
||||
|
||||
if (result.IsOk)
|
||||
{
|
||||
return JsonConvert.DeserializeObject<cTicketExternalLinkResult>(result.Result)
|
||||
?? new cTicketExternalLinkResult { Success = false, Mode = enumTicketExternalOpenMode.None };
|
||||
}
|
||||
|
||||
apiError = (int)result.Status;
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
apiError = E.HResult;
|
||||
LogException(E);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (Debug_apiTiming) SaveApiTimingEntry("Ticketing-GetExternalLink", timeStart, apiError);
|
||||
LogMethodEnd(CM);
|
||||
}
|
||||
|
||||
return new cTicketExternalLinkResult
|
||||
{
|
||||
Success = false,
|
||||
Mode = enumTicketExternalOpenMode.None
|
||||
};
|
||||
}
|
||||
|
||||
public override async Task<bool> GetAgentApiAccessInfo()
|
||||
|
||||
Reference in New Issue
Block a user