Windchill ESI Java コードの拡張
バックグラウンド
Windchill ESI サービスの機能は Info*Engine タスクと Java クラスを使用して実装されます。これらのタスクとクラスの詳細については、このドキュメントの「Windchill ESI Services のモジュール」のセクションを参照してください。これらのサービスは、Windchill Customization Guide に記載されている Windchill Information Modeler を使用して拡張できます。
Windchill サービスのいくつかの主要な機能は、Windchill Information Modeler を使用せずに簡単にカスタマイズすることもできます。次のカスタマイズメカニズムが提供されています。
VDB ビルダー
Windchill ESI 応答は、Info*Engine 仮想データベース (VDB) のコンテンツから Info*Engine の toXML API によって生成された XML ドキュメントです。Info*Engine VDB の詳細については、Info*Engine User's Guide を参照してください。Windchill ESI サービスは、ESI 応答出力 XML が正しくフォーマットされるように VDB を構造化するクラスのセットを提供します。VDB ビルダー (カスタマイズに関連するものを含む) の詳細については、このドキュメントの「VDB ビルダー」のセクションを参照してください。
複数のレンダラー
レンダラーは、Windchill オブジェクトを処理し、Windchill ESI VDB ビルダーによって管理およびフォーマットされる Info*Engine エレメントオブジェクトにそれらのオブジェクトを変換するオブジェクトです (このドキュメントの「VDB ビルダー」のセクションを参照)。Windchill ESI サービスは次のレンダラーを提供します。
レンダラークラス
レンダリングされるオブジェクト
ESIRenderer
なし - これは以下で説明するクラス
BasicESIRenderer によって実装されるインタフェースです。
BasicESIRenderer
なし - これは以下にリストされているすべてのレンダラークラスの抽象基本クラスとして機能します。
ESIAlternateUnitOfMeasureRenderer
AlternateUnitOfMeasure (部品マスター、プロセス計画マスターなどの AlternateUnitAssignable オブジェクトの代替測定単位情報が格納される)
ESIWTChangeOrder2Renderer
WTChangeOrder2 およびすべての変更対象オブジェクト
ESIECNHeaderRenderer
WTChangeOrder2
ESIBOMRenderer
Windchill 製品構造
ESIBOMHeaderRenderer
特定の BOM アセンブリを表す Windchill 部品/リソース
ESIBOMSubordinateRenderer
なし - これはクラス ESIBOMComponentRenderer、ESISubstituteRenderer、および ESIReferenceDesignatorRenderer の抽象基本クラスとして機能します
ESIBOMComponentRenderer
PartUsageInfo オブジェクト (WTPartUsageLink オブジェクトの詳細を表す)
ESISubstituteRenderer
PartUsageInfo オブジェクト (WTPartSubstituteLink オブジェクトの詳細を表す)
ESIReferenceDesignatorRenderer
PartUsageInfo オブジェクト (UsesOccurrence オブジェクトの詳細を表す)
ESIWTPartRenderer
WTPart と関連 WTPartMaster、および WTPart オブジェクトに関連付けられている WTPartAlternateLink オブジェクトと EnterpriseData オブジェクト。
ESIAbstractDocumentsRenderer
なし - これはクラス ESIEPMDocumentRenderer の抽象基本クラスとして機能します。
ESIDocumentsRenderer
PartDocInfo オブジェクト (WTDocument、EPMDocument、WTPartReferenceLink、WTPartDescribeLink、BuildHistory、ERPMaterialDocumentDescribeLink、ERPMaterialDocumentReferenceLink、および ERPMaterialEPMDocumentDescribeLink オブジェクトの詳細を表す)
* 
このクラスは、RevisionControlled オブジェクトに関連付けられている WTDocument と CAD ドキュメントおよびスタンドアロン WTDocument をレンダリングします。
ESIEPMDocumentRenderer
CAD ドキュメントとその依存 (つまり、メンバー関連付けまたは参照関連付けを介してプライマリドキュメントに関連付けられている CAD ドキュメント)。
* 
このクラスは、CAD ドキュメント構造とスタンドアロン CAD ドキュメントをレンダリングします。
ESIMadeFromObjectRenderer
材料セットや連産品などの材料オブジェクト。
ESIPromotionRequestRenderer
PromotionNotice および関連付けられているすべてのプロモート可能オブジェクト。ただし、デフォルトではプロモート可能オブジェクトのみが ESI 応答で送信されます。PromotionNotice も送信する場合、ESI 応答メタ情報ファイルのカスタマイズが必要です。
ESIProcessPlanRenderer
MPMProcessPlan とすべての関連オブジェクト (シーケンス、オペレーション、標準手順、ドキュメント、BOM など)。
ESIProcessPlanHeaderRenderer
MPMProcessPlan オブジェクトとその属性。
ESIStandardProcedureLinkRenderer
MPMStandardProcedureLink (プロセス計画/シーケンス/オペレーションを標準手順にリンク)。
ESIPartToProcessPlanLinkRenderer
MPMPartToProcessPlanLink (プロセス計画をその部品にリンク)。
ESIWorkInstructionRenderer
なし - MPMOperation などの MPMOperationHolder に関連付けられている作業指示をレンダリングします。
ESISequenceRenderer
MPMSequence とその関連オブジェクト (ドキュメント、標準手順など)。
ESISequenceUsageLinkRenderer
MPMSequenceUsageLink (プロセス計画をそのシーケンスにリンク)。
ESIOperationRenderer
MPMOperation とすべての関連オブジェクト (サブオペレーション、標準手順、BOM 割当部品、操作参照部品、作業指示、ドキュメント、リソースなど)。
ESIOperationUsageLinkRenderer
MPMOperationUsageLink (プロセス計画/シーケンス/オペレーションをそのオペレーション/サブオペレーションにリンク)。
ESIOperationToPartLinkRenderer
MPMOperationToPartLink (オペレーションをその BOM 割当部品にリンク)。
ESIOperatedOnPartLinkRenderer
MPMOperationToOperatedPartLink (オペレーションを "操作参照" 部品にリンク)。
ESIOperationConsumableResourceRenderer
MPMOperationToConsumableLink (オペレーションをツーリングや加工材料などの消耗品リソースにリンク)。
ESIOperationWorkCenterRenderer
MPMOperationToWorkCenterLink (オペレーションを作業拠点にリンク)。
ESIResourceRenderer
なし - これはさまざまなタイプのリソース (ツーリング、加工材料、技能など) の処理のエントリポイントとなります。適切なタイプのリソースレンダラーをインスタンス化し、指定されたリソースの処理をそのインスタンスに委任します。
ESIToolingRenderer
MPMTooling および関連付けられているすべてのリソースとドキュメント。
MPMTooling オブジェクトに関連付けられている EnterpriseData オブジェクト。
ESIProcessMaterialRenderer
MPMProcessMaterial および関連付けられているすべてのリソースとドキュメント。MPMProcessMaterial オブジェクトに関連付けられている EnterpriseData オブジェクト。
ESISkillRenderer
MPMSkill および関連付けられているすべてのリソースとドキュメント。
MPMSkill オブジェクトに関連付けられている EnterpriseData オブジェクト。
ESIPlantStructureRenderer
MPMPlant および関連付けられているすべてのリソースとドキュメント。
MPMPlant オブジェクトに関連付けられている EnterpriseData オブジェクト。
ESIResourceGroupStructureRenderer
MPMResourceGroup および関連付けられているすべてのリソースとドキュメント。
MPMResourceGroup オブジェクトに関連付けられている EnterpriseData オブジェクト。
ESIWorkCenterRenderer
MPMWorkCenter および関連付けられているすべてのリソースとドキュメント。
MPMWorkCenter オブジェクトに関連付けられている EnterpriseData オブジェクト。
ESIControlCharacteristicRenderer
MPMControlCharacteristic および関連 ModelItem。
ESIQualityLinkRenderer
MPMPartQualityLink (部品を管理特性にリンク)、MPMProcessQualityLink (プロセス計画を管理特性にリンク)、および MPMOperationQualityLink (オペレーションを管理特性マスターにリンク)。
ESIResourceUsageLinkRenderer
リソース構造の一部であり、MPMResource を MPMResourceMaster または WTPartMaster に関連付ける WTPartUsageLink。
ESIProcessPlanLocalizationLinkRenderer
MPMProcessPlan を作業拠点のラインタイプに関連付ける MPMProcessPlanLocalizationLink。
ESIPlantLocalizationLinkRenderer
作業拠点をオペレーションに関連付ける MPMPlantLocalizationLink。
このテーブルの以下にリストされているレンダラーは、ESI Options and Variants がインストールされている場合に使用できます。ただし、Windchill 11.0 リリースでは、SAP への Options and Variants の統合はサポートされていません。
OptionSetRenderer
OptionSet および OptionSetMemberLink、OptionSetChoiceRuleMasterLink/OptionSetChoiceRuleLink、OptionSet と Option の間の仮想リンクなどの関連付け。
AssignedOptionSetLinkRenderer
OptionSet と Part の関連付け。
ChoiceRuleRenderer
ChoiceRule のレンダラー
OptionRenderer
Option オブジェクトと Choice オブジェクトのレンダラー
ExpressionRenderer
このレンダラーでは、依存または独立である基本定義式と高度な定義式がレンダリングされます。
RuleMemberLinkRenderer
このレンダラーでは、ExpressionMemberLink または SourceChoice がレンダリングされます。
RuleMemberActionLinkRenderer
RuleMemberActionLink または ChoiceMappableChoiceLink のレンダラー。
Windchill ESI レンダラー
上のテーブルで説明したように、ESI サービスによって提供される各レンダラークラスは、インタフェース ESIRenderer を実装している抽象クラス BasicESIRenderer を拡張します。クラス BasicESIRenderer は、public void render(VdbBuilder) (ESIRenderer インタフェースによって提供される唯一のメソッド) 以外の多数のメソッドの具象実装を提供します。
以下のテーブルに、ESI サービスの各種 getXXX() API の具象実装を提供するクラスの名前をリストします。
Java クラス名
API 名
ESIWTChangeOrder2Renderer
getECN
ESIBOMRenderer
getBOM
ESIWTPartRenderer
getPart
ESIDocumentsRenderer
getDocument
ESIEPMDocumentRenderer
getDocument、getEPMDocument
ESIProcessPlanRenderer
getProcessPlan
ESIResourceRenderer
getResource
ESIPromotionRequestRenderer
getPromotionRequest
OptionSetRenderer
getOptionSet
getXXX() API の詳細については、Windchill Enterprise Systems Integration Open Application Programming Interface Guide および「変更通知のパブリッシング」、「BOM のパブリッシング」、「部品のパブリッシング」、「ドキュメントのパブリッシング」、「プロセス計画のパブリッシング」、「リソースのパブリッシング」、「プロモーションリクエストのパブリッシング」の各セクションを参照してください。
同様に、クラス ESIProcessPlanRenderer および ESIResourceRenderer は、GetProcessPlan および GetResource 応答ジェネレータの具象実装を提供します。GetProcessPlan メソッドと GetResource メソッドの詳細については、Windchill Enterprise Systems Integration Open Application Programming Interface Guide およびこのドキュメントの「プロセス計画のパブリッシング」および「リソースのパブリッシング」のセクションを参照してください。
オブジェクト固有のレンダラー実装の作成
Windchill ESI サービスは、ユーザーによって開始された GetXXX リクエストを処理する多数のレンダラークラスを提供します。これらの各クラスは、メソッド public void render(VdbBuilder) の具象実装を提供することによって、インタフェース ESIRenderer を実装している抽象クラス BasicESIRenderer を拡張します。このメソッドは setBuilder()、validate()、および buildGroups() を呼び出します。BasicESIRenderer は setBuilder() には具象実装を提供しますが、validate() と buildGroups() には抽象バージョンしか提供しません。対応する具象バージョンはオブジェクト固有のレンダラー実装によって提供されます。たとえば、クラス ESIWTPartRenderer は、WTPart オブジェクトのレンダリングに適した方法でこれらのメソッドを実装しています。
ESI サービスは、「Windchill ESI レンダラー」のテーブルの「レンダリングされるオブジェクト」コラムに示されている各オブジェクトタイプにデフォルトのレンダラー実装を提供しています。これらの実装はすべて、カスタマイズ担当者による拡張が可能です。
ファクトリからのレンダラー実装の取得
ESI サービスは ESIRendererFactory インスタンスを使用して、指定された GetXXX リクエストに適したレンダラー実装をフェッチします。クラス ESIRendererFactory は、渡された入力パラメータに基づいて適切なタイプの ESIRenderer インスタンスを返す、オーバーロードバージョンのメソッド getRenderer(), を提供します。このファクトリクラスは、カスタマイズされることは想定されておらず、カスタマイズを容易にすることのみを目的としたものです。
ESIRendererFactory クラスで使用可能なメソッドを以下に示します。
getRenderer(anObject : Persistable) : ESIRenderer
引数 anObject で指定されたオブジェクトに必要なタイプの ESIRenderer インスタンスをフェッチします。このために、渡されたオブジェクトの UFID をフェッチしてから、getRenderer(ufid : 文字列) を呼び出します。
getRenderer(ufid : String) : ESIRenderer
引数 ufid で渡された UFID を持つオブジェクトに必要なタイプの ESIRenderer インスタンスをフェッチします。このメソッドは、ESI サービスのプロパティがリストされている xconf ファイル内のセレクタ属性を <Option> エレメントが持たないオブジェクトタイプに使用できます。
getRenderer(ufid : String, selector : String) : ESIRenderer
引数 ufid で渡された UFID を持つオブジェクトと指定されたセレクタに必要なタイプの ESIRenderer インスタンスをフェッチします。このメソッドは、ESI サービスのプロパティがリストされている xconf ファイル内のセレクタ属性を <Option> エレメントが持つオブジェクトタイプに使用できます。
getRenderer(anObject : Persistable, selector : String) : ESIRenderer
引数 anObject で指定されたオブジェクトと指定されたセレクタに必要なタイプの ESIRenderer インスタンスをフェッチします。
getRenderer(requestor : Class, selector : String) : ESIRenderer
引数 requestor で渡されたクラスを持つオブジェクトと渡されたセレクタに必要なタイプの ESIRenderer インスタンスをフェッチします。前述のオーバーロードフォームのいくつかは、ジョブを完了するためにこのメソッドを呼び出します。このメソッドを呼び出すと、新しく作成されたレンダラーインスタンスが必ず返されます。
getInstance() : ESIRendererFactory
クラス変数マネージャが存在する場合は、その値を返します。存在しない場合、保護された引数なしコンストラクタを使用して ESIRendererFactory の新規インスタンスを作成し、マネージャを初期化して呼び出し元に返します。
getRenderer(ufid : String, useCache : boolean) : ESIRenderer
引数 ufid で渡された UFID を持つオブジェクトに必要なタイプの ESIRenderer インスタンスをフェッチします。このメソッドは、ESI サービスのプロパティがリストされている xconf ファイル内のセレクタ属性を <Option> エレメントが持たないオブジェクトタイプに使用できます。このメソッドは、useCache が true か false かに従って、キャッシュからレンダラーインスタンスをフェッチするか、新規インスタンスを作成します。
getRenderer(ufid : String, selector : String, useCache : boolean) : ESIRenderer
引数 ufid で渡された UFID を持つオブジェクトと指定されたセレクタに必要なタイプの ESIRenderer インスタンスをフェッチします。このメソッドは、ESI サービスのプロパティがリストされている xconf ファイル内のセレクタ属性を <Option> エレメントが持つオブジェクトタイプに使用できます。このメソッドは、useCache が true か false かに従って、キャッシュからレンダラーインスタンスをフェッチするか、新規インスタンスを作成します。
getRenderer(requestor : Class, selector : String, useCache : boolean) : ESIRenderer
引数 requestor で渡されたクラスを持つオブジェクトと渡されたセレクタに必要なタイプの ESIRenderer インスタンスをフェッチします。メソッド getRenderer(requestor : クラス, selector : 文字列) は、引数 useCache に false を渡してこのメソッドを呼び出すことでジョブを実行します。その結果、新しく作成されたレンダラーインスタンスが必ず呼び出し元に返されます。
getRenderer(anObject : Persistable, selector : String, useCache : boolean) : ESIRenderer
引数 anObject で指定されたオブジェクトと指定されたセレクタに必要なタイプの ESIRenderer インスタンスをフェッチします。このメソッドは、useCache が true か false かに従って、キャッシュからレンダラーインスタンスをフェッチするか、新規インスタンスを作成します。
* 
引数 useCache をとる getRenderer() API を呼び出す際には、useCache に true を渡すと、同時に実行しているトランザクションによってすでに使用されている可能性があるレンダラーインスタンスがキャッシュからフェッチされるので、false を渡すことをお勧めします。
Windchill Enterprise Systems Integration をカスタマイズする場合、デフォルトのレンダラー実装クラスを拡張するか、新しい実装クラスを作成するかを選択できます。拡張 (または新しい実装) をアクティブ化するには、特定の Windchill ESI サービスプロパティを拡張 (または新規) クラスに設定し、関連する ESITarget オブジェクトの responseMetaInfoPath 属性を、拡張 (または新規) クラスによってレンダリングされる追加属性のエントリが含まれている ESI 応答メタ情報ファイルの適切に修正されたバージョンに設定します。応答メタ情報ファイルのコンテンツの変更については、このドキュメントのWindchill ESI プリファレンスの修正のセクションを参照してください。デフォルトのレンダラー実装を拡張する際、または新しいレンダラー実装クラスを提供する際に変更するプロパティについては、このドキュメントのWindchill ESI Services のカスタマイズのセクションを参照してください。
フックの提供
デフォルトの各レンダラー実装クラスは Info*Engine エレメントオブジェクトを生成します。これらのエレメントオブジェクトは VDB ビルダーに渡されます。ほとんどのデフォルトレンダラーは adjustElement() と呼ばれるメソッドを提供しています。このメソッドが使用可能な場合、エレメントをビルダーに渡す直前に必ずデフォルトレンダラーによって呼び出されます。このメソッドのデフォルトの実装は何も行いません。
Windchill ESI マッパー機能は、マッピングされているオブジェクトの getter メソッドへのアクセスのみを提供します。マッパーは複雑なロジック機能を提供しません。adjustElement() メソッドは、目的の結果を達成するのに応答メタ情報ファイルに対する変更が不十分な場合にレンダラー出力を簡単に追加または修正する手段を提供します。
手順
Windchill Information Modeler を使用して Windchill ESI クラスを拡張する手順については、Windchill Customization Guide を参照してください。デフォルトのインタフェース実装の単純な拡張では、次のプロセスを使用します。
1. ESI 応答メタ情報ファイルに対して適宜変更を加えます。
* 
上記の手順を実行する際には、「ESI 応答メタ情報ファイルの修正」のセクションで説明されている手順に従ってください。
2. 関連 ESITarget オブジェクトの responseMetaInfoPath 属性を、修正後のバージョンのファイルに設定します。
* 
これは「配布を管理」 UI の「配布ターゲットを編集」または「新規配布ターゲット」ダイアログに表示されている「ESI 応答メタ情報のファイルパス」フィールドの値を修正することによって実現できます。
3. エディタまたは任意の統合開発環境 (IDE) を使用して java ソースファイルを定義します。
* 
注意:Windchill ESI のインストール時に提供されたクラスを修正したり置き換えたりしないでください。これらのファイルは将来ソフトウェアがリリースされる際に置き換えられる可能性があります。
4. java ソースファイルを Windchill コードベースにコンパイルします。
5. Windchill ESI サービスの該当するプロパティを変更して新しいレンダラー実装を指定します。
6. 変更によって新しいエレメントが出力に追加された場合は、XML スキーマおよび場合によっては EAI ソフトウェアコンポーネントを修正します。
例: レンダラーを拡張することによる <Part> への属性の追加
Part XML エレメントのデフォルトの出力を Part XML エレメントのデフォルト構造の図に示します。デフォルトの応答メタ情報ファイル内の Map エレメントは、このドキュメントの「例: <Part> への属性の追加」のセクションに示されています。
新しい <Part> エレメントに子エレメント <Team> が追加されました。
応答メタ情報ファイルの修正された Map エレメントと MapInformation エレメントは以下に示す形式をとります。
<esi:Map id="ESINewPart">
<esi:attributeMapping sourceAttribute="obid">ObjectID</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="xxxx" defaultValue="com.ptc.windchill.esi.Part">Class</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="modifier">LastChangedBy</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="number">Number</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="xxxx">StartEffectivity</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="xxxx">EndEffectivity</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="xxxx">StartSerialNumberEffectivity</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="xxxx">EndSerialNumberEffectivity</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="xxxx">StartLotNumberEffectivity</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="xxxx">EndLotNumberEffectivity</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="xxxx">SerialNumberEffectivityCxtPartNumber</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="xxxx">LotNumberEffectivityCxtPartNumber</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="defaultUnit">DefaultUnit</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="name">Name</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="partType">PartType</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="source">Source</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="state.state">State</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="view" plantSpecificAttribute="true">View</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="storageLocation" plantSpecificAttribute="true">StorageLocation</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="phantom">IsPhantom</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="versionInfo.identifier.versionId">Version</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="iterationInfo.identifier.iterationId">Iteration</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="PreviousVersion">PreviousVersion</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="genericType">IsConfigurable</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="collapsible">IsCollapsible</esi:attributeMapping>
<esi:attributeMapping sourceAttribute="team">Team</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:keyAttribute>Version</esi:keyAttribute>
<esi:keyAttribute>PreviousVersion</esi:keyAttribute>
<esi:keyAttribute>View</esi:keyAttribute>
<esi:keyAttribute>StorageLocation</esi:keyAttribute>
<esi:mapRef>ESINewPart</esi:mapRef>
</esi:MapInformation>
前述の変更が加えられた応答メタ情報ファイルが <Windchill>:/codebase/com/ptc/windchill/esi/examples/ESIResponseMetaInfoExample2.xml にあります。
ESIResponseMetaInfoExample2.xml ファイルが使用された場合、Windchill ESI マッパーは次の出力を生成します。
カスタマイズされた Part XML エレメントの構造 - 例 2
WTPart オブジェクトには team という属性がないので、マッパーが必要なデータを取得できないことがあります。その結果、修正バージョンの応答メタ情報ファイルをアクティブ化すると、ESI 応答に空の <Team> エレメントが作成されます。これを修正するには、WTPart を拡張して team 属性を含めるか、Windchill ESI の ESIWTPartRenderer クラスを拡張して空の team に値を入力します。クラス Example2MyRenderer はクラス ESIWTPartRenderer の拡張方法を示しています。このクラスのソースコードは <Windchill>/codebase/com/ptc/windchill/esi/examples/Example2MyRenderer.java にあります。
サンプルファイルのコンテンツを以下に示します。
package com.ptc.windchill.esi.examples;
import com.infoengine.object.factory.Att; import com.infoengine.object.factory.Element;
import com.ptc.windchill.esi.esipart.ESIWTPartRenderer;
systematically, systems integrators/customizers can add validation import java.util.Collection;
import wt.eff.Eff; import wt.part.WTPart;

public class Example2MyRenderer extends ESIWTPartRenderer {
// This example method will adjust the mapper to return a value for the attribute "Team". If the attribute "Team" is found
// and the value is null or empty, then this method will update the value.
protected Element adjustPartElement( Element elem,
String group, WTPart part, Eff [] effs,
Collection targets )
throws ESIRendererException {
Att att = elem.getAtt("Team"); // get the attribute "Team" from the mapper output
if ( att != null ) // verify that the attribute exists in the mapper
{
//Check to see if the value of "Team" is null or is empty.
if ( att.getValue() == null || att.getValue().toString().trim().equals(""))
{
// Get the value for "Team" from the part object and use it to set
// the value for the "Team" attribute in the mapper output. att.setValue(part.getTeamName());
}
}
return elem;
}
}
次の点に注意してください。
package ステートメントは、Java コンパイラの出力が正しいディレクトリに書き込まれるようにします。
Java import ステートメントは、adjustElement() メソッドへのクラスと引数の継承のために必要です。
if ステートメント if ( att != null ) により、マッパーは team 属性の存在を制御できます。このために、名前が Team である Att オブジェクトをマッパー出力から取得することを試みます。応答メタ情報ファイルの関連する Map エレメントに値 Team を持つ attributeMapping エントリがない場合、Att オブジェクトの取得の結果は Null になります。
if ステートメント if ( att.getValue() == null || att.getValue().toString().trim().equals("")) は、マッパーが目的のデータを取得できたかどうかをチェックします。データが取得された場合、何も行われません。これはマッパーの動作をオーバーライドするときに推奨される方法です。
以下の方法によってこの例をコンパイルして実行できます。
Windchill をインストールしたときに定義された Windchill ディレクトリ内から、コマンド bin/windchill shell を使用して Windchill シェルを起動します。
Java コンパイラを使用してクラスをコンパイルします。javac -d ./codebase ./codebase/com/ptc/windchill/esi/examples/*.java
「配布を管理」 UI を使用して「配布ターゲットを編集」 (または「新規配布ターゲット」) ダイアログを開き、「ESI 応答メタ情報のファイルパス」フィールドの値を編集して ESIResponseMetaInfoExample2.xml ファイルに設定します。「OK」をクリックして変更を保存し、編集した (または新しく作成した) 配布ターゲットを、リリースする部品に関連付けます。
* 
注意: 前述の手順では、Windchill ESI サービスが部品をレンダリングする際に、例に示した応答メタ情報ファイルが使用されます。これにより、GetPart、GetBOM、GetECN、GetProcessPlan、GetPromotionRequest の ESI 応答の構造が変更されます。構造が変更されると、Windchill および EAI ソフトウェアコンポーネント内の XML スキーマが同期しなくなります。応答メタ情報ファイルに変更を加える場合、このドキュメントの「XML スキーマの作成/修正」のセクションの説明に従って XML スキーマを修正する必要があります。さらに、新しいスキーマを使用するように EAI ソフトウェアコンポーネントを修正する必要があります。詳細については、このドキュメントの「XML スキーマ」のセクションを参照してください。
以下の XML ドキュメントは、新しい部品レンダラークラスをアクティブ化する xconfmanager コマンドへの入力として機能します。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Configuration SYSTEM "xconf.dtd">
<Configuration targetFile="codebase/service.properties">
<!-- The ESIRenderer entries for use by com.windchill.esi.rnd.ESIRendererFactory -->
<Service context="default" name="com.ptc.windchill.esi.rnd.ESIRenderer">
<Option cardinality="duplicate" requestor="wt.part.WTPart" serviceClass="com.ptc.windchill.esi.examples.Example2MyRenderer"/>
</Service>
</Configuration>
このファイルは <Windchill>/codebase/com/ptc/windchill/esi/examples/Example2.service.properties.xconf にあります。
以下のコマンドは、このファイルで指定された変更をファイル <Windchill>/codebase/service.properties に反映します。
xconfmanager –i codebase/com/ptc/windchill/esi/examples/Example2.service.properties.xconf –p
カスタマイズされた応答メタ情報ファイルを使用した場合に生成される Windchill ESI 応答の XML スキーマ定義が <Windchill>/codebase/com/ptc/windchill/esi/examples/Example2.xsd にあります。
カスタマイズされた応答メタ情報ファイルを使用した場合に生成される Windchill ESI の応答が <Windchill>/codebase/com/ptc/windchill/esi/examples/Example2.xml にあります。
* 
VDB ビルダーと ESI レンダラーを拡張するだけでなく、ESI 応答ジェネレータと ESI サービス実装を拡張することもできます。詳細については、「ESIResponseGenerator」および「StandardESIService」のセクションを参照してください。
これは役に立ちましたか?