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

How to get business hours details programmatically in Dynamics 365

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

我有一个要求,需要以编程方式获取 SLA 中营业时间的详细信息(在 plugin/custom 工作流程中调用)。

我需要的详细信息是:

已尝试使用 retrievemultiple 和 CRM Message,例如 QueryScheduleRequest 和 ExpandCalendarRequest,但到目前为止还没有设法获取所有详细信息。

您可以手动获取营业时间(日历)详细信息,但需要很多步骤。我在下面粗略地概述了它们,但我建议您创建一个快速控制台应用程序来实时调试和单步执行可用的属性。

首先查询你想要的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。这些值以分钟为单位,将为您提供每天的工作时间。