Udostępnij za pośrednictwem


Włączanie niestandardowego obliczania wskaźników KPI umowy SLA

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

  1. Przejdź do witryny make.powerapps.com.

  2. Przejdź do Ustawienia zaawansowane>Ustawienia>Dostosowania systemu>Procesy>Nowe.

  3. W oknie dialogowym Utwórz proces wprowadź poniższe informacje szczegółowe:

    1. Wprowadź nazwę procesu, na przykład CustomPluginTime Calculation.
    2. Z listy rozwijanej Kategoria wybierz Akcja .
    3. Z listy rozwijanej Encja wybierz Brak (globalnie).
    4. Wybierz opcję Nowy proces z istniejącego szablonu (wybierz z listy).
    5. Wybierz z listy szablon SLACustomTimeCalculationTemplate.
    6. Zaznacz OK.

    Szablon obliczania czasu niestandardowego

  4. W szablonie dodaj wymagane parametry (jeśli istnieją) i wybierz opcję Aktywuj.

    Włącz argumenty procesu dla dowolnego elementu umowy SLA

  5. Napisz dodatek plug-in.

    Więcej informacji na temat wybierania dodatku plug-in znajdziesz poniżej w temacie Scenariusze i dodatki plug-in.

  6. 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.

    Rejestracja w łączenie wtyczki

  7. W centrum administracyjnym usługi Copilot Service dodaj lub edytuj wcześniej utworzoną akcję niestandardową za pomocą elementu umowy SLA:

    1. Ustaw przełącznik Zezwalaj na niestandardowe obliczenia czasu na Tak.
    2. W polu Proces obliczania czasu niestandardowego wybierz akcję niestandardową utworzoną w kroku 3.
    3. Wybierz Zapisz i zamknij.
  8. 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

  9. 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 jest getElapsedTime i inne atrybuty można pobrać zgodnie z definicją w przykładzie kody dodatku.
  • Obliczanie nowego WarningTime i obliczanie FailureTime dla wznowionych wystąpień. W takim przypadku requestType jest getEndTime 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.

Definiowanie umów dotyczących poziomu usług

Stosowanie SLA

Włącz rekordy dla umów SLA