高度なカスタマイズ > Windchill アダプタ > Windchill アダプタ Webject の使用 > Windchill アダプタの例
  
Windchill アダプタの例
Windchill タスクの Info*Engine アダプタ Webject を使用すると、アプリケーションで Windchill データを操作するためのフレームワークが提供されます。
このセクションでは、Windchill アダプタ Webject を含む一連の Info*Engine タスクの作業サンプルについて説明します。
* 
このサンプルでは、Windchill ソリューションがインストールされており、使用可能である必要があります。
サンプルのセットアップ
Windchill アダプタのサンプルタスクで作業する前に、以下を理解している必要があります。
Info*Engine JSP およびタスク (Info*Engine User's Guide を参照)
Info*Engine タスク委任およびパッケージ (Info*Engine User's Guide および Info*Engine Implementation Guide を参照)
サンプルファイルは Windchill インストールの一部としてインストールされ、次のサブディレクトリにあります。
prog_examples/adapter/windchill
サンプルのインストール
サンプルをインストールするには、prog_examples/adapter/windchill サブディレクトリから次の Ant スクリプトを実行します。
ant install
サンプルの開始
サンプルを使用するには、部品およびドキュメントを作成できる Windchill ユーザーとしてログインする必要があります。以下の URL を使用して、サンプルにアクセスします。
http://<hostname>:<port>/<WindchillAppl>/infoengine
/jsp/examples/adapter/windchill/
たとえば、デフォルトのポートを使用しており、ホスト名が "MyCompany.com" で、Windchill アプリケーション名が "Windchill" である場合、次の URL でサンプルを開始します。
http://MyCompany.com/Windchill/infoengine/jsp/examples/adapter/windchill/
サンプルのアンインストール
サンプルの使用を終えた後、prog_examples/adapter/windchill サブディレクトリから以下の Ant スクリプトを実行して、サンプルを除去できます。
ant uninstall
この例で使用されている Webject
Windchill アダプタ Webject の多くは、1 つまたは複数のサンプルタスクで使用されます。サンプルセットで特定の Webject を検索するには、サーチツールを使用して、<Windchill>/tasks/infoengine/examples/adapter/windchill ディレクトリおよびサブディレクトリのコンテンツを検索します。
サンプルのコンテンツについて
サンプルは、以下の一連の JSP およびタスクで構成されています。
JSP が提供するサンプル UI が次の場所にインストールされます。<Windchill>/codebase/infoengine/jsp/examples/adapter/windchill
<Windchill>/tasks/infoengine/examples/adapter/windchill ディレクトリおよびサブディレクトリにパッケージとしてインストールされるタスク (および対応する .delegateInfo プロパティファイル)。
.delegateInfo プロパティファイルでは、そのファイルが存在するディレクトリおよびすべてのサブディレクトリに適用する必要があるデフォルトのインストールプロパティ値を指定します。.delegateInfo プロパティファイルおよびパッケージの使用の詳細については、Info*Engine User's Guide を参照してください。
JSP
サンプル JSP は、タスクのセットに対するアクティブなインタフェースとして機能し、基本操作を実行するために使用される冗長なコードの量を最小限に抑えるように作成されます。実際のサンプルはタスク内にあるので、JSP には最低限のコメントしかありません。ほとんどの場合、JSP のコードは、以下を実行します。
1. "input" グループを作成します。
2. 次のものを呼び出します。
input グループ内の Dispatch-Tasks Webject
呼び出すコマンドの委任の名前
(オプション) 委任を呼び出すために使用する一連のパラメータおよびグループ
Dispatch-Tasks Webject の詳細については Info*Engine User's Guide を参照してください。
タスクの組織およびパッケージ
このサンプルセット内にあるほとんどのタスクは、Info*Engine タスク委任を使用して呼び出すように設計されています。この主な理由は以下のとおりです。
これはオブジェクト指向のタスク呼び出し方法です。
タスク代理は、すべてのサブタイプに適用するためにタイプ階層内で最高の共通レベルで定義できます。特別なニーズがあるサブタイプは、必要に応じて代理をオーバーライドできます。たとえば、persistable/Create.xml タスクは、wt.fc.Persistable のサブタイプである任意のタイプの基本オブジェクト作成を実行します。
さらに、wt.content.ContentHolder のインスタンス (たとえば、wt.doc.WTDocument または wt.part.WTPart) に特別なニーズがある場合、contentHolder/Create.xml タスク委任は persistable/Create.xml タスク委任をオーバーライドして、ニーズを満たします (作成時に ContentItem を追加)。
この設計タイプに対して作成されるアプリケーションは、フェデレーション環境に簡単に適用されます。つまり、タスクのセットが複数のシステムに対して公開される場合、クライアントアプリケーションは複数のシステムからのビジネスオブジェクトと対話するために使用されることがあります。
このパッケージに登録されるすべての代理には、実行する操作を反映した単純な名前が指定されます (たとえば、作成、更新、削除など)。
既存のタスクと競合する可能性を避けるために、これらのタスクに登録されたコマンド委任エントリは、操作名の前に "Example" というテキストを手動で入れることによってオーバーライドされます (ExampleCreate、ExampleUpdate、ExampleDelete など)。
最高レベルのディレクトリには、デフォルトのインストール操作によってインストール時にコマンド代理が作成されないことを指定する .delegateInfo ファイルが含まれます。各サブディレクトリには、この動作をオーバーライドする可能性がある .delegateInfo ファイルが含まれます。各サブディレクトリの .delegateInfo ファイルは、インストール時にコマンド代理を作成する必要があるかどうかを指定し、必要がある場合は、そのディレクトリ内のタスクが適用する TypeIdentifier を指定します。
インストールするコマンド委任を表す各タスクには、オプションコメントを指定するコメントセクションと、そのタスクに対して作成されるコマンド委任名が含まれます。たとえば、contentHolder/Create.xml タスクには以下のようなコメントが含まれます。
<!--com.infoengine.delegate.def
@comment This is an example delegate for creating a
ContentHolder object (part/document, etc.).
@delegateName ExampleCreate
-->
これにより、デフォルトのコマンド委任名 "Create" の代わりに、このタスクはコマンド委任名 "ExampleCreate" でインストールされることがインストールツールに指示されます。コメントはオプションで、LDAP の対応するコマンド代理エントリ内のコメントのように登録されます。
* 
上記のコメントセクションはオプションです。これは、対応するタスクに対して作成される委任名をオーバーライドするためにサンプルタスクに含まれています。デフォルトの委任名は、タスク名からファイル拡張子 .xml を除いたものです。
util ディレクトリ内のタスクは installDelegate プロパティをオーバーライドしないので、コマンド委任がインストールされません。結果として、これらのタスクは直接タスク呼び出しを使用してのみ、呼び出すことができます。
基本タスク委任情報
このサンプルのタスクは Info*Engine タスク委任を使用して呼び出すよう設計されているので、デフォルトでは呼び出し時に以下の情報を受け取ります。
Webject が呼び出される 1 つまたは複数の Windchill アダプタインスタンスの名前。
タスク委任で提供されるアダプタ名は、supporting-adapter という特別なパラメータの @FORM コンテキストグループに (タスクに対するほかのパラメータとともに) 常に到達します。タスク委任とともに動作するように設計されている Info*Engine タスクは、アダプタ Webject の呼び出し時にこの値を常に使用する必要があります。
Info*Engine の条件では、アダプタのタイプは、作成されるアプリケーションのアーキテクチャおよびタイプに依存します。この場合、アダプタは常に Windchill アダプタです。負荷分散のために、このパラメータは複数の値を持つことができます。このため、INSTANCE パラメータ値は慎重に作成され、必要に応じて Info*Engine が負荷分散/フェイルオーバーを実行できるようにする必要があります。
トランザクションに参加しているアダプタ Webject のほかに、これらのサンプルタスクの INSTANCE パラメータは以下のように定義されます。
<ie:param name="INSTANCE" data="$(@FORM[]supporting-adapter[*])"
valueSeparator=";" delim=";" default="<%=NamingService.getVMName()%>"/>
属性インデックスの '*' により、Info*Engine の置換で複数の値が予想されます。このパラメータが valueSeparator および delim 属性値を ';' 文字でオーバーライドするということは重要です。
これは、Info*Engine タスク委任がこのパラメータ値を完全識別された LDAP 識別名 (DN) として提供するためです。デフォルトのセパレータ文字 ',' は、LDAP DN 内の特殊文字です。これを使用すると、破損した INSTANCE 値が使用され、Info*Engine で目的のサービスが検出されなくなります。
また、このサンプルは default 属性の値を "NamingService.getVMName()" でオーバーライドします。NamingService クラスは、各タスクの上部にある @page ディレクティブのタスクにインポートされます。このデフォルトを使用すると、タスクがタスク委任の外から呼び出され、Webject プロセッサとして現在の仮想マシン名を使用できます。これは、タスクがより簡単に作成され、Dispatch-Tasks の使用外でテストできるように主に実行されます。
各タスクは、タスク呼び出しに関連付けられたビジネスオブジェクトが含まれる "input" というグループを受け取ります。多くの場合、関連 JSP は最低限の要件を提供するだけで、タスク委任を操作できます。それは obid 属性および class 属性です。
obid 属性には、オブジェクトが動作する対象の Unique Federation Identifier (UFID) が含まれています。
class クラスは、オブジェクトが動作する Federated Type Identifier (FTI) を指定します。動作するオブジェクトがない場合 (たとえば、Query)、関連 JSP は Info*Engine タスク委任が適切なタスクおよび Webject プロセッサを接続するのに十分なドメインの部分だけ含まれる最低限の UFID を構築します。
入力グループには、詳細情報が含まれますが (たとえば、作成/更新オブジェクトの属性など)、この場合かどうかはアプリケーションによって異なります。このサンプルのセットで、多くのタスクはオブジェクトが動作している UFID のみを必要とします。
各タスクは、必要に応じて追加のパラメータ値を受け取ります。関連 JSP では、PARAM と呼ばれる Dispatch-Tasks Webject パラメータでこれらの値を提供できます。オプションで、Dispatch-Tasks を呼び出すと、true 値で USEFORM パラメータを指定することによって、現在の @FORM コンテキストグループを再使用することができます。
各タスクは、追加の Info*Engine グループを受け取ることができます。タスク代理に渡される追加のグループ名は、Dispatch-Tasks Webject で GROUP_VDB パラメータを使用して指定されます。
タスクのコメント
サンプルの各タスクには、タスクの基本的な説明を提供し、受け入れるパラメータをリストする簡単なコメントセクションが含まれます。
コメントセクションは必須ではありませんが、Info*Engine タスクを文書化するための共通メカニズムです。
Info*Engine タスクドキュメンテーションは、以下にアクセスすることで実行中のシステムで表示できます。
http://<hostname>:<port>/<WindchillApp>/infoengine/jsp/tools/doc/index.jsp
アプリケーションは、通常の Java ドキュメンテーションと同様に構成されます。
Info*Engine タスクコメントの作成の詳細については、以下にアクセスしてください。
http://<hostname>:<port>/<WindchillApp>/infoengine/jsp/tools/doc/howto.html
これらのコメントは、Info*Engine SOAP クライアントのための WSDL (Web Services Definition Language) ドキュメントを生成する場合に使用することを目的としています。
JSP に代わる SOAP の使用
入力グループを使用する各タスクは、'input' という Info*Engine グループパラメータを明示的に定義します。結果として、これらのタスクは、Info*Engine SOAP クライアントから呼び出される可能性があります。通常の Info*Engine SOAP タスクは、Java オブジェクトの静的メソッドに相当します。したがって、すべての情報はパラメータ入力から取得しますが、暗黙的に動作するオブジェクトからは何も取得されません。これらのサンプルタスクを使用するには、Info*Engine SOAP クライアントが 'input' というグループを作成し、SOAP 呼び出し時にパラメータとして渡します。これは、JSP でのタスク使用と似ています。
各タスクは、1 つの Info*Engine グループを返すために作成されます。出力グループに "group_out" というパラメータ値を使用して名前を付けることは、SOAP タスクの標準手順です。このパラメータのデフォルト値は、常に "output" です。結果として、ここで提供されるすべてのタスクは、"GROUP_OUT" という暗黙的パラメータを取ります。ただし、コメントセクションには、このパラメータに関する明確な説明はありません。一部の JSP は、特に複数のタスクを呼び出している場合に、このパラメータを使用して結果グループに名前を付けます。これにより、グループの名前を変更しなくても名前を付けて、ローカル VDB の干渉を避けることができます。
contentHolder/Create.xml など一部のタスクは、添付資料のメソッドで SOAP を必要とするメソッドとして公開されます。ただし、添付資料のある SOAP は、Info*Engine へのバイナリコンテンツのアップロード用およびダウンロード用の推奨メソッドではありません。ほかの Info*Engine アプリケーションでは、このメカニズムは真のストリームをサポートするので、アップロードに適しています。SOAP クライアントの推奨メカニズムは、外部 HTTP アップロードおよびダウンロードハンドルを使用して、Info*Engine との間でバイナリデータを移動することです。
厳密にタイプ指定されたパラメータ (文字列以外) は、パラメータリストで文書化されます。Dispatch-Tasks を使用するサンプル JSP は、適切なタイプに強制する可能性がある Java 文字列としてこれらのパラメータ値を提供します。タスクは、パラメータの厳密なタイプ指定を要求しません。SOAP クライアントは、厳密にタイプ指定したデータを提供します。
Windchill システムと対話するために SOAP で使用できる一連のタスクを表示するには、デフォルトの "一般的な Web サービス" を参照してください。"一般的な Web サービス" の API は、タスクのコメントセクションで指定されるタスクドキュメンテーション URL から入手できます。これらのタスクは、'com.ptc.windchill.ws' という TypeIdentifier で登録されます。基本タスクは、以下でインストールされます。
<Windchill>/tasks/com/ptc/windchill/ws
サンプルの使用
表示される初期ページは、以下の JSP およびタスクで作成されます。
JSP:
document/index.jsp
manage.jsp
init.jspf
table.jsp (チェックアウト済みオブジェクトとチェックイン済みオブジェクトに対して 1 回ずつ)
タスク :
util/LocalDomain.xml
util/UserInfo.xml
サンプルにログインすると、画面の左上に 3 つのリンクが表示されます。
[Document Management]: このリンクは、「Document Management」ページを起動します。
「Document Management」コンテンツの操作に関係する JSP およびタスクは、以下のとおりです。
JSP:
document/index.jsp
manage.jsp
タスク :
contentHolder/Query.xml
[Part Management]: このリンクは、「Parts Management」ページを起動します。
「Part Management」コンテンツの操作に関係する JSP およびタスクは、以下のとおりです。
JSP:
manage.jsp
タスク :
part/Query.xml
[Source]: このリンクは、デモ全体に関係するすべての JSP およびタスクへのリンクが含まれるページを起動します。このリンクの操作は、このサンプルの説明と関係ありません。
3 つのリンクの下には、「My Documents」という見出しのフィールドが表示され、その右側に 2 つのリンクがあります。
「Delete」: サンプル内にすでに存在するドキュメントを削除します。
JSP:
action.jsp
タスク :
persistable/Delete.xml
「Create」: サンプル内に新しいドキュメントを作成します。
JSP:
document/create.jsp
タスク :
contentHolder/create.xml
このサンプルを初めて使用する場合、既存のドキュメントはありません。
「Create」リンクをクリックして、ドキュメントを作成します。「Create Document」ウィンドウが表示されます。
フィールド
説明
ドキュメント名
サンプルの下に表示されるドキュメント名。
コンテンツ
新しいドキュメントの主なコンテンツとして使用されるローカルファイル。
ブラウズ
サンプルに追加するファイルを検索できるウィンドウを表示します。
ドキュメントの作成
サンプル内にドキュメントを作成します。
ドキュメントを作成した後、「pick action」ドロップダウンメニューから操作を選択することで、ドキュメントに対して操作を実行できます。たとえば、作成したドキュメントを更新するには、チェックアウトする必要があります。これを行うには、「Check Out」オプションを選択します。
これにより、「Checked Out」セクションにドキュメントが追加されます。ドキュメントがチェックアウトされている間、ドキュメントがチェックインし直されるか、チェックアウトが解除されるまで、ドキュメントをチェックアウトしたユーザーだけがそのドキュメントにアクセスできます。
ドキュメントのチェックアウトに関係する JSP およびタスクは、以下のとおりです。
JSP:
action.jsp
タスク :
persistable/CheckOut.xml
ドキュメントをチェックアウトすると、そのドキュメントを更新できます。"Checked Out" という見出しの下で、更新するドキュメントに対応する「pick action」ドロップダウンメニューを見つけます。「Add/Update Content」操作を選択します。
これにより、「Add/Update Content」ウィンドウが開きます。
「Add/Update Content」フィールドとボタンの説明は、以下のとおりです。
フィールド
説明
役割
Add-ContentItems の ROLE パラメータに直接関係し、ContentItems でサポートされるさまざまな "役割" について説明します。
コンテンツ
新しいドキュメントの主なコンテンツとして使用されるローカルファイル。
ブラウズ
コンテンツを追加または更新するファイルをサーチできるウィンドウを表示します。
Add/Update Content
ドキュメントの作業コピー内で、新しいコンテンツを追加するか、既存のコンテンツを置換します。
必要な更新済みドキュメントを検索してから、「Add/Update Content」をクリックして、ドキュメントの作業コピー内で新しいコンテンツを追加するか、既存のコンテンツを置換します。
ドキュメントの更新に関係する JSP およびタスクは、以下のとおりです。
JSP:
addContent.jsp
タスク :
contentHolder/AddContent.xml
ドキュメントを更新したら、再びチェックインする必要があります。以下のように、チェックインするドキュメントと同じ行にあるドロップダウンメニューから「Check In」を選択します。
ドキュメントの再チェックインに関係する JSP およびタスクは、以下のとおりです。
JSP:
action.jsp
タスク :
persistable/CheckIn.xml