【问题标题】:How to get business hours details programmatically in Dynamics 365如何在 Dynamics 365 中以编程方式获取营业时间详细信息
【发布时间】:2018-02-14 07:45:26
【问题描述】:

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

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

我需要的详细信息是:

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

曾尝试使用retrievemultiple 和CRM 消息,例如QueryScheduleRequest 和ExpandCalendarRequest,但到目前为止还没有获得所有详细信息。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢戴夫!补充一点,发现内部日历中的日历规则有一个叫做“子代码”的属性,我们可以从中确定是工作时间还是休息时间。
    猜你喜欢
    • 2018-12-29
    • 2021-05-28
    • 2020-02-07
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多