使用自定义资源约束扩展 Universal Resource Scheduling

UniversalResourceScheduling是Dynamics365的核心组件,用于FieldService和ProjectServiceAutomation的资源调度。资源通过bookableresource实体表示,资源要求(msdyn_resourcerequirement)定义工作需求。系统利用约束进行匹配,包括内置和自定义约束,如区域和分支限制。自定义约束通过扩展检索要求约束API、筛选器面板和资源匹配API实现,允许更灵活的资源调度策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Universal Resource Scheduling 是计划引擎底层 Dynamics 365 Field Service 和 Project Service Automation,其自带丰富的资源匹配功能,可为作业预订适合的资源。 由于 Universal Resource Scheduling 解决方案自带 Field and Project Service,所以 Universal Resource Scheduling 可用于在 Dynamics 365 中计划任何工作流

资源、要求和约束

资源

Universal Resource Scheduling 的核心是资源 (bookableresource) 实体。

预订 (bookableresourcebooking) 记录在创建时,将与资源记录关联。

将通过属性或与其他实体之间的关系为资源记录及其关联的约束建模。

要求

Universal Resource Scheduling 中的另一个重要实体是资源要求 (msdyn_resourcerequirement) 实体。

资源要求记录要完成工作需要满足的要求。对于每个工作订单,系统都会创建一个相关要求。 一个工作订单可以有多个要求,或者有包含多个要求的要求组


要求会继承工作订单的属性,如名称、位置、持续时间等。 更新工作订单属性将更新要求属性。 也可以在进行安排之前手动编辑要求

资源约束表示为要求实体的属性或与其他实体之间的关系

约束

Universal Resource Scheduling 中自带的约束

约束匹配的工作方式 

1)约束实体

某些约束直接被指定为资源实体的属性,其他则通过关系定义。

约束应用第二个主实体时,需要关系。

2)约束属性包

用户在“筛选器”面板中选择值并选择“搜索”按钮后,将把这些值发送给资源匹配 API。 对于多值约束,“筛选器”面板中显示来自主实体区域和特征的数据,并将所选值包含到约束属性包中

3)汇总资源匹配流

  • 手动筛选。 “筛选器”面板 > 资源匹配 API

    1. 用户在“筛选”面板中添加约束
    2. 约束发送给资源匹配 API
    3. 将显示筛选后的资源列表
  • 要求筛选。 检索要求约束 API >“筛选器”面板 > 资源匹配 API

    1. 用户查找要求记录的可用性(从日程安排板内部或通过功能区中的“预订”按钮)。
    2. 将通过检索要求约束 API 检索约束并在“筛选器”面板中显示。
    3. 约束发送给资源匹配 API
    4. 将显示筛选后的资源列表

自定义约束

举例:

        对于资源而言,资源隶属于某个区域,但更多情况下,区域下还有分支,在调派资源时,我们往往需要根据资源隶属于某个分支来进行派工。

        接下来,将以"售后分支"作为示例方案,根据售后分支捕获要求记录。

主实体--售后分支

多对多关系---【售后分支-- 资源】

扩展性要点 

根据上面介绍的资源匹配流,下面是需要修改,自定义约束才能生效的扩展性要点:

①检索要求约束 API

        该 API 需要读取我们的售后分支属性,这样当用户查找要求的可用性时,将检索我们的新约束

②“筛选器”面板

        用户应该可以从“筛选器”面板中的语言记录列表中进行选择,以便筛选匹配的资源。

③资源匹配 API

        此 API 将把新的售后分支约束作为输入;它需要仅返回使用所选售后分支的资源

可扩展查询

在内部,检索要求约束(上面的①)和资源匹配 API(上面的 ③)使用 FetchXML 从 Dynamics 365 查询数据。 检索要求约束 API 发出多个查询以检索要求记录及其子约束(如要求特征等)。资源匹配 API 根据作为输入传递给它的资源约束动态构造正确的 FetchXML 查询,这样将从 Dynamics 365 仅返回匹配指定的 FetchXML 条件的资源记录。

为了支持可扩展的资源匹配,引入了通用FetchXml(UFX),UFX 向 FetchXML 添加了两项重要功能:

1) 多个结果集,即一个 UFX 查询可从多个实体返回结果

 2) 动态 FetchXML,即一个 UFX 查询可根据输入数据动态构造 FetchXML

可扩展筛选器布局和资源模板

自定义约束和 Universal Resource Scheduling 自带的约束一样,作为输入传递到资源匹配 API。

资源单元格通过可自定义的 Handlebars.js 模板呈现。 将把资源匹配 API 的结果提供给该模板。 因此,通过自定义资源匹配 API 执行的查询,可以在资源单元格中呈现自定义数据。

示例:使用自定义售后分支约束扩展 Universal Resource Scheduling

新建发布商

新建解决方案 

创建售后分支实体 

创建从资源到售后分支实体的多对多关系

 创建从要求实体到售后分支实体的关系

将现有资源要求实体添加到解决方案(如果显示“缺少必需组件”对话框,请勿包含必需组件。)

添加售后分支关联字段

更新要求主窗体 

在资源要求实体中,将现有信息窗体添加到实体的子组件中(如果显示“缺少必需组件”对话框,请勿包含必需组件。)

自定义日程安排板 

筛选器布局配置

control元素将向“筛选器”面板添加一个新控件。 下面是每个属性的说明:

accountdesc
type筛选器控件的类型。 combo控件显示一个下拉列表,其中包含可供选择的值
source下拉控件的值的源。 entity源显示下拉列表中的实体记录
key用于将所选值存储到约束属性包中的密钥。
inactive-state此实体的已停用statecode。 这用于从下拉列表中排除已停用的记录
label-id用于此控件的已本地化标签
entity将在下拉列表中显示此实体的记录
multi配置下拉列表,以便允许选择一条记录或多条记录

检索资源查询配置

“检索资源查询”配置是资源匹配 API 使用的一种UFX查询。 它将“筛选器”面板中输入的值作为输入采用,并自动构造正确的 FetchXML 以查找匹配的资源。


添加从 bookableresource 到 vg_branch的联接

<!-- vg_branch join -->
        <link-entity name="msdyn_resourceterritory" from="msdyn_resource" to="bookableresourceid" alias="vg_branch" link-type="outer" ufx:if="$input/vg_branches/bag">
    <filter>
    <condition attribute="statecode" operator="eq" value="0" />
    <condition attribute="vg_branchid" operator="not-null" />    
  </filter>
</link-entity>
<filter type="or">
  <condition ufx:if="$input/UnspecifiedBranch[. = 'true']" entityname="vg_branch" attribute="vg_branchid" operator="null" />
<condition ufx:if="$input/vg_branches/bag" entityname="vg_branch" attribute="vg_branchid" operator="in">
            <ufx:apply select="$input/vg_branches/bag">
              <value>
                <ufx:value select="@ufx-id" />
              </value>
            </ufx:apply>
          </condition>
</filter>

下面是每个 element 和 attribute 的说明:

accountdesc
link-entity创建到资源与语言实体之间的多对多关系的联接
ufx:if仅当此属性中的 XPath 表达式返回值,才发出此 FetchXML 元素 (link-entity)
attribute返回匹配的售后分支
filtercondition筛选多对多关系,以便仅显示匹配指定的售后分支 ID 的项
ufx:valueselect输出 select 属性中的 XPath 表达式的结果
ufx:applyselect为 select 属性中的 XPath 表达式返回的每个结果发出子 FetchXML 元素
value

包含售后分支记录的 ID

lang_order在名称为 lang_order 的 FetchXML 查询返回的每个资源中创建一个新属性。
ufx:select将此属性中的 XPath 表达式的结果分配给 lang_order 属性。 查询中前面检索的 lang_primary 和 lang_secondary 属性和 XPath iif 函数一起用于确定资源匹配顺序。
Resources重新分派 Resources 属性

更新日程安排助理筛选器布局

检索约束查询配置 

“检索约束查询”配置是检索要求约束 API 使用的一种UFX查询。它将( UI 中选择的)要求记录的 ID 作为输入采用,并返回要求记录及其所有子记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值