ソリューション
既成のコンフィギュレーションとカスタマイズフックを使用してロジックを実装します。
前提となる知識
このタスクを実行するには、以下のことを理解している必要があります。
基本的な MPMLink と BOM 構造
Java に関連した基本的な開発
リソースバンドルファイルカスタマイズの管理
Windchill xconfmanager の概念
プロパティまたは JSON フォーマットの規則ファイルを使用して、変換の規則を設定できます。規則ファイルの詳細については、「規則ファイル」を参照してください。
ソリューションエレメント
テンプレートのフローを処理するメインクラス用の既成のコンフィギュレーションが <WT_ホーム>/codebase/com/ptc/windchill/mpml/xconfs/mpmlink.service.properties.xconf ファイルにあります。
コンフィギュレーションを以下に示します。
<Service context="default"
name="com.ptc.windchill.associativity.reconciliation.resolver.AbstractAddUsageResolver">
<Option cardinality="singleton" requestor="wt.part.WTPart"
serviceClass="com.ptc.windchill.mpml.reconciliation.resolver.MPMLinkAddedUsageDiscrepancyResolver"/>
</Service>
コンフィギュレーションを更新してカスタム委任を含めることができます。
既成のプロパティコンフィギュレーションが <WT_ホーム>/codebase/com/ptc/core/foundation/associativity/xconfs/associativity.properties.xconf ファイルで提供されています。
以下に示す既成のプロパティコンフィギュレーションは、最も近い共通の対応コンテキストにおける場合と同様に変換を実行するデフォルトの動作を提供します。
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" multivalued="," default=""/>
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPartUsageLink" multivalued="," default=""/>
これらの既成のプロパティは、WTPart の任意のインスタンスを下流構造上のあらゆる場所に、つまり制約なしで貼り付けることを可能にします。
これらのプロパティは部品の親子関係と部品でサポートされています。部品の親子関係が常に優先されます。部品の親子関係が有効な場合にのみ、部品のコンフィギュレーションが考慮されます。部品の親子関係の変換を制御しない場合、部品の親子関係の既成のプロパティコンフィギュレーションを維持することで、すべての親子関係が有効になります。
プロパティのフォーマットは <base_prefix>.<upstream_view>.<downstream_view>.<type_internal_name> です。プロパティの各キーについて以下の表で説明します。
エレメント
タイプ
説明
base_prefix
プロパティキーコンポーネント
プレフィックス com.ptc.windchill.associativity.reconciliation.addusage
は必須で、定数です。このプレフィックスが付いているプロパティだけがテンプレート追加のコンフィギュレーションで考慮されます。
upstream_view
プロパティキーコンポーネント
対応リンクの上流ビューコンテキストを構成するビューの内部名。例: design
このキーは対応する downstream_view コンフィギュレーションも必要とします。このキーはオプションです。
downstream_view
プロパティキーコンポーネント
対応リンクの下流ビューコンテキストを構成するビューの内部名。例: manufacturing
このキーは対応する upstream_view コンフィギュレーションも必要とします。このキーはオプションです。
type_internal_name
プロパティキーコンポーネント
変換に有効なタイプの内部名。キーに階層名が含まれていてはなりません。例: com.ptc.ElectricalPart
このキーは継承をサポートします。このため、スーパータイプに定義されている場合、明示的に定義されている場合を除き、関連するコンフィギュレーションがサブタイプに適用されます。
このキーは必須です。
上記のキーを使用したプロパティの設定例を以下に示します。
タイプを指定: com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart
タイプと上流ビューおよび下流ビューを指定: com.ptc.windchill.associativity.reconciliation.addusage.design.manfacturing.wt.part.WTPart
システムは同じ優先順位で親子関係と子の読み取りプロパティをサポートします。親子関係と子のすべてのプロパティがサポートされますが、場合によっては適用できないことがあります。
プロパティのキーごとに、key=value のペアのリストを定義できます。このペアはカスタマイズ可能であり、追加のオプションを追加して、委任で使用したり、カスタムロジックを使用して処理したりできます。既成のキーと値のペアを以下の表に示します。
エレメント
説明
transformOption
与えられたタイプを下流構造でどのように変換すべきかを指定します。サポートされているデフォルトの有効な値は addSamenewBranch、および newPart です。これらの値はインタフェース操作「貼り付け」「新規ブランチとして貼り付け」、および「新規部品として貼り付け」に相当します。
下流構造が存在する場合、内部で addExisting オプションが優先されます。指定しない場合、デフォルト値は addSame です。
この値は大文字と小文字が区別されます。
規則ファイルの使用例を以下に示します。
{
"sourceType": "wt.part.WTPart",
"transformOption": "newBranch"
},
プロパティファイルの使用例を以下に示します。
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" value="transformOption=newBranch"/>
この例では、タイプが WTPart である部品が新規ブランチとして下流構造に追加されます。
structureOption
変換されるノードの子に対して実行する操作を指定します。子を継承するか、子を再帰的に変換するか、子を継承しないことが可能です。
有効な値は 01、および 2 です。例: structureOption=0デフォルト値は 0 です。これらの値について以下で説明します。
0: 子を複製しません。
1: 子を複製しますが、変換しません。
2: 子を複製し、再帰的に変換します。
場合によっては、値を適用できないことがあります。たとえば、transformOptionaddSame である場合、structureOption は適用できません。
規則ファイルの使用例を以下に示します。
"sourceType": "wt.part.WTPart"
"transformOption": "newBranch",
"structureOption": "1",
プロパティファイルの使用例を以下に示します。
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" multivalued="," default=""/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" value="transformOption=newBranch"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" value="structureOption=1"/>
この例では、指定した部品が新規ブランチとして変換され、適用せずに複製されます。
attribute.<内部名> (プロパティファイル)
sourceAttributes (規則ファイル)
変換の有効性の制御に使用されるタイプの属性の内部名を指定します。サポートされる属性タイプは Global、Local、Alias、および Calculated です。
これは複数値プロパティであり、複数の属性を指定できます。これはオプションであり、指定しなかった場合、変換はそのタイプについてのみ検証されます。既成では、文字列比較が実行されます。
規則ファイルの使用例を以下に示します。
"sourceType": "wt.part.WTPart",
"sourceAttributes": ["AUA=yes"],
プロパティファイルの使用例を以下に示します。
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" value="attribute.AUA=yes"/>
この例では、属性 AUAYes である部品が下流構造の下に追加されます。
targetType
有効な上流部品を使用可能な下流タイプを指定します。指定したタイプが含まれている階層内のパスに有効のマークが付きます。値として、タイプの階層名ではなく、タイプの内部名を指定しなければなりません。
これはオプションです。指定しなかった場合、最も近い共通の対応コンテキストがデフォルトターゲットとして使用されます。
規則ファイルの使用例を以下に示します。
{
"targetType": "wt.part.WTPart",
"transformOption": "newBranch"
},
プロパティファイルの使用例を以下に示します。
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule2" value="targetType=wt.part.WTPart"/>
この例では、タイプが WTPart である下流部品の下に部品が新規ブランチとして追加されます。
targetAttribute.<内部名>
上流ノードの貼り付け先または変換先のターゲットノードを指定します。これにはプレフィックス targetAttribute が含まれます。
これはオプションです。指定しなかった場合、targetType が使用されます。リーフからルートに移動して、パス階層内の最初に一致したインスタンスで停止します。
規則ファイルの使用例を以下に示します。
[
"source.part.attribute1:String1",
"target.part.attribute2:String2"
],
プロパティファイルの使用例を以下に示します。
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" value="attributeMapping.rule1=Attribute1:String1:Attribute2:String2"/>
この例では、attribute1 の値が String1 である上流部品が、attribute2 の値が String2 である下流部品の下に追加されます。
doAndValidationForAttr
ソースまたはターゲットでの一致検索に複数の属性が定義されている場合に、一致の検索に AND または OR 操作を実行するかどうかを指定します。
デフォルトは true です。
規則ファイルの使用例を以下に示します。
"newAttributeMappings":[
[
"source.usage.Attribute1:true",
"target.part.CustomAttribute1:String1",
"doAndValidationForAttr": "true"]
],
"targetType": "wt.part.WTPart",
"transformOption": "newPart",
"skipAttributes":
[
"source:buy",
"Attribute2":"true"
]
プロパティファイルの使用例を以下に示します。
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" value="skipAttribute.Source=buy"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" value="skipAttribute.Attribute2=true"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" value="doAndValidationForAttr=true"/>
この例では、属性 Attribute2true に設定され、属性 Sourcebuy に設定されている部品が上流構造に存在する場合、その部品はスキップされ、下流には追加されません。
forceNewDownstreamCreation
下流ブランチまたは下流部品がすでに存在する場合に新規下流部品を作成するかどうかを指定します。デフォルト値は false です。
規則ファイルの使用例を以下に示します。
{
"sourceType": "wt.part.SoftType1",
"transformOption": "newPart",
"structureOption":"2",
"forceNewDownstreamCreation":"true",
"targetType": "wt.part.SoftType1"
}
プロパティファイルの使用例を以下に示します。
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" multivalued="," default=""/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" value="transformOption=newPart"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" value="structureOption=2"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" value="forceNewDownstreamCreation=true"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" value="targetType=wt.part.SoftType1"/>
この例では、タイプが wt.part.SoftType1 である上流部品が、タイプが wt.part.SoftType1 である下流部品の下に新規下流部品として変換されます。
doNotTransform
特定のタイプを変換するかどうかを指定します。これは、いくつかのタイプの部品で変換をスキップするが子部品は処理する場合に役立ちます。デフォルト値は false であり、そのタイプまたはそのサブタイプ (設定されている場合) を必ず変換します。
規則ファイルの使用例を以下に示します。
{
"sourceType": "org.rnd.PartSubType3",
"doNotTransform": "true"
},
プロパティファイルの使用例を以下に示します。
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.PartSubType3.rule1" value="doNotTransform=true"/>
この例では、タイプが PartSubType3 である部品は変換されません。
continueNavigationForReusedChildren
変換の一環として、子が再使用されて下流ブランチにそのまま継承される場合に、構造のナビゲーションを続行するかどうかを指定します。これは、addSame 操作を使用して親を変換するが、構造内ではノードに newBranch または newPart 操作を使用する場合に便利です。これによってパフォーマンスに影響が生じることがあります。
デフォルト値は false です。
規則ファイルの使用例を以下に示します。
{
"sourceType": "wt.part.WTPart",
"transformOption": "addSame",
"continueNavigationForReusedChildren":"true",
"targetType": "wt.part.WTPart"
}
プロパティファイルの使用例を以下に示します。
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" multivalued="," default=""/>
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" multivalued="," default="transformOption=addSame"/>
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" multivalued="," default="continueNavigationForReusedChildren=true"/>
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" multivalued="," default="targetType=wt.part.WTPart"/>
この例では、子部品がそのまま下流に継承された場合でも、部品構造がナビゲートされます。
useProcessPlanLogicEnabled
下流構造が存在しない場合に、部品に作成されているプロセス計画をサーチし、そのプロセス計画で指定されている上流ノードに関連付けられている下流構造を使用するかどうかを指定します。
規則ファイルの使用例を以下に示します。
{
"sourceType": "wt.part.SoftType1",
"useProcessPlanLogicEnabled":"true",
"targetType": "wt.part.SoftType1"
}
プロパティファイルの使用例を以下に示します。
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" multivalued="," default=""/>
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" multivalued="," default="useProcessPlanLogicEnabled=true"/>
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" multivalued="," default="targetType=wt.part.SoftType1"/>
この例では、上流部品に関連付けられているプロセス計画のオペレーションによって消費された子部品が下流構造に追加されます。これらの子部品に定義されているカスタム属性値を使用して、親部品が作成されます。
doNotTraverse
子を処理して変換するために、特定のタイプのノードをさらにスキャンするかどうかを指定します。これは、特定のノードでスキャンを停止し、その子をスキップする場合に役立ちます。デフォルト値は false であり、そのタイプまたはそのサブタイプを必ずスキャンします。
規則ファイルの使用例を以下に示します。
{
"sourceType": "org.rnd.PartSubType4",
"doNotTraverse": "true"
},
プロパティファイルの使用例を以下に示します。
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.PartSubType4.rule1" value="doNotTraverse=true"/>
この例では、タイプが PartSubType4 であるノードは変換されません。
attributeMapping.rule
下流構造の生成に使用されます。複数の規則を指定し、属性の内部名と値を使用して、上流の子属性を下流の親属性にマッピングできます。
attributeMapping.rule<integer>=up_attribute_internal_name:value:down_attribute_internal_name:value
このプロパティでは、targetType は必須です。また、対応する属性の値に基づいて構造を生成する必要がある場合、属性名をコロンで区切って指定します。
attributeMapping.rule<integer>=up_attribute_internal_name:down_attribute_internal_name
次に例を示します。
attributeMapping.rule1=lineNumber_value:10:lineNumber_value:40
attributeMapping.rule2=source:make:source:buy
attributeMapping.rule3=matchingAttr:matchingAttr
属性値を照合する範囲を指定することもできます。ソースタイプでのみその範囲が考慮されます。
次に例を示します。
attributeMapping.rule1=lineNumber_value:10>90:lineNumber_value:40, skipAttribute.lineNumber_value=20
attributeMapping.rule3=matchingAttr:A10>A90:matchingAttr:B10
newAttributeMapping (プロパティファイル)
newAttributeMappings (規則ファイル)
* 
attributeMapping.rule の代わりに newAttributeMapping を使用することをお勧めします。
上流の子の属性と下流の親の属性のマッピングに使用されます。属性の内部名と値を使用して複数の規則を定義し、必要な基準に従ってフィルタできます。このエレメントでは targetType が必須です。
ソース属性の構文は次のとおりです。
source.attributeLocation.attributeInternalName:attributeValue
ソース属性で有効な場所の値は、part、usage、occurrence です。1 つまたは複数の属性マッピングを実行できます。
ターゲット属性の構文は次のとおりです。
target.attributeLocation.attributeInternalName:attributeValue
ターゲット属性で有効な場所の値は part location です。
規則ファイルの使用例を以下に示します。
"newAttributeMappings": [
[
"source.occurrence.OccIBA:occv1",
"target.part.PartAttribute:Value1"
],
]
プロパティファイルの使用例を以下に示します。
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" value="newAttributeMapping.rule1.entry1=source.occurrence.OccIBA:occv1,newAttributeMapping.rule1.entry2=target.part.PartAttribute:Value1"/>
この例では、OccIBA の値が occv1 である部品のオカレンスが、PartAttribute の値が Value1 である部品の下に追加されます。
* 
attributeMapping.rule の代わりに newAttributeMapping を使用することをお勧めします。
skipAttribute.<内部名> (プロパティファイル)
skipAttributes (規則ファイル)
変換をスキップするタイプに定義されている属性の名前を指定します。これは複数のスキップ属性をサポートしています。
規則ファイルの使用例を以下に示します。
"skipAttributes":
[
"Attribute1:String1",
"Attribute2":"String2"
]
プロパティファイルの使用例を以下に示します。
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" value="skipAttribute.Attribute1=String1"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" value="skipAttribute.Attribute2=String2"/>
この例では、上流部品の Attribute1String1 に設定され、Attribute2String2 に設定されている場合、その部品はスキップされ、下流構造には追加されません。
範囲を指定することもできます。次に例を示します。
skipAttribute.lineNumber_value=20>90, skipAttribute.lineNumber_value=20
さらに、doAndValidationForAttr エレメントを skipAttribute とともに使用できます。
上記のキーを使用したプロパティの設定例を以下に示します。
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.CustomPart" multivalued="," default=""/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.CustomPart" value="transformOption=newBranch"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.CustomPart" value="structureOption=0"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.CustomPart" value="targetType=wt.part.WTPart"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.CustomPart" value="targetAttribute.phantom=true"/>
これは役に立ちましたか?