使用自定义资源属性自定义日程安排板

日程安排板可以进行自定义和扩展,以满足业务需求。 例如,资源信息、筛选器窗格中的字段或排序选项。

考虑以下自定义情形:

每个可预订资源都会产生基于各种要素的成本,例如资历和认证级别。 调度员想要查看其资源的总体成本,以及按成本进行筛选和排序。 在该场景中,系统不会使用准确的资源成本,而是使用介于 1(最低资源成本)到 10(最高资源成本)之间的相对成本分数。 我们在资源单元、筛选器面板和排序选项中使用范围。

第 1 步:将新属性添加到可预订资源实体

转到自定义>自定义系统>可预订资源>字段,并添加一个名为资源成本的新字段且架构名称为 tsp_resourcecost

使用数据类型选项集,并选择现有的选项集重要性级别以使用从 1 到 10 的值列表。

在您发布更改之前将新创建的字段添加到窗体。

第 2 步:创建或更新日程安排板

转到您要向其中添加新的资源成本属性的日程安排板。

第 3 步:修改资源单元格模板

资源成本指示符应显示于资源单元格模板中。 Font Awesome 可用于显示图标,例如 €、$、£。

HTML 首先绘制五个灰色图标作为背景,然后绘制黄色图标作为前景。 前景图标的数量会映射到资源成本的值。 例如,资源成本值 2 是 20%,所以五个黄色欧元图标中只有一个显示。

打开日程安排板设置,在其他下,创建一个自定义的资源单元模板

编辑资源单元格模板的位置屏幕截图。

将以下代码片段插入自定义资源单元格模板。 通过替换 fa-euro 来更改符号。

    <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'> 
			<div class="back-stars" style="color: #EEEEEE; position: relative; display: inline-block;">
				<i class="fa fa-euro" aria-hidden="true"></i>
				<i class="fa fa-euro" aria-hidden="true"></i>
				<i class="fa fa-euro" aria-hidden="true"></i>
				<i class="fa fa-euro" aria-hidden="true"></i>
				<i class="fa fa-euro" aria-hidden="true"></i>
				
				<div class="resourcecost" style="width: {{resourcecost}}0%; color: #FFBC0B; position: absolute; top: 0; left:0; display: inline-block; overflow: hidden;">
					<i class="fa fa-euro" aria-hidden="true"></i>
					<i class="fa fa-euro" aria-hidden="true"></i>
					<i class="fa fa-euro" aria-hidden="true"></i>
					<i class="fa fa-euro" aria-hidden="true"></i>
					<i class="fa fa-euro" aria-hidden="true"></i>
				</div>
			</div>
		</div>

        <div class='secondary-text ellipsis'>
            {{#if (eq (is-sa-grid-view) false) }}
            <div class='booked-duration'>{{BookedDuration}}<div class='fo-sch-clock'></div></div>
            <div class='booked-percentage'>{{BookedPercentage}}%</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>

备注

资源单元格模板不支持 Javascript。

第 4 步:修改筛选器布局

在此步骤中,我们在筛选和搜索资源时定义最大成本分数,并按成本分数进行排序。

在日程安排板选项卡设置中,转到筛选器布局并创建自定义模板。

将以下代码片段插入自定义筛选器布局模板。

    <?xml version="1.0" encoding="utf-8" ?>
    <filter>
    <controls>
    <control type="characteristic" key="Characteristics" label-id="ScheduleAssistant.West.Skills" />

	<control type="combo" source="optionset" key="ResourceCost" label-id="Resource Cost Limit" entity="bookableresource" attribute="tsp_resourcecost" multi="false">
    </control>

    <control type="combo" source="entity" key="Roles" inactive-state="1" label-id="ScheduleAssistant.West.Roles" entity="bookableresourcecategory" multi="true" />
    <control type="combo" source="entity" key="Territories" unspecified-key="UnspecifiedTerritory" label-id="ScheduleAssistant.West.Territories" entity="territory" multi="true" />
    <control type="combo" source="entity" key="OrganizationalUnits" label-id="SB_FilterPanel_OrganizationalUnitsFilter_Title" inactive-state="1" entity="msdyn_organizationalunit" multi="true" />
    <control type="combo" source="optionset" key="ResourceTypes" label-id="SB_FilterPanel_ResourceTypesFilter_Title" entity="bookableresource" attribute="resourcetype" multi="true">
      <data>
        <value id="2" />
        <value id="3" />
        <value id="4" />
        <value id="5" />
      </data>
    </control>
    <control type="combo" source="entity" key="Teams" label-id="SB_FilterPanel_TeamsFilter_Title" entity="team" multi="true" />
    <control type="combo" source="entity" key="BusinessUnits" label-id="SB_FilterPanel_BusinessUnitsFilter_Title" entity="businessunit" multi="true" />
    <control type="order" key="Orders" label-id="FilterControl_OrderLabel">
      <order name="name" entity="bookableresource" attribute="name" />

      <order name="resourcecost" entity="bookableresource" attribute="tsp_resourcecost" />

      <order name="proficiencyscore" entity="bookableresourcecharacteristic" attribute="ratingvalue" />
    </control>
    </controls>
    </filter>

第 5 步:修改查询

最后,我们修改实际的查询并包含新的筛选器。 在计划选项卡设置中,转到检索资源查询,编辑默认查询,然后复制整个代码。 然后,创建自定义模板并粘贴默认代码。 默认代码很长。 以下是要粘贴到现有资源查询中的代码片段。

<entity name="bookableresource"> 后面插入 <attribute name="tsp_resourcecost" alias="resourcecost" groupby="true"/>

the last </filter> tag of the <!-- Territory filter --> 后面,插入以下代码片段:

<filter type="or" ufx:if="$input/ResourceCost">
 <condition attribute="tsp_resourcecost" operator="le">
  <ufx:value select="$input/ResourceCost" attribute="value" />
 </condition>
</filter>

对资源查询“筛选器类型”进行代码编辑的屏幕截图。

第 6 步:测试您的新日程安排板

在日程安排板上,我们定义了最大成本系数 5 和基于成本的升序排序。

后续步骤