Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel beschreibt, wie Sie die Standardzeitberechnung überschreiben können.
Die Zeitberechnung in Vereinbarung zum Servicelevel (SLAs) berechnet die WarningTime
und FailureTime
von SLA Key Performance Indicators (KPIs) unter Berücksichtigung von Eingangsparametern, wie ApplicableFrom
(StartTime vom Typ DateTime-Feld), CalendarId
(GUID) und Duration
(Warndauer bzw. Ausfalldauer in Minuten). Das endgültige WarningTime
oder FailureTime
wird basierend auf dem Kundenservice-Zeitplan und den mit dem SLA-Element verknüpften Feiertagsplänen berechnet.
Zusätzlich zur Warn- und Ausfallzeit wird auch die verstrichene Zeit berechnet, wenn für das SLA ein Pausen- und Wiederaufnahmeszenario konfiguriert ist. Die verstrichene Zeit wird zur endgültigen Ausfallzeit addiert, um die während des angehaltenen Zustands des SLA KPI verbrachten Arbeitsstunden zu ignorieren.
Um Ihre eigene benutzerdefinierte Zeitberechnung zu aktivieren, können Sie eine API-Schnittstelle definieren, die über einen festen Satz von Eingabe- und Ausgabeparametern verfügt, und eine benutzerdefinierte Logik zum Berechnen der Zeit hinzufügen.
Notiz
Die benutzerdefinierte Zeitberechnung wird nur als Teil des Plug-Ins unterstützt und nicht für andere Entitäten, z. B. benutzerdefinierte Workflows.
Aktivieren Sie die benutzerdefinierte Zeitberechnung von SLA-KPIs
Gehen Sie zu make.powerapps.com.
Gehen Sie zu Erweiterte Einstellungen>Anpassungen>System-Anpassungen>Prozesse>Neu
Geben Sie im Dialogfeld Prozess erstellen die nachfolgenden Details ein:
- Geben Sie einen Prozessnamen ein, z. B. CustomPluginTime Calculation.
- Wählen Sie in der Aswahlliste unter KategorieAktion aus.
- Wählen Sie aus der Entität-Auswahlliste Nein (global) aus.
- Wählen Sie die Option Neuer Prozess aus vorhandener Vorlage (aus Liste auswählen) aus.
- Wählen Sie die aus der Liste die Vorlage SLACustomTimeCalculationTemplate.
- Klicken Sie auf OK.
Fügen Sie in der Vorlage die erforderlichen Parameter (falls vorhanden) hinzu und wählen Sie Aktivieren.
-
Informationen zum Auswählen des benötigten Plug-Ins finden Sie unter Szenarien und Plug-Ins.
Um es mit dem in Schritt 3 erstellten benutzerdefinierte Aktion zu verknüpfen, wechseln Sie zum Plug-In-Registrierungstool, und registrieren Sie das Plug-In, das Sie erstellt haben, bei Ihrer Organisation. Weitere Informationen zu Plug-Ins finden Sie unter Registrieren eines Plug-Ins.
Fügen Sie im Copilot Service Admin Center die zuvor erstellte benutzerdefinierte Aktion mit dem SLA-Element hinzu oder bearbeiten Sie sie:
- In dem Abschnitt Benutzerdefinierte Zeitberechnung zulassen legen Sie den Schieber auf Ja fest.
- Im Feld Benutzerdefinierter Zeitberechnungsprozess wählen Sie die benutzerdefinierte Aktion aus, die Sie in Schritt 3 erstellt haben.
- Wählen Sie Speichern und Schließen.
Aktivieren Sie Ihr SLA und wählen Aktivieren und wenden Sie es auf die erforderliche Entität an. Die Warn- und Fehlerzeit des SLA-KPI wird gemäß der in der benutzerdefinierten Aktion bereitgestellten Zeitberechnungslogik angezeigt.
Weitere Informationen zur Anwendung der SLAs finden Sie unter SLAs anwenden
Um die Lösung in eine andere Umgebung zu exportieren, können Sie zuerst das SLA (dessen Element die benutzerdefinierte Aktionsreferenz hat) zur benutzerdefinierten Lösung hinzufügen. Durch das Hinzufügen der SLA wird auch der benutzerdefinierte Aktions-Workflow-Prozess exportiert. Fügen Sie als Nächstes die SDK-Nachricht in die Lösung ein, die das zuvor erstellte Plug-In exportiert.
Szenarien und Plug-Ins
Sehen Sie sich die folgenden Szenarien und ihre Plug-Ins an, um einen Plug-In-Code zu implementieren, der Ihrer benutzerdefinierten Aktion zugeordnet ist.
Szenario 1:
Wenn Sie kein Pausen- oder Fortsetzungsszenario haben, dann müssen nur WarningTime
und FailureTime
berechnet werden. Immer wenn neue KPI-Instanzen erstellt werden, initiiert SLA die benutzerdefinierte Zeitberechnungs-API, um nur WarningTime
und FailureTime
in einem einzigen Anruf zu berechnen.
In einem solchen Fall ist requestType
getEndTime
und andere Attribute können wie im folgenden Beispiel definiert abgerufen werden:
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
_service = factory.CreateOrganizationService(context.UserId);
// Step 1: Retrieving Input Parameters.
string regardingId = context.InputParameters["regardingId"] as string;
string calendarId = context.InputParameters["calendarId"] as string;
string requestType = context.InputParameters["requestType"] as string;
string slaItemId = context.InputParameters["slaItemId"] as string;
string entityName = context.InputParameters["entityName"] as string;
try
{
// implement this requestType for any new SLA KPi instance creation.
if (requestType.Equals("getEndTime", StringComparison.CurrentCultureIgnoreCase))
{
int warningDuration = (int)context.InputParameters["firstInputDuration"];
int failureDuration = (int)context.InputParameters["secondInputDuration"];
DateTime warningStartTime = (DateTime)context.InputParameters["firstInputDate"];
DateTime failureStartTime = (DateTime)context.InputParameters["secondInputDate"];
// Step 2 : Add the custom Logic to calculate the WarningTime and FailureTime
string returnCalendarId = CalculateWarningAndFailureTime(regardingId, calendarId, slaItemId, entityName, warningStartTime, failureStartTime, warningDuration, failureDuration, out DateTime warningTime, out DateTime failureTime);
// Step 3 : return the output values.
context.OutputParameters["firstOutputValue"] = DateTime.SpecifyKind(warningTime, DateTimeKind.Utc).ToString();
context.OutputParameters["secondOutputValue"] = DateTime.SpecifyKind(failureTime, DateTimeKind.Utc).ToString();
context.OutputParameters["returnCalendarId"] = returnCalendarId;
return;
}
// implement this requestType for finding Paused time for any new SLA KPi instance after it resumed.
if (requestType.Equals("getElapsedTime", StringComparison.CurrentCultureIgnoreCase))
{
DateTime casePausedTime = (DateTime)context.InputParameters["firstInputDate"];
DateTime caseResumedTime = (DateTime)context.InputParameters["secondInputDate"];
int existingElapsedTime = (int)context.InputParameters["firstInputDuration"];
// Step 2 : Add the custom Logic to calculate the elapsedTime between startTime(paused) and endTime(resumed)
double elapsedTimeInMinutes = CalculateElapsedTime(regardingId, calendarId, slaItemId, entityName, casePausedTime, caseResumedTime, existingElapsedTime);
// Step 3 : return the output values.
context.OutputParameters["firstOutputValue"] = elapsedTimeInMinutes.ToString();
context.OutputParameters["secondOutputValue"] = elapsedTimeInMinutes.ToString();
return;
}
} catch (Exception ex) {
return;
}
throw new Exception("Invalid requestType:" + requestType+ " for entityName:" + entityName + " of id:" + regardingId);
}
// in this example, we're using Custom Field(new_country) on the Case entity to apply the required calendar.
private string CalculateWarningAndFailureTime(string regardingId, string calendarId, string slaItemId, string entityName, DateTime warningStartTime, DateTime failureStartTime, int warningDuration, int failureDuration, out DateTime warningTime, out DateTime failureTime)
{
OrganizationResponse customizedTimeCalculationResponse;
warningTime = DateTime.UtcNow;
failureTime = DateTime.UtcNow;
int newWarningTime = warningDuration;
int newFailureTime = failureDuration;
int customCode = 0;
// Step 1: fetch the Case Entity record
Entity caseRecord = FetchCaseRecord(entityName, regardingId);
if (caseRecord.Attributes.Contains("new_country"))
{
customCode = (int)(((OptionSetValue)(caseRecord.Attributes["new_country"])).Value);
// Example 1: Override calendar at runtime: Choose Calendar based on any custom logic
if (customCode == 0)
{
// fetch IST calendar & override CalendarId
IST_CALENDAR = FetchCalendar("IST_CALENDAR", _service);
calendarId = IST_CALENDAR;
}
else if (customCode == 1)
{
// fetch PST calendar & override CalendarId
PST_CALENDAR = FetchCalendar("PST_CALENDAR", _service);
calendarId = PST_CALENDAR;
}
}
// use OOB SLATimeCalculation Custom Action to do actual calculation_
OrganizationRequest requestTimeCalculation = new OrganizationRequest("msdyn_SLATimeCalculation");
requestTimeCalculation["requestType"] = "getEndTime";
requestTimeCalculation["calendarId"] = calendarId;
// calculate warning time
if (warningDuration != -1)
{
requestTimeCalculation["startTime"] = warningStartTime;
requestTimeCalculation["minutes"] = newWarningTime;
customizedTimeCalculationResponse = _service.Execute(requestTimeCalculation);
customizedTimeCalculationResponse.Results.TryGetValue("returnValue", out object outputValue1);
warningTime = DateTime.SpecifyKind(DateTime.Parse((string)outputValue1), DateTimeKind.Utc);
}
// calculate Failure time
if (failureDuration != -1)
{
requestTimeCalculation["startTime"] = failureStartTime;
requestTimeCalculation["minutes"] = newFailureTime;
customizedTimeCalculationResponse = _service.Execute(requestTimeCalculation);
customizedTimeCalculationResponse.Results.TryGetValue("returnValue", out object outputValue2);
failureTime = DateTime.SpecifyKind(DateTime.Parse((string)outputValue2), DateTimeKind.Utc);
}
return calendarId;
}
Szenario 2:
Wenn es ein Pause- oder Wiederaufnahmeszenario gibt, müssen die folgenden Berechnungen durchgeführt werden:
- Berechnung von
elapsedTime
zwischen dem Status Unterbrechung und Wiederaufnahme. Für dieses Szenario ruft das SLA die benutzerdefinierte Zeitberechnungs-API auf, um die verstrichene Zeit zwischen Pause und Wiederaufnahme zu berechnen. In einem solchen Fall wird der angeforderte TypgetElapsedTime
sein und andere Attribute können wie im folgenden Plug-In-Code definiert abgerufen werden: - Berechnung von neuer
WarningTime
undFailureTime
Berechnungsergebnis für wieder aufgenommene Instanzen. In diesem Fall istrequestType
getEndTime
und andere Attribute können wie im folgenden Beispiel definiert abgerufen werden:
private double CalculateElapsedTime(string regardingId, string calendarId, string slaItemId, string entityName, DateTime casePausedTime, DateTime caseResumedTime, int existingElapsedTime)
{
if (caseRecord.Attributes.Contains("new_country"))
{
if ((int)(((OptionSetValue)(caseRecord.Attributes["new_country"])).Value) == 0)
{
// fetch IST id
IST_CALENDAR = FetchCalendar("IST_CALENDAR", _service);
calendarId = IST_CALENDAR;
}
else if ((int)(((OptionSetValue)(caseRecord.Attributes["new_country"])).Value) == 1)
{
// fetch PST id
PST_CALENDAR = FetchCalendar("PST_CALENDAR", _service);
calendarId = PST_CALENDAR;
}
}
// use OOB SLATimeCalculation Custom Action to do actual calculation_
OrganizationRequest requestTimeCalculation = new OrganizationRequest("msdyn_SLATimeCalculation");
requestTimeCalculation["startTime"] = casePausedTime;
requestTimeCalculation["endTime"] = caseResumedTime;
requestTimeCalculation["requestType"] = "getElapsedTime";
requestTimeCalculation["calendarId"] = calendarId;
// calculate elapsed time
customizedTimeCalculationResponse = _service.Execute(requestTimeCalculation);
customizedTimeCalculationResponse.Results.TryGetValue("returnValue", out object outputValue1);
double totalElapsedTime = existingElapsedTime + Double.Parse(outputValue1.ToString());
return totalElapsedTime;
}
Fehlercodes für die angepasste Zeitberechnung
Im Folgenden finden Sie die Fehlercodes für die verschiedenen Fehlerszenarien, die bei der angepassten Zeitberechnung auftreten können.
Fehlercode: 10000004
Fehlermeldung: „Der Workflow für die angepasste Zeitberechnungs-API für das SLA-Element {0} muss aktiv sein.“
Ursache
Der Fehler tritt auf, wenn der Custom Time Calculation Workflow deaktiviert ist.
Lösung
Wenn Sie die SLA öffnen, sehen Sie eine Formularbenachrichtigung zusammen mit einer Schaltfläche Aktivieren, wenn die SLA aktiv, aber der benutzerdefinierte Zeitberechnungs-Workflow deaktiviert ist. Um dieses Problem zu vermeiden, stellen Sie sicher, dass der angepasste Zeitberechnungs-Workflow sich immer im Status Aktiv befindet. Führen Sie die SLA-Bereitstellung durch und überprüfen Sie sie erst nach dem Abschluss. Stellen Sie sicher, dass Sie den Workflow-Prozess nicht manuell oder durch Anpassung löschen oder deaktivieren.
Fehlercode: 10000005
Fehlermeldung: „Wählen Sie den angepassten Zeitberechnungsprozess.“
Ursache
Der Fehler tritt auf, wenn der Workflow für die benutzerdefinierte Zeitberechnung aktiviert ist, aber keine Workflow-Prozessaktion mit dem SLA-Element verknüpft ist.
Lösung
Fügen Sie den Workflow-Prozess hinzu und speichern Sie das SLA-Element. Um dieses Problem zu vermeiden, stellen Sie sicher, dass das Nachschlagefeld für den angepassten Time Calculation Workflow ausgefüllt ist, wenn der Schalter auf Ein festgelegt ist.
Fehlercode: 10000006
Fehlermeldung: „Workflow für den angepassten Zeitberechnungsprozess für das SLA Element {0} fehlt. {Platzhalter=„{0}“} bezieht sich auf die SLA-Element-ID.“
Ursache
Der Fehler tritt auf, wenn der benutzerdefinierte Zeitberechnungsworkflow während der SLA-Aktivierung aktiviert ist, die Workflowprozessaktion dem SLA-Element mit gültiger GUID zugeordnet ist, der Workflow jedoch gelöscht wird.
Lösung
Sie müssen den ungültigen Workflow korrigieren. Entfernen Sie den vorhandenen Workflow aus dem SLA-Element, erstellen Sie einen neuen Workflow und fügen Sie den neuen Workflow dann demselben SLA-Element hinzu. Um dieses Problem zu vermeiden, stellen Sie sicher, dass Sie keinen Workflow manuell oder als Teil des Bereitstellungsprozesses löschen. Stellen Sie außerdem sicher, dass Sie Ihre Änderungen überprüfen, bevor Sie sie direkt in eine Produktionsumgebung importieren.
Fehlercode: 10000007
Fehlermeldung: „Die Plug-In-Implementierung fehlt für den benutzerdefinierten Zeitberechnungsprozess in SLA-Element {0} {Platzhalter=„{0}“} bezieht sich auf die SLA-Element-ID.“
Ursache
Der Fehler tritt auf, wenn der Workflow für die benutzerdefinierte Zeitberechnung aktiviert ist, aber der zugehörige Plugin-SDK-Nachrichtenprozessschritt fehlt oder das Plugin nicht registriert ist.
Lösung
Stellen Sie sicher, dass Sie den SDK-Schritt beim Exportieren der SLA aus der Quell- oder Entwicklungsumgebung hinzufügen. Um dieses Problem zu vermeiden, stellen Sie sicher, dass Sie den SDK Nachrichtenschritt und die Plugin Montage in der SLA Lösung hinzufügen.
Fehlercode: 10000008
Fehlermeldung: „Warnung oder die von dem angepassten Zeitberechnungsprozess für das SLA-Element {0} zurückgegebene Ausfallzeit ist ungültig. {Platzhalter=„{0}“} bezieht sich auf Sla-Element-ID.“
Ursache
Der Fehler tritt auf, wenn die Workflow-Aktion Angepasste Zeitberechnung eine ungültige Verfallszeit für RequestType getEndTime zurückgibt.
Lösung
Sie müssen ein Debugging durchführen, um herauszufinden, warum der benutzerdefinierte Workflowprozess nicht die richtigen Werte zurückgibt. Um dieses Problem zu vermeiden, stellen Sie sicher, dass Sie alle Szenarien hinzufügen und testen, bevor Sie die Szenarien für die Produktion bereitstellen. Dazu gehören z.B. verschiedene SLA-Element-Anwendungen und Pause- oder Resume-Szenarien.
Fehlercode: 10000009
Fehlermeldung: „Die vom Prozess der angepassten Zeitberechnung für das SLA-Element {0} zurückgegebene verstrichene Zeit ist ungültig. {Platzhalter=„{0}“} bezieht sich auf Sla-Element-ID.“
Ursache
Der Fehler tritt auf, wenn die Workflow-Aktion für die angepasste Zeitberechnung eine ungültige Verstrichene Zeit für AbfrageTyp getElapsedTime zurückgibt.
Lösung
Sie müssen ein Debugging durchführen, um herauszufinden, warum der benutzerdefinierte Workflowprozess nicht die richtigen Werte zurückgibt, wenn die Anfrage angehalten und fortgesetzt wurde. Um dieses Problem zu vermeiden, stellen Sie sicher, dass Sie alle Szenarien hinzufügen und testen, bevor Sie die Szenarien für die Produktion bereitstellen. Dazu gehören zum Beispiel die Szenarien Pause oder Wiederaufnahme.
Fehlercode: 10000010
Fehlermeldung: „Workflow für den benutzerdefinierten Zeitberechnungsprozess {0} für das SLA-Element {1} wurde nicht gefunden.“
Ursache
Der Fehler tritt auf, wenn die angepasste Aktion für die benutzerdefinierte Zeitberechnung im System nicht gefunden wird.
Lösung
Sie müssen ein Debugging durchführen und herausfinden, ob die benutzerdefinierte Aktion im System mit demselben Namen wie im Fehler angezeigt vorhanden ist. Um dieses Problem zu vermeiden, stellen Sie sicher, dass Sie das gleiche Präfix für den Namen der angepassten Aktion erstellen, wie in der Fehlermeldung angegeben. Sie müssen das Präfix Ihrer Lösung ändern oder vermeiden, sie als nicht verwaltete Lösung zu exportieren. Sie können es auch vermeiden, die Workflow-Schnittstelle direkt in der verwalteten Lösung zu erstellen. Stattdessen erstellen Sie die verwaltete Lösung in der Standardanpassung und fügen sie dann der Lösung hinzu.
Häufig gestellte Fragen
Weitere Informationen zur benutzerdefinierten Zeitberechnung von SLA-KPIs finden Sie unter FAQ zur benutzerdefinierten Zeitberechnung von SLA-KPIs.