Dynamics365 SLA KPI自定义时间计算插件FetchCalendar方法求助
Dynamics 365 SLA自定义时间计算插件FetchCalendar方法实现
你当前的业务逻辑是根据案例表new_country选项值,运行时动态覆写SLA计算使用的工作日历,FetchCalendar方法的核心是从系统中查询匹配标识的日历记录ID,具体实现如下:
方法逻辑说明
方法接收两个入参:
- 日历匹配键:对应你提前在系统中创建的IST、PST时区日历的唯一标识
- 组织服务实例:用于执行Dataverse数据查询
返回值为Guid类型的日历ID,可直接赋值给calendarId变量完成日历覆写。
完整实现代码
private Guid FetchCalendar(string calendarKey, IOrganizationService service) { // 若直接用日历名称匹配,将下方条件字段替换为name,值与你传入的IST_CALENDAR、PST_CALENDAR保持一致即可 var fetchXml = $@" <fetch top='1' no-lock='true'> <entity name='calendar'> <attribute name='calendarid'/> <filter> <condition attribute='new_calendarkey' operator='eq' value='{calendarKey}'/> <condition attribute='statecode' operator='eq' value='0'/> </filter> </entity> </fetch>"; var result = service.RetrieveMultiple(new FetchExpression(fetchXml)); return result.Entities.Count > 0 ? result.Entities[0].GetAttributeValue<Guid>("calendarid") : Guid.Empty; }
落地注意事项
- 若未给
calendar表新增自定义标识字段,可直接使用系统自带的name字段做匹配,将fetchXml中条件的new_calendarkey替换为name即可,需保证系统内日历名称和代码中传入的键值完全一致 - 要加空值兜底逻辑:如果方法返回空GUID,默认回退到系统配置的默认SLA日历,避免因找不到对应日历导致SLA计算流程报错
- 提前确认对应时区的日历已完成工作时间、假期规则配置,且插件运行账号拥有
calendar表的读取权限,避免权限不足导致查询失败 - 插件需按照SLA自定义计算的要求注册到对应消息步骤,保证覆写逻辑在SLA时间计算前执行
内容的提问来源于stack exchange,提问作者AjaV
相关产品推荐
相关产品推荐

