Compare commits
2 Commits
764a8cffb8
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7392454a63 | ||
|
|
f89e2de60d |
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<F4SD-Global-Configuration>
|
||||
<ShouldSkipSlimView Policy="Default" Value="true" />
|
||||
<SmallViewAlignment Policy="Default" Value="Right" />
|
||||
<FavouriteBarAlignment Policy="Default" Value="Right" />
|
||||
<InformationClassSearchPriority Policy="Hidden">
|
||||
<InformationClass Type="User" />
|
||||
<InformationClass Type="Computer" />
|
||||
<InformationClass Type="VirtualSession" />
|
||||
<InformationClass Type="Ticket" />
|
||||
</InformationClassSearchPriority>
|
||||
<TicketConfiguration>
|
||||
<DisableAutomaticTimeTracking Policy="Mandatory" Value="true" />
|
||||
<CompletitionPolicy Policy="Mandatory" Value="IfRequired" />
|
||||
<NotesMandatory Policy="Mandatory" Value="true" />
|
||||
<ShowOverview Policy="Mandatory" Value="true" />
|
||||
<OpenActivitiesExternally Policy="Mandatory" Value="false">
|
||||
<OpenActivityOverride ActivityType="SPSActivityTypeTicket" Value="false" />
|
||||
<OpenActivityOverride ActivityType="SPSActivityTypeServiceRequest" Value="true" />
|
||||
</OpenActivitiesExternally>
|
||||
<OverviewPollingPersonal Policy="Mandatory" Value="10" />
|
||||
<OverviewPollingRole Policy="Mandatory" Value="5" />
|
||||
</TicketConfiguration>
|
||||
</F4SD-Global-Configuration>
|
||||
@@ -116,12 +116,15 @@
|
||||
<SubType>Designer</SubType>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Config\F4SD-MenuSection-Configuration.xml">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Config\F4SD-QuickAction-Configuration.xml">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Config\F4SD-MenuSection-Configuration.xml">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Config\F4SD-Global-Configuration.xml">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="Config\F4SD-QuickAction-Configuration.xml">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<None Include="app.config" />
|
||||
<None Include="Config\F4SD-CopyTemplate-Configuration.xsd">
|
||||
<SubType>Designer</SubType>
|
||||
|
||||
@@ -3,18 +3,20 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using System.Threading;
|
||||
using System.Diagnostics;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
using FasdCockpitBase.Models;
|
||||
using FasdCockpitCommunicationDemo;
|
||||
using C4IT.FASD.Base;
|
||||
using static C4IT.Logging.cLogManager;
|
||||
using FasdCockpitBase;
|
||||
using C4IT.Logging;
|
||||
using System.Threading.Tasks;
|
||||
using System.Threading;
|
||||
using System.Diagnostics;
|
||||
using System.Xml;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
using FasdCockpitBase.Models;
|
||||
using FasdCockpitCommunicationDemo;
|
||||
using C4IT.Configuration;
|
||||
using C4IT.FASD.Base;
|
||||
using static C4IT.Logging.cLogManager;
|
||||
using FasdCockpitBase;
|
||||
using C4IT.Logging;
|
||||
|
||||
|
||||
namespace C4IT.FASD.Cockpit.Communication
|
||||
@@ -245,18 +247,19 @@ namespace C4IT.FASD.Cockpit.Communication
|
||||
scopeDictionary[scopeKey] = definitions;
|
||||
}
|
||||
|
||||
if (!definitions.Any(d => d.TicketId == record.TicketId))
|
||||
{
|
||||
definitions.Add(new TicketOverviewRelationDefinition
|
||||
{
|
||||
TicketId = record.TicketId,
|
||||
UserId = record.UserId,
|
||||
DisplayName = record.DisplayName,
|
||||
Summary = record.Summary,
|
||||
StatusId = record.StatusId,
|
||||
UserDisplayName = record.UserDisplayName,
|
||||
UserAccount = record.UserAccount,
|
||||
UserDomain = record.UserDomain
|
||||
if (!definitions.Any(d => d.TicketId == record.TicketId))
|
||||
{
|
||||
definitions.Add(new TicketOverviewRelationDefinition
|
||||
{
|
||||
TicketId = record.TicketId,
|
||||
UserId = record.UserId,
|
||||
DisplayName = record.DisplayName,
|
||||
ActivityType = record.ActivityType,
|
||||
Summary = record.Summary,
|
||||
StatusId = record.StatusId,
|
||||
UserDisplayName = record.UserDisplayName,
|
||||
UserAccount = record.UserAccount,
|
||||
UserDomain = record.UserDomain
|
||||
});
|
||||
}
|
||||
|
||||
@@ -490,6 +493,9 @@ namespace C4IT.FASD.Cockpit.Communication
|
||||
var summary = definition.Summary ?? string.Empty;
|
||||
if (detailTicket != null && !string.IsNullOrWhiteSpace(detailTicket.Summary))
|
||||
summary = detailTicket.Summary;
|
||||
var activityType = string.IsNullOrWhiteSpace(definition.ActivityType)
|
||||
? null
|
||||
: definition.ActivityType.Trim();
|
||||
|
||||
var relation = new cF4sdApiSearchResultRelation
|
||||
{
|
||||
@@ -504,12 +510,13 @@ namespace C4IT.FASD.Cockpit.Communication
|
||||
["StatusId"] = definition.StatusId ?? string.Empty,
|
||||
["UserDisplayName"] = definition.UserDisplayName ?? string.Empty,
|
||||
["UserAccount"] = definition.UserAccount ?? string.Empty,
|
||||
["UserDomain"] = definition.UserDomain ?? string.Empty
|
||||
["UserDomain"] = definition.UserDomain ?? string.Empty,
|
||||
["ActivityType"] = activityType
|
||||
},
|
||||
Identities = new cF4sdIdentityList
|
||||
{
|
||||
new cF4sdIdentityEntry { Class = enumFasdInformationClass.Ticket, Id = definition.TicketId },
|
||||
new cF4sdIdentityEntry { Class = enumFasdInformationClass.User, Id = definition.UserId }
|
||||
Identities = new cF4sdIdentityList
|
||||
{
|
||||
new cF4sdIdentityEntry { Class = enumFasdInformationClass.Ticket, Id = definition.TicketId },
|
||||
new cF4sdIdentityEntry { Class = enumFasdInformationClass.User, Id = definition.UserId }
|
||||
}
|
||||
};
|
||||
relations.Add(relation);
|
||||
@@ -555,10 +562,133 @@ namespace C4IT.FASD.Cockpit.Communication
|
||||
return fallbackData.Tickets.FirstOrDefault(ticket => ticket.Id == definition.TicketId);
|
||||
}
|
||||
|
||||
private static string ResolveTicketActivityType(string displayName, cF4SDTicket detailTicket = null)
|
||||
{
|
||||
var linkType = TryGetActivityTypeFromTicketLinks(detailTicket);
|
||||
if (!string.IsNullOrWhiteSpace(linkType))
|
||||
return linkType;
|
||||
|
||||
var ticketName = displayName ?? detailTicket?.Name;
|
||||
if (string.IsNullOrWhiteSpace(ticketName))
|
||||
return "SPSActivityTypeTicket";
|
||||
|
||||
if (ticketName.StartsWith("INC", StringComparison.OrdinalIgnoreCase))
|
||||
return "SPSActivityTypeIncident";
|
||||
|
||||
if (ticketName.StartsWith("SRQ", StringComparison.OrdinalIgnoreCase))
|
||||
return "SPSActivityTypeServiceRequest";
|
||||
|
||||
if (ticketName.StartsWith("PRB", StringComparison.OrdinalIgnoreCase))
|
||||
return "SPSActivityTypeGroupTicket";
|
||||
|
||||
if (ticketName.StartsWith("ALT", StringComparison.OrdinalIgnoreCase))
|
||||
return "SPSActivityTypeAlert";
|
||||
|
||||
if (ticketName.StartsWith("CHG", StringComparison.OrdinalIgnoreCase))
|
||||
return "SVMChangeRequestType";
|
||||
|
||||
if (ticketName.StartsWith("TSK", StringComparison.OrdinalIgnoreCase))
|
||||
return "SPSActivityTypeBase";
|
||||
|
||||
return "SPSActivityTypeTicket";
|
||||
}
|
||||
|
||||
private static string TryGetActivityTypeFromTicketLinks(cF4SDTicket ticket)
|
||||
{
|
||||
if (ticket?.DirectLinks == null || ticket.DirectLinks.Count == 0)
|
||||
return null;
|
||||
|
||||
foreach (var link in ticket.DirectLinks.Values)
|
||||
{
|
||||
var type = TryGetActivityTypeFromUrl(link);
|
||||
if (!string.IsNullOrWhiteSpace(type))
|
||||
return type;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static string TryGetActivityTypeFromUrl(string url)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(url))
|
||||
return null;
|
||||
|
||||
var markerList = new[] { "preview-object/", "edit-object/", "create-object/" };
|
||||
foreach (var marker in markerList)
|
||||
{
|
||||
var markerIndex = url.IndexOf(marker, StringComparison.OrdinalIgnoreCase);
|
||||
if (markerIndex < 0)
|
||||
continue;
|
||||
|
||||
var start = markerIndex + marker.Length;
|
||||
var end = url.IndexOf('/', start);
|
||||
if (end < 0)
|
||||
end = url.IndexOf('?', start);
|
||||
if (end < 0)
|
||||
end = url.Length;
|
||||
|
||||
if (end <= start)
|
||||
continue;
|
||||
|
||||
var activityType = url.Substring(start, end - start).Trim();
|
||||
if (!string.IsNullOrWhiteSpace(activityType))
|
||||
return activityType;
|
||||
}
|
||||
|
||||
// Fallback for view-options based deeplinks.
|
||||
var decodedUrl = Uri.UnescapeDataString(url);
|
||||
const string queryTypeToken = "\"type\":\"";
|
||||
var typeStart = decodedUrl.IndexOf(queryTypeToken, StringComparison.OrdinalIgnoreCase);
|
||||
if (typeStart < 0)
|
||||
return null;
|
||||
|
||||
typeStart += queryTypeToken.Length;
|
||||
var typeEnd = decodedUrl.IndexOf('"', typeStart);
|
||||
if (typeEnd <= typeStart)
|
||||
return null;
|
||||
|
||||
var parsedType = decodedUrl.Substring(typeStart, typeEnd - typeStart).Trim();
|
||||
return string.IsNullOrWhiteSpace(parsedType) ? null : parsedType;
|
||||
}
|
||||
|
||||
private string ResolveDemoM42Server()
|
||||
{
|
||||
foreach (var sampleData in MockupData)
|
||||
{
|
||||
if (sampleData?.Tickets == null)
|
||||
continue;
|
||||
|
||||
foreach (var ticket in sampleData.Tickets)
|
||||
{
|
||||
if (ticket?.DirectLinks == null)
|
||||
continue;
|
||||
|
||||
foreach (var link in ticket.DirectLinks.Values)
|
||||
{
|
||||
if (TryExtractServerBase(link, out var serverBase))
|
||||
return serverBase;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "https://srvwsm001.imagoverum.com";
|
||||
}
|
||||
|
||||
private static bool TryExtractServerBase(string url, out string serverBase)
|
||||
{
|
||||
serverBase = null;
|
||||
|
||||
if (!Uri.TryCreate(url, UriKind.Absolute, out var uri))
|
||||
return false;
|
||||
|
||||
serverBase = uri.GetLeftPart(UriPartial.Authority);
|
||||
return !string.IsNullOrWhiteSpace(serverBase);
|
||||
}
|
||||
|
||||
private static Task SimulateTicketOverviewLatencyAsync(int count)
|
||||
{
|
||||
int baseMs = 420;
|
||||
int perItem = 100;
|
||||
int baseMs = 420;
|
||||
int perItem = 100;
|
||||
int capped = Math.Max(0, Math.Min(count, 5));
|
||||
int delay = Math.Max(240, Math.Min(baseMs + capped * perItem, 2000));
|
||||
return Task.Delay(delay);
|
||||
@@ -1126,10 +1256,10 @@ namespace C4IT.FASD.Cockpit.Communication
|
||||
|
||||
var demoTickets = await GetDemoTicketData(new cF4sdHealthCardRawDataRequest() { Identities = new cF4sdIdentityList() { new cF4sdIdentityEntry() { Class = enumFasdInformationClass.User, Id = Guid.Parse(constGuidTimoTicket) }, new cF4sdIdentityEntry() { Class = enumFasdInformationClass.Computer, Id = Guid.NewGuid() } } });
|
||||
|
||||
foreach (var demoTicket in demoTickets)
|
||||
{
|
||||
output.Add(new cF4sdApiSearchResultRelation() { id = demoTicket.Id, Name = demoTicket.Name, DisplayName = demoTicket.Name, Infos = new Dictionary<string, string>() { ["Summary"] = demoTicket.Summary, ["Status"] = demoTicket.Status.ToString(), ["StatusId"] = ((int)demoTicket.Status).ToString(), ["Asset"] = demoTicket.Asset }, Type = enumF4sdSearchResultClass.Ticket, Identities = new cF4sdIdentityList() { new cF4sdIdentityEntry() { Class = enumFasdInformationClass.User, Id = Guid.Parse(constGuidTimoTicket) }, new cF4sdIdentityEntry() { Class = enumFasdInformationClass.Ticket, Id = demoTicket.Id } } });
|
||||
}
|
||||
foreach (var demoTicket in demoTickets)
|
||||
{
|
||||
output.Add(new cF4sdApiSearchResultRelation() { id = demoTicket.Id, Name = demoTicket.Name, DisplayName = demoTicket.Name, Infos = new Dictionary<string, string>() { ["Summary"] = demoTicket.Summary, ["Status"] = demoTicket.Status.ToString(), ["StatusId"] = ((int)demoTicket.Status).ToString(), ["Asset"] = demoTicket.Asset, ["ActivityType"] = ResolveTicketActivityType(demoTicket.Name, demoTicket) }, Type = enumF4sdSearchResultClass.Ticket, Identities = new cF4sdIdentityList() { new cF4sdIdentityEntry() { Class = enumFasdInformationClass.User, Id = Guid.Parse(constGuidTimoTicket) }, new cF4sdIdentityEntry() { Class = enumFasdInformationClass.Ticket, Id = demoTicket.Id } } });
|
||||
}
|
||||
|
||||
break;
|
||||
case constGuidTimoTicketComputer:
|
||||
@@ -1187,7 +1317,8 @@ namespace C4IT.FASD.Cockpit.Communication
|
||||
["Summary"] = demoTicket.Summary ?? string.Empty,
|
||||
["Status"] = demoTicket.Status.ToString(),
|
||||
["StatusId"] = ((int)demoTicket.Status).ToString(),
|
||||
["Asset"] = demoTicket.Asset ?? string.Empty
|
||||
["Asset"] = demoTicket.Asset ?? string.Empty,
|
||||
["ActivityType"] = ResolveTicketActivityType(demoTicket.Name, demoTicket)
|
||||
},
|
||||
Identities = new cF4sdIdentityList()
|
||||
{
|
||||
@@ -2007,16 +2138,43 @@ namespace C4IT.FASD.Cockpit.Communication
|
||||
return true;
|
||||
}
|
||||
|
||||
public override async Task<bool> GetCockpitConfiguration()
|
||||
{
|
||||
cCockpitConfiguration.Instance = new cCockpitConfiguration();
|
||||
cCockpitConfiguration.Instance.agentApiConfiguration = new cAgentApiConfiguration() { ApiUrl = "", ClientId = "", ClientSecret = "", LogonUrl = "", OrganizationCode = 0 };
|
||||
cCockpitConfiguration.Instance.m42ServerConfiguration = new cM42ServerConfiguration() { Server = "" };
|
||||
await Task.CompletedTask;
|
||||
return true;
|
||||
}
|
||||
|
||||
public override Task<bool> GetAgentOnlineStatus(int AgentDeviceId, int? AgentUserId = null) => Task.FromResult(true);
|
||||
public override async Task<bool> GetCockpitConfiguration()
|
||||
{
|
||||
cCockpitConfiguration.Instance = new cCockpitConfiguration();
|
||||
cCockpitConfiguration.Instance.agentApiConfiguration = new cAgentApiConfiguration() { ApiUrl = "", ClientId = "", ClientSecret = "", LogonUrl = "", OrganizationCode = 0 };
|
||||
cCockpitConfiguration.Instance.m42ServerConfiguration = new cM42ServerConfiguration() { Server = ResolveDemoM42Server() };
|
||||
cCockpitConfiguration.Instance.GlobalConfig = LoadDemoGlobalConfig();
|
||||
await Task.CompletedTask;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static cConfigHelperParameterList LoadDemoGlobalConfig()
|
||||
{
|
||||
try
|
||||
{
|
||||
var executingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
||||
var filePath = Path.Combine(executingDirectory, "Config", "F4SD-Global-Configuration.xml");
|
||||
if (!File.Exists(filePath))
|
||||
return null;
|
||||
|
||||
var xmlDocument = new XmlDocument();
|
||||
xmlDocument.Load(filePath);
|
||||
|
||||
var root = xmlDocument.DocumentElement;
|
||||
if (root == null || !string.Equals(root.Name, "F4SD-Global-Configuration", StringComparison.OrdinalIgnoreCase))
|
||||
return null;
|
||||
|
||||
return cF4sdGlobalConfigParameterParser.Parse(root);
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
LogException(E);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public override Task<bool> GetAgentOnlineStatus(int AgentDeviceId, int? AgentUserId = null) => Task.FromResult(true);
|
||||
|
||||
public override Task<cF4sdAgentScript> GetQuickActionOfAgent(int ScriptId) => Task.FromResult(new cF4sdAgentScript() { Id = ScriptId, Name = "AgentScript", Type = enumAgentScriptType.user, UserPermissionRequired = false });
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
{
|
||||
"TileKey": "TicketsNew",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayNamePrefix": "TCK",
|
||||
"Summary": "Neue Störung: VPN trennt nach wenigen Minuten",
|
||||
@@ -30,6 +31,7 @@
|
||||
{
|
||||
"TileKey": "TicketsNew",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayNamePrefix": "TCK",
|
||||
"Summary": "Teams-Meldungen kommen verzögert an",
|
||||
@@ -57,6 +59,7 @@
|
||||
{
|
||||
"TileKey": "TicketsNew",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayNamePrefix": "TCK",
|
||||
"Summary": "Anfrage: Gerät startet nicht zuverlässig",
|
||||
@@ -84,6 +87,7 @@
|
||||
{
|
||||
"TileKey": "TicketsNew",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayNamePrefix": "TCK",
|
||||
"Summary": "Bitte um Rückmeldung: Ticketsystem reagiert langsam",
|
||||
@@ -111,6 +115,7 @@
|
||||
{
|
||||
"TileKey": "TicketsNew",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayNamePrefix": "TCK",
|
||||
"Summary": "Passwort-Reset für AD-Benutzer erforderlich",
|
||||
@@ -138,6 +143,7 @@
|
||||
{
|
||||
"TileKey": "TicketsNew",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayNamePrefix": "TCK",
|
||||
"Summary": "Netzwerkdrucker druckt nur leere Seiten",
|
||||
@@ -165,6 +171,7 @@
|
||||
{
|
||||
"TileKey": "TicketsNew",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayNamePrefix": "TCK",
|
||||
"Summary": "Outlook: Speicherlimit erreicht – Postfach voll",
|
||||
@@ -192,6 +199,7 @@
|
||||
{
|
||||
"TileKey": "TicketsNew",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayNamePrefix": "TCK",
|
||||
"Summary": "Softwareanfrage: Microsoft Visio Standard",
|
||||
@@ -219,6 +227,7 @@
|
||||
{
|
||||
"TileKey": "TicketsNew",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayNamePrefix": "TCK",
|
||||
"Summary": "Konto gesperrt nach mehrfachen Fehlversuchen",
|
||||
@@ -250,6 +259,7 @@
|
||||
"UserId": "916db36b-fb6e-4212-81c1-e72acdab77d2",
|
||||
"TileKey": "UnassignedTickets",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"DisplayName": "TCK00414",
|
||||
"Summary": "Pool Notebook fuer Schulungsteilnehmer fehlt",
|
||||
"StatusId": "New",
|
||||
@@ -278,6 +288,7 @@
|
||||
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
|
||||
"TileKey": "UnassignedTickets",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"DisplayName": "TCK00415",
|
||||
"Summary": "Etikettendrucker im Lager meldet Papierstau",
|
||||
"StatusId": "New",
|
||||
@@ -306,6 +317,7 @@
|
||||
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
|
||||
"TileKey": "UnassignedTicketsCritical",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"DisplayName": "TCK00416",
|
||||
"Summary": "WLAN Controller im Werk startet zyklisch neu",
|
||||
"StatusId": "InProgress",
|
||||
@@ -334,6 +346,7 @@
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"TileKey": "UnassignedTicketsCritical",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"DisplayName": "TCK00417",
|
||||
"Summary": "SAP Buchungsjob bricht nachts wiederholt ab",
|
||||
"StatusId": "InProgress",
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"TicketId": "2e9cb83d-ecb7-c93b-e8e4-08daaa97265f",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayName": "TCK00186",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Mein OneDrive synchronisiert nicht mehr",
|
||||
"UserDisplayName": "Ticket, Timo",
|
||||
"UserAccount": "TT007",
|
||||
@@ -17,6 +18,7 @@
|
||||
"TicketId": "bb2e4a9d-2c1e-4b32-8f75-6e7c9f99f2d4",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayName": "TCK00761",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "VPN-Verbindung bricht nach wenigen Minuten ab",
|
||||
"UserDisplayName": "Ticket, Timo",
|
||||
"UserAccount": "TT007",
|
||||
@@ -27,6 +29,7 @@
|
||||
"TicketId": "d63e5ea1-0785-4998-82ad-9a9e5a0f8c37",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayName": "TCK00765",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Teams-Benachrichtigungen kommen verzögert an",
|
||||
"UserDisplayName": "Ticket, Timo",
|
||||
"UserAccount": "TT007",
|
||||
@@ -37,6 +40,7 @@
|
||||
"TicketId": "f7771fde-33ba-421a-8d9b-cdf468e7541c",
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"DisplayName": "TCK00403",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Neuer Monitor fuer Hotline Arbeitsplatz",
|
||||
"UserDisplayName": "Busch, Andrea",
|
||||
"UserAccount": "AB014",
|
||||
@@ -47,6 +51,7 @@
|
||||
"TicketId": "6294eec7-fb80-42f3-8ce8-7f7982ae200c",
|
||||
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
|
||||
"DisplayName": "TCK00404",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Monitor flackert seit Firmware Update",
|
||||
"UserDisplayName": "Anwender, Peter",
|
||||
"UserAccount": "PA010",
|
||||
@@ -61,6 +66,7 @@
|
||||
"TicketId": "75e08a29-4103-41d6-962c-009c3342bc46",
|
||||
"UserId": "6180aa17-ba2d-455a-bf2f-ec4a075c2d64",
|
||||
"DisplayName": "TCK00406",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "CAD Software startet nach Update nicht mehr",
|
||||
"UserDisplayName": "Kohl, Carlos",
|
||||
"UserAccount": "CK102",
|
||||
@@ -73,6 +79,7 @@
|
||||
"TicketId": "2e9cb83d-ecb7-c93b-e8e4-08daaa97265f",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayName": "TCK00405",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Mein OneDrive synchronisiert nicht mehr",
|
||||
"UserDisplayName": "Ticket, Timo",
|
||||
"UserAccount": "TT007",
|
||||
@@ -83,6 +90,7 @@
|
||||
"TicketId": "ff62a3e2-5004-4a8c-b71c-7ebb1877d1a4",
|
||||
"UserId": "0fad5e21-5a29-44c6-b532-46f862ea8694",
|
||||
"DisplayName": "TCK00407",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Netzlaufwerk Projekt X nicht erreichbar",
|
||||
"UserDisplayName": "Hanova, Hans",
|
||||
"UserAccount": "HH101",
|
||||
@@ -97,6 +105,7 @@
|
||||
"TicketId": "1507691c-6d47-4ae3-83b3-ef483d84a246",
|
||||
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
|
||||
"DisplayName": "TCK00408",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "VPN Konzentrator in Aussenstelle offline",
|
||||
"UserDisplayName": "Seifert, Dominik",
|
||||
"UserAccount": "DS014",
|
||||
@@ -107,6 +116,7 @@
|
||||
"TicketId": "5c6d981e-9e67-4fde-b249-8c6288d325a7",
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"DisplayName": "TCK00409",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "SAP Produktionsauftrag bricht ab",
|
||||
"UserDisplayName": "Boss, Bernd",
|
||||
"UserAccount": "BB003",
|
||||
@@ -119,6 +129,7 @@
|
||||
"TicketId": "1507691c-6d47-4ae3-83b3-ef483d84a246",
|
||||
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
|
||||
"DisplayName": "TCK00408",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "VPN Konzentrator in Aussenstelle offline",
|
||||
"UserDisplayName": "Seifert, Dominik",
|
||||
"UserAccount": "DS014",
|
||||
@@ -129,6 +140,7 @@
|
||||
"TicketId": "9b7710d4-72da-4b2a-9d0c-be02575d2c52",
|
||||
"UserId": "a2c35ad1-7cc7-4b2b-9aa5-d03fdaecd155",
|
||||
"DisplayName": "TCK00410",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "WLAN im Lager faellt minutenweise aus",
|
||||
"UserDisplayName": "Kiefer, Maximilian",
|
||||
"UserAccount": "MK009",
|
||||
@@ -139,6 +151,7 @@
|
||||
"TicketId": "5c6d981e-9e67-4fde-b249-8c6288d325a7",
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"DisplayName": "TCK00409",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "SAP Produktionsauftrag bricht ab",
|
||||
"UserDisplayName": "Boss, Bernd",
|
||||
"UserAccount": "BB003",
|
||||
@@ -153,6 +166,7 @@
|
||||
"TicketId": "de403992-98cb-4476-9e04-d645ab22e6de",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayName": "TCK00411",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Passwort muss zur\u00fcckgesetzt werden",
|
||||
"UserDisplayName": "Ticket, Timo",
|
||||
"UserAccount": "TT007",
|
||||
@@ -163,6 +177,7 @@
|
||||
"TicketId": "7c29dd33-1247-453c-9db6-f7a59107d276",
|
||||
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
|
||||
"DisplayName": "TCK00412",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Techniker bittet um Rueckmeldung zum Notebook",
|
||||
"UserDisplayName": "Anwender, Peter",
|
||||
"UserAccount": "PA010",
|
||||
@@ -175,6 +190,7 @@
|
||||
"TicketId": "de403992-98cb-4476-9e04-d645ab22e6de",
|
||||
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
|
||||
"DisplayName": "TCK00411",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Passwort muss zur\u00fcckgesetzt werden",
|
||||
"UserDisplayName": "Ticket, Timo",
|
||||
"UserAccount": "TT007",
|
||||
@@ -185,6 +201,7 @@
|
||||
"TicketId": "b207822d-7e1c-42a7-b8c9-4246f711dd18",
|
||||
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
|
||||
"DisplayName": "TCK00413",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Wartungsfenster fuer Firewall verschieben",
|
||||
"UserDisplayName": "Seifert, Dominik",
|
||||
"UserAccount": "DS014",
|
||||
@@ -199,6 +216,7 @@
|
||||
"TicketId": "e0ba7c81-f9b1-4e99-a4d6-efecc5e4312e",
|
||||
"UserId": "f69dd1a9-591f-4004-b950-264238663bf0",
|
||||
"DisplayName": "INC00401",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Teams Telefonie ist fuer Standort Sued offline",
|
||||
"UserDisplayName": "Ottmann, Thomas",
|
||||
"UserAccount": "TO011",
|
||||
@@ -209,6 +227,7 @@
|
||||
"TicketId": "a8deb50d-9f15-4371-9ebc-a28791f27d5c",
|
||||
"UserId": "916db36b-fb6e-4212-81c1-e72acdab77d2",
|
||||
"DisplayName": "INC00402",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "SharePoint Bereich Vertrieb laedt extrem langsam",
|
||||
"UserDisplayName": "Virtual, Vera",
|
||||
"UserAccount": "VV004",
|
||||
@@ -221,6 +240,7 @@
|
||||
"TicketId": "fe15284f-f553-4434-8b59-7d8b9f481bf7",
|
||||
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
|
||||
"DisplayName": "INC00403",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Firewall Cluster meldet Sync Fehler",
|
||||
"UserDisplayName": "Seifert, Dominik",
|
||||
"UserAccount": "DS014",
|
||||
@@ -231,6 +251,7 @@
|
||||
"TicketId": "9cdddacf-9395-476b-811a-09c5f1491d4b",
|
||||
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
|
||||
"DisplayName": "INC00404",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "CRM Anmeldung liefert Timeout fuer Kundencenter",
|
||||
"UserDisplayName": "Anwender, Peter",
|
||||
"UserAccount": "PA010",
|
||||
@@ -245,6 +266,7 @@
|
||||
"TicketId": "7e852bb9-420b-4caa-b79a-9178d793fc06",
|
||||
"UserId": "a2c35ad1-7cc7-4b2b-9aa5-d03fdaecd155",
|
||||
"DisplayName": "INC00405",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Windows Rollout haengt auf mehreren Clients",
|
||||
"UserDisplayName": "Kiefer, Maximilian",
|
||||
"UserAccount": "MK009",
|
||||
@@ -255,6 +277,7 @@
|
||||
"TicketId": "3c3c70cf-5c60-4ecc-9313-b5f9c1968fc7",
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"DisplayName": "INC00406",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Remotedesktop Sitzung trennt nach wenigen Minuten",
|
||||
"UserDisplayName": "Busch, Andrea",
|
||||
"UserAccount": "AB014",
|
||||
@@ -267,6 +290,7 @@
|
||||
"TicketId": "486df93d-15b6-41d4-b902-2c1e1838c74b",
|
||||
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
|
||||
"DisplayName": "INC00407",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Firewall Cluster meldet weiterhin Sync Fehler",
|
||||
"UserDisplayName": "Seifert, Dominik",
|
||||
"UserAccount": "DS014",
|
||||
@@ -277,6 +301,7 @@
|
||||
"TicketId": "86da28b0-013b-4542-bcff-175044d5bb02",
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"DisplayName": "INC00408",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Produktionslinie meldet keine Sensordaten",
|
||||
"UserDisplayName": "Zufall, Rainer",
|
||||
"UserAccount": "RZ011",
|
||||
@@ -287,6 +312,7 @@
|
||||
"TicketId": "a1cf6635-a5c4-4401-b4f0-60b9c65b4d75",
|
||||
"UserId": "0fad5e21-5a29-44c6-b532-46f862ea8694",
|
||||
"DisplayName": "INC00409",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Exchange Transportdienst setzt Mails in Warteschlange",
|
||||
"UserDisplayName": "Hanova, Hans",
|
||||
"UserAccount": "HH101",
|
||||
@@ -301,6 +327,7 @@
|
||||
"TicketId": "9aae7eca-39d7-441e-8b33-5fc6f34765c8",
|
||||
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
|
||||
"DisplayName": "INC00410",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Kuehlung im Rechenzentrum U3 ausgefallen",
|
||||
"UserDisplayName": "Seifert, Dominik",
|
||||
"UserAccount": "DS014",
|
||||
@@ -313,6 +340,7 @@
|
||||
"TicketId": "9aae7eca-39d7-441e-8b33-5fc6f34765c8",
|
||||
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
|
||||
"DisplayName": "INC00410",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Kuehlung im Rechenzentrum U3 ausgefallen",
|
||||
"UserDisplayName": "Seifert, Dominik",
|
||||
"UserAccount": "DS014",
|
||||
@@ -323,6 +351,7 @@
|
||||
"TicketId": "130ec52f-dac3-427d-803e-e7cf67e4a744",
|
||||
"UserId": "f69dd1a9-591f-4004-b950-264238663bf0",
|
||||
"DisplayName": "INC00411",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Kartenzahlung in den Filialen nicht moeglich",
|
||||
"UserDisplayName": "Ottmann, Thomas",
|
||||
"UserAccount": "TO011",
|
||||
@@ -333,6 +362,7 @@
|
||||
"TicketId": "b7d22b65-c11e-459c-ac31-5b1c08e4118d",
|
||||
"UserId": "8c3ca0fb-f18c-4893-ad83-290e6e02f352",
|
||||
"DisplayName": "INC00412",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Datenbank Cluster benoetigt manuellen Failover",
|
||||
"UserDisplayName": "Perschmann, Paul",
|
||||
"UserAccount": "PP201",
|
||||
@@ -347,6 +377,7 @@
|
||||
"TicketId": "d1a2c544-4f59-4f2b-875f-3621a23d4228",
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"DisplayName": "INC00413",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Backup Team hat Rueckfrage zur Sicherung",
|
||||
"UserDisplayName": "Busch, Andrea",
|
||||
"UserAccount": "AB014",
|
||||
@@ -359,6 +390,7 @@
|
||||
"TicketId": "74846c1b-9a97-420f-8bf2-91e88aa0516a",
|
||||
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
|
||||
"DisplayName": "INC00415",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Lieferant bittet um Rueckmeldung zu Offsite Backup",
|
||||
"UserDisplayName": "Anwender, Peter",
|
||||
"UserAccount": "PA010",
|
||||
@@ -369,6 +401,7 @@
|
||||
"TicketId": "1372b3cf-5d87-4099-ab83-ec0cccf7194e",
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"DisplayName": "INC00416",
|
||||
"ActivityType": "SPSActivityTypeIncident",
|
||||
"Summary": "Fernwartung benoetigt Zugangsdaten zur SPS",
|
||||
"UserDisplayName": "Zufall, Rainer",
|
||||
"UserAccount": "RZ011",
|
||||
@@ -383,6 +416,7 @@
|
||||
"TicketId": "e2e49f85-1a81-47e8-935b-d76898c155f6",
|
||||
"UserId": "916db36b-fb6e-4212-81c1-e72acdab77d2",
|
||||
"DisplayName": "TCK00414",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Pool Notebook fuer Schulungsteilnehmer fehlt",
|
||||
"UserDisplayName": "Virtual, Vera",
|
||||
"UserAccount": "VV004",
|
||||
@@ -393,6 +427,7 @@
|
||||
"TicketId": "ebe8818e-b197-411e-b56e-40b77b623ae2",
|
||||
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
|
||||
"DisplayName": "TCK00415",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Etikettendrucker im Lager meldet Papierstau",
|
||||
"UserDisplayName": "Anwender, Peter",
|
||||
"UserAccount": "PA010",
|
||||
@@ -405,6 +440,7 @@
|
||||
"TicketId": "e2e49f85-1a81-47e8-935b-d76898c155f6",
|
||||
"UserId": "916db36b-fb6e-4212-81c1-e72acdab77d2",
|
||||
"DisplayName": "TCK00414",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Pool Notebook fuer Schulungsteilnehmer fehlt",
|
||||
"UserDisplayName": "Virtual, Vera",
|
||||
"UserAccount": "VV004",
|
||||
@@ -415,6 +451,7 @@
|
||||
"TicketId": "ebe8818e-b197-411e-b56e-40b77b623ae2",
|
||||
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
|
||||
"DisplayName": "TCK00415",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "Etikettendrucker im Lager meldet Papierstau",
|
||||
"UserDisplayName": "Anwender, Peter",
|
||||
"UserAccount": "PA010",
|
||||
@@ -425,6 +462,7 @@
|
||||
"TicketId": "9e1d5d1b-5a22-430e-99ea-59840257caab",
|
||||
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
|
||||
"DisplayName": "TCK00416",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "WLAN Controller im Werk startet zyklisch neu",
|
||||
"UserDisplayName": "Seifert, Dominik",
|
||||
"UserAccount": "DS014",
|
||||
@@ -439,6 +477,7 @@
|
||||
"TicketId": "9e1d5d1b-5a22-430e-99ea-59840257caab",
|
||||
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
|
||||
"DisplayName": "TCK00416",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "WLAN Controller im Werk startet zyklisch neu",
|
||||
"UserDisplayName": "Seifert, Dominik",
|
||||
"UserAccount": "DS014",
|
||||
@@ -451,6 +490,7 @@
|
||||
"TicketId": "9e1d5d1b-5a22-430e-99ea-59840257caab",
|
||||
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
|
||||
"DisplayName": "TCK00416",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "WLAN Controller im Werk startet zyklisch neu",
|
||||
"UserDisplayName": "Seifert, Dominik",
|
||||
"UserAccount": "DS014",
|
||||
@@ -461,6 +501,7 @@
|
||||
"TicketId": "d427dc61-9842-4464-b37a-612878d3de0f",
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"DisplayName": "TCK00417",
|
||||
"ActivityType": "SPSActivityTypeTicket",
|
||||
"Summary": "SAP Buchungsjob bricht nachts wiederholt ab",
|
||||
"UserDisplayName": "Boss, Bernd",
|
||||
"UserAccount": "BB003",
|
||||
|
||||
@@ -34,6 +34,7 @@ namespace FasdCockpitCommunicationDemo
|
||||
public string TileKey { get; set; } = "TicketsNew";
|
||||
public bool UseRoleScope { get; set; }
|
||||
public Guid? UserId { get; set; }
|
||||
public string ActivityType { get; set; }
|
||||
public string DisplayNamePrefix { get; set; } = "TCK";
|
||||
public string Summary { get; set; }
|
||||
public string StatusId { get; set; } = "New";
|
||||
@@ -49,6 +50,7 @@ namespace FasdCockpitCommunicationDemo
|
||||
public Guid UserId { get; set; }
|
||||
public string TileKey { get; set; }
|
||||
public bool UseRoleScope { get; set; }
|
||||
public string ActivityType { get; set; }
|
||||
public string DisplayName { get; set; }
|
||||
public string Summary { get; set; }
|
||||
public string StatusId { get; set; }
|
||||
@@ -167,6 +169,7 @@ namespace FasdCockpitCommunicationDemo
|
||||
TileKey = source.TileKey,
|
||||
UseRoleScope = source.UseRoleScope,
|
||||
UserId = source.UserId,
|
||||
ActivityType = source.ActivityType,
|
||||
DisplayNamePrefix = source.DisplayNamePrefix,
|
||||
Summary = source.Summary,
|
||||
StatusId = source.StatusId,
|
||||
@@ -188,6 +191,7 @@ namespace FasdCockpitCommunicationDemo
|
||||
UserId = source.UserId,
|
||||
TileKey = source.TileKey,
|
||||
UseRoleScope = source.UseRoleScope,
|
||||
ActivityType = source.ActivityType,
|
||||
DisplayName = source.DisplayName,
|
||||
Summary = source.Summary,
|
||||
StatusId = source.StatusId,
|
||||
|
||||
@@ -2,15 +2,16 @@ using System;
|
||||
|
||||
namespace FasdCockpitCommunicationDemo
|
||||
{
|
||||
public class TicketOverviewRelationDefinition
|
||||
{
|
||||
public Guid TicketId { get; set; }
|
||||
public Guid UserId { get; set; }
|
||||
public string DisplayName { get; set; }
|
||||
public string Summary { get; set; }
|
||||
public string StatusId { get; set; }
|
||||
public string UserDisplayName { get; set; }
|
||||
public string UserAccount { get; set; }
|
||||
public string UserDomain { get; set; }
|
||||
public class TicketOverviewRelationDefinition
|
||||
{
|
||||
public Guid TicketId { get; set; }
|
||||
public Guid UserId { get; set; }
|
||||
public string DisplayName { get; set; }
|
||||
public string ActivityType { get; set; }
|
||||
public string Summary { get; set; }
|
||||
public string StatusId { get; set; }
|
||||
public string UserDisplayName { get; set; }
|
||||
public string UserAccount { get; set; }
|
||||
public string UserDomain { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -538,13 +538,14 @@ namespace FasdDesktopUi.Basics.Services
|
||||
}
|
||||
}
|
||||
|
||||
private cF4sdApiSearchResultRelation CreateRelationFromRecord(DemoTicketRecord record)
|
||||
{
|
||||
var relation = new cF4sdApiSearchResultRelation
|
||||
{
|
||||
Type = enumF4sdSearchResultClass.Ticket,
|
||||
DisplayName = record.DisplayName,
|
||||
Name = record.DisplayName,
|
||||
private cF4sdApiSearchResultRelation CreateRelationFromRecord(DemoTicketRecord record)
|
||||
{
|
||||
var activityType = ResolveDemoActivityType(record?.ActivityType);
|
||||
var relation = new cF4sdApiSearchResultRelation
|
||||
{
|
||||
Type = enumF4sdSearchResultClass.Ticket,
|
||||
DisplayName = record.DisplayName,
|
||||
Name = record.DisplayName,
|
||||
id = record.TicketId,
|
||||
Status = enumF4sdSearchResultStatus.Active,
|
||||
Infos = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
|
||||
@@ -553,17 +554,25 @@ namespace FasdDesktopUi.Basics.Services
|
||||
["StatusId"] = record.StatusId ?? string.Empty,
|
||||
["UserDisplayName"] = record.UserDisplayName ?? string.Empty,
|
||||
["UserAccount"] = record.UserAccount ?? string.Empty,
|
||||
["UserDomain"] = record.UserDomain ?? string.Empty
|
||||
["UserDomain"] = record.UserDomain ?? string.Empty,
|
||||
["ActivityType"] = activityType
|
||||
},
|
||||
Identities = new cF4sdIdentityList
|
||||
{
|
||||
new cF4sdIdentityEntry { Class = enumFasdInformationClass.Ticket, Id = record.TicketId },
|
||||
new cF4sdIdentityEntry { Class = enumFasdInformationClass.User, Id = record.UserId }
|
||||
Identities = new cF4sdIdentityList
|
||||
{
|
||||
new cF4sdIdentityEntry { Class = enumFasdInformationClass.Ticket, Id = record.TicketId },
|
||||
new cF4sdIdentityEntry { Class = enumFasdInformationClass.User, Id = record.UserId }
|
||||
}
|
||||
};
|
||||
|
||||
return relation;
|
||||
}
|
||||
|
||||
return relation;
|
||||
}
|
||||
|
||||
private static string ResolveDemoActivityType(string configuredActivityType)
|
||||
{
|
||||
return string.IsNullOrWhiteSpace(configuredActivityType)
|
||||
? null
|
||||
: configuredActivityType.Trim();
|
||||
}
|
||||
|
||||
private DemoTicketDetail CloneDetail(DemoTicketDetail source)
|
||||
{
|
||||
@@ -734,15 +743,16 @@ namespace FasdDesktopUi.Basics.Services
|
||||
entry.CreationDate = createdAt;
|
||||
}
|
||||
|
||||
return new DemoTicketRecord
|
||||
{
|
||||
TicketId = relationId,
|
||||
TileKey = string.IsNullOrWhiteSpace(template.TileKey) ? "TicketsNew" : template.TileKey,
|
||||
UseRoleScope = template.UseRoleScope,
|
||||
DisplayName = displayName,
|
||||
Summary = summary,
|
||||
StatusId = string.IsNullOrWhiteSpace(template.StatusId) ? "New" : template.StatusId,
|
||||
UserDisplayName = template.UserDisplayName ?? detail.AffectedUser ?? "Ticket, Timo",
|
||||
return new DemoTicketRecord
|
||||
{
|
||||
TicketId = relationId,
|
||||
TileKey = string.IsNullOrWhiteSpace(template.TileKey) ? "TicketsNew" : template.TileKey,
|
||||
UseRoleScope = template.UseRoleScope,
|
||||
ActivityType = ResolveDemoActivityType(template.ActivityType),
|
||||
DisplayName = displayName,
|
||||
Summary = summary,
|
||||
StatusId = string.IsNullOrWhiteSpace(template.StatusId) ? "New" : template.StatusId,
|
||||
UserDisplayName = template.UserDisplayName ?? detail.AffectedUser ?? "Ticket, Timo",
|
||||
UserAccount = template.UserAccount ?? "TT007",
|
||||
UserDomain = template.UserDomain ?? "CONTOSO",
|
||||
UserId = template.UserId ?? Guid.Parse("42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a"),
|
||||
|
||||
@@ -18,8 +18,10 @@ namespace FasdDesktopUi.Pages.TicketCompletion
|
||||
{
|
||||
public partial class TicketCompletion : Window, IBlurInvoker, INotifyPropertyChanged
|
||||
{
|
||||
private const double MinWindowHeightDip = 220d;
|
||||
private const double WindowWorkingAreaMarginDip = 12d;
|
||||
private const double DialogNonContentReserveDip = 180d;
|
||||
private bool isUpdatingDialogBounds;
|
||||
private bool isCanceled = false;
|
||||
|
||||
private bool _WaitForClosing = false;
|
||||
@@ -53,6 +55,8 @@ namespace FasdDesktopUi.Pages.TicketCompletion
|
||||
|
||||
cFocusInvoker.GotFocus += ElementGotFocus;
|
||||
cFocusInvoker.LostFocus += ElementLostFocus;
|
||||
SizeChanged += TicketCompletion_SizeChanged;
|
||||
Loaded += TicketCompletion_Loaded;
|
||||
}
|
||||
|
||||
protected override void OnSourceInitialized(EventArgs e)
|
||||
@@ -66,6 +70,10 @@ namespace FasdDesktopUi.Pages.TicketCompletion
|
||||
base.OnLocationChanged(e);
|
||||
UpdateDialogMaxHeightToScreen();
|
||||
}
|
||||
|
||||
private void TicketCompletion_Loaded(object sender, RoutedEventArgs e) => UpdateDialogMaxHeightToScreen();
|
||||
|
||||
private void TicketCompletion_SizeChanged(object sender, SizeChangedEventArgs e) => UpdateDialogMaxHeightToScreen();
|
||||
|
||||
#region ClosingBusy
|
||||
|
||||
@@ -145,6 +153,10 @@ namespace FasdDesktopUi.Pages.TicketCompletion
|
||||
|
||||
private void UpdateDialogMaxHeightToScreen()
|
||||
{
|
||||
if (isUpdatingDialogBounds)
|
||||
return;
|
||||
|
||||
isUpdatingDialogBounds = true;
|
||||
try
|
||||
{
|
||||
WinForms.Screen screen = null;
|
||||
@@ -164,15 +176,45 @@ namespace FasdDesktopUi.Pages.TicketCompletion
|
||||
screen = screen ?? WinForms.Screen.PrimaryScreen;
|
||||
var workingArea = screen?.WorkingArea ?? WinForms.Screen.PrimaryScreen.WorkingArea;
|
||||
var dpiScaleY = VisualTreeHelper.GetDpi(this).DpiScaleY;
|
||||
var maxHeightDip = (workingArea.Height / Math.Max(0.1, dpiScaleY)) - WindowWorkingAreaMarginDip;
|
||||
var safeDpiScaleY = Math.Max(0.1, dpiScaleY);
|
||||
var workingAreaTopDip = workingArea.Top / safeDpiScaleY;
|
||||
var workingAreaBottomDip = workingArea.Bottom / safeDpiScaleY;
|
||||
var workingAreaHeightDip = workingArea.Height / safeDpiScaleY;
|
||||
var availableWindowHeightDip = workingAreaHeightDip - (WindowWorkingAreaMarginDip * 2);
|
||||
|
||||
MaxHeight = Math.Max(220, maxHeightDip);
|
||||
CloseCaseDialogUc?.SetDialogContentMaxHeight(MaxHeight - DialogNonContentReserveDip);
|
||||
MaxHeight = Math.Max(MinWindowHeightDip, availableWindowHeightDip);
|
||||
|
||||
if (!double.IsNaN(Top))
|
||||
{
|
||||
var minTop = workingAreaTopDip + WindowWorkingAreaMarginDip;
|
||||
var maxBottom = workingAreaBottomDip - WindowWorkingAreaMarginDip;
|
||||
|
||||
if (Top < minTop)
|
||||
Top = minTop;
|
||||
|
||||
var currentBottom = Top + ActualHeight;
|
||||
if (currentBottom > maxBottom)
|
||||
Top = Math.Max(minTop, maxBottom - ActualHeight);
|
||||
}
|
||||
|
||||
double nonDialogReserve = DialogNonContentReserveDip;
|
||||
if (CloseCaseDialogUc != null && CloseCaseDialogUc.IsLoaded)
|
||||
{
|
||||
var estimatedReserve = ActualHeight - CloseCaseDialogUc.ActualHeight;
|
||||
if (estimatedReserve > 0)
|
||||
nonDialogReserve = Math.Max(nonDialogReserve, estimatedReserve + WindowWorkingAreaMarginDip);
|
||||
}
|
||||
|
||||
CloseCaseDialogUc?.SetDialogContentMaxHeight(MaxHeight - nonDialogReserve);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogException(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
isUpdatingDialogBounds = false;
|
||||
}
|
||||
}
|
||||
|
||||
#region Internal Focus Events
|
||||
|
||||
Reference in New Issue
Block a user