Add generic ticket activity filters

This commit is contained in:
Drechsler, Meik
2026-07-23 11:18:42 +02:00
parent d8022567af
commit 8f66923952
15 changed files with 502 additions and 181 deletions

View File

@@ -1,7 +1,10 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Xml;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Security;
using System.Text;
using System.Xml;
using Newtonsoft.Json;
@@ -21,7 +24,8 @@ namespace C4IT.DataHistoryProvider
private const string constFileNameF4sdSchema = "F4SD-Global-Configuration.xsd";
private const string constConfigRootElement = "F4SD-Global-Configuration";
public cConfigHelperParameterList Parameters { get; private set; } = null;
public cConfigHelperParameterList Parameters { get; private set; } = null;
public cActivityFilterPolicy ActivityFilters { get; private set; } = new cActivityFilterPolicy();
private cDataHistoryConfigInfrastructure InfrastructureConfig = null;
@@ -102,12 +106,15 @@ namespace C4IT.DataHistoryProvider
if (_overrideValues != null && _overrideValues.ValueList != null && _overrideValues.ValueList.Count > 0)
_result.Items[_overrideValues.Name] = _overrideValues;
continue;
case "TicketProcessing":
var _ticketProcessingEntry = getTicketProcessingEntry(_item, Parser);
if (_ticketProcessingEntry != null)
_result.Items[_ticketProcessingEntry.Name] = _ticketProcessingEntry;
continue;
}
case "TicketProcessing":
var _ticketProcessingEntry = getTicketProcessingEntry(_item, Parser);
if (_ticketProcessingEntry != null)
_result.Items[_ticketProcessingEntry.Name] = _ticketProcessingEntry;
continue;
case "ActivityFilters":
ActivityFilters = getActivityFilters(_item, Parser);
continue;
}
if (_attPolicy != null && _attValue != null && _ElementCount == 0)
{
@@ -156,8 +163,89 @@ namespace C4IT.DataHistoryProvider
if (CM != null) LogMethodEnd(CM);
}
return _result;
}
return _result;
}
private static cActivityFilterPolicy getActivityFilters(XmlElement node, cXmlParser parser)
{
var result = new cActivityFilterPolicy();
foreach (XmlElement filterNode in node.SelectNodes("Filter").OfType<XmlElement>())
{
parser.EnterElement(filterNode.Name);
try
{
if (!Enum.TryParse(filterNode.GetAttribute("Match"), true, out enumActivityFilterMatch match))
match = enumActivityFilterMatch.exclude;
if (!Enum.TryParse(filterNode.GetAttribute("EmptyHandling"), true, out enumActivityFilterEmptyHandling emptyHandling))
emptyHandling = enumActivityFilterEmptyHandling.include;
var filter = new cActivityFilter
{
Provider = filterNode.GetAttribute("Provider"),
Field = filterNode.GetAttribute("Field"),
Enabled = bool.TryParse(filterNode.GetAttribute("Enabled"), out var enabled) && enabled,
Match = match,
EmptyHandling = emptyHandling
};
foreach (XmlElement valueNode in filterNode.SelectNodes("Value").OfType<XmlElement>())
{
filter.Values.Add(new cActivityFilterValue
{
ID = valueNode.GetAttribute("ID"),
Name = valueNode.GetAttribute("Name")
});
}
result.Filters.Add(filter);
}
finally
{
parser.LeaveElement(filterNode.Name);
}
}
return result;
}
private string getDefaultActivityFiltersXml()
{
var queueOption = InfrastructureConfig?.M42Wpm?.ActivityQueueFilterOption
?? enumActivityQueueFilterOptions.showAll;
var queues = InfrastructureConfig?.M42Wpm?.ActivityQueues
?? new List<cApiM42TicketQueueInfo>();
var enableQueueFilter = queueOption != enumActivityQueueFilterOptions.showAll && queues.Count > 0;
var emptyHandling = queueOption == enumActivityQueueFilterOptions.onlyListedQueues
? enumActivityFilterEmptyHandling.exclude
: enumActivityFilterEmptyHandling.include;
var xml = new StringBuilder();
xml.Append("<ActivityFilters>");
xml.AppendFormat(
"<Filter Provider=\"Matrix42\" Field=\"Queue\" Enabled=\"{0}\" Match=\"include\" EmptyHandling=\"{1}\">",
enableQueueFilter.ToString().ToLowerInvariant(),
emptyHandling);
foreach (var queue in queues.Where(queue => queue != null))
{
xml.AppendFormat(
"<Value ID=\"{0}\" Name=\"{1}\" />",
queue.QueueID == Guid.Empty ? string.Empty : queue.QueueID.ToString("D"),
SecurityElement.Escape(queue.QueueName ?? string.Empty));
}
xml.Append("</Filter>");
xml.Append("<Filter Field=\"AssignmentGroup\" Enabled=\"false\" Match=\"include\" EmptyHandling=\"exclude\">");
xml.Append("<Value ID=\"0a76de08-136c-764a-b410-5610e8076712\" Name=\"HR Service Desk Agent\" />");
xml.Append("<Value ID=\"0b76de08-8668-a026-b410-5610e8076f95\" Name=\"HR-Manager\" />");
xml.Append("<Value ID=\"0a76de08-d589-4c94-b410-5610e8076919\" Name=\"HR-Spezialist\" />");
xml.Append("<Value ID=\"e87dde08-235c-04e5-b410-562b64035575\" Name=\"Facility-Koordinator\" />");
xml.Append("</Filter>");
xml.Append("<Filter Provider=\"Matrix42\" Field=\"Workspace\" Enabled=\"false\" Match=\"include\" EmptyHandling=\"exclude\">");
xml.Append("<Value ID=\"1676de08-27f3-550c-b410-5610e807aa02\" Name=\"HR Service Management\" />");
xml.Append("<Value ID=\"ed7dde08-199e-c27b-b410-562b64037aa1\" Name=\"Gebäudemanagement\" />");
xml.Append("</Filter>");
xml.Append("</ActivityFilters>");
return xml.ToString();
}
private cConfigHelperParameterEntry getInformationClassSearchPriority(XmlElement XNode, cXmlParser Parser)
{
@@ -487,11 +575,16 @@ namespace C4IT.DataHistoryProvider
, "ShowOverview"
, "<ShowOverview Policy=\"Hidden\" Value=\"true\" />"
);
RetVal |= DoXmlInsertElement(XmlRoot
, "TicketConfiguration"
, "TicketProcessing"
, "<TicketProcessing Policy=\"Mandatory\" Value=\"both\"><TicketTypeProcessing Type=\"Ticket\" Value=\"intern\" /><TicketTypeProcessing Type=\"UnclassifiedTicket\" Value=\"intern\" /><TicketTypeProcessing Type=\"Incident\" Value=\"intern\" /></TicketProcessing>"
);
RetVal |= DoXmlInsertElement(XmlRoot
, "TicketConfiguration"
, "TicketProcessing"
, "<TicketProcessing Policy=\"Mandatory\" Value=\"both\"><TicketTypeProcessing Type=\"Ticket\" Value=\"intern\" /><TicketTypeProcessing Type=\"UnclassifiedTicket\" Value=\"intern\" /><TicketTypeProcessing Type=\"Incident\" Value=\"intern\" /></TicketProcessing>"
);
RetVal |= DoXmlInsertElement(XmlRoot
, "TicketConfiguration"
, "ActivityFilters"
, getDefaultActivityFiltersXml()
);
RetVal |= DoXmlRemoveElement(XmlRoot
, "TicketConfiguration"
, "OpenActivitiesExternally"