Add generic ticket activity filters
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user