您可以组合一些变量来获得更复杂的结果。请参见按复杂性和用例组织的不同场景中使用变量的示例。
本文内容:
常见变量模式及其用例:
| 模式 | 用例 | 示例 |
|---|---|---|
{#variable}...{/variable} |
遍历条目 | {#markups}{name}{/markups} |
{#!variable}...{/} |
当变量为空时显示 | {#!amount}$0.00{/} |
{#variable}...{/}{#!variable}...{/} |
显示值或默认值 | {#previousAmount}{previousAmount}{/}{#!previousAmount}0{/} |
{variable | filter:"field":"value"} |
过滤数据 | {items | filter:"type":"SOV"} |
{variable | sumBy:"field"} |
计算总数 | {items | sumBy:"approved"} |
{#condition}...{/} |
条件显示 | {#amount!="0.00"}{amount}{/} |
{variable | groupItemsByXCO: 'type'} |
按变更单类型分组 | {items | groupItemsByXCO: 'COR'} |
如果您是新接触在文档模板中使用变量,请从这里开始。这些示例涵盖了适用于所有文档类型的基本概念。
您可以使用变量,并以表的形式(包含列和标题)显示数据。下面是一个语法示例:

使用打开部分变量(以 # 开头,例如 {#markups})和结束部分变量(以 / 结束,例如 {/markups})。
错误用法:

正确用法:

在打开和关闭变量之间,您可以列出所有必需的数据,如 {name} 或 {description}。

生成的文档中的结果:

场景:您在文档模板中使用了 {previousAmount} 和 {materialsStored} 之类的变量,但在生成文档时,某些列显示空白,而不是显示“$0”值。
若要在变量为空或空白时显示默认值,请使用具有以下模式的条件表达式:
{#variableName} {variableName} {/}{#!variableName}default_value{/}例如,若要在 {previousAmount} 为空白时显示“0”:
{#previousAmount} {previousAmount} {/}{#!previousAmount}0{/}此条件表达式的工作原理如下:
{#previousAmount} - 如果 previousAmount 有值,则显示该值{previousAmount} - 实际变量值{/} - 关闭第一个条件{#!previousAmount} - 如果 previousAmount 没有值(为空白/空)0 - 将“0”显示为默认值{/} - 关闭第二个条件您可以将此模式应用于要显示默认值而不是空白单元格的任何变量,例如:
{#materialsStored} {materialsStored} {/}{#!materialsStored}$0.00{/}{#currentAmount} {currentAmount} {/}{#!currentAmount}0{/}场景:您希望在合同文档中显示保留款百分比,但该字段可能为 null。如果它为 null,则需要回退到其他来源的值(例如,合同的保留款设置)。
使用三元表达式检查 null 并提供回退:
{contract.completedWorkRetentionPercent === null? contract.retention.completedWorkRetentionPercent : contract.completedWorkRetentionPercent}此表达式的工作原理如下:
contract.completedWorkRetentionPercent === null? - 检查字段是否为 nullcontract.retention.completedWorkRetentionPercent - 如果为 null,则使用此回退值: - 否则...contract.completedWorkRetentionPercent - 使用原始字段值当字段可能继承父设置的值,或者需要检查多个来源以获取某个值时,此模式非常有用。
这些示例按文档类型进行组织,以帮助您找到特定用例的相关解决方案。
自定义支付申请文档和电子表格的示例。
若要从支付申请中移除空行项目,请在表开头使用条件表达式 {#amount!="0.00"},并在行末尾使用 {/}。例如:

若要消除支付申请或合同中的小计,您可以采用 {#children.length===0}{xxx}{/} 格式输入付款行项目。例如:

场景:您已创建一个名为“留量转移”的变更单类型。

并且希望在 Excel 电子表格中看到这些留量的批准的业主变更。如何做到这一点?
为 Excel 电子表格中的列列出“业主变更单”。

将新类型应用于 OCO。

将名称与 Excel 电子表格中的类型匹配。

场景:您要在默认成本支付申请电子表格模板中创建一个新选项卡,该选项卡仅显示计划条目,而不显示小计金额。
若要在成本支付申请电子表格模板中添加一个不带小计的新选项卡,请使用以下变量模式:
{#children.length===0}{xxx}{/}此条件表达式可确保在生成的电子表格选项卡中仅显示没有小计的行项目。{xxx} 表示要为每个行项目包含的特定数据字段。
用例:当您希望为分包商提供一个包含各个工作条目而没有复杂的小计计算的干净视图时,该选项卡特别有用。
场景:您要在默认预算支付申请电子表格模板中创建新选项卡,该选项卡按 COR(变更单请求)对条目进行分组,而不显示各个成本条目详细信息。
例如,要将一个名为“按 COR 分组的可选详细信息”的新选项卡添加到预算支付申请电子表格模板,请使用以下变量模式:
{#payment.lineView.rootItems|groupItemsByXCO: 'COR'}{number}{/payment.lineView.rootItems|groupItemsByXCO: 'COR'}此变量按付款行项目的关联 COR 对它们进行分组,并且仅显示 COR 编号,而不显示基础成本条目详细信息。
主要特点:
自定义变更单文档(包括 RFQ、COR 和 OCO)的示例。
场景:您想要创建一个文档,使其包含在变更单的整个生命周期内添加的注释。
该示例将 {#rfq.comments} 显示为变量的打开标记,将 {/rfq.comments} 显示为关闭标记。其他相关变量必须介于这两个变量之间。
例如,包含以下注释部分的 RFQ:

使用以下方法将表添加到 Word 文档:

结果:

在文档模板中只需填写表的一行。软件将根据 Cost Management 中的数据构建包含指定信息的表。
按文档模板中主合同的价格一览表组织 COR 或 OCO。对于 COR,请使用以下模式:

对于 OCO,将 rco 替换为 oco。
场景:您正在创建一个变更单文档(例如 OCO),并且希望其中有两个单独的表。一个用于带小计的常规成本项目,另一个用于加价成本项目。您还想要添加总变更单定价。如何做到这一点?下面是文档中所用变量的示例:

若要显示关联的 COR 和 OCO 编号,请使用以下变量:
{this.costItem.corNumber}{this.costItem.ocoNumber}
结果:

自定义合同文档和价格一览表显示的示例。
场景:您想要创建一份合同,使其仅显示 SOV 子项的小计。您不希望父项对分包商可见。为此,请使用文档模板中的以下变量:

此外,您也不希望将“单位成本”和“金额”值显示为 $0。您可以将 $0 替换为“Included”一词。如何做到这一点?丰富已使用的变量:

生成的合同中的结果将如下所示:

若要在文档模板中引用预算代码和名称,请使用以下公式:

例如,当合同的价格一览表如下所示时:

显示的公式将生成以下结果:

这些示例演示了满足复杂文档自定义要求的复杂变量用法。
用于在文档中显示或隐藏特定数据的高级过滤方法。
您可以在生成文档时使用过滤器功能。例如,若要仅显示风险应急费用条目,请使用 {#payment.columnView.rootItems | filter:"name":"Risk Contingency"} 变量:

结果:

成员还可以将含有所有已获批 SCO 的原始价格一览表分成两个单独的工作表。
若要生成仅包含原始 SOV 的工作表,请使用以下变量:
{#payment.lineView.rootItems | filter:"associationType":"SOV"} {/payment.lineView.rootItems | filter:"associationType":"SOV"}若要生成仅包含已获批 SCO 的工作表,请使用以下变量:
{#payment.lineView.rootItems | filter:"number":"Change Orders"} {/payment.lineView.rootItems | filter:"number":"Change Orders"}场景:您希望在成本支付申请电子表格中为不同的 SCO 类型(例如,“业主指令”和“分包商变更”)创建单独的工作表。
用法 1:遍历具有特定 SCO 类型的 SCO 关联支付条目
将 filter 函数与 scoType 结合使用,以遍历特定类型的变更单行条目。向电子表格中添加一个具有以下变量模式的新选项卡:
{#payment.lineView.rootItems| filter:"number":"Change Orders"}{#children | filter:"scoType":"Owner Directive"}
... // loop in each SCO associated payment item
{/children | filter:"scoType":"Owner Directive"}{/payment.lineView.rootItems| filter:"number":"Change Orders"}这将首先过滤变更单根条目,然后遍历 SCO 类型与“业主指令”匹配的每个子条目。
用途 2:对具有特定类型的 SCO 关联支付条目的值求和
将 get 和 sumBy 函数与 scoType 结合使用,计算特定 SCO 类型的总数:
{payment.lineView.rootItems| filter:"number":"Change Orders" | get:"0.children" | filter:"scoType":"Owner Directive"|sumBy: "originalAmount"}这将返回类型为“业主指令”的所有变更单条目的原始金额之和。
场景:您要创建一个变更单文档,按成本类型细分成本条目,并根据预算代码段显示材料、人工、设备和分包商条目的单独表。
将 filter 函数与 "budgetCode.original":"includes" 结合使用,以按预算代码过滤成本条目。例如,若要仅显示预算代码包含“SUB”(分包商)的条目:
{#rco.costItems | filter: "budgetCode.original":"includes":"SUB"}
{index} {name} {description} {submitted} {pcoNo}
{/rco.costItems | filter: "budgetCode.original":"includes":"SUB"}若要为每种成本类型创建单独的部分,请创建具有不同过滤器值的多个表:
| 成本类型 | 过滤器值 |
|---|---|
| 材料 | "includes":"MAT" |
| 人工 | "includes":"LAB" |
| 设备 | "includes":"EQUIP" |
| 分包商 | "includes":"SUB" |

如果管理员不希望在生成的文档中显示应急费用,可以使用以下过滤器:

结果:

用于在文档中计算总数和执行数据聚合的高级方法。
sumBy 函数有助于聚合数据集中的值。
示例 1:计算每个 PCO 的常规成本条目已批准值的小计。
{#oco.pco}{regular | sumBy:'approved'}{/oco.pco}示例 2:计算每个 PCO 的所有成本条目已批准值的总计。
{#oco.pco}{this | getAll: "costItems" | sumBy: "approved"}{/oco.pco}示例 3:计算特定加价(例如,加价 1 + 加价 2)的组合总计。
将 filter 函数与 sumBy 和 add 一起使用,为选定加价创建小计:
{(oco.markups | filter: "name":"Markup1" | sumBy: "approved") | add: (oco.markups | filter: "name": "Markup2" | sumBy: "approved")}这将按名称过滤加价,对其批准的值求和,并将结果相加。使用此模式在文档模板中创建自定义小计行,例如“加价 1 和 2 小计”。

sumBy 函数特别有用。