หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
บทความนี้จะอธิบายวิธีที่คุณสามารถแทนที่การคำนวณเวลาเริ่มต้น
การคำนวณเวลาในข้อตกลงระดับการให้บริการ (SLA) จะคำนวณ WarningTime
และ FailureTime
ของตัวบ่งชี้ประสิทธิภาพหลักของ (KPI) ของ SLA โดยพิจารณาพารามิเตอร์อินพุต เช่น ApplicableFrom
(เวลาเริ่มต้นของฟิลด์ประเภท DateTime) CalendarId
(GUID) และ Duration
(ระยะเวลาการเตือนหรือระยะเวลาความล้มเหลวเป็นนาที)
WarningTime
หรือ FailureTime
สุดท้าย จะคำนวณจากกำหนดการส่วนบริการลูกค้าและกำหนดการวันหยุดที่เกี่ยวข้องกับรายการ SLA
นอกจากเวลาการเตือนและความล้มเหลวแล้ว เวลาที่ใช้ไปจะถูกคำนวณด้วยหากมีสถานการณ์หยุดชั่วคราวและดำเนินต่อที่กำหนดค่าไว้สำหรับ SLA เพื่อละเว้นชั่วโมงทำงานที่ใช้ระหว่างสถานะ หยุดชั่วคราว ของ SLA KPI เวลาที่ผ่านไปจะเพิ่มไปยังเวลาที่ล้มเหลวในขั้นสุดท้าย
หากต้องการเปิดใช้งานการคำนวณเวลาแบบกำหนดเอง ให้กำหนดอินเทอร์เฟซ API ที่มีชุดพารามิเตอร์อินพุตและเอาต์พุตคงที่ และเพิ่มตรรกะที่กำหนดเองเพื่อคำนวณเวลา
หมายเหตุ
การคำนวณเวลาที่กำหนดเองได้รับการสนับสนุนในฐานะเป็นส่วนหนึ่งของปลั๊กอินเท่านั้น และไม่สนับสนุนเอนทิตีอื่น ตัวอย่างเช่น เวิร์กโฟลว์แบบกำหนดเอง
เปิดใช้งานการคำนวณเวลาแบบกำหนดเองของ SLA KPI
ไปที่ make.powerapps.com
ไปที่ การตั้งค่าขั้นสูง>การเลือกกำหนด>ปรับแต่งระบบ>กระบวนการ>สร้าง
ในกล่องโต้ตอบ สร้างกระบวนการ ป้อนรายละเอียดต่อไปนี้
- ป้อนชื่อกระบวนการ เช่น การคำนวณ CustomPluginTime
- จากรายการดรอปดาวน์ ประเภท เลือก การดำเนินการ.
- จากรายการดรอปดาวน์ เอนทิตี เลือก ไม่มี (ส่วนกลาง)
- เลือกตัวเลือก ดำเนินการใหม่จากเทมเพลตที่มีอยู่ (เลือกจากรายการ)
- เลือกเทมเพลต SLACustomTimeCalculationTemplate จากรายการ
- เลือก ตกลง
บนเทมเพลต ให้เพิ่มพารามิเตอร์ที่จำเป็น (ถ้ามี) แล้วเลือก เปิดใช้งาน
-
สำหรับข้อมูลเกี่ยวกับการเลือกปลั๊กอินที่คุณต้องการ ไปที่ สถานการณ์และปลั๊กอิน
หากต้องการเชื่อมโยงกับ การดำเนินการแบบกำหนดเอง ที่สร้างในขั้นตอนที่ 3 ให้ไปที่เครื่องมือการลงทะเบียนปลั๊กอินและลงทะเบียนปลั๊กอินที่คุณสร้างไว้กับองค์กรของคุณ เรียนรู้เพิ่มเติมเกี่ยวกับปลั๊กอินใน ลงทะเบียนปลั๊กอิน
ในศูนย์การจัดการบริการ Copilot เพิ่มหรือแก้ไขการดําเนินการแบบกําหนดเองที่สร้างขึ้นก่อนหน้านี้ด้วยรายการ SLA:
- ตั้งค่าตัวสลับ อนุญาตการคำนวณเวลาแบบกำหนดเอง เป็น ใช่
- ในฟิลด์ กระบวนการคำนวณเวลาแบบกำหนดเอง ให้เลือกการดำเนินการแบบกำหนดเองที่คุณสร้างในขั้นตอนที่ 3
- เลือก บันทึกและปิด
บนฟอร์ม SLA เลือก เปิดใช้งาน และนำไปใช้กับเอนทิตีที่จำเป็น เวลาการเตือนและความล้มเหลวของ SLA KPI ปรากฏขึ้นตามตรรกะการคำนวณเวลาที่ระบุในการดำเนินการแบบกำหนดเอง
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้ SLA ไปที่ ใช้ SLA
หากต้องการส่งออกโซลูชันไปยังสภาพแวดล้อมอื่น ให้เพิ่ม SLA ก่อน (ซึ่งมีรายการที่มีการอ้างอิงการดำเนินการแบบกำหนดเอง) ไปยังโซลูชันแบบกำหนดเองก่อน การเพิ่ม SLA จะนำเข้ากระบวนการของเวิร์กโฟลว์การดำเนินการแบบกำหนดเองด้วย ถัดไป รวมข้อความ SDK ในโซลูชัน ซึ่งจะส่งออกปลั๊กอินที่คุณสร้างไว้ก่อนหน้านี้
สถานการณ์และปลั๊กอิน
โปรดดูสถานการณ์ต่อไปนี้และปลั๊กอินเพื่อใช้โค้ดปลั๊กอินที่เชื่อมโยงกับการดำเนินการแบบกำหนดเองของคุณ
สถานการณ์ 1:
หากคุณไม่มีสถานการณ์หยุดชั่วคราวหรือเล่นต่อ จะมีการคำนวณเฉพาะ WarningTime
และ FailureTime
ทุกครั้งที่มีการสร้างอินสแตนซ์ KPI ใหม่ SLA จะเริ่ม API การคำนวณเวลาแบบกำหนดเองเพื่อคำนวณ WarningTime
และ FailureTime
ในการเรียกครั้งเดียว
ในกรณีดังกล่าว requestType
จะเป็น getEndTime
และสามารถดึงข้อมูลจากแอตทริบิวต์อื่น ๆ ได้ตามที่กำหนดไว้ในตัวอย่างต่อไปนี้
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;
}
สถานการณ์ 2:
หากมีสถานการณ์หยุดชั่วคราวหรือดำเนินต่อ ให้คำนวณดังต่อไปนี้:
- การคำนวณของ
elapsedTime
ระหว่างสถานะหยุดชั่วคราวและดำเนินการต่อ สำหรับสถานการณ์นี้ SLA จะเรียกใช้ API การคำนวณเวลาแบบกำหนดเองเพื่อคำนวณเวลาที่ผ่านไประหว่างการหยุดชั่วคราวและดำเนินการต่อ ในกรณีดังกล่าว requestType จะเป็นgetElapsedTime
และสามารถดึงข้อมูลจากแอตทริบิวต์อื่น ๆ ได้ตามที่กำหนดไว้ในตัวอย่างโค้ดปลั๊กอิน - การคำนวณของการประมวลผล
WarningTime
และFailureTime
ใหม่สำหรับอินสแตนซ์ที่ดำเนินต่อ ในกรณีนี้requestType
จะเป็นgetEndTime
และสามารถดึงข้อมูลจากแอตทริบิวต์อื่น ๆ ได้ตามที่กำหนดไว้ในตัวอย่างต่อไปนี้
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;
}
รหัสข้อผิดพลาดในการคำนวณเวลาที่กำหนดเอง
ต่อไปนี้คือรหัสข้อผิดพลาดสำหรับสถานการณ์ข้อผิดพลาดต่างๆ ที่อาจเกิดขึ้นระหว่างการคำนวณเวลาแบบกำหนดเอง
รหัสข้อผิดพลาด: 10000004
ข้อความแสดงข้อผิดพลาด: "เวิร์กโฟลว์สำหรับ API การคำนวณเวลาที่กำหนดเองสำหรับรายการ SLA {0} ต้องเปิดใช้งานอยู่"
เหตุผล:
ข้อผิดพลาดเกิดขึ้นหากเวิร์กโฟลว์การคำนวณเวลาแบบกำหนดเองถูกปิดใช้งาน
วิธีการแก้ไขปัญหา
เมื่อเปิด SLA คุณจะเห็นการแจ้งเตือนแบบฟอร์มพร้อมกับปุ่ม เปิดใช้งาน หาก SLA ทำงานอยู่ แต่เวิร์กโฟลว์การคำนวณเวลาแบบกำหนดเองถูกปิดใช้งาน เพื่อหลีกเลี่ยงปัญหานี้ ตรวจสอบให้แน่ใจว่ากระบวนการเวิร์กโฟลว์การคำนวณเวลาที่กำหนดเองอยู่ในสถานะ ใช้งานอยู่ เสมอ ดำเนินการปรับใช้ SLA และตรวจสอบหลังจากเสร็จสิ้นแล้วเท่านั้น ตรวจสอบให้แน่ใจว่าคุณไม่ได้ลบหรือปิดใช้งานกระบวนการเวิร์กโฟลว์ด้วยตนเองหรือผ่านการกำหนดเอง
รหัสข้อผิดพลาด: 10000005
ข้อความแสดงข้อผิดพลาด: "เลือกกระบวนการคำนวณเวลาแบบกำหนดเอง"
เหตุผล:
ข้อผิดพลาดเกิดขึ้นหากเปิดใช้งานเวิร์กโฟลว์การคำนวณเวลาแบบกำหนดเอง แต่ไม่มีการดำเนินการของกระบวนการเวิร์กโฟลว์ที่เชื่อมโยงกับรายการ SLA
วิธีการแก้ไขปัญหา
เพิ่มกระบวนการเวิร์กโฟลว์ และบันทึกรายการ SLA เพื่อหลีกเลี่ยงปัญหานี้ ตรวจสอบให้แน่ใจว่าได้เติมกระบวนการเวิร์กโฟลว์การคำนวณเวลาที่กำหนดเองในค่าการค้นหา หากการสลับถูกตั้งค่าเป็น เปิด
รหัสข้อผิดพลาด: 10000006
ข้อความแสดงข้อผิดพลาด: "ไม่มีเวิร์กโฟลว์สำหรับกระบวนการคำนวณเวลาแบบกำหนดเองสำหรับรายการ SLA {0} {ตัวยึด="{0}"} อ้างถึงรหัสรายการ SLA"
เหตุผล:
ข้อผิดพลาดเกิดขึ้นหากมีการเปิดใช้งานเวิร์กโฟลว์การคำนวณเวลาแบบกำหนดเองในระหว่างการเปิดใช้งาน SLA การดำเนินการของกระบวนการเวิร์กโฟลว์จะเชื่อมโยงกับรายการ SLA ที่มี GUID ที่ถูกต้อง แต่เวิร์กโฟลว์จะถูกลบ
วิธีการแก้ไขปัญหา
คุณต้องแก้ไขเวิร์กโฟลว์ที่ไม่ถูกต้อง ลบเวิร์กโฟลว์ที่มีอยู่ออกจากรายการ SLA สร้างเวิร์กโฟลว์ใหม่ และเพิ่มเวิร์กโฟลว์ใหม่ให้กับรายการ SLA เดียวกัน เพื่อหลีกเลี่ยงปัญหานี้ ตรวจสอบให้แน่ใจว่าคุณไม่ได้ลบเวิร์กโฟลว์ใดๆ ด้วยตนเอง หรือเป็นส่วนหนึ่งของกระบวนการปรับใช้ นอกจากนี้ ตรวจสอบให้แน่ใจว่าได้ตรวจสอบการเปลี่ยนแปลงของคุณก่อนที่จะนำเข้าโดยตรงไปยังสภาพแวดล้อมการใช้งานจริง
รหัสข้อผิดพลาด: 10000007
ข้อความแสดงข้อผิดพลาด: "การใช้งานปลั๊กอินหายไปสำหรับกระบวนการคำนวณเวลาแบบกำหนดเองในรายการ SLA {0} {ตัวยึด="{0}"} หมายถึงรหัสรายการ slab"
เหตุผล:
ข้อผิดพลาดเกิดขึ้นหากเปิดใช้งานเวิร์กโฟลว์การคำนวณเวลาแบบกำหนดเอง แต่ขั้นตอนกระบวนการส่งข้อความ SDK ของปลั๊กอินที่เกี่ยวข้องขาดหายไป หรือไม่ได้ลงทะเบียนปลั๊กอิน
วิธีการแก้ไขปัญหา
ตรวจสอบให้แน่ใจว่าได้เพิ่มขั้นตอน SDK ขณะส่งออก SLA จากต้นทางหรือสภาพแวดล้อมการพัฒนา เพื่อหลีกเลี่ยงปัญหานี้ ตรวจสอบให้แน่ใจว่าคุณเพิ่มขั้นตอนข้อความ SDK และชุดประกอบปลั๊กอินในโซลูชัน SLA
รหัสข้อผิดพลาด: 10000008
ข้อความแสดงข้อผิดพลาด: "คำเตือนหรือเวลาของความล้มเหลวที่ส่งคืนโดยกระบวนการคำนวณเวลาแบบกำหนดเองสำหรับรายการ SLA {0} ไม่ถูกต้อง {ตัวยึดตำแหน่ง="{0}"} อ้างถึงรหัสรายการ SLA"
เหตุผล:
ข้อผิดพลาดเกิดขึ้นหากการดำเนินการเวิร์กโฟลว์การคำนวณเวลาแบบกำหนดเองส่งกลับค่า เวลาของความล้มเหลว สำหรับ requestType getEndTime ที่ไม่ถูกต้อง
วิธีการแก้ไขปัญหา
คุณต้องแก้จุดบกพร่องเพื่อดูว่าเหตุใดกระบวนการเวิร์กโฟลว์แบบกำหนดเองจึงไม่ส่งคืนค่าที่เหมาะสม เพื่อหลีกเลี่ยงปัญหา ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มและทดสอบสถานการณ์ทั้งหมดก่อนที่จะปรับใช้สถานการณ์กับการใช้งานจริง ตัวอย่างเช่น ซึ่งรวมถึงแอปพลิเคชันรายการ SLA ต่างๆ และสถานการณ์หยุดชั่วคราวหรือดำเนินการต่อ
รหัสข้อผิดพลาด: 10000009
ข้อความแสดงข้อผิดพลาด: "เวลาที่ใช้ที่ส่งคืนโดยกระบวนการคำนวณเวลาแบบกำหนดเองสำหรับรายการ SLA {0} ไม่ถูกต้อง {ตัวยึดตำแหน่ง="{0}"} อ้างถึงรหัสรายการ SLA"
เหตุผล:
ข้อผิดพลาดเกิดขึ้นหากการดำเนินการเวิร์กโฟลว์การคำนวณเวลาแบบกำหนดเองส่งกลับค่า เวลาที่ใช้ สำหรับ requestType getElapsedTime ที่ไม่ถูกต้อง
วิธีการแก้ไขปัญหา
คุณต้องแก้จุดบกพร่องเพื่อดูว่าเหตุใดกระบวนการเวิร์กโฟลว์แบบกำหนดเองจึงไม่ส่งคืนค่าที่เหมาะสมขณะที่เปิดกรณีและปัญหาที่ถูกระงับไว้อีกครั้ง เพื่อหลีกเลี่ยงปัญหา ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มและทดสอบสถานการณ์ทั้งหมดก่อนที่จะปรับใช้สถานการณ์กับการใช้งานจริง ตัวอย่างเช่น ซึ่งรวมถึงสถานการณ์หยุดชั่วคราวหรือดำเนินการต่อ
รหัสข้อผิดพลาด: 10000010
ข้อความแสดงข้อผิดพลาด: "ไม่พบเวิร์กโฟลว์สำหรับกระบวนการคำนวณเวลาแบบกำหนดเอง {0} สำหรับรายการ SLA {1}"
เหตุผล:
ข้อผิดพลาดจะเกิดขึ้นหากไม่พบการดำเนินการแบบกำหนดเองสำหรับการคำนวณเวลาแบบกำหนดเองในระบบ
วิธีการแก้ไขปัญหา
คุณต้องแก้ไขจุดบกพร่องและดูว่ามีการดำเนินการแบบกำหนดเองใด อยู่ในระบบที่มีชื่อเดียวกันกับที่แสดงในข้อผิดพลาดหรือไม่ เพื่อหลีกเลี่ยงปัญหานี้ ตรวจสอบให้แน่ใจว่าคุณสร้างคำนำหน้าชื่อการดำเนินการแบบกำหนดเองเดียวกันกับที่แสดงในข้อความแสดงข้อผิดพลาด คุณต้องเปลี่ยนคำนำหน้าของโซลูชัน หรือหลีกเลี่ยงการส่งออกเป็นโซลูชันที่ไม่มีการจัดการ คุณยังสามารถหลีกเลี่ยงการสร้างอินเทอร์เฟซเวิร์กโฟลว์โดยตรงในโซลูชันที่มีการจัดการ และสร้างโซลูชันที่มีการจัดการ ในการกำหนดค่าเริ่มต้นแทน แล้วจึงเพิ่มลงในโซลูชัน
คำถามที่ถามบ่อย
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการคำนวณเวลาแบบกำหนดเองของ SLA KPI ไปที่ คำถามที่ถามบ่อยเกี่ยวกับการคำนวณเวลาแบบกำหนดเองของ SLA KPI