diff --git a/FasdCockpitCommunicationDemo/Config/F4SD-Global-Configuration.xml b/FasdCockpitCommunicationDemo/Config/F4SD-Global-Configuration.xml
new file mode 100644
index 0000000..58bbaec
--- /dev/null
+++ b/FasdCockpitCommunicationDemo/Config/F4SD-Global-Configuration.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FasdCockpitCommunicationDemo/F4SD-Cockpit-Client-Demo.csproj b/FasdCockpitCommunicationDemo/F4SD-Cockpit-Client-Demo.csproj
index 9fdd009..08124f8 100644
--- a/FasdCockpitCommunicationDemo/F4SD-Cockpit-Client-Demo.csproj
+++ b/FasdCockpitCommunicationDemo/F4SD-Cockpit-Client-Demo.csproj
@@ -116,12 +116,15 @@
Designer
PreserveNewest
-
- Always
-
-
- Always
-
+
+ Always
+
+
+ Always
+
+
+ Always
+
Designer
diff --git a/FasdCockpitCommunicationDemo/F4SDCockpitCommunicationDemo.cs b/FasdCockpitCommunicationDemo/F4SDCockpitCommunicationDemo.cs
index f113cbd..9ff4823 100644
--- a/FasdCockpitCommunicationDemo/F4SDCockpitCommunicationDemo.cs
+++ b/FasdCockpitCommunicationDemo/F4SDCockpitCommunicationDemo.cs
@@ -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() { ["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() { ["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 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 GetAgentOnlineStatus(int AgentDeviceId, int? AgentUserId = null) => Task.FromResult(true);
+ public override async Task 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 GetAgentOnlineStatus(int AgentDeviceId, int? AgentUserId = null) => Task.FromResult(true);
public override Task GetQuickActionOfAgent(int ScriptId) => Task.FromResult(new cF4sdAgentScript() { Id = ScriptId, Name = "AgentScript", Type = enumAgentScriptType.user, UserPermissionRequired = false });
diff --git a/FasdCockpitCommunicationDemo/MockupTicketOverview/TicketOverviewGeneratedTickets.json b/FasdCockpitCommunicationDemo/MockupTicketOverview/TicketOverviewGeneratedTickets.json
index cf553d4..35d78f8 100644
--- a/FasdCockpitCommunicationDemo/MockupTicketOverview/TicketOverviewGeneratedTickets.json
+++ b/FasdCockpitCommunicationDemo/MockupTicketOverview/TicketOverviewGeneratedTickets.json
@@ -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",
diff --git a/FasdCockpitCommunicationDemo/MockupTicketOverview/TicketOverviewRelations.json b/FasdCockpitCommunicationDemo/MockupTicketOverview/TicketOverviewRelations.json
index a03cbc7..b6c7a86 100644
--- a/FasdCockpitCommunicationDemo/MockupTicketOverview/TicketOverviewRelations.json
+++ b/FasdCockpitCommunicationDemo/MockupTicketOverview/TicketOverviewRelations.json
@@ -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",
diff --git a/FasdCockpitCommunicationDemo/TicketOverviewDataStore.cs b/FasdCockpitCommunicationDemo/TicketOverviewDataStore.cs
index 03a4841..5177bbc 100644
--- a/FasdCockpitCommunicationDemo/TicketOverviewDataStore.cs
+++ b/FasdCockpitCommunicationDemo/TicketOverviewDataStore.cs
@@ -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,
diff --git a/FasdCockpitCommunicationDemo/TicketOverviewRelationDefinition.cs b/FasdCockpitCommunicationDemo/TicketOverviewRelationDefinition.cs
index b98e0f6..f9f66d9 100644
--- a/FasdCockpitCommunicationDemo/TicketOverviewRelationDefinition.cs
+++ b/FasdCockpitCommunicationDemo/TicketOverviewRelationDefinition.cs
@@ -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; }
}
}
diff --git a/FasdDesktopUi/Basics/Services/TicketOverviewUpdateService.cs b/FasdDesktopUi/Basics/Services/TicketOverviewUpdateService.cs
index 12e5243..6cc90a9 100644
--- a/FasdDesktopUi/Basics/Services/TicketOverviewUpdateService.cs
+++ b/FasdDesktopUi/Basics/Services/TicketOverviewUpdateService.cs
@@ -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(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"),