如何在Dynamics 365中以编程方式获取营业时间详细信息

时间:2018-02-14 07:45:27

标签: c# dynamics-crm dynamics-crm-365

我的Dynamics 365 ORG中有几个SLA。每个SLA都有不同的工作时间。

我需要以编程方式在SLA中获取营业时间的详细信息(在插件/自定义工作流程中调用)。

我需要的细节是:

  • 每天的工作时间(例如星期一8 - 5,星期二8.30 - 5.30等)
  • 休息时间列表
  • 附带假期清单

尝试使用像QueryScheduleRequest和ExpandCalendarRequest这样的retrievemultiple和CRM Message,但到目前为止还没有设法获取所有细节。

1 个答案:

答案 0 :(得分:2)

您可以手动获取营业时间(日历)详细信息,但步骤相当多。我已经大致概述了它们,但我建议您创建一个快速控制台应用程序来调试并逐步浏览可用的属性。

首先查询您想要的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();

根据内部规则,请注意属性durationoffset。这些值以分钟为单位,每天为您提供工作时间。