Nota
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba mendaftar masuk atau menukar direktori.
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba menukar direktori.
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
Pergi ke make.powerapps.com.
Pergi ke Tetapan Lanjutan>Penyesuaian>Sesuaikan sistem>Proses>Baharu.
Dalam dialog Cipta Proses, masukkan butiran berikut:
- Masukkan nama proses, sebagai contoh, Pengiraan CustomPluginTime.
- Daripada senarai juntai bawah Kategori, pilih Tindakan .
- Daripada senarai juntai bawah Entiti, pilih Tiada (global).
- Pilih pilihan Proses baharu daripada templat sedia ada (pilih daripada senarai).
- Pilih templat SLACustomTimeCalculationTemplate daripada senarai.
- Pilih OK.
Pada templat, tambah parameter yang diperlukan (jika ada) dan pilih Aktifkan.
-
Untuk maklumat tentang memilih pasang masuk yang anda perlukan, pergi ke Senario dan pasang masuk.
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.
Dalam pusat pentadbiran Perkhidmatan Copilot, tambah atau edit tindakan tersuai yang dibuat sebelum ini dengan Item SLA:
- Tetapkan Togol Benarkan Pengiraan Masa Tersuai kepada Ya.
- Dalam medan Proses Pengiraan Masa Tersuai, pilih tindakan tersuai yang dicipta dalam langkah 3.
- Pilih Simpan dan Tutup.
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
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 ialahgetElapsedTime
dan atribut lain boleh diambil seperti yang ditakrifkan dalam contoh kod pemalam. - Pengiraan baharu
WarningTime
danFailureTime
pengiraan untuk tika yang disambung semula. Dalam kes ini, adalahrequestType
,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.