您可以手动获取营业时间(日历)详细信息,但步骤很多。我在下面粗略地概述了它们,但我建议您创建一个快速控制台应用程序来实时调试和逐步检查可用的属性。
首先查询您想要的 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。这些值以分钟为单位,将为您提供每天的工作时间。