Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, varsayılan zaman hesaplamasını nasıl geçersiz kılabileceğiniz açıklanmıştır.
Servis düzeyi anlaşmalarındaki (SLA'lar) saat hesaplaması,WarningTime
veFailureTime
SLA önemli performans göstergelerini (KPI'lar) hesaplar,ApplicableFrom
(DateTime alanının StartTime),CalendarId
(GUID) veDuration
(uyarı süresi veya başarısızlık süresi, dakika cinsinden) gibi giriş parametrelerini hesaba katar. Son WarningTime
veyaFailureTime
, SLA öğesiyle ilişkilendirilen müşteri hizmetleri zamanlaması ve tatil takvimi temel alınarak hesaplanır.
Uyarı ve hata saatinin yanı sıra, SLA için yapılandırılmış bir duraklatma ve sürdürme senaryosu varsa, geçen süre de hesaplanır. Geçen süre, SLA KPI duraklama durumu sırasında harcanan çalışma saatlerini yoksaymak için son hata süresine eklenir.
Kendi özel zaman hesaplamanızı etkinleştirmek için, sabit bir giriş ve çıkış parametreleri kümesi bulunan ve saati hesaplamak için özel bir mantık ekleyen bir API arabirimi tanımlayın.
Not
Özel zaman hesaplaması yalnızca eklentinin bir parçası olarak desteklenir ve başka bir varlık, örneğin, özel iş akışı değildir.
SLA KPI'leri için özel saat hesaplamasını etkinleştir
Make.powerapps.com’a gidin.
Gelişmiş Ayarlar>Özelleştirmeler>Sistemi özelleştirme>Süreçler>Yeni'ye gidin.
Süreç Oluştur iletişim kutusunda, aşağıdaki ayrıntıları girin:
- Bir işlem adı girin; Örneğin, CustomPluginTime hesaplaması.
- Kategori açılan listesinden Eylem'i seçin.
- Varlık açılan listesinden Hiçbiri (genel) seçin.
- Varolan bir şablondan yeni işlem (listeden seç) öğesini seçin.
- Listeden SLACustomTimeCalculationTemplate şablonunu seçin.
- Tamam'ı seçin.
Şablonda, gerekli parametreleri ekleyin (varsa) ve Etkinleştir'i seçin.
-
Gereksinim duyduğunuz eklentiyi seçme hakkında bilgi edinmek için Senaryolar ve eklentiler başlığına gidin.
3. adımda oluşturulan özel eylem ile ilişkilendirmek için Eklenti kayıt aracına gidin ve oluşturduğunuz eklentiyi kuruluşunuza kaydedin. Eklenti hakkında daha fazla bilgi edinmek için Eklenti kaydetme bölümüne bakın.
Copilot Hizmeti yönetim merkezinde, SLA Öğesi ile önceden oluşturulan özel eylemi ekleyin veya düzenleyin:
- Özel zaman hesaplamasını izin ver'i Evet olarak ayarlayın.
- Özel zaman hesaplama süreci alanından, adım 3'de oluşturduğunuz özel eylemi seçin.
- Kaydet ve Kapat'ı seçin.
SLA formunuzda Etkinleştir'i seçin ve gerekli varlığa uygulayın. SLA KPI'sının uyarı ve hata saati, özel eylemde sağlanan zaman hesaplama mantığına uygun olarak görünür.
SLA uygulama hakkında daha fazla bilgi için SLA'ları uygulama bölümüne gidin
Çözümü başka bir ortama aktarmak için SLA'yı (öğesi özel eylem başvurusuna sahip olan) özel çözüme ekleyin. SLA'nın eklenmesi aynı zamanda özel eylem iş akışı sürecini de dışa aktarır. Daha sonra, daha önce oluşturduğunuz eklentiyi dışa aktaran SDK mesajını çözüme ekleyin.
Senaryolar ve eklentiler
Özel eyleminiz ile ilişkilendirilmiş bir eklenti kodu uygulamak için aşağıdaki senaryolara ve eklentilerine bakın.
1. Senaryo:
Duraklatma veya sürdürme senaryonuz yoksa yalnızca WarningTime
ve FailureTime
hesaplaması gerekir. Her yeni KPI örneği oluşturulduğunda, SLA yalnızca WarningTime
ve FailureTime
tek bir aramada hesaplamak için özel zaman hesaplama API'sini başlatır.
Böyle bir durumda, requestType
dır-dir getEndTime
ve diğer nitelikler aşağıdaki örnekte tanımlandığı gibi getirilebilir:
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. Senaryo:
Bir duraklatma veya sürdürme senaryosu varsa aşağıdaki hesaplamalar yapılır:
- Duraklatma ve sürdürme durumları arasında
elapsedTime
hesaplaması. Bu senaryoda SLA, duraklatma ve sürdürme arasında geçen süreyi hesaplamak için özel zaman hesaplama API'sini çağırır. Böyle bir durumda, requestTypegetElapsedTime
dır-dir ve diğer nitelikler eklenti kodu örneğinde tanımlandığı gibi getirilebilir. - Yeni
WarningTime
veFailureTime
sürdürülme örnekleri için hesaplama. Bu durumda,requestType
dır-dirgetEndTime
ve diğer nitelikler aşağıdaki örnekte tanımlandığı gibi getirilebilir:
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;
}
Özel zaman hesaplamasıyla ilgili hata kodları
Özel zaman hesaplaması sırasında ortaya çıkabilecek çeşitli hata senaryoları için hata kodları aşağıda verilmektedir.
Hata kodu: 10000004
Hata mesajı: "{0} SLA Öğesi için Özel Zaman Hesaplama API'sı ile ilişkili iş akışı etkin olmalıdır."
Nedeni
Hata, Özel Zaman Hesaplaması İş Akışı devre dışıysa oluşur.
Çözünürlük
SLA'yı açtığınızda, SLA etkinse ancak Özel Zaman Hesaplama İş Akışı devre dışıysa bir form bildirimi ile birlikteEtkinleştir düğmesini görürsünüz. Bu sorunu önlemek için, Özel Zaman Hesaplama İş Akışı sürecinin her zaman Etkin durumda olduğundan emin olun. SLA dağıtımını gerçekleştirin ve yalnızca tamamlandıktan sonra doğrulayın. İş akışı sürecini el ile veya özelleştirme yoluyla silmediğinizden veya devre dışı bırakmadığınızdan emin olun.
Hata kodu: 10000005
Hata iletisi: "Özel Zaman Hesaplama İşlemi'ni seçin."
Nedeni
Hata, Özel Zaman Hesaplama İş Akışı etkinleştirilmiş ancak iş akışı süreci eylemi SLA Öğesiyle ilişkilendirilmediğinde ortaya çıkar.
Çözünürlük
İş akışı süreci ekleyin ve SLA öğesini kaydedin. Bu sorunu önlemek için, geçiş Açık ayarlanmışsa Özel Zaman Hesaplama İş Akışı sürecinin arama değerinde doldurulduğundan emin olun.
Hata kodu: 10000006
Hata iletisi: "{0} SLA Öğesi için Özel Zaman Hesaplama İşlemine ilişkin iş akışı yok. {Placeholder="{0}"} SLA öğesi kimliğini gösterir."
Nedeni
SLA etkinleştirmesi sırasında Özel Zaman Hesaplama İş Akışı etkinleştirilirse, iş akışı işlem eylemi geçerli GUID'ye sahip SLA Öğesi ile ilişkilendirilirse ancak iş akışı silinirse hata oluşur.
Çözünürlük
Geçersiz iş akışını düzeltmeniz gerekir. SLA Öğesinden varolan iş akışını kaldırın, yeni bir iş akışı oluşturun ve ardından yeni iş akışını aynı SLA öğesine ekleyin. Bu sorunu önlemek için, herhangi bir iş akışını el ile veya dağıtım sürecinin parçası olarak silmediğinizden emin olun. Ayrıca doğrudan bir üretim ortamına aktarmadan önce değişikliklerinizi doğruladığınızdan emin olun.
Hata kodu: 10000007
Hata mesajı: "SLA Öğesi {0} {Yertutucu="{0}"} levha öğesi kimliğine atıfta bulunan Özel Zaman Hesaplama Süreci için eklenti uygulaması eksik."
Nedeni
Hata, Özel Zaman Hesaplama İş Akışı etkinleştirilmişse ancak ilişkili eklenti SDK ileti işleme adımı eksikse veya eklenti kaydedilmemişse oluşur.
Çözünürlük
Kaynak veya geliştirme ortamından SLA'yı dışa aktarırken SDK adımını eklediğinizden emin olun. Bu sorunu önlemek için SLA çözümünde SDK ileti adımı ve eklenti derlemesini eklediğinizden emin olun.
Hata kodu: 10000008
Hata iletisi: "SLA Öğesi {0} için Özel Zaman Hesaplama İşlemi tarafından döndürülen Uyarı veya Hata Zamanı değeri geçersiz. {Placeholder="{0}"} sla öğesi kimliğini gösterir."
Nedeni
Hata, Özel Zaman Hesaplaması İş Akışı eylemi requestType getEndTime için geçersiz bir Hata Zamanı döndürürse ortaya çıkar.
Çözünürlük
Özel iş akışı sürecinin neden uygun değerleri döndürmediğini öğrenmek için hata ayıklamanız gerekir. Sorunu önlemek için, senaryoları üretime dağıtmadan önce tüm senaryoları eklediğinizden ve test ettiğinizden emin olun. Örneğin bu, çeşitli SLA öğesi uygulamalarını ve Duraklatma veya Sürdürme senaryolarını içerir.
Hata kodu: 10000009
Hata iletisi: "SLA Öğesi {0} için Özel Zaman Hesaplama İşlemi tarafından döndürülen Geçen Süre değeri geçersiz. {Placeholder="{0}"} sla öğesi kimliğini gösterir."
Nedeni
Hata, Özel Zaman Hesaplaması İş Akışı eylemi requestType getElapsedTime için geçersiz bir Geçen Süre döndürürse ortaya çıkar.
Çözünürlük
Servis talebi durdurulup sürdürüldüğünde özel iş akışı sürecinin neden uygun değerleri döndürmediğini öğrenmek için hata ayıklamanız gerekir. Sorunu önlemek için, senaryoları üretime dağıtmadan önce tüm senaryoları eklediğinizden ve test ettiğinizden emin olun. Örneğin bu, Duraklatma veya Sürdürme senaryolarını içerir.
Hata kodu: 10000010
Hata iletisi: "SLA Öğesi {0} için {1} Özel Zaman Hesaplama İşlemine ilişkin iş akışı bulunamadı."
Nedeni
Hata, özel saat hesaplaması için özel eylem sistemde bulunmazsa oluşur.
Çözünürlük
Hata ayıklamanız ve özel eylemin sistemde hatada gösterilenle aynı adla mevcut olup olmadığını öğrenmeniz gerekir. Bu sorunu önlemek için, hata iletisinde gösterildiği gibi aynı özel eylem adı önekini oluşturduğunuzdan emin olun. Çözümünüzün önekini değiştirmeniz veya bir yönetilmeyen çözüm olarak dışa aktarmayı önlemeniz gerekir. Ayrıca iş akışı arabirimini doğrudan yönetilen çözümde oluşturmaktan kaçınabilir ve bunun yerine yönetilen çözümü varsayılan özelleştirmede oluşturup ardından çözüme ekleyebilirsiniz.
SSS
SLA KPI'larının özel zaman hesaplaması hakkında daha fazla bilgi için SLA KPI'larının özel zaman hesaplaması hakkında SSS bölümüne gidin.