変数
オブジェクト初期化規則を作成する際、変数を使用できます。VarDef タグを使用して変数を定義し、VarRef タグを使用してその変数を参照します。変数を使用する主な理由は、値を 1 回だけ生成すれば、設定した規則内でその値を何度も使用できることです。複雑な規則も簡素化できます。
変数の参照時 (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 変数を設定しています。その後、この変数の値を使用して、名前属性と番号属性両方の値を設定しています。
* 
このサンプルは、サンプル内に列記されている制約を前提としています。これらは既成の制約ではありません (インタフェースで名前が必要であり、生成されません)。
以下の XML サンプルでは、部品の番号を生成し、GeneratedNumber 変数を定義して、その値に番号属性の値を設定します。さらに、名前属性として 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>
このサンプルでは、名前属性と番号属性に同じ値が設定されません。定義する変数の値を、評価対象となる規則セット内の別の値の計算から導出できないためです。この場合、VarDef タグで指定した番号属性の値は、以前にキャッシュした番号属性値から取得されます (この値がキャッシュされている場合)。同じ規則の番号属性を対象とする AttrValue タグによって設定された値ではありません。
これは役に立ちましたか?