इसके माध्यम से साझा किया गया


SLA KPI की कस्टम समय परिकलन सक्षम करें

यह आलेख वर्णन करता है कि आप डिफ़ॉल्ट समय गणना को कैसे ओवरराइड कर सकते हैं।

सेवा-स्तर अनुबंधों (SLA) में समय की गणना, SLA प्रमुख प्रदर्शन संकेतकों (KPI) के WarningTime और FailureTime की गणना करता है, इनपुट पैरामीटरों को ध्यान में रखते हुए, जैसे ApplicableFrom (डेटटाइम प्रकार फ़ील्ड का प्रारंभ समय), CalendarId (GUID), और Duration (चेतावनी अवधि या मिनट में विफलता अवधि)। अंतिम WarningTime या FailureTime की गणना ग्राहक सेवा शेड्यूल और SLA आइटम से जुड़े अवकाश शेड्यूल के आधार पर की जाती है।

चेतावनी और विफलता के समय के अलावा, बीता हुआ समय भी गणना की जाती है यदि SLA के लिए एक विराम और फिर से शुरू करने का परिदृश्य कॉन्फ़िगर किया गया हो। SLA KPI की रुकी हुई स्थिति के दौरान बिताए गए कार्य घंटों को अनदेखा करने के लिए, बीता हुआ समय अंतिम विफलता समय में जोड़ा जाता है।

अपने स्वयं के कस्टम समय परिकलन को सक्षम करने के लिए, एक एपीआई इंटरफ़ेस परिभाषित करें जिसमें इनपुट और आउटपुट पैरामीटर का एक निश्चित सेट हो, और समय की परिकलन करने के लिए एक कस्टम तर्क जोड़ें।

नोट

कस्टम समय गणना केवल प्लग-इन के भाग के रूप में समर्थित है और किसी अन्य इकाई के लिए नहीं, उदाहरण के लिए, कस्टम कार्यप्रवाह।

SLA KPI की कस्टम समय परिकलन सक्षम करें

  1. make.powerapps.com पर जाएँ.

  2. उन्नत सेटिंग्स>अनुकूलन>सिस्टम को अनुकूलित करें>प्रक्रियाएं>नया पर जाएं.

  3. प्रक्रिया बनाएँ डायलॉग में, निम्नलिखित विवरण दर्ज करें:

    1. एक प्रक्रिया नाम दर्ज करें, उदाहरण के लिए, CustomPluginTime परिकलन।
    2. श्रेणी ड्रॉपडाउन सूची से क्रिया चुनें।
    3. निकाय ड्रॉपडाउन सूची से, कोई नहीं (ग्लोबल) चुनें।
    4. मौजूदा टेम्प्लेट से नई प्रक्रिया (सूची में से चुनें) विकल्प चुनें।
    5. सूची से SLACustomTimeCalculationTemplate टेम्प्लेट चुनें।
    6. ठीक चुनें.

    कस्टम समय परिकलन टेम्पलेट

  4. टेम्पलेट पर, आवश्यक पैरामीटर (यदि कोई हो) जोड़ें और सक्रिय करें चुनें।

    किसी भी SLA आइटम के लिए प्रक्रिया तर्क सक्षम करें

  5. प्लग-इन लिखें.

    आपको जिस प्लग-इन की आवश्यकता है उसे चुनने के बारे में जानकारी के लिए, परिदृश्य और प्लग-इन पर जाएं।

  6. इसे चरण 3 में बनाई गई कस्टम कार्रवाई से लिंक करने के लिए, प्लग-इन पंजीकरण टूल पर जाएं और अपने संगठन के साथ बनाए गए प्लग-इन को पंजीकृत करें। प्लग-इन के बारे में अधिक जानें, प्लग-इन पंजीकृत करें.

    रजिस्टर करें और प्लग-इन को लिंक करें

  7. Copilot सेवा व्यवस्थापन केंद्र में, SLA आइटम के साथ पहले बनाई गई कस्टम क्रिया जोड़ें या संपादित करें:

    1. कस्टम समय गणना की अनुमति दें को हां पर सेट करें।
    2. कस्टम समय गणना प्रक्रिया फ़ील्ड में, चरण 3 में बनाई गई कस्टम क्रिया का चयन करें।
    3. सहेजें और बंद करें चुनें.
  8. SLA प्रपत्र पर, सक्रिय करें का चयन करें, और इसे आवश्यक इकाई पर लागू करें। SLA KPI की चेतावनी और विफलता का समय कस्टम क्रिया में प्रदान किए गए समय गणना तर्क के अनुसार प्रकट होता है।

    SLA कैसे लागू करें, इस बारे में जानकारी के लिए SLAs लागू करें पर जाएं

  9. समाधान को किसी अन्य परिवेश में निर्यात करने के लिए, पहले कस्टम समाधान में SLA (जिसके आइटम में कस्टम क्रिया संदर्भ है) जोड़ें। SLA जोड़ने से कस्टम एक्शन वर्कफ़्लो प्रक्रिया भी निर्यात हो जाती है. इसके बाद, समाधान में SDK संदेश शामिल करें, जो आपके द्वारा पहले बनाए गए प्लग-इन को निर्यात करता है.

परिदृश्य और प्लग-इन

अपनी कस्टम क्रिया से संबद्ध प्लग-इन कोड लागू करने के लिए निम्नलिखित परिदृश्यों और उनके प्लग-इन का संदर्भ लें।

परिदृश्य 1:

यदि आपके पास विराम या फिर से शुरू करने का परिदृश्य नहीं है, तो केवल WarningTime और FailureTime की गणना की जानी है। जब भी कोई नया KPI उदाहरण बनाया जाता है, SLA एक ही कॉल में केवल WarningTime और FailureTime की गणना करने के लिए कस्टम समय गणना API आरंभ करता है।

ऐसे मामले में, requestTypegetEndTime है, और अन्य विशेषताओं को निम्नलिखित उदाहरण में परिभाषित अनुसार प्राप्त किया जा सकता है:

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

त्रुटि संदेश: "SLA आइटम {0} के लिए कस्टम समय परिकलन API के लिए कार्यप्रवाह सक्रिय होना चाहिए।"

कारण

त्रुटि तब होती है जब कस्टम समय परिकलन कार्यप्रवाह अक्षम होता है।

सुलझाव

SLA खोलते समय, आपको एक प्रपत्र अधिसूचना के साथ एक सक्रिय करें बटन दिखाई देता है, यदि SLA सक्रिय है, लेकिन कस्टम समय गणना वर्कफ़्लो अक्षम है। इस समस्या से बचने के लिए, सुनिश्चित करें कि कस्टम समय गणना वर्कफ़्लो प्रक्रिया हमेशा सक्रिय स्थिति में है। SLA परिनियोजन करें, और उसके पूरा होने के बाद ही सत्यापन करें. सुनिश्चित करें कि आप मैन्युअल रूप से या अनुकूलन के माध्यम से कार्यप्रवाह प्रक्रिया को हटा या निष्क्रिय नहीं करते हैं।

त्रुटि कोड: 10000005

त्रुटि संदेश: "कस्टम समय परिकलन प्रक्रिया चुनें।"

कारण

त्रुटि तब होती है जब कस्टम समय गणना वर्कफ़्लो सक्षम होता है लेकिन SLA आइटम के साथ कोई वर्कफ़्लो प्रक्रिया क्रिया संबद्ध नहीं होती है।

सुलझाव

कार्यप्रवाह प्रक्रिया जोड़ें और SLA आइटम सहेजें। इस समस्या से बचने के लिए, सुनिश्चित करें कि यदि टॉगल को चालू पर सेट किया गया है, तो लुकअप मान में कस्टम समय गणना वर्कफ़्लो प्रक्रिया भरी हुई है.

त्रुटि कोड: 10000006

त्रुटि संदेश: "SLA आइटम {0} के लिए कस्टम समय परिकलन प्रक्रिया के लिए कार्यप्रवाह नहीं मिला। {प्लेसहोल्डर="{0}"} SLA आइटम आईडी को संदर्भित करता है।"

कारण

यह त्रुटि तब होती है जब SLA सक्रियण के दौरान कस्टम समय गणना वर्कफ़्लो सक्षम होता है, वर्कफ़्लो प्रक्रिया क्रिया मान्य GUID वाले SLA आइटम से संबद्ध होती है, लेकिन वर्कफ़्लो हटा दिया जाता है।

सुलझाव

आपको अमान्य कार्यप्रवाह को सही करना होगा। SLA आइटम से मौजूदा वर्कफ़्लो निकालें, एक नया वर्कफ़्लो बनाएँ, और फिर उसी SLA आइटम में नया वर्कफ़्लो जोड़ें। इस समस्या से बचने के लिए, सुनिश्चित करें कि आप किसी भी कार्यप्रवाह को मैन्युअल रूप से या परिनियोजन प्रक्रिया के भाग के रूप में नहीं हटाते हैं। साथ ही, उत्पादन परिवेश में सीधे आयात करने से पहले अपने परिवर्तनों को सत्यापित करना सुनिश्चित करें।

त्रुटि कोड: 10000007

त्रुटि संदेश: "SLA आइटम में कस्टम समय गणना प्रक्रिया के लिए प्लगइन कार्यान्वयन अनुपलब्ध है {0} {प्लेसहोल्डर="{0}"} स्लैब आइटम आईडी को संदर्भित करता है।"

कारण

त्रुटि तब होती है जब कस्टम समय गणना कार्यप्रवाह सक्षम होता है लेकिन संबद्ध प्लग इन SDK संदेश प्रक्रिया चरण अनुपलब्ध होता है या प्लग इन पंजीकृत नहीं होता है।

सुलझाव

स्रोत या विकास परिवेश से SLA निर्यात करते समय SDK चरण जोड़ना सुनिश्चित करें। इस समस्या से बचने के लिए, सुनिश्चित करें कि आप SLA समाधान में SDK संदेश चरण और प्लगइन असेंबली जोड़ते हैं।

त्रुटि कोड: 10000008

त्रुटि संदेश: "SLA आइटम {0} के लिए कस्टम समय गणना प्रक्रिया द्वारा दी गई चेतावनी या विफलता समय अमान्य है। {प्लेसहोल्डर="{0}"} SLA आइटम आईडी को संदर्भित करता है।"

कारण

त्रुटि तब होती है जब कस्टम समय गणना वर्कफ़्लो क्रिया requestType getEndTime के लिए एक अमान्य विफलता समय लौटाती है।

सुलझाव

आपको यह पता लगाने के लिए डीबग करना होगा कि कस्टम वर्कफ़्लो प्रक्रिया उचित मान क्यों नहीं लौटा रही है। समस्या से बचने के लिए, सुनिश्चित करें कि आप परिदृश्यों को उत्पादन में परिनियोजित करने से पहले सभी परिदृश्यों को जोड़ें और उनका परीक्षण करें. उदाहरण के लिए, इसमें विभिन्न SLA आइटम एप्लिकेशन और रोकें या फिर से शुरू करें परिदृश्य शामिल हैं।

त्रुटि कोड: 10000009

त्रुटि संदेश: SLA आइटम {0} के लिए कस्टम समय परिकलन प्रक्रिया द्वारा लौटाया गया बीता हुआ समय इनवैलिड है। {प्लेसहोल्डर="{0}"} SLA आइटम आईडी को संदर्भित करता है।"

कारण

त्रुटि तब होती है जब कस्टम समय गणना वर्कफ़्लो क्रिया requestType getElapsedTime के लिए एक अमान्य गुजरे समय लौटाती है।

सुलझाव

आपको यह पता लगाने के लिए डीबग करना होगा कि जब केस को रोका गया और फिर से शुरू किया गया तो कस्टम वर्कफ़्लो प्रक्रिया उचित मान क्यों नहीं लौटा रही है। समस्या से बचने के लिए, सुनिश्चित करें कि आप परिदृश्यों को उत्पादन में परिनियोजित करने से पहले सभी परिदृश्यों को जोड़ें और उनका परीक्षण करें. उदाहरण के लिए, इसमें रोकें या फिर से शुरू करें परिदृश्य शामिल हैं।

त्रुटि कोड: 10000010

त्रुटि संदेश: "SLA आइटम {0} के लिए कस्टम समय गणना प्रक्रिया {1} का वर्कफ़्लो नहीं मिला."

कारण

त्रुटि तब होती है जब सिस्टम में कस्टम समय गणना के लिए कस्टम क्रिया नहीं मिलती है।

सुलझाव

आपको डीबग करके यह पता लगाना होगा कि क्या कस्टम एक्शन सिस्टम में उसी नाम से मौजूद है जैसा कि त्रुटि में दिखाया गया है। इस समस्या से बचने के लिए, सुनिश्चित करें कि आपने वही कस्टम क्रिया नाम उपसर्ग बनाया है जैसा कि त्रुटि संदेश में दिखाया गया है। आपको अपने समाधान के उपसर्ग को बदलने या इसे अप्रबंधित समाधान के रूप में निर्यात करने से बचने की आवश्यकता है। आप सीधे प्रबंधित समाधान में वर्कफ़्लो इंटरफ़ेस बनाने से भी बच सकते हैं, और इसके बजाय डिफ़ॉल्ट अनुकूलन में प्रबंधित समाधान बना सकते हैं और फिर इसे समाधान में जोड़ सकते हैं।

अक्सर पूछे जाने वाले प्रश्न

SLA KPI की कस्टम समय गणना के बारे में अधिक जानकारी के लिए, SLA KPI की कस्टम समय गणना के बारे में अक्सर पूछे जाने वाले प्रश्न पर जाएं।

सेवा-स्तरीय अनुबंध परिभाषित करें

SLA लागू करें

SLA के लिए रिकॉर्ड सक्षम करें