示例:使用自定义语言约束扩展 Universal Resource Scheduling
此分步指南是了解和自定义 Universal Resource Scheduling 中的资源匹配的配套指南
在此分步指南中,将使用 Language
约束扩展 Universal Resource Scheduling 资源。 假设一个组织希望按照他们所用语言筛选资源。 他们还希望根据作业所需语言捕获 Requirement
记录。 此项约束采用的模式类似内置 Territory
约束。 将使用新的主实体 Language
来存储资源可使用的不同语言。 然后可通过多对多关系实体将一个 Resource
记录与多个 Languages
关联。 在Requirement
实体中,我们将通过创建下面的两个查找属性来为其建模:Primary Language
和 Secondary Language
。 查找要求的可用资源时,将仅显示与 Primary Language
或 Secondary Language
关联的资源。
新建实体和关系
在此部分中,将为主 Language
实体创建新架构,然后使用相应关系将 Resource
和 Requirement
实体更新为新的 Language
实体。
新建发布商
在 Dynamics 365 中的“自定义”下,创建一个新的发布商
在“新建发布商”窗体中填写下面的详细信息:
字段 Value 显示名称 Language 姓名 语言 前缀 lang 单击“保存并关闭”
新建解决方案
在 Dynamics 365 中的“自定义”下,创建一个新的解决方案
在“新建解决方案”窗体中填写下面的详细信息:
字段 Value 显示名称 Language 姓名 Language 发布商 Language 版本 1.0.0.0 单击“保存”
创建语言实体
在语言解决方案中,创建一个新实体
在“新建实体”窗体中填写下面的详细信息:
字段 Value 显示名称 Language 复数名称 语言 客户 lang_language( lang_
前缀将自动填写并且为只读)单击“保存”
创建从资源实体到语言实体的多对多关系
在语言实体中,创建新的多对多关系
在“新建关系”窗体中填写下面的详细信息:
字段 Value 当前实体 显示选项 使用复数名称 其他实体 实体名称 可预订的资源 单击“保存并关闭”
关闭语言实体窗体
创建从要求实体到语言实体的关系
在语言解决方案中,将现有资源要求实体添加到解决方案(如果显示“缺少必需组件”对话框,请勿包含必需组件。)
在资源要求实体中,创建一个新字段
在“新建字段”窗体中填写下面的详细信息:
字段 Value 显示名称 主语言 数据类型 查找 目标记录类型 Language 单击“保存并关闭”
在资源要求实体中,创建一个新字段
在“新建字段”窗体中填写下面的详细信息:
字段 Value 显示名称 辅助语言 数据类型 查找 目标记录类型 Language 单击“保存并关闭”
更新要求主窗体
- 在资源要求实体中,将现有信息窗体添加到实体的子组件中(如果显示“缺少必需组件”对话框,请勿包含必需组件。)
- 在信息窗体中,使用字段资源管理器向该窗体添加两个新属性“主语言”和“辅助语言”,以便用户可以在创建要求时输入此信息
- 单击“保存”
- 单击“发布”
- 可关闭窗体编辑器
摘要
在上面的步骤中,创建了新的语言实体。 然后添加了资源和要求实体之间的新关系。 资源可以与多种语言关联,因为添加了语言与资源之间的多对多关系。 要求可以与两种语言关联,因为在指向新语言实体的要求实体上添加了两个查找属性。
添加数据
可使用“高级查找”向语言实体添加新记录。 然后可以将资源记录与新的语言记录关联,方法是打开语言记录,然后在导航栏中导航至语言关系。 对于要求记录,可填写要求窗体中的新“主语言”和“辅助语言”字段。
自定义日程安排板
若要使用新的语言约束在日程安排板中筛选资源,需要更新“检索资源查询”和“筛选器布局配置”记录。
筛选器布局配置
小费
对于下面的步骤,建议使用支持 XML 语法突出显示的文本编辑器来进行更改,然后将更改粘贴回 Universal Resource Scheduling 编辑器中。
筛选器布局配置是用于自定义“筛选器”面板布局的 XML 布局定义
备注
对于此练习,我们将从“筛选器”面板中删除 Universal Resource Scheduling 随附的所有默认筛选器,并添加“语言”作为唯一可用的筛选器。
<control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />
control
元素将向“筛选器”面板添加一个新控件。 下面是每个属性的说明:
姓名 | 说明 |
---|---|
type |
筛选器控件的类型。 combo 控件显示一个下拉列表,其中包含可供选择的值 |
source |
下拉控件的值的源。 entity 源显示下拉列表中的实体记录 |
key |
用于将所选值存储到约束属性包中的密钥。 |
inactive-state |
此实体的已停用statecode 。 这用于从下拉列表中排除已停用的记录 |
label-id |
用于此控件的已本地化标签 |
entity |
将在下拉列表中显示此实体的记录 |
multi |
配置下拉列表,以便允许选择一条记录或多条记录 |
筛选器布局:
<?xml version="1.0" encoding="utf-8" ?>
<filter>
<controls>
<control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />
</controls>
</filter>
创建一个新的语言板
若要隔离这些更改,请创建一个单独的全新日程安排板,然后实施更改,但是始终可以在默认日程安排板中进行这些更改,以便其他日程安排板可以自动继承这些更改。
- 在 Dynamics 365 中的顶部导航栏上,转至“资源计划”>“日程安排板”
- 在右上角,单击 + 号创建一个新的板
- 将新板命名为“语言”
- 单击对话框底部的“添加”。 将创建新板。
更新日程安排板筛选器布局
接下来,将创建一个新的配置记录,用于存储日程安排板使用的筛选器布局和查询,然后将新创建的日程安排板链接到新配置记录。 方法有多种,下面的最快:
- 在右上角,双击“语言”选项卡
- 向下滚动到“常规设置”>“其他设置”
- 找到“筛选器布局”字段,单击右侧按钮打开编辑器
- 使用上面的筛选器布局代码更新“值”字段,然后单击“另存为”。
- 在“名称”字段中输入“语言筛选器布局”,然后单击“保存”。 这将创建一个新的配置记录,并将此日程安排板链接到这个记录。
- 单击对话框底部的“应用”
板将重新加载,并在新布局中的左侧显示“筛选器”面板;只有“语言”筛选器可用。 还不能使用筛选功能,因为需要更新“检索资源查询”,才能利用新的筛选器。
检索资源查询配置
小费
对于下面的步骤,建议使用支持 XML 语法突出显示的文本编辑器来进行更改,然后将更改粘贴回 Universal Resource Scheduling 编辑器中。
“检索资源查询”配置是资源匹配 API 使用的一种 UFX 查询。 它将“筛选器”面板中输入的值作为输入采用,并自动构造正确的 FetchXML 以查找匹配的资源。
下面是添加到检索资源查询以便按照资源的语言进行匹配和排序的新片段。
添加从 bookableresource
到 lang_language
的联接
<link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_primary" link-type="outer" ufx:if="$input/Languages/bag[1]">
<attribute name="lang_languageid" alias="lang_primary" groupby="true" />
<filter>
<condition attribute="lang_languageid" operator="eq">
<ufx:value select="$input/Languages/bag[1]/@ufx-id" attribute="value" />
</condition>
</filter>
</link-entity>
<link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_secondary" link-type="outer" ufx:if="$input/Languages/bag[2]">
<attribute name="lang_languageid" alias="lang_secondary" groupby="true" />
<filter>
<condition attribute="lang_languageid" operator="eq">
<ufx:value select="$input/Languages/bag[2]/@ufx-id" attribute="value" />
</condition>
</filter>
</link-entity>
<link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_others" link-type="outer" ufx:if="$input/Languages/bag[position() > 2]">
<filter>
<condition attribute="lang_languageid" operator="in">
<ufx:apply select="$input/Languages/bag[position() > 2]">
<value>
<ufx:value select="@ufx-id" />
</value>
</ufx:apply>
</condition>
</filter>
</link-entity>
<filter type="or">
<condition entityname="lang_primary" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[1]" />
<condition entityname="lang_secondary" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[2]" />
<condition entityname="lang_others" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[position() > 2]" />
</filter>
将把“筛选器”面板中选择的值作为查询的输入进行传递,并在 XPath
$input
变量中可用。
检索资源查询使用 FetchXML 查询 Resource (bookableresource)
实体。 将使用 FetchXML link-entity
元素仅返回与“筛选器”面板中所选语言记录关联的资源。 若要支持显示匹配的语言和按主语言或辅助语言排序(后面的资源单元格模板中所述),我们将使用多个 link-entity
联接。
下面是每个 element
和 attribute
的说明:
姓名 | 说明 |
---|---|
link-entity |
创建到资源与语言实体之间的多对多关系的联接 |
ufx:if |
仅当此属性中的 XPath 表达式返回值,才发出此 FetchXML 元素 (link-entity ) |
attribute |
返回匹配的主语言或辅助语言 |
filter 和condition |
筛选多对多关系,以便仅显示匹配指定的语言 ID 的项 |
ufx:value 和select |
输出 select 属性中的 XPath 表达式的结果 |
ufx:apply 和select |
为 select 属性中的 XPath 表达式返回的每个结果发出子 FetchXML 元素 |
value |
包含语言记录的 ID |
确定资源的排序顺序
检索匹配资源之后,根据为每个资源分配的语言分配新的 lang_order
属性来确定其排序顺序。
<bag>
<lang_order ufx:select="iif(lang_primary and lang_secondary, 1, iif(lang_primary, 2, iif(lang_secondary, 3, 4)))" />
</bag>
下面是每个 element
和 attribute
的说明:
姓名 | 说明 |
---|---|
lang_order |
在名称为 lang_order 的 FetchXML 查询返回的每个资源中创建一个新属性。 |
ufx:select |
将此属性中的 XPath 表达式的结果分配给 lang_order 属性。 查询中前面检索的 lang_primary 和 lang_secondary 属性和 XPath iif 函数一起用于确定资源匹配顺序。 |
为结果排序
<Resources ufx:select="order(Resources, 'lang_order')" />
将按顺序处理 UFX 查询。 通过 FetchXML 检索资源之后,将把结果分配给 Resources
属性。 将根据前面添加的 lang_order
属性为结果排序,然后将排序后的结果重新分派给 Resources
属性。
下面是每个 element
和 attribute
的说明:
客户 | 描述 |
---|---|
Resources |
重新分派 Resources 属性 |
ufx:select |
将此属性中的 XPath 表达式的结果分配给 Resources 属性。 XPath order 函数用于根据其 lang_order 属性为 Resources 列表排序。 |
备注
Universal Resource Scheduling 随附的默认检索资源查询是一个支持 Universal Resource Scheduling 随附的所有资源约束的大型查询。 对于此体验,我们将仅使用一小部分默认查询,并且将“语言”添加为唯一筛选器。
<?xml version="1.0" encoding="utf-8" ?>
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<Resources ufx:source="fetch">
<fetch mapping="logical" aggregate="true">
<entity name="bookableresource">
<attribute name="bookableresourceid" alias="bookableresourceid" groupby="true"/>
<attribute name="name" alias="name" groupby="true"/>
<attribute name="calendarid" alias="calendarid" groupby="true"/>
<attribute name="resourcetype" alias="resourcetype" groupby="true"/>
<attribute name="msdyn_startlocation" alias="startlocation" groupby="true"/>
<!-- Language join -->
<link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_primary" link-type="outer" ufx:if="$input/Languages/bag[1]">
<attribute name="lang_languageid" alias="lang_primary" groupby="true" />
<filter>
<condition attribute="lang_languageid" operator="eq">
<ufx:value select="$input/Languages/bag[1]/@ufx-id" attribute="value" />
</condition>
</filter>
</link-entity>
<link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_secondary" link-type="outer" ufx:if="$input/Languages/bag[2]">
<attribute name="lang_languageid" alias="lang_secondary" groupby="true" />
<filter>
<condition attribute="lang_languageid" operator="eq">
<ufx:value select="$input/Languages/bag[2]/@ufx-id" attribute="value" />
</condition>
</filter>
</link-entity>
<link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_others" link-type="outer" ufx:if="$input/Languages/bag[position() > 2]">
<filter>
<condition attribute="lang_languageid" operator="in">
<ufx:apply select="$input/Languages/bag[position() > 2]">
<value>
<ufx:value select="@ufx-id" />
</value>
</ufx:apply>
</condition>
</filter>
</link-entity>
<filter type="or">
<condition entityname="lang_primary" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[1]" />
<condition entityname="lang_secondary" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[2]" />
<condition entityname="lang_others" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[position() > 2]" />
</filter>
<link-entity name="systemuser" from="systemuserid" to="userid" link-type="outer">
<attribute name="systemuserid" alias="systemuserid" groupby="true" />
<attribute name="entityimage_url" alias="userimagepath" groupby="true"/>
</link-entity>
<link-entity name="contact" from="contactid" to="contactid" link-type="outer">
<attribute name="contactid" alias="contactid" groupby="true"/>
<attribute name="entityimage_url" alias="contactimagepath" groupby="true"/>
</link-entity>
<link-entity name="account" from="accountid" to="accountid" link-type="outer">
<attribute name="accountid" alias="accountid" groupby="true"/>
<attribute name="entityimage_url" alias="accountimagepath" groupby="true"/>
</link-entity>
</entity>
</fetch>
<bag>
<imagepath ufx:select="accountimagepath | contactimagepath | userimagepath" />
<accountimagepath ufx:select="$null" />
<contactimagepath ufx:select="$null" />
<userimagepath ufx:select="$null" />
<lang_order ufx:select="iif(lang_primary and lang_secondary, 1, iif(lang_primary, 2, iif(lang_secondary, 3, 4)))" />
</bag>
</Resources>
<Resources ufx:select="order(Resources, 'lang_order')" />
</bag>
更新日程安排板检索资源查询
- 在右上角,双击“语言”选项卡
- 向下滚动到“常规设置”>“其他设置”
- 找到“检索资源查询”字段,单击右侧按钮打开编辑器
- 使用上面的检索资源查询代码更新“值”字段,然后单击“另存为”。
- 在“名称”字段中输入“语言资源查询”,然后单击“保存”。 这将创建一个新的配置记录,并将此日程安排板链接到这个记录。
- 单击对话框底部的“应用”
板将使用更新后的配置重新加载。 筛选现在将工作。 如果创建了语言记录并将其与资源记录关联,则现在可以按其关联的语言筛选资源。
摘要
在上面的步骤中,修改了“筛选器”面板,以便显示语言实体的筛选器控件。 还修改了检索资源查询,以便匹配与所选语言记录关联的资源。 当用户在筛选器空间中选择值并单击“搜索”时,将把这些值传递到查询中,而 FetchXML 查询仅仅返回匹配的资源。
自定义日程安排助理
需要自定义日程安排助理筛选器布局和检索约束查询配置,才能在日程安排助理中使用新的语言约束。
在日程安排板自定义项中,可以单独自定义每个板,而日程安排助理自定义项则不同,会影响所有使用日程安排助理的板。 日程安排助理可以特定于某个可安排类型,也可以适用于所有类型。 在此示例中,将针对所有类型自定义日程安排助手。
日程安排助理筛选器布局配置
小费
对于下面的步骤,建议使用支持 XML 语法突出显示的文本编辑器来进行更改,然后将更改粘贴回 Universal Resource Scheduling 编辑器中。
日程安排助理筛选器布局配置和日程安排板筛选器布局一样,定义“筛选器”面板中的控件布局。 由于日程安排助理使用的筛选器(如“开始时间”、“结束时间”、“持续时间”等)比日程安排板多,所以采用另外一种布局。
备注
对于此练习,我们将仅重用 Universal Resource Scheduling 中随附的日程安排助手筛选器布局配置内的一小组默认筛选器,并添加“语言”下拉列表作为唯一可用的筛选器。
要向布局添加的筛选器是上面的筛选器布局配置中添加的同一个筛选器。 需要其他控件才能修改日程安排助理搜索参数。
完整的日程安排助理筛选器布局
<?xml version="1.0" encoding="utf-8" ?>
<filter>
<controls>
<control type="twocolumn">
<control type="combo" source="optionset" key="Requirement/msdyn_worklocation" label-id="ScheduleAssistant.West.settingsform.WorkLocation" entity="msdyn_resourcerequirement" attribute="msdyn_worklocation">
<bind property="disabled" to="Requirement/InitialWorkLocation" operator="eq" value="690970002" />
<data>
<value id="690970000" />
<value id="690970001" />
<value id="690970002" />
</data>
</control>
<control type="duration" key="Requirement/msdyn_remainingduration" label-id="ScheduleAssistant.West.settingsform.AvailableDuration" />
</control>
<control type="distance" key="Requirement/Radius" label-id="ScheduleAssistant.West.settingsform.Radius" min="1">
<bind property="disabled" to="Requirement/msdyn_worklocation" operator="eq" value="690970002" />
</control>
<control type="datetime" key="Requirement/msdyn_fromdate" label-id="ScheduleAssistant.West.settingsform.StartDay">
<bind property="disabled" to="Requirement/RealTimeMode" operator="eq" value="true" />
<bind property="max" to="Requirement/msdyn_todate" operator="eq" />
</control>
<control type="datetime" key="Requirement/msdyn_todate" label-id="ScheduleAssistant.West.settingsform.EndDay">
<bind property="min" to="Requirement/msdyn_fromdate" operator="eq" />
</control>
<control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />
</controls>
</filter>
更新日程安排助理筛选器布局
- 在右上角,双击“语言”选项卡
- 在右上角,单击“打开默认设置”
- 滚动到“计划类型”部分,然后在左侧列表中选择“无”
- 找到“日程安排助理筛选器布局”字段,单击右侧按钮打开编辑器
- 使用上面的日程安排助理筛选器布局代码更新“值”字段,然后单击“另存为”
- 在“名称”字段中输入“语言日程安排助理筛选器布局”,然后单击“保存”。 这将创建一个新的配置记录,并将此日程安排板链接到这个记录。
- 单击对话框底部的“应用”
板将重新加载 接下来,需要更改检索约束查询,才能在日程安排助理中使用我们的新语言约束,所以要求上设置的语言是日程安排助理搜索的一部分。
检索约束查询配置
小费
对于下面的步骤,建议使用支持 XML 语法突出显示的文本编辑器来进行更改,然后将更改粘贴回 Universal Resource Scheduling 编辑器中。
“检索约束查询”配置是检索要求约束 API 使用的一种 UFX 查询。 它将( UI 中选择的)要求记录的 ID 作为输入采用,并返回要求记录及其所有子记录。
备注
Universal Resource Scheduling 随附的默认检索约束查询是一个支持 Universal Resource Scheduling 随附的所有要求约束的大型查询。 对于此体验,我们将仅使用一小部分默认查询,并且将“语言”添加为唯一筛选器。
<Languages ufx:select="lookup-to-list(Requirement/lang_primarylanguage, Requirement/lang_secondarylanguage)" />
将按顺序处理 UFX 查询。 检索约束查询使用 FetchXML 查询 Requirement (msdyn_resourcerequirement)
实体,并将结果(一个要求记录)分配给 Requirement
属性。 我们将向约束属性包添加一个新属性 Languages
用于把主语言和辅助语言这两个属性合并为一个实体列表 (EntityCollection)。 这是必需的,因为我们要在“筛选器”模板中将语言控件显示为记录列表。 还可以在“筛选器”模板中为这两个属性创建两个单独的控件。
下面是每个 element
和 attribute
的说明:
姓名 | 说明 |
---|---|
Languages |
在结果约束属性包中创建一个名称为 Languages 的新属性 |
ufx:select |
将此属性中的 XPath 表达式的结果分配给 Languages 属性。 将前面在查询中检索并在 Requirement 属性中可用的 lang_primarylanguage 和 lang_secondarylanguage 属性传递给 lookup-to-list XPath 函数,用于将多个 lookup 属性转换为一个 list (EntityCollection) |
检索约束查询:
<?xml version="1.0" encoding="utf-8" ?>
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<Requirement ufx:source="fetch" ufx:select="bag[1]">
<fetch top="1">
<entity name="msdyn_resourcerequirement">
<all-attributes />
<filter>
<condition attribute="statecode" operator="eq" value="0" />
<condition attribute="msdyn_resourcerequirementid" operator="eq">
<ufx:value select="$input/@ufx-id" attribute="value" />
</condition>
</filter>
</entity>
</fetch>
<bag>
<InitialWorkLocation ufx:select="msdyn_worklocation" />
</bag>
</Requirement>
<Languages ufx:select="lookup-to-list(Requirement/lang_primarylanguage, Requirement/lang_secondarylanguage)" />
</bag>
更新检索约束查询
- 在右上角,双击“语言”选项卡
- 在右上角,单击“打开默认设置”
- 滚动到“计划类型”部分,然后在左侧列表中选择“无”
- 找到“日程安排助理检索约束查询”字段,单击右侧按钮打开编辑器
- 使用上面的检索资源查询代码更新“值”字段,然后单击“另存为”。
- 在“名称”字段中输入“语言约束查询”,然后单击“保存”。 这将创建一个新的配置记录,并将此日程安排板链接到这个记录。
- 找到“日程安排助理检索资源查询”字段,然后选择前面为日程安排板自定义项创建的语言资源查询。
- 单击对话框底部的“应用”
板将使用更新后的配置重新加载。 日程安排助理筛选现在将工作。 如果创建了语言记录并将其与要求记录关联,现在就可以在日程安排板底部选择要求记录,单击“查找可用性”启动日程安排助理,然后仅查看与根据要求保存的语言匹配的资源。
资源单元格模板配置
小费
对于下面的步骤,建议使用支持 HTML 语法突出显示的文本编辑器来进行更改,然后将更改粘贴回 Universal Resource Scheduling 编辑器中。
资源单元格模板配置是用于在资源单元格中显示内容的图柄栏模板。 该模板可使用检索资源查询的输出。
我们将修改默认资源模板,以便在资源匹配主语言和辅助语言时显示绿色的 ✔✱ 指示符,在资源仅匹配主语言时显示绿色的 ✔ 指示符,在资源仅匹配辅助语言时显示黄色的 ✔ 指示符。
{{#if lang_primary}}
<span style='color:green;'>✔{{#if lang_secondary}} ✱{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>✔</span>
{{/if}}
将从我们在上面设置的自定义检索资源查询返回 lang_primary
和 lang_secondary
属性。 有关模板撰写语法的文档,请参阅图柄栏网站。
资源单元格模板:
<div class='resource-card-wrapper {{iif ResourceCellSelected "resource-cell-selected" ""}} {{iif ResourceUnavailable "resource-unavailable" ""}} {{iif IsMatchingAvailability "availability-match" ""}}'>
{{#if imagepath}}
<img class='resource-image' src='{{client-url}}{{imagepath}}' />
{{else}}
<div class='resource-image unknown-resource'></div>
{{/if}}
<div class='resource-info'>
<div class='resource-name primary-text ellipsis' title='{{name}}'>{{name}}</div>
<div class='secondary-text ellipsis'>
{{#if (eq (is-sa-grid-view) false) }}
<div class='booked-duration'>{{BookedDuration}}</div>
<div class='booked-percentage'>
{{BookedPercentage}}%
{{#if lang_primary}}
<span style='color:green;'>✔{{#if lang_secondary}} ✱{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>✔</span>
{{/if}}
</div>
{{/if}}
</div>
{{#if (eq (is-sa-grid-view) false) }}
<div class='matching-indicator'></div>
{{/if}}
</div>
{{#if (eq (is-sa-grid-view) false) }}
{{> resource-map-pin-template this }}
{{/if}}
</div>
更新资源单元格模板
- 在右上角,双击“语言”选项卡
- 在右上角,单击“打开默认设置”
- 滚动到“计划类型”部分,然后在左侧列表中选择“无”
- 找到“日程安排助理资源单元格模板”字段,单击右侧按钮打开编辑器
- 使用上面的资源单元格模板代码更新“值”字段,然后单击“另存为”。
- 在“名称”字段中输入“语言资源单元格模板”,然后单击“保存”。 这将创建一个新的配置记录,并将此日程安排板链接到这个记录。
- 单击对话框底部的“应用”
板将使用更新后的配置重新加载。 资源单元格现在将指示资源与“筛选器”模板中的语言约束的匹配情况。
摘要
在上述步骤中,我们修改了日程安排助手中的“筛选器”面板,以便显示“语言”实体的筛选器控件。 还修改了检索约束查询,以便查询与要求实体有关的新语言属性,并将其塑造为列表。 当用户萱蕚查找某个要求记录的可用性时,“筛选器”模板将显示捕获的语言约束。 将把“筛选器”面板中的值传递到检索资源查询,而 FetchXML 查询则仅返回匹配的资源。