カスタム Windchill アダプタ Webject の実装
Windchill アダプタは、Windchill メソッドサーバーに埋め込まれたコンポーネントです。Windchill アダプタは Info*Engine タスクおよび Webject を実行するためのリクエストを受信します。Webject は、次のようなさまざまな機能を実行できます。
• ビジネスオブジェクトグループの比較、結合、および並べ替え
• 指定した基準と一致する情報のサーチ
• 作成、コピー、更新などの情報操作操作の実行
Query Webject および Action Webject は、情報システムのデータにアクセスして変更するときに使用するアダプタにそれぞれ特化しています。このような Webject のカテゴリの詳細については、Info*Engine User's Guide を参照してください。このガイドでは、カスタム Webject の作成方法についても説明しています。
Windchill アダプタで使用するカスタム Query Webject およびカスタム Action Webject を作成できます。
新規のカスタム Webject 代理の設定
各 Webject 代理には一意の名前が必要です。Windchill アダプタは、Webject が提供するクラス情報とともにこの名前を使用して、Webject 委任を実装するクラスを検出します。すべてのタイプ認識 Webject 代理は com.ptc.core.adapter.server.impl.TypeAwareWebjectDelegate インタフェースを実装する必要があります。これにより、以下のメソッドを使用できます。
com.infoengine.object.factory.Task invoke(com.infoengine.object.factory.Task task)
この invoke() メソッドは、TypeAwareWebjectDelegate インタフェースを実装するそれぞれの具象 Webject 委任クラスのすべての作業を行います。
次に、invoke() メソッドを実装するための操作の概要を示します。
1. 受信した Task オブジェクトから Webject オブジェクトを抽出します。
2. Webject オブジェクトに指定されたパラメータに基づいて操作を実行します。
3. 処理によって発生したデータは、Group オブジェクト内の Element オブジェクトに保存されます。
4. Group オブジェクト出力データを含む新規の Task オブジェクトを返します。
com.infoengine.object.factory.Task クラスの詳細については、Java ドキュメンテーションを参照してください。
カスタム Webject クラスの検索
Webject 委任は wt.adapter.delegates.properties のエントリを使用して Windchill アダプタに登録されます。Windchill アダプタは、Webject 名およびターゲットオブジェクトのクラスまたはタイプに基づいて Webject 委任を呼び出します。
たとえば、wt.adapter.delegates.properties の以下の行により、Windchill アダプタに CheckinObjectsWebjectDelegate が登録されます。
CHECKINOBJECTS.WCTYPE|
java.lang.Object=com.ptc.core.adapter.server.impl.CheckinObjectsWebjectDelegate
ターゲットオブジェクトのクラス (または Windchill サブタイプ) は、受信した Webject の TYPE パラメータから取得されます。Webject 名に含まれているハイフンは呼び出し元に無視されます。Webject 照会には大文字と小文字の区別もありません。
これによって次の機能が実行されます。
1. アダプタは java.lang.Object クラスを持つターゲットオブジェクトの CHECKINOBJECTS に対する Webject リクエストを受け取ります。
2. Webject 委任 com.ptc.core.adapter.server.impl.CheckinObjectsWebjectDelegate がインスタンス化されます。
3. その後、invoke() メソッドが実行されます。
新規の Webject 代理の作成
ほとんどの Windchill アダプタ Webject は、com.ptc.core.adapter.server.impl パッケージにあります。単純化するために、Windchill アダプタ Webject はモデル化されていません。ほとんどの Webject サブクラスの親クラスは、アダプタ Webject のタイプごとに共通です。
• OBJ Webject は通常、com.ptc.core.adapter.server.impl.ObjectWebject を拡張します。
• ACT Webject は、com.ptc.core.adapter.server.impl.ActionWebject を拡張します。
• ObjectWebject と ActionWebject の両方は、com.ptc.core.adapter.server.impl.AbstractWebject を拡張します。
各クラスでは、作成される Webject のタイプに適用できる役立つ便利なメソッドとパラメータのサポートが提供されます。これらのサブクラスは、TypeAwareWebjectDelegate インタフェースも継承します。サブクラスは invoke() メソッドだけを実装する必要があります。
それぞれの使用可能なメソッドの詳しいリストについては、com.ptc.core.adapter.server.impl の javadoc を参照してください。
Windchill アダプタ Webject は、コア Info*Engine Java アノテーションを使用してパラメータの収集および検証を制御します。これにより、すべての Webject で可能なかぎり着実に入力パラメータが処理され、一貫したエラーメッセージが報告されるので、ルーチンを実行するソースコードを重複させる必要はありません。
既存のスーパークラス (ObjectWebject、ActionWebject、または AbstractWebject) を使用する場合、収集および使用されるパラメータが各クラスに対して定義されているので、サブクラスに対しては、親クラスがまだ収集していない特別に使用されるパラメータだけを定義する必要があります。その後、Webject パラメータの検証により、次のようなすべての基本検証を実行できます。
• 必須パラメータが存在すること
• 相互依存パラメータが存在すること
• 相互排他的なパラメータがともに指定されていないこと
• パラメータが定義されたデータタイプに適合していること
Webject 実装自体では、基本パラメータの検証のみが行われます。
既存の基本クラスを拡張する場合、invoke メソッド実装でクラスが最初に実行する必要があるのは、親クラスの preset メソッドの呼び出しです。これによってパラメータが検証され、共通パラメータが収集されます。
共通の基本クラスを拡張しない場合、パラメータ検証を強制するか (アノテーションを使用した場合)、Webject からパラメータを手動で収集する必要があります。
パラメータ検証で使用されるアノテーションは、com.infoengine.object.factory.WebjectDef および com.infoengine.object.factory.ParameterDef です。詳細については、後続トピックの例を参照してください。