カスタマイズの例
このセクションの例では、新しく追加した属性が ESI RPC 応答に表示されるために ESI サービスで何が行われる必要があるかについてのみ説明します。ミドルウェアビジネスロジックで必要な変更や SAP で必要なやコンフィギュレーション設定については説明していません。ESI 応答で送信されるその他の属性に対応するための、ミドルウェアビジネスロジックのカスタマイズ方法やターゲット SAP システムの設定方法については、このガイドの関連セクションを参照してください。
10.1.2.1 追加属性がある部品のパブリッシング
追加属性は、モデル化属性、ソフト属性、または IBA のいずれかです。属性の名前を仮に standardPrice とします。この属性が ESI 応答で送信されるようにするには、以下の手順を実行します。
1. 「タイプおよび属性の管理」 UI を使用して standardPrice を WTPart にソフト属性として追加するか、IBA として追加します。あるいは、WTPart のソフトタイプ拡張にソフト属性として追加したり、モデル化属性として追加したりすることもできます (その場合、Windchill ESI プリファレンス「部品クラス」を編集して、WTPart 拡張クラスの完全修飾名を指定する必要があります)。
2. ESI 応答メタ情報ファイルのコピーを作成し、以下で説明するようにそのコンテンツを修正します。
<esi:Map id="ESINewPart">
<esi:attributeMapping sourceAttribute="obid">ObjectID</esi:attributeMapping>

<esi:attributeMapping sourceAttribute="iterationInfo.identifier.iterationId">Iteration</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="PreviousVersion">PreviousVersion</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="standardPrice">StandardPrice</esi:attributeMapping>
</esi:Map>
<esi:MapInformation id="ESIPartInfo">
<esi:typedef>wt.part.WTPart</esi:typedef>
<esi:elementMetaName>Part</esi:elementMetaName>
<esi:keyAttribute>Number</esi:keyAttribute>
<esi:mapRef>ESINewPart</esi:mapRef>
</esi:MapInformation>
上記でハイライトされている部分からわかるように、Map エレメントと MapInformation エレメント (id 属性の値として "ESIPart" と "ESIPartInfo" を持つ) に変更を加える必要があります。Map エレメントの id 属性は修正後の値に設定され、属性 standardPrice 用の新しい attributeMapping エレメントが追加されています。さらに、関連する MapInformation エレメントの mapRef エレメントの値が、Map エレメントの id 属性の修正後の値に設定されています。
* 
Map エレメントに変更を加えた場合、その id 属性の値も変更する必要があります。また、新しい属性 (standardPrice など) を追加したことで WTPart の新しい拡張が作成された場合、そのタイプの完全修飾名を MapInformation エレメントの typedef エレメントの値として指定する必要があります。ESI 応答メタ情報ファイルを修正する方法については、ESI 応答メタ情報ファイルの修正のセクションを参照してください。
3. 「配布を管理」 UI (「サイト」 > 「ユーティリティ」または「組織」 > 「ユーティリティ」の下に表示) を使用して、部品のパブリッシング先となる配布ターゲットの「配布ターゲットを編集」 UI を開きます。「ESI 応答メタ情報のファイルパス」フィールドを、手順 (ii) で修正したファイルに設定します。「OK」をクリックして配布ターゲットを保存します。編集後のターゲットをパブリッシング対象の部品に関連付けます (まだ関連付けられていない場合)。
(属性 standardPrice が必要な値に設定された状態で) 部品をパブリッシングすると、手順 (iii) で編集した配布ターゲットに対する ESI 応答で、新しく追加した属性 StandardPrice が送信されます。部品が初めてパブリッシングされた場合、応答の <AddedParts> セクションの <Part> エレメント内に子 XML エレメント <StandardPrice> が表示されます。明らかに、前述のユースケースは単に応答メタ情報ファイルの修正を必要としているだけで、その意味ではカスタマイズは必要ありません。
* 
応答の <Part> エレメント内における <StandardPrice> エレメントの位置は、(応答メタ情報ファイルの) Map エレメントのどこに新規エントリが追加されるかによって異なります。たとえば、上記の例に示すように Map エレメントの最後のエントリとして追加された場合、<StandardPrice> は応答の <Part> エレメント内の最後の子エレメントとして表示されます。
WTPart のソフトタイプ (モデル化された) 拡張バージョンをパブリッシングする場合、WTPart オブジェクトと比較して拡張バージョンに異なる属性セットをパブリッシングする必要がある場合にのみ、(上記の手順 ii で説明したように) ESI 応答メタ情報ファイルは変更を必要とします。詳細については、ESI 応答情報ファイルを修正する際の注意事項のセクションを参照してください。
追加情報がある部品のパブリッシング
属性として WTPart オブジェクトに存在しない追加情報を ESI 応答の <Part> エレメントで送信することがあります (その部品がアセンブリであるかどうかを示す <IsAssembly> という名前の子 XML エレメントなど)。この子エレメントが ESI 応答に表示されるためには、以下の手順を実行する必要があります。
1. ESI 応答メタ情報ファイルのコピーを作成し、以下で説明するようにそのコンテンツを修正します。
<esi:Map id="ESINewPart">
<esi:attributeMapping sourceAttribute="obid">ObjectID</esi:attributeMapping>

<esi:attributeMapping sourceAttribute="isAssembly">IsAssembly</esi:attributeMapping>
</esi:Map>
<esi:MapInformation id="ESIPartInfo">
<esi:typedef>wt.part.WTPart</esi:typedef>
<esi:elementMetaName>Part</esi:elementMetaName>
<esi:keyAttribute>Number</esi:keyAttribute>
<esi:mapRef>ESINewPart</esi:mapRef>
</esi:MapInformation>
ESI 応答メタ情報ファイルのコンテンツを修正する方法については、ESI 応答メタ情報ファイルの修正のセクションを参照してください。
2. クラス com.ptc.windchill.esi.esipart.ESIWTPartRenderer の拡張を作成し、以下の手順に従って adjustPartElement() メソッドをオーバーライドします。
protected Element adjustPartElement(Element element, String group, WTPart part, Eff[] effs, Collection targets)
throws ESIRendererException { boolean isAssem;
try {
isAssem = new BOMUtility().isBom(part);
}
catch(WTException wte) {
ESILogger.debug("Exception while invoking isBom() for part: " + part.getNumber());
throw new ESIRendererException(wte);
}
Att att = element.getAtt(“IsAssembly”);
if(att != null && (att.getValue() == null || att.getValue().toString().trim().equals(“”)))
{
att.setValue(String.valueOf(isAssem));
}
return element;
}
3. 「配布を管理」 UI を使用して、部品のパブリッシング先となる配布ターゲットの「配布ターゲットを編集」 UI を開きます。「ESI 応答メタ情報のファイルパス」フィールドを、手順 (1) で修正したファイルに設定します。「OK」をクリックして配布ターゲットを保存します。編集後のターゲットをパブリッシング対象の部品に関連付けます (まだ関連付けられていない場合)。
4. ファイル <Windchill>\codebase\com\ptc\windchill\esi\conf\esi.service.properties.xconf を開き、以下のエントリを見つけます。
<Option cardinality="duplicate" requestor="wt.part.WTPart
serviceClass="com.ptc.windchill.esi.esipart.ESIWTPartRenderer"/>
上記のエントリを編集して、serviceClass 属性の値として (手順 (2) で作成した) ESIWTPartRenderer の拡張の完全修飾名を指定します。詳細については、ESIWTPartRendererのセクションを参照してください。
5. 手順 (4) で行った変更が適切に反映されるように、Windchill シェルからコマンド xconfmanager –p を実行します。メソッドサーバーを再起動します。部品をパブリッシングすると、<IsAssembly> エレメントが ESI 応答で送信されるようになります。このユースケースでは、WTPart オブジェクトの属性として存在しない情報、つまり Query-Objects Webject を使用してフェッチできない情報を送信する必要があるので、部品レンダラーをカスタマイズする必要があります。
ヘッダー部品に追加属性があるアセンブリのパブリッシング
この例では、セクション 10.1.2.1 で説明したものと同じ手順に従う必要がありますが、手順 (ii) で示されている応答メタ情報ファイルの Map エレメントと MapInformation エレメントを BOM ヘッダー用の値に置き換えます。つまり、id 属性として値 BOMHeader を持つ Map エレメントは新しい attributeMapping エレメントを持ち、Map エレメントの id 属性は修正後の値 (NewBOMHeader など) を持ち、関連する MapInformation エレメントの mapRef エレメントはこの修正後の値を持ちます。また、アセンブリを初めてパブリッシングしたときに、応答の <AddedBOMs> セクションの <BOMHeader> エレメントに (追加した属性に対応する) 新しい子 XML エレメントが表示されます。
追加情報があるアセンブリのパブリッシング
この場合も、この例では、セクション 10.1.2.2 で説明したものと同じ手順に従う必要がありますが、手順 (i) で示されている応答メタ情報ファイルの Map エレメントと MapInformation エレメントをそれぞれ値 BOMHeader および BOMHeaderInfo に置き換えます。また、Java クラス com.ptc.windchill.esi.bom.ESIBOMHeaderRenderer を拡張し、以下のメソッドをオーバーライドします。
protected Element adjustElement( Element element, String group, WTPart part, Eff[] effs, Collection targets ) throws ESIRendererException また、以下の ESI サービスプロパティエントリを編集します。
<Option cardinality="duplicate" requestor="wt.part.WTPart" selector="BOMHEADER" serviceClass="com.ptc.windchill.esi.bom.ESIBOMHeaderRenderer"/>
* 
上記のエントリを編集して、serviceClass 属性の値として ESIBOMHeaderRenderer の拡張の完全修飾名を指定します。このプロパティを通常の方法で適用してメソッドサーバーを再起動します。
アセンブリをパブリッシングすると、必要な追加情報が ESI 応答で送信されるようになります。これは、ESI 応答の <BOMHeader> エレメント内に、新しく追加された子 XML エレメントとして表示されます。
WTPartUsageLink に追加属性があるアセンブリのパブリッシング
この例では、アセンブリ部品を特定の部品マスターにリンクする WTPartUsageLink オブジェクトに追加されたソフト属性をパブリッシングします。ソフト属性の名前を仮に color とします。この属性が ESI 応答で送信されるようにするには、以下の手順を実行します。
i. 通常の方法である「タイプおよび属性の管理」 UI を使用して、WTPartUsageLink にソフト属性として color を追加します。
ii.ESI 応答メタ情報ファイルのコピーを作成し、以下で説明するようにそのコンテンツを修正します。

<esi:Map id="NewBOMComponent">
<esi:attributeMapping sourceAttribute="PartMasterID">ObjectID</esi:attributeMapping>

<esi:attributeMapping sourceAttribute="PartUsageLink.ComponentId">ComponentId</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="xxxx">IsChildPhantom</esi:attributeMapping>

<esi:attributeMapping sourceAttribute="color">Color</esi:attributeMapping>
</esi:Map>
<esi:MapInformation id="BOMComponentInfo">
<esi:typedef>wt.part.WTPartUsageLink</esi:typedef>
...
<esi:mapRef>NewBOMComponent</esi:mapRef>
</esi:MapInformation>
上記でハイライトされている部分からわかるように、Map エレメントと MapInformation エレメント (id 属性の値として "BOMComponent" と "BOMComponentInfo" を持つ) に変更を加える必要があります。Map エレメントの id 属性は修正後の値に設定され、属性 color 用の新しい attributeMapping エレメントが追加されています。さらに、関連する MapInformation エレメントの mapRef エレメントの値が、Map エレメントの id 属性の修正後の値に設定されています。
iii.「配布を管理」 UI (「サイト」 > 「ユーティリティ」または「組織」 > 「ユーティリティ」の下に表示) を使用して、アセンブリのパブリッシング先となる配布ターゲットの「配布ターゲットを編集」 UI を開きます。「ESI 応答メタ情報のファイルパス」フィールドを、手順 (ii) で修正したファイルに設定します。「OK」をクリックして配布ターゲットを保存します。編集後のターゲットをパブリッシング対象のアセンブリ (およびそのコンポーネント部品) に関連付けます (まだ関連付けられていない場合)。
(各コンポーネントで属性 color が必要な値に設定された状態で) アセンブリをパブリッシングすると、ESI 応答で、新しく追加した属性 Color が送信されます。アセンブリが初めてパブリッシングされた場合、応答の <AddedBOMComponents> セクションの <BOMComponent> エレメント内に子 XML エレメント <Color> が表示されます。明らかに、前述のユースケースは単に応答メタ情報ファイルの修正を必要としているだけで、その意味ではカスタマイズは必要ありません。
* 
ESI 応答の <BOMComponent> エレメント内における <Color> エレメントの位置は、応答メタ情報ファイルの Map エレメントのどこに新規エントリが追加されるかによって異なります。
コンポーネント部品に関する追加情報があるアセンブリのパブリッシング
追加情報を ESI 応答の <BOMComponent> エレメントで送信する必要が生じることがあります (そのコンポーネント部品が最終品目であるかどうかを示す子エレメント <IsEndItem> など)。これを行うには、以下の手順を実行します。
i. 応答メタ情報ファイルのコピーを作成し、以下で説明するようにそのコンテンツを修正します。
<esi:Map id="NewBOMComponent">
<esi:attributeMapping sourceAttribute="PartMasterID">ObjectID</esi:attributeMapping>

<esi:attributeMapping sourceAttribute="PartUsageLink.ComponentId">ComponentId</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="xxxx">IsChildPhantom</esi:attributeMapping>

<esi:attributeMapping sourceAttribute="isEndItem">IsEndItem</esi:attributeMapping>
</esi:Map>
<esi:MapInformation id="BOMComponentInfo">
<esi:typedef>wt.part.WTPartUsageLink</esi:typedef>
...
<esi:mapRef>NewBOMComponent</esi:mapRef>
</esi:MapInformation>
ii.クラス ESIBOMComponentRenderer の拡張を作成し、メソッド adjustElement(Element, String, PartUsageInfo, Collection) を以下のようにオーバーライドします。
protected Element adjustElement(Element elem, String group, PartUsageInfo pui, Collection targets )
throws ESIRendererException { Att att = elem.getAtt(“IsEndItem”);
if(att != null && (att.getValue() == null || att.getValue().toString().trim().equals(NULL_STRING)))
{
boolean endItem = pui.pui.getUses().isEndItem();
String endItemAsStr = String.valueOf(endItem);
att.setValue(endItemAsStr);
}
return elem;
}
iii.「配布を管理」 UI (「サイト」 > 「ユーティリティ」または「組織」 > 「ユーティリティ」の下に表示) を使用して、アセンブリのパブリッシング先となる配布ターゲットの「配布ターゲットを編集」 UI を開きます。「ESI 応答メタ情報のファイルパス」フィールドを、手順 (i) で修正したファイルに設定します。「OK」をクリックして配布ターゲットを保存します。編集後のターゲットをパブリッシング対象のアセンブリ (およびそのコンポーネント部品) に関連付けます (まだ関連付けられていない場合)。
iv.ファイル <Windchill>\codebase\com\ptc\windchill\esi\conf\esi.service.properties.xconf を開き、以下のエントリを見つけます。
<Option cardinality="duplicate" requestor="wt.part.WTPart" selector="BOMCOMPONENT" serviceClass="com.ptc.windchill.esi.bom.ESIBOMComponentRenderer"/>
上記のエントリを編集して、serviceClass 属性の値として (手順 (ii) で作成した) ESIBOMComponentRenderer の拡張の完全修飾名を指定します。詳細については、セクション 3.6.3.1 を参照してください。
v. 手順 (iv) で行った変更が適切に反映されるように、Windchill シェルからコマンド xconfmanager -p を実行します。メソッドサーバーを再起動します。
アセンブリをパブリッシングすると、<IsEndItem> エレメントが ESI 応答で送信されるようになります。このユースケースでは、WTPartUsageLink オブジェクトの属性として存在しない情報、つまり Query-Objects Webject を使用してフェッチできない情報を送信する必要があるので、BOM コンポーネントレンダラーをカスタマイズする必要があります。
アセンブリ部品の作業版数に設定されているものとは異なる親子関係を持つアセンブリのパブリッシング
BOM トランスフォーマを使用してアセンブリ部品の作業版数に設定されている親子関係の値をアセンブリのパブリッシング時にオーバーライドできます。このためには以下の手順を実行する必要があります。
i. Windchill ESI プリファレンス「ビューと配布ターゲットのマッピング」を、アセンブリのパブリッシング先となる配布ターゲットに Windchill ビューを関連付ける値に設定します。たとえば、アセンブリが設計ビューで作成され、Number 属性の値が 00001 である配布ターゲットにパブリッシングする場合、このプリファレンスを Design:00001 に設定します。
ii.Windchill ESI プリファレンス「ビューと BOM タイプのマッピング」を、必要な BOM 親子関係の値に Windchill ビューを関連付ける値に設定します。たとえば、アセンブリをエンジニアリングアセンブリとしてパブリッシングする場合、このプリファレンスを Design:Engineering に設定します。
* 
アセンブリがサイトにあるか組織内にあるかに応じて、サイトまたは組織でこれらのプリファレンスを設定できます。
iii.番号 00001 の配布ターゲットを対象のアセンブリに関連付けて、このアセンブリをリリースします。
* 
配布ターゲットの「コンテキストのデフォルト」属性の値が「はい」に設定されている場合、(i) で説明した設定によって、ターゲットはアセンブリ部品に自動的に関連付けられます。
上記の結果として、リリース済みアセンブリの ESI 応答の Usage エレメントのコンテンツからわかるように、アセンブリはエンジニアリングアセンブリとして送信されます。送信された値によって、BOM トランスフォーマを使用してアセンブリ部品の作業版数に設定されているその他の BOM 親子関係の値がすべてオーバーライドされることを覚えておくことが重要です。
SAP での同じプラントへのアセンブリの複数の異なる親子関係のパブリッシング
SAP で同じプラントにアセンブリの複数の異なる親子関係 (エンジニアリングと生産など) をパブリッシングする必要が生じることがあります。このためには以下の手順を実行する必要があります。
i. 「新規配布ターゲット」 UI を使用して、SAP 配布ターゲットを作成し、その番号属性を 00001 などに設定し、プラント属性を 1100 に設定します (ここで、1100 はターゲット SAP システムでの有効なプラント名)。配布ターゲットのその他の属性を適切に設定します。
ii.2 つ目の SAP 配布ターゲットを作成し、その番号属性を 00002 などに設定します。SAP システムに関連するその他の属性 (プラント、システム ID、クライアントなど) を、手順 (i) で作成したターゲットとまったく同じ値に設定します。
iii.Windchill ESI プリファレンス「ビューと配布ターゲットのマッピング」を「Design:00001,Manufacturing:00002」に設定します。
iv.Windchill ESI プリファレンス「ビューと BOM タイプのマッピング」を「Design:Engineering,Manufacturing:Production」に設定します。
v. 配布ターゲット 00001 と 00002 の両方をアセンブリ (およびその構成部品) に関連付けて、アセンブリをリリースします。
上記の結果として、アセンブリはエンジニアリング BOM として番号 00001 の配布ターゲットに送信され、生産 BOM として番号 00002 の配布ターゲットに送信されます。ただし、両方のターゲットが SAP の同じプラントを指しているので、ミドルウェアビジネスロジックによって、最終的にアセンブリの両方の親子関係が同じプラントにパブリッシングされます。
* 
ここでは、両方の配布ターゲット (00001 と 00002) を関連付けることができるように、アセンブリとその構成部品が Windchill の設計ビューで作成されていることを前提としています。
これは役に立ちましたか?