变量
在创建对象初始化规则时可选取使用变量。使用 VarDef 标记定义变量,然后使用 VarRef 标记引用变量。使用变量的主要原因是能够每次生成一个值,然后在设置的规则内多次使用该生成的值,或者是能够简化复杂的规则。
引用变量时 (使用 VarRef 标记) 可用的变量定义是由对象类型和适当的上下文分级所确定的。只有规则元素经过处理引用变量后,才会计算变量的值。此外,变量定义中的值不能通过计算正在评估的规则集中的另外一个值得出。
以下 XML 示例使用 VarDef 标记生成一个数值,然后使用 VarRef 标记将部件的名称和编号设置为该生成的数值:
<AttributeValues objType="wt.part.WTPart">
<VarDef id="GeneratedNumber" algorithm=
”com.ptc.windchill.enterprise.revisionControlled.server.impl.NumberGenerator”>
<Arg>{GEN:wt.enterprise.SequenceGenerator:WTPARTID_seq:10:0}</Arg>
</VarDef>
<AttrValue id="name" algorithm=”wt.rule.algorithm.StringConstant”>
<VarRef id="GeneratedNumber"/>
</AttrValue>
<AttrValue id="number" algorithm=”wt.rule.algorithm.StringConstant”>
<VarRef id="GeneratedNumber"/>
</AttrValue>
<AttrConstraint id="name"
algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">
<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>
</AttrConstraint>
<AttrConstraint id="number"
algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">
<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>
<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/>
</AttrConstraint>
</AttributeValues>
在此示例 XML 中,使用编号生成器算法设置 GeneratedNumber 变量。然后,使用该变量的值来设置 name 和 number 属性的值。
|
本示例假定示例中列出的约束已就位,这些约束不是出厂设置约束 (在这些约束下,界面中需要名称,因此不能被生成)。
|
以下是一个 XML 示例,该示例生成一个部件的编号,然后定义 GeneratedNumber 变量,将它的值设置为等于 number 属性的值。然后,将 name 属性设置为 GeneratedNumber 变量中的值:
<AttributeValues objType="wt.part.WTPart">
<AttrValue id="number" algorithm=
"com.ptc.windchill.enterprise.revisionControlled.server.impl.NumberGenerator">
<Arg>{GEN:wt.enterprise.SequenceGenerator:WTPARTID_seq:10:0}</Arg>
</AttrValue>
<VarDef id="GeneratedNumber" algorithm="wt.rule.algorithm.StringConstant">
< Attr id="number">
</VarDef>
<AttrValue id="name" algorithm=”wt.rule.algorithm.StringConstant”>
<VarRef id="GeneratedNumber"/>
</AttrValue>
.
.
.
</AttributeValues>
本示例无法将 name 和 number 属性设置为同一个值,因为即将定义的变量的值不能通过计算正在评估的规则集中的另外一个值得出。在这种情况下,在 VarDef 标记中标识的 number 属性的值来自之前缓存的 number 属性值 (如果有已缓存的值) 而不是来自为 number 属性指定的 AttrValue 标记在相同规则中所设置的值。