Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób zastępowania domyślnych obliczeń czasu.
Obliczanie czasu w umowach dotyczących poziomu usług (SLA) oblicza WarningTime
i FailureTime
dla kluczowych wskaźników wydajności (KPI) dotyczących umowy SLA, z wzięciem pod uwagę parametrów wejściowych, takich jak ApplicableFrom
(StartTime typu pole DateTime) CalendarId
(GUID) i Duration
(czas trwania ostrzeżenia lub czas trwania niepowodzenia w minutach). Ostateczne WarningTime
lub FailureTime
są obliczane na podstawie kalendarza obsługi klienta oraz kalendarza świąt skojarzonych z elementem umowy SLA.
Oprócz czasu ostrzeżenie i czasu niepowodzenia obliczany jest również czas, jaki upłynął, jeśli istnieje scenariusz wstrzymania i wznowienia skonfigurowany dla umowy SLA. Aby zignorować godziny pracy spędzone w stanie Wstrzymane KPI umowy SLA czas, który upłynął jest dodawany do końcowego czasu niepowodzenia.
Aby włączyć własne niestandardowe obliczenia czasu, można zdefiniować interfejs API ze stałym zestawem parametrów wejściowych i wyjściowych oraz dodać logikę niestandardową do obliczania czasu.
Uwaga
Obliczenia niestandardowego czasu są obsługiwane tylko w ramach dodatku plug-in, a nie innych encji, na przykład niestandardowego przepływu pracy.
Włączanie niestandardowego obliczania wskaźników KPI umowy SLA
Przejdź do witryny make.powerapps.com.
Przejdź do Ustawienia zaawansowane>Ustawienia>Dostosowania systemu>Procesy>Nowe.
W oknie dialogowym Utwórz proces wprowadź poniższe informacje szczegółowe:
- Wprowadź nazwę procesu, na przykład CustomPluginTime Calculation.
- Z listy rozwijanej Kategoria wybierz Akcja .
- Z listy rozwijanej Encja wybierz Brak (globalnie).
- Wybierz opcję Nowy proces z istniejącego szablonu (wybierz z listy).
- Wybierz z listy szablon SLACustomTimeCalculationTemplate.
- Zaznacz OK.
W szablonie dodaj wymagane parametry (jeśli istnieją) i wybierz opcję Aktywuj.
-
Więcej informacji na temat wybierania dodatku plug-in znajdziesz poniżej w temacie Scenariusze i dodatki plug-in.
Aby połączyć ją z niestandardową akcją wtyczki utworzoną w kroku 3, przejdź do narzędzia do rejestracji dodatków plug-in i zarejestruj wtyczkę utworzoną w organizacji. Więcej informacji na temat wtyczek znajdziesz w artykuleRejestrowanie plug-ina.
W centrum administracyjnym usługi Copilot Service dodaj lub edytuj wcześniej utworzoną akcję niestandardową za pomocą elementu umowy SLA:
- Ustaw przełącznik Zezwalaj na niestandardowe obliczenia czasu na Tak.
- W polu Proces obliczania czasu niestandardowego wybierz akcję niestandardową utworzoną w kroku 3.
- Wybierz Zapisz i zamknij.
W umowie SLA wybierz Aktywuj i zastosuj ją do wymaganej encji. Ostrzeżenie i czas niepowodzenia wskaźnika KPI umowy SLA są wyświetlane zgodnie z logiką obliczania czasu podaną w akcji niestandardowej.
Aby uzyskać więcej informacji o zastosowaniu umów SLA, przejdź do tematu Zastosowanie umów SLA
Aby wyeksportować rozwiązanie do innego środowiska, najpierw dodaj umowę SLA (której element ma odwołanie do akcji niestandardowej) do rozwiązania niestandardowego. Dodanie umowy SLA eksportuje również proces przepływu pracy dotyczący akcji niestandardowej. Następnie dołącz do rozwiązania komunikat SDK, który wyeksportuje utworzoną wcześniej wtyczkę.
Scenariusze i dodatki plug-in
Zapoznaj się z następującymi scenariuszami i ich dodatkami plug-in, aby zaimplementować kod dodatku plug-in skojarzony z twoją akcją niestandardową.
Scenariusz 1:
Jeśli nie masz wstrzymanego lub wznowienia scenariusza, tylko WarningTime
i FailureTime
są obliczane. Po każdym utworzeniu nowych wystąpień wskaźników KPI umowa SLA inicjuje interfejs API obliczania czasu niestandardowego, aby obliczyć tylko WarningTime
i FailureTime
w jednej rozmowie.
W takim przypadku requestType
jest getEndTime
i inne atrybuty można pobrać zgodnie z definicją w poniższym przykładzie:
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;
}
Scenariusz 2:
Jeśli scenariusz wstrzymany lub wznowienia istnieje, należy przeprowadzić następujące obliczenia:
- Obliczenie
elapsedTime
między stanem wstrzymania i wznowienia. W tym scenariuszu umowa SLA wywołuje interfejs API obliczania czasu niestandardowego w celu obliczenia czasu, jaki upłynął między wstrzymaniem i wznowieniem. W takim przypadku requestType jestgetElapsedTime
i inne atrybuty można pobrać zgodnie z definicją w przykładzie kody dodatku. - Obliczanie nowego
WarningTime
i obliczanieFailureTime
dla wznowionych wystąpień. W takim przypadkurequestType
jestgetEndTime
i inne atrybuty można pobrać zgodnie z definicją w poniższym przykładzie:
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;
}
Kody błędów dotyczące obliczania niestandardowego czasu
Poniżej przedstawiono kody błędów dla różnych scenariuszy błędów, które mogą wystąpić podczas obliczania czasu niestandardowego.
Kod błędu: 10000004
Komunikat błędu: „Przepływ pracy interfejsu API obliczania czasu niestandardowego dla elementu umowy SLA {0} musi być aktywny.”
Przyczyna
Błąd występuje, jeśli przepływ pracy obliczania czasu niestandardowego jest wyłączony.
Rozwiązywanie
Po otwarciu umowy SLA zobaczysz powiadomienie w formularzu wraz z komunikatem przycisk Aktywuj, jeśli umowa SLA jest aktywna, ale niestandardowy przepływ pracy obliczania czasu jest wyłączony. Aby uniknąć tego problemu, upewnij się, że proces przepływu pracy niestandardowego obliczania czasu zawsze jest w stanie Aktywny. Wykonaj wdrożenie umowy SLA, a następnie zweryfikuj je dopiero po jego zakończeniu. Należy upewnić się, że proces przepływu pracy nie jest usuwany ręcznie ani za pomocą dostosowań.
Kod błędu: 10000005
Komunikat błędu: „Wybierz proces obliczania czasu niestandardowego.”
Przyczyna
Błąd występuje, jeśli przepływ pracy obliczania czasu niestandardowego jest włączony, ale z elementem umowy SLA nie jest skojarzona akcja procesu przepływu pracy.
Rozwiązywanie
Dodaj proces przepływu pracy i zapisz element umowy SLA. Aby uniknąć tego problemu, upewnij się, że proces przepływu pracy niestandardowego obliczania czasu jest wypełniany wartością wyszukiwania, jeśli przełączenie jest ustawione na Włączone.
Kod błędu: 10000006
Komunikat błędu: „Brak przepływu pracy procesu obliczania czasu niestandardowego dla elementu umowy SLA {0}. {Placeholder="{0}"} odnosi się do identyfikatora elementu umowy SLA.”
Przyczyna
Błąd występuje, jeśli przepływ pracy Niestandardowe obliczanie czasu jest włączony podczas aktywacji umowy SLA, akcja procesu przepływu pracy jest skojarzona z elementem umowy SLA z prawidłowym identyfikatorem GUID, ale przepływ pracy jest usuwany.
Rozwiązywanie
Należy poprawić nieprawidłowy przepływ pracy. Usuń istniejący przepływ pracy z elementu umowy SLA, utwórz nowy przepływ pracy, a następnie dodaj nowy przepływ pracy do tej samej pozycji umowy SLA. Aby uniknąć tego problemu, należy upewnić się, że żaden przepływ pracy nie jest usuwany ręcznie ani w ramach procesu wdrażania. Należy też sprawdzić zmiany przed zaimportowaniem bezpośrednio do środowiska produkcyjnego.
Kod błędu: 10000007
Komunikat o błędzie: „Brakuje implementacji wtyczki dla niestandardowego procesu obliczania czasu w elemencie SLA {0} {Placeholder=„{0}”} odnosi się do identyfikatora elementu płyty”.
Przyczyna
Błąd występuje, jeśli jest włączony przepływ pracy obliczania niestandardowego czasu, ale nie jest rejestrowany krok procesu obsługi komunikatów zestawu SDK skojarzony z zestawem plug-in lub dodatek plug-in nie jest zarejestrowany.
Rozwiązywanie
Podczas eksportowania umowy SLA ze środowiska źródłowego lub projektowego należy dodać krok SDK. Aby uniknąć tego problemu, należy pamiętać o dodaniu kroku komunikatu zestawu SDK oraz zestawu dodatków plug-in w rozwiązaniu umowy SLA.
Kod błędu: 10000008
Komunikat błędu: „Ostrzeżenie lub awaria czasu, który upłynął, zwrócony przez proces obliczania czasu niestandardowego dla elementu umowy SLA {0} jest nieprawidłowy.” {Placeholder="{0}"} odnosi się do identyfikatora elementu umowy SLA.”
Przyczyna
Błąd występuje, jeśli akcja przepływu pracy niestandardowego obliczania czasu zwraca nieprawidłowy czas dla typu żądania getEndTime.
Rozwiązywanie
Musisz debugować, aby dowiedzieć się, dlaczego niestandardowy proces przepływu pracy nie zwraca prawidłowych wartości. Aby uniknąć tego problemu, upewnij się, że dodano i przetestowano wszystkie scenariusze przed wdrożeniem scenariuszy w środowisku produkcyjnym. Na przykład ta umowa obejmuje różne aplikacje elementów umowy SLA oraz scenariusze wstrzymywania i wznawiania.
Kod błędu: 10000009
Komunikat błędu: „Czas, który upłynął, zwrócony przez proces obliczania czasu niestandardowego dla elementu umowy SLA {0} jest nieprawidłowy. {Placeholder="{0}"} odnosi się do identyfikatora elementu umowy SLA.”
Przyczyna
Błąd występuje, jeśli akcja przepływu pracy niestandardowego obliczania czasu zwraca Miniony czas dla typu żądania getElapsedTime.
Rozwiązywanie
Musisz debugować, aby dowiedzieć się, dlaczego niestandardowy proces przepływu pracy nie zwraca prawidłowych wartości, gdy przypadek został wstrzymany i wznowiony. Aby uniknąć tego problemu, upewnij się, że dodano i przetestowano wszystkie scenariusze przed wdrożeniem scenariuszy w środowisku produkcyjnym. Na przykład ta uwzględnia scenariusze wstrzymywania i wznawiania.
Kod błędu: 10000010
Wiadomość błędu: Nie znaleziono przepływu pracy procesu obliczania czasu niestandardowego {0} dla elementu umowy SLA {1}
Przyczyna
Błąd występuje, jeśli w systemie nie można znaleźć akcji niestandardowej do obliczania czasu niestandardowego.
Rozwiązywanie
Musisz przeprowadzić debugowanie i dowiedzieć się, czy w systemie występuje akcja niestandardowa o tej samej nazwie, co pokazano w błędzie. Aby uniknąć tego problemu, należy utworzyć ten sam prefiks nazwy akcji niestandardowej, co w komunikacie o błędzie. Musisz zmienić prefiks rozwiązania lub uniknąć wyeksportowania go jako rozwiązania niezarządzanego. Można także uniknąć tworzenia interfejsu przepływu pracy bezpośrednio w rozwiązanie zarządzane i zamiast tego można utworzyć rozwiązanie zarządzane domyślnego dostosowania, a następnie dodać go do rozwiązania.
Często zadawane pytania
Aby uzyskać więcej informacji na temat niestandardowego obliczania czasu wskaźników KPI umowy SLA przejdź do Często zadawane pytania na temat niestandardowego obliczania czasu wskaźników KPI umowy SLA.