Kongsi melalui


Dayakan pengiraan masa tersuai KPI SLA

Artikel ini menerangkan cara anda boleh menulis ganti pengiraan masa lalai.

Pengiraan masa dalam perjanjian peringkat Perkhidmatan (SLA) mengira WarningTime dan FailureTime penunjuk prestasi utama (KPI) SLA, dengan mengambil kira parameter input, seperti ApplicableFrom (StartTime jenis medan DateTime), CalendarId (GUID) dan Duration (tempoh amaran atau tempoh kegagalan dalam minit). Terakhir WarningTime atau FailureTime dikira berdasarkan jadual khidmat pelanggan dan jadual cuti berkaitan dengan item SLA.

Selain daripada masa amaran dan kegagalan, masa berlalu juga dikira jika terdapat senario jeda dan sambung semula yang dikonfigurasikan untuk SLA. Untuk mengabaikan waktu kerja yang digunakan semasa keadaan dijeda KPI SLA, masa yang berlalu akan ditambah pada masa kegagalan akhir.

Untuk mendayakan pengiraan masa tersuai anda sendiri, takrifkan antara muka API yang mempunyai set tetap parameter input dan output serta tambah logik tersuai untuk mengira masa.

Nota

Pengiraan masa tersuai hanya disokong sebagai sebahagian pasang masuk dan bukan sebarang entiti lain, sebagai contoh, strim kerja tersuai.

Dayakan pengiraan masa tersuai KPI SLA

  1. Pergi ke make.powerapps.com.

  2. Pergi ke Tetapan Lanjutan>Penyesuaian>Sesuaikan sistem>Proses>Baharu.

  3. Dalam dialog Cipta Proses, masukkan butiran berikut:

    1. Masukkan nama proses, sebagai contoh, Pengiraan CustomPluginTime.
    2. Daripada senarai juntai bawah Kategori, pilih Tindakan .
    3. Daripada senarai juntai bawah Entiti, pilih Tiada (global).
    4. Pilih pilihan Proses baharu daripada templat sedia ada (pilih daripada senarai).
    5. Pilih templat SLACustomTimeCalculationTemplate daripada senarai.
    6. Pilih OK.

    Templat pengiraan masa tersuai

  4. Pada templat, tambah parameter yang diperlukan (jika ada) dan pilih Aktifkan.

    Dayakan argumen proses untuk sebarang item SLA

  5. Tulis pemalam.

    Untuk maklumat tentang memilih pasang masuk yang anda perlukan, pergi ke Senario dan pasang masuk.

  6. Untuk memautkannya kepada tindakan tersuai yang dicipta dalam langkah 3, pergi ke Alat pendaftaran pemalam dan daftarkan pemalam yang anda cipta dengan organisasi anda. Ketahui lebih lanjut tentang pemalam, dalam Daftar pemalam.

    Daftar dan pautkan pasang masuk

  7. Dalam pusat pentadbiran Perkhidmatan Copilot, tambah atau edit tindakan tersuai yang dibuat sebelum ini dengan Item SLA:

    1. Tetapkan Togol Benarkan Pengiraan Masa Tersuai kepada Ya.
    2. Dalam medan Proses Pengiraan Masa Tersuai, pilih tindakan tersuai yang dicipta dalam langkah 3.
    3. Pilih Simpan dan Tutup.
  8. Pada borang SLA, pilih Aktifkan, dan gunakan pada entiti yang diperlukan. Masa amaran dan kegagalan KPI SLA muncul mengikut logik pengiraan masa yang disediakan dalam tindakan tersuai.

    Untuk maklumat tentang cara menggunakan SLA, pergi untuk Gunakan SLA

  9. Untuk mengeksport penyelesaian ke persekitaran lain, mula-mula tambahkan SLA (yang itemnya mempunyai rujukan tindakan tersuai) pada penyelesaian tersuai. Menambah SLA juga mengeksport proses aliran kerja tindakan tersuai. Seterusnya, sertakan mesej SDK dalam penyelesaian, yang mengeksport pemalam yang anda buat sebelum ini.

Senario dan pasang masuk

Rujuk kepada senario berikut dan pasang masuk mereka untuk melaksanakan kod pasang masuk yang berkaitan dengan tindakan tersuai anda.

Senario 1:

Jika anda tidak mempunyai senario jeda atau sambung semula, hanya WarningTime dan FailureTime perlu dikira. Apabila sebarang tika KPI baharu dicipta, SLA memulakan API pengiraan masa tersuai untuk mengira hanya WarningTime dan FailureTime dalam panggilan tunggal.

Dalam kes sedemikian, adalah requestType , getEndTime dan atribut lain boleh diambil seperti yang ditakrifkan dalam contoh berikut:

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;
}

Senario 2:

Jika terdapat senario jeda atau sambung semula, pengiraan berikut perlu dibuat:

  • Pengiraan elapsedTime antara keadaan dijeda dan disambung semula. Untuk senario ini, SLA menggunakan API pengiraan masa tersuai untuk mengira masa berlalu antara jeda dan sambung semula. Dalam kes sedemikian, requestType ialah getElapsedTime dan atribut lain boleh diambil seperti yang ditakrifkan dalam contoh kod pemalam.
  • Pengiraan baharu WarningTime dan FailureTime pengiraan untuk tika yang disambung semula. Dalam kes ini, adalah requestType , getEndTime dan atribut lain boleh diambil seperti yang ditakrifkan dalam contoh berikut:
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;
}

Kod ralat untuk pengiraan masa tersuai

Berikut ialah kod ralat untuk pelbagai senario ralat yang mungkin berlaku semasa pengiraan masa tersuai.

Kod ralat: 10000004

Mesej ralat: "Strim kerja untuk API Pengiraan Masa Tersuai bagi Item SLA {0} hendaklah aktif."

Sebab

Ralat berlaku jika Strim Kerja Pengiraan Masa Tersuai dinyahdayakan.

Resolusi

Apabila membuka SLA, anda melihat pemberitahuan borang bersama-sama dengan butang Aktifkan jika SLA aktif tetapi Aliran Kerja Pengiraan Masa Tersuai dinyahdayakan. Untuk mengelakkan isu ini, pastikan bahawa proses Strim Kerja Pengiraan Masa Tersuai sentiasa dalam keadaan Aktif. Lakukan penggunaan SLA, dan kemudian sahkan hanya selepas ia selesai. Pastikan anda tidak memadam atau menyahaktifkan proses strim kerja secara manual atau melalui penyesuaian.

Kod ralat: 10000005

Mesej ralat: "Pilih Proses Pengiraan Masa Tersuai."

Sebab

Ralat berlaku jika Strim Kerja Pengiraan Masa Tersuai didayakan tetapi tiada tindakan proses strim kerja dikaitkan dengan item SLA.

Resolusi

Tambahkan proses strim kerja dan simpan item SLA. Untuk mengelakkan isu ini, pastikan bahawa proses Strim Kerja Pengiraan Masa Tersuai diisi dalam nilai carian jika togol ditetapkan kepada Hidupkan.

Kod ralat: 10000006

Mesej ralat: "Strim kerja untuk Proses Pengiraan Masa Tersuai bagi Item SLA {0} telah hilang. {Placeholder="{0}"merujuk} kepada id Item SLA."

Sebab

Ralat berlaku jika Aliran Kerja Pengiraan Masa Tersuai didayakan semasa pengaktifan SLA, tindakan proses aliran kerja dikaitkan dengan Item SLA dengan GUID yang sah, tetapi aliran kerja dipadamkan.

Resolusi

Anda mesti membetulkan strim kerja yang tidak sah. Alih keluar strim kerja sedia ada dari item SLA, cipta strim kerja baharu dan kemudian tambah strim kerja baharu ke item SLA yang sama. Untuk mengelakkan isu ini, pastikan anda tidak memadamkan sebarang strim kerja secara manual atau sebagai sebahagian daripada proses pelaksanaan. Selain itu, pastikan untuk mengesahkan perubahan anda sebelum mengimport terus ke persekitaran pengeluaran.

Kod ralat: 10000007

Mesej ralat: "Pelaksanaan pemalam hilang untuk Proses Pengiraan Masa Tersuai dalam SLA Item {0} {Placeholder="{0}"} merujuk kepada id item papak."

Sebab

Ralat berlaku jika Strim Kerja Pengiraan Masa Tersuai didayakan tetapi langkah proses pemesejan SDK pasang masuk yang berkaitan tiada atau pasang masuk tidak didaftarkan.

Resolusi

Pastikan anda menambah langkah SDK semasa mengeksport SLA daripada sumber atau persekitaran pembangunan. Untuk mengelakkan isu ini, pastikan anda menambah langkah mesej SDK dan pemasangan pasang masuk dalam penyelesaian SLA.

Kod ralat: 10000008

Mesej ralat: "Amaran atau masa kegagalan dikembalikan oleh Proses Pengiraan Masa Tersuai untuk Item SLA {0} tidak sah. {Ruang letak="{0}"} merujuk kepada id item SLA."

Sebab

Ralat berlaku jika tindakan Strim Kerja Pengiraan Masa Tersuai mengembalikan Masa Kegagalan yang tidak sah untuk requestType getEndTime.

Resolusi

Anda perlu menyahpepijat untuk mengetahui sebab proses aliran kerja tersuai tidak mengembalikan nilai yang betul. Untuk mengelakkan isu tersebut, pastikan anda menambah dan menguji semua senario sebelum menggunakan senario ke pengeluaran. Sebagai contoh, ini termasuk pelbagai aplikasi item SLA dan senario Jeda atau Sambung Semula.

Kod ralat: 10000009

Mesej ralat: "Masa Berlalu yang dikembalikan oleh Proses Pengiraan Masa Tersuai bagi Item SLA {0} tidak sah. {Ruang letak="{0}"} merujuk kepada id item SLA."

Sebab

Ralat berlaku jika tindakan Strim Kerja Pengiraan Masa Tersuai mengembalikan Masa Berlalu yang tidak sah untuk requestType getElapsedTime.

Resolusi

Anda perlu menyahpepijat untuk mengetahui sebab proses aliran kerja tersuai tidak mengembalikan nilai yang betul apabila kes dijeda dan disambung semula. Untuk mengelakkan isu tersebut, pastikan anda menambah dan menguji semua senario sebelum menggunakan senario ke pengeluaran. Sebagai contoh, ini termasuk senario Jeda atau Sambung semula.

Kod ralat: 10000010

Mesej ralat: "Aliran kerja untuk Proses {0} Pengiraan Masa Tersuai untuk Item SLA {1} tidak dijumpai."

Sebab

Ralat berlaku jika tindakan tersuai untuk pengiraan masa tersuai tiada dalam sistem.

Resolusi

Anda perlu menyahpepijat dan mengetahui sama ada tindakan tersuai terdapat dalam sistem dengan nama yang sama seperti yang ditunjukkan dalam ralat. Untuk mengelakkan isu ini, pastikan anda cipta awalan nama tindakan tersuai yang sama seperti yang ditunjukkan dalam mesej ralat. Anda perlu mengubah awalan penyelesaian anda atau elakkan daripada mengeksport sebagai penyelesaian yang tidak terurus. Anda juga boleh mengelak daripada mencipta antara muka strim kerja secara langsung dalam penyelesaian terurus dan sebaliknya mencipta penyelesaian terurus dalam penyesuaian lalai dan kemudian menambahkan pada penyelesaian.

Soalan lazim

Untuk maklumat lanjut tentang pengiraan masa tersuai KPI SLA, pergi ke Soalan lazim (FAQ) tentang pengiraan masa tersuai KPI SLA.

Tentukan perjanjian tahap perkhidmatan

Gunakan SLA

Dayakan rekod untuk SLA