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



我在动态365 org中有几个SLA。每个SLA都有不同的工作时间。

我有一个需要以编程方式获取SLA中工作时间的详细信息(在插件/自定义工作流程中(。

我需要的细节将是:

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

尝试使用reterievemultiple和crm消息,例如queryschedulerequest和ExpaindCalendarRequest,但到目前为止尚未设法获取所有详细信息。

您可以手动获取工作时间(日历(详细信息,但有很多步骤。我大致在下面概述了它们,但是我建议您创建一个快速的控制台应用程序来调试并逐步浏览您可用的属性。

您想要的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。这些值是在几分钟之内,每天都会为您提供工作时间。

最新更新