aktueller Stand
This commit is contained in:
@@ -1010,6 +1010,9 @@ namespace FasdDesktopUi.Pages.SearchPage
|
||||
if (relation == null || relation.Type != enumF4sdSearchResultClass.Ticket)
|
||||
return Task.CompletedTask;
|
||||
|
||||
if (TryOpenTicketOverviewRelationExternally(relation))
|
||||
return Task.CompletedTask;
|
||||
|
||||
var ticketName = string.IsNullOrWhiteSpace(relation.DisplayName) ? relation.Name : relation.DisplayName;
|
||||
var ticketId = relation.id;
|
||||
if (ticketId == Guid.Empty)
|
||||
@@ -1030,6 +1033,77 @@ namespace FasdDesktopUi.Pages.SearchPage
|
||||
return RunTicketSearchAsync(ticketName, ticketId, userName, sids, suppressUi: true);
|
||||
}
|
||||
|
||||
private bool TryOpenTicketOverviewRelationExternally(cF4sdApiSearchResultRelation relation)
|
||||
{
|
||||
try
|
||||
{
|
||||
var ticketConfig = cFasdCockpitConfig.Instance?.Global?.TicketConfiguration;
|
||||
if (ticketConfig == null)
|
||||
return false;
|
||||
|
||||
var isIncident = IsIncidentRelation(relation, out var activityType);
|
||||
var openExternally = isIncident
|
||||
? ticketConfig.TicketOverviewOpenIncidentsExternally
|
||||
: ticketConfig.TicketOverviewOpenTicketsExternally;
|
||||
|
||||
if (!openExternally)
|
||||
return false;
|
||||
|
||||
var url = BuildTicketOverviewDeepLink(relation.id, activityType, isIncident);
|
||||
if (string.IsNullOrWhiteSpace(url))
|
||||
return false;
|
||||
|
||||
new cBrowsers().Start("default", url);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogException(ex);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool IsIncidentRelation(cF4sdApiSearchResultRelation relation, out string activityType)
|
||||
{
|
||||
activityType = null;
|
||||
|
||||
if (relation?.Infos != null && relation.Infos.TryGetValue("ActivityType", out var activityTypeValue))
|
||||
activityType = activityTypeValue;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(activityType))
|
||||
return false;
|
||||
|
||||
return activityType.IndexOf("Incident", StringComparison.OrdinalIgnoreCase) >= 0;
|
||||
}
|
||||
|
||||
private static string BuildTicketOverviewDeepLink(Guid ticketId, string activityType, bool isIncident)
|
||||
{
|
||||
if (ticketId == Guid.Empty)
|
||||
return null;
|
||||
|
||||
var server = cCockpitConfiguration.Instance?.m42ServerConfiguration?.Server;
|
||||
if (string.IsNullOrWhiteSpace(server))
|
||||
return null;
|
||||
|
||||
var baseUrl = server.TrimEnd('/');
|
||||
if (!baseUrl.StartsWith("http://", StringComparison.OrdinalIgnoreCase) &&
|
||||
!baseUrl.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
baseUrl = "https://" + baseUrl;
|
||||
}
|
||||
if (!baseUrl.EndsWith("/wm", StringComparison.OrdinalIgnoreCase))
|
||||
baseUrl += "/wm";
|
||||
|
||||
if (string.IsNullOrWhiteSpace(activityType))
|
||||
return null;
|
||||
|
||||
var viewOptionsJson = $"{{\"embedded\":false,\"objectId\":\"{ticketId}\",\"type\":\"{activityType}\",\"viewType\":\"preview\",\"archived\":0}}";
|
||||
var viewOptionsEncoded = Uri.EscapeDataString(viewOptionsJson);
|
||||
|
||||
return $"{baseUrl}/app-ServiceDesk/?view-options={viewOptionsEncoded}";
|
||||
}
|
||||
|
||||
private Task RunTicketSearchAsync(string ticketName, Guid ticketId, string userName, string sids, bool suppressUi = false)
|
||||
{
|
||||
if (ticketId == Guid.Empty)
|
||||
|
||||
Reference in New Issue
Block a user