我的Dynamic365ORG中有几个SLA。每个SLA都有不同的工作时间。
我有一个需求,需要以编程方式获取SLA中的营业时间细节(在插件/自定义工作流中调用)。
我需要的细节如下:
已经尝试过使用像QueryScheduleRequest和ExpandCalendarRequest这样的检索仿真器和CRM消息,但是到目前为止还没有得到所有的细节。
发布于 2018-02-14 09:05:50
您可以手动获得营业时间(日历)的详细信息,但是有相当多的步骤。我在下面大致概述了它们,但我建议您创建一个快速的控制台应用程序来进行调试,并逐步查看您可以实时使用的属性。
首先查询所需的SLA。如果您有ID,则使用:
var sla = service.Retrieve("sla", ID, new ColumnSet(new string[] { "businesshoursid" });
然后获取与SLA关联的营业时间ID:
var businessHoursId = sla.GetAttributeValue<EntityReference>("businesshoursid").Id;
然后检索营业时间(日历)本身:
var calendar = service.Retrieve("calendar", businessHoursId, new ColumnSet(true));
日历可以有多个规则。使用以下方法检索它们:
var calendarRules = calendar.GetAttributeValue<EntityCollection>("calendarrules");
这些外部日历规则将有一个模式,您可以看到使用
var firstRulePattern = calendarRules[0].GetAttributeValue<string>("pattern");
// FREQ=WEEKLY;INTERVAL=1;BYDAY=SU,MO,TU,WE,TH,FR
但是为了每天的工作时间,你需要内部日历。以第一条规则为例:
var innerCalendarId = calendarRules[0].GetAttributeValue<EntityReference>("innercalendarid").Id;
var innerCalendar = service.Retrieve("calendar", innerCalendarId, new ColumnSet(true);
var innnerCalendarRule = innerCalendar.GetAttributeValue<EntityCollection>("calendarrules").Entities.FirstOrDefault();
从您的内部规则中,注意属性duration
和offset
。这些值以分钟为单位,将给你每天的工作时间。
https://stackoverflow.com/questions/48782052
复制相似问题