ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Team Productivity Centerユーザーズ・ガイド
11g リリース2(11.1.2.4.0)
B66155-04
  目次へ移動
目次

前
 
 

4 Oracleチーム・プロダクティビティ・センター・コネクタの使用

この章では、Oracleチーム・プロダクティビティ・センターと外部データ・リポジトリ(バグ・データベース、機能追跡システム、およびチームで開発に使用するデータのその他のリポジトリなど)間のコネクタを開発する方法について説明します。また、Oracleチーム・プロダクティビティ・センター・コネクタを作成した後の使用方法についても説明します。これには、エラー処理、ヘルプの追加、配布用のコネクタのパッケージ化および国際化があります。

Oracleチーム・プロダクティビティ・センター・コネクタでは、サードパーティ・リポジトリをJDeveloperと統合するためのフレームワークが提供されます。標準の作業アイテム・インタフェースを使用して、サードパーティ・コネクタでそのバックエンド・リポジトリからデータをフェッチし、そのデータを標準書式で表示できます。宣言ユーザー・インタフェース・アプローチによって、コネクタ作成者は、大量のコードを作成することなく、多数の柔軟な方法でUIコントロールを自由にレイアウトできます。この結果、JDeveloperではデータとUI要素が実行時に結合され、JDeveloperユーザーがすでに理解している一貫性のある方法でリポジトリ・オブジェクトが表示されます。

この章には、次の項があります。

4.1 Oracleチーム・プロダクティビティ・センター・コネクタの使用について

チーム・プロダクティビティ・センターに対する独自のコネクタの開発は、コネクタのアーキテクチャを理解することから開始します。Oracleチーム・プロダクティビティ・センター・コネクタのアーキテクチャは、3つの主要機能を提供するように編成されています。

4.1.1 リポジトリからのデータのフェッチ

各作業アイテム・コネクタによってWorkitemConnectorインタフェースが実装され、このコネクタで使用されるリポジトリで添付ファイルがサポートされている場合は、オプションでWorkitemAttachmentインタフェースが実装されます。WorkitemConnectorインタフェースでは、エンド・ユーザーによるリポジトリへのログインとリポジトリからのログ・アウト、作業アイテムに対する基本的な作成、読取り、更新および削除(CRUD)操作、および問合せ結果の取得のためのメソッドが指定されます。バックエンド・リポジトリの機能に基づいて、コネクタ作成者は、バックエンド・リポジトリの機能を公開するために実装するWorkitemConnectorのメソッドを決定します。これらの選択したメソッドの実装時に、コネクタ作成者は、バックエンド・リポジトリから使用できる適切なAPI(またはWebサービス)を使用します。データは、APIを介して収集した後、コネクタ作成者が定義する作業アイテム・データ構造に変換する必要があります。

4.1.2 コンポーネントUIツリーの生成

コネクタでリポジトリから作業アイテム・データが取得された後は、Oracleチーム・プロダクティビティ・センターの宣言UIフレームワークによって、コネクタ作成者が定義した作業アイテムUI定義が読み取られ、対応するUIコントロールにデータがバインドされます。Oracleプロダクティビティ・センターではメタデータドリブンUIフレームワークが提供され、このフレームワークで、コネクタ作成者は、事前定義のUIタグを使用して作業アイテムUIレイアウトのXMLファイルを開発できます。可能な場合、コネクタ作成者は、できるかぎりそのネイティブ・アプリケーションの動作を保持しながら、JDeveloperのルック・アンド・フィールに準拠するUIレイアウトを作成します。この方法によって、エンド・ユーザーは、JDeveloperでのUIのナビゲート時にも、ネイティブ・アプリケーションと同様に操作できます。

4.1.3 作業アイテム・エディタ

作業アイテム・データとそのUIコンポーネント・ツリーの両方が使用可能な場合は、JDeveloper内の特別なエディタであるWorkitemEditorによって、データがUIコントロールにバインドされ、エディタ内に表示されます。

4.1.4 動的な作業アイテム・モデルおよびUI

Oracleチーム・プロダクティビティ・センターでは、実行時に動的な作業アイテム・モデルとUIがサポートされます。特定のリポジトリの場合、作業アイテム・モデルまたはUI(あるいはその両方)は、一部の作業アイテム・インスタンス・フィールドの値または事前定義の条件によって決定されます。Oracleチーム・プロダクティビティ・センターでは、WorkitemConnectorインタフェースのメソッドを公開することによって、実行時に様々なUIレイアウトを柔軟に表示できます。

4.1.5 拡張コネクタのダウンロード方法

Oracleチーム・プロダクティビティ・センターには、タスク・リポジトリ・コネクタがデフォルトで用意されています。他のコネクタはすべて、JDeveloper更新センターから更新の確認ウィザードを使用してダウンロードする必要があります。

コネクタ拡張機能をダウンロードする手順は、次のとおりです。

  1. 「ヘルプ」「更新の確認」の順に選択します。

  2. 更新の確認ウィザードで、「更新センターの検索」を選択します。

  3. オープン・ソースとパートナ拡張機能センターが選択されていることを確認し、「次へ」をクリックします。

  4. 「更新」ページで、リストをスクロールし、ダウンロードするOracleチーム・プロダクティビティ・センター・コネクタを選択して、「次へ」をクリックします。

  5. 「終了」をクリックします。

これらの各コネクタのオンライン・ヘルプは、ダウンロードとインストールを完了すると使用できるようになります。また、独自のコネクタの開発時に、これらのコネクタの内容および構造をサンプルとして参照することもできます。

詳細は、Oracle Fusion Middleware Oracle JDeveloperユーザーズ・ガイドの「更新の確認」を使用した拡張機能のインストール方法に関する項を参照してください。

4.1.6 チーム・プロダクティビティ・センター・コネクタの実行フローの例

前述の情報を実際に適合する方法を理解するために、JIRAリポジトリを使用する次の例を考えてみます。

My P1 Issuesという問合せを表す作業アイテムをダブルクリックします。JDeveloperで問合せが開き、問合せ基準が表示され、問合せが実行されて結果がリストに表示されます。この後は、結果リストの特定の問題をダブルクリックできます。JDeveloperで新しい作業アイテム・エディタが開き、選択した問題の詳細が表示されます。次に、この例で表されるコール順を示します。

  1. UIフレームワークで、My P1 Issuesに対する問合せ情報がTPCデータベースから取得されます。

  2. UIフレームワークで、JIRAコネクタ・インスタンスが検索され、JIRAコネクタ上のメソッドgetQueryResultsがコールされ、問合せ基準が送信されます。

  3. JIRAコネクタによって、JIRA作業アイテム・オブジェクト定義と一致する作業アイテム・オブジェクトのリストが返されます。

  4. TPCフレームワークによって、作業アイテムのリストが問合せの結果リストに表示されます。

  5. ユーザーが特定の作業アイテムをダブルクリックすると、UIフレームワークでJIRAコネクタ上のgetWorkitem()メソッドがコールされ、問題IDが渡されます。

  6. JIRAコネクタ・インスタンス内で、getWorkitem()によって、JIRA SOAPインタフェースを使用して問題データが取得されます。

  7. SOAPインタフェースからデータが返されると、getWorkitem()によってJIRA作業アイテム・オブジェクトに変換されます。

  8. UIフレームワークで作業アイテム・エディタが作成されます。

  9. 次に、getUIRegionName()のコールおよびUIコンポーネント・ツリーの生成によって、作業アイテム・エディタに問題UIページがロードされます。

  10. その後、作業アイテム・エディタによって、データがそのUIコントロールにバインドされます。

  11. 作業アイテム・エディタに、様々なレンダラを介して、問題データとそれらに関連付けられたUIコントロールが表示されます。

4.1.7 チーム・プロダクティビティ・センターのリポジトリ・データの定義方法

この例では、リポジトリ内に様々なタイプのオブジェクトを格納するためのXMLデータ・オブジェクトを定義します。このファイルの名前は、connector.xmlファイルにmodelFileNameとして指定する必要があります。このモデル・ファイルを作成し、プロジェクトの下のsrc/META-INFフォルダ内に格納します。

workitem-object.xsd内のタグを使用して、この定義ファイルに作業アイテム・データを記述できます。このファイルには、チーム・プロダクティビティ・センターに公開するフィールド、問合せ結果リストに表示するデフォルト列、およびそれらのデータを取得するために使用する値リストの定義とデータ・ソースを指定します。

workitem-object.xsdは、ファイルalmcommon-api.jarにあります。このファイルは、Oracleチーム・プロダクティビティ・センター・コネクタ・タグ・ガイドのtpctagdoc.zipとともに、ディレクトリjdeveloper\jdev\extensions\oracle.teamproductivitycenter\docの下に配布されます。

例4-1は、作業アイテム定義ファイル(SampleDef.xml)の例です。

例4-1 サンプルの作業定義ファイル

<?xml version="1.0" encoding="windows-1252"?>
<RepositoryModel resName="res" resFile="/META-INF/res/modelresource.xml">
        <WorkItem data-source="rpthead" id-def="TASKID" id-label="${res.TASK_ID}" label-def="TASKID"
                  name="${res.TASK_NAME}" type="Task" subject-def="DESC"
                  webURLHandler="oracle.sampleconnector.model.TaskWebReferenceImpl"
                  supportSearchByID = "true" 
                  xmlns="http://www.oracle.com/alm" version="1.1.1.1">
                <Fields>
                        <Field name="TASKID" label="${res.TASK_ID}" type="number"
                               readOnly="true"/>
                        <Field name="DESC" label="${res.TASK_DESC}" required="true" 
                               maxLength="80" type="string"/>
                        <Field name="OWNER" label="${res.TASK_OWNER}"
                               defaultValue="" controlType="lov" type="string"
                               lovDef="owner_lov"/>
                        <Field name="STATUS" label="${res.TASK_STATUS}" type="number"
                               required="true" controlType="choice"
                               lovDef="statusLookUp"/>
                        <Field name="DUEDATE" label="${res.TASK_DUEDATE}" type="date"
                               readOnly="true"/>
                        <Field name="URL" label="${res.TASK_URL}" maxLength="255"
                               type="string"/>
                </Fields>
                <QueryListColumns>
                        <FieldRef name="TASKID"/>
                        <FieldRef name="DESC"/>
                        <FieldRef name="OWNER"/>
                        <FieldRef name="STATUS"/>
                        
                </QueryListColumns>
                <WebResource>
                        <URLDef name="URL" archorOn="label"/>
                        <URLDef name="TASKID" archorOn="field"/>
                </WebResource>
                <LovDefs>
                        <LovDef name="owner_lov" list-source="users">
                                <CriteriaMap>
                                        <Map listFieldRef="USERID"
                                             fieldRef="OWNER"/>
                                </CriteriaMap>
                                <FieldMap>
                                        <Map listFieldRef="USERNAME"
                                             fieldRef="OWNER"/>
                                </FieldMap>
                                <DisplayList>
                                        <FieldRef name="USERID"/>
                                        <FieldRef name="USERNAME"/>
                                </DisplayList>
                        </LovDef>
                        <LovDef name="statusLookUp" list-source="status">
                                <FieldMap>
                                        <Map listFieldRef="SID"
                                             fieldRef="STATUS"/>
                                </FieldMap>
                                <DisplayList>
                                        <FieldRef name="SID"/>
                                        <FieldRef name="SDESC"/>
                                </DisplayList>
                        </LovDef>
                </LovDefs>
                <DataSources>
                        <DataSource name="users" id-def="USERID">
                                <Field name="USERID" label="${res.USER_ID}"
                                       type="string"/>
                                <Field name="USERNAME" label="${res.USER_NAME}"
                                       type="string"/>
                        </DataSource>
                        <DataSource name="priority" id-def="PID">
                                <Field name="PID" type="number"/>
                                <Field name="PDESC" type="string"/>
                        </DataSource>
                        <DataSource name="status" id-def="SID">
                                <Field name="SID" type="number"/>
                                <Field name="SDESC" type="string"/>
                        </DataSource>
                </DataSources>
        </WorkItem>
</RepositoryModel>

表4-1に、使用されているタグとその説明を示します。

表4-1 リポジトリ・データ構成タグ

構成タグ 属性 説明

RepositoryModel


このコネクタに対して使用されるすべてのタイプの作業アイテムを囲みます。


resName

リソース・バンドルの名前。これは、指定されている記号に基づいてランタイム・ラベルを識別するためのネームスペースとして使用されます。たとえば、label="${res.ISSUE_PROJECT}"は、ISSUE_PROJECTENでProjectとして定義されていると、現在のJDeveloperロケールがENの場合は実行時にProjectに解決されます。


resFile

コネクタのリソース・バンドル・ファイルのパス。

Workitem

data-source

バックエンド・リポジトリ・ソースを表します。データベース表を使用できます。


id-def

作業アイテムを一意に識別するために使用するフィールド。ほとんどの場合、作業アイテムのIDまたは番号です。


subject-def

作業アイテムのタグ付け時または作業アイテム間の関連の作成時にサブジェクト・フィールドとして使用されるフィールド。


Type

作業アイテムのタイプまたはカテゴリ。異なるタイプの複数の作業アイテムをコネクタ・モデル定義ファイルに指定できるため、実行時には、作業アイテム用のURLエディタを作成するために作業アイテムのタイプが使用されます。タイプは、様々な作業アイテムのページでマウスを右クリックして表示されるメニュー項目など、特定のUI要素にも表示されます。


xmlns

XMLネームスペース。


version

モデル定義ファイルのバージョン。

Fields


リポジトリ・オブジェクトに使用されるすべてのフィールドを囲みます。

Field

name

フィールドの名前。


label

詳細UIや問合せUIなど、様々な作業アイテムのページのフィールドに使用される表示ラベル。


type

フィールドのデータ型。有効な値は"number"、"string"、"date"です。デフォルトはstringです。


required

trueに設定すると、そのフィールドが必須フィールドであることを示すために、フィールド・ラベルの前に(*)が表示されます。デフォルトはfalseです。


controlType

使用するUIコントロールの詳細は、第4.2.5項「チーム・プロダクティビティ・センターUIを使用してデータを宣言的に表示する方法」を参照してください。


lovDef

controlTypeが"lov"の場合に使用するLOV定義の名前。「LovDefs」を参照してください。


readonly

trueに設定すると、対応するコントロールがグレー表示され、フィールド値が読取り専用モードになります。デフォルトはfalseです。


queryable

trueに設定すると、このフィールドは、問合せフォームのフィールド・コンボ・ボックス内に表示されます。デフォルトはtrueです。


maxLength

フィールドに入力できる最大文字数を設定します。

LovDefs


リポジトリ・フィールドに使用されるすべての値リスト(LOV)定義を囲みます。

LovDef


LOVの定義。


name

LOVの名前。


list-source

そのデータを取得するために使用するデータ・ソースの名前。「DataSource」を参照してください。

DataSources


LOVで使用されるすべてのデータ・ソースを囲みます。

DataSource


データ・ソースの定義。


name

データ・ソースの名前。


id-def

バックエンド・リポジトリ内のオブジェクト・タイプまたは表名。

QueryListColumns


問合せ結果リストに表示するデフォルト列のリスト。

WebResource


ハイパーリンクされるフィールドを説明するセクション。

URLDef


WebResourceの子。ハイパーリンク可能な各フィールドを説明します。


name

フィールド・リストからのフィールドの名前。


archorOn

下線付きのハイパーリンクをラベル上に表示するか、実際の値上に表示するかを指定します。有効な値は"label"または"field"です。デフォルトはfieldです。


4.1.8 コネクタへのリスナーの追加方法

workitem.propertiesファイルは、チーム・プロダクティビティ・センターでリスナー(作業アイテムに関するイベントが発生したときに起動するjavaクラス)の保存に使用されるファイルです。このファイルを編集して、ユーザー入力に関してコネクタが依存する特定のリスナーを含めます。

コネクタ拡張機能を作成するときは、workitem.propertiesファイルがコネクタ・バンドルに含まれていることを確認してください。

4.2 Oracleチーム・プロダクティビティ・センター・コネクタの作成

チーム・プロダクティビティ・センター・コネクタは、JDeveloper拡張機能プロジェクトとして開始します。(XMLの)構成ファイルを使用して、コネクタ・インスタンスを作成するためのパラメータを保存して管理します。また、コネクタは、リポジトリによって使用されるデータをJDeveloperが解析できるように定義し、リポジトリからデータを取得し、JDeveloper内でデータを表示するためのチーム・プロダクティビティ・センターUIを使用します。後続の各項では、各タスクについてさらに詳細に説明し、WorkItemConnectorインタフェースを実装するためのサンプル・コードを示します。

4.2.1 Oracleチーム・プロダクティビティ・センター・コネクタの作成方法

チーム・プロダクティビティ・センター・コネクタは、JDeveloper拡張機能として作成されます。この結果、JDeveloperとの統合が可能であり、コネクタ開発の完了後には、JDeveloperの「更新の確認」機能を使用して、コネクタをパッケージ化および配布するためのフレームワークも提供されます。これによって、コネクタを開発チームに配布するための既知のメカニズムが提供されます。

次の手順は、Oracleチーム・プロダクティビティ・センター・コネクタの作成プロセスの概要を示しています。ここに示されている多くの手順の詳細は、Oracle® Fusion Middleware Oracle JDeveloperユーザーズ・ガイドに記載されています。

Oracleチーム・プロダクティビティ・センター・コネクタを作成する手順は、次のとおりです。

  1. コネクタを作成するためのJDeveloper拡張機能プロジェクトを作成します。「ファイル」→「新規」→「すべての機能」→「クライアント層」→「拡張機能の開発」の順に選択します。

  2. コネクタ構成XMLファイルを作成します。チーム・プロダクティビティ・センター・インストーラで使用されるコネクタ構成パラメータを提供する必要があります。パラメータはシード・データとして処理され、チーム・プロダクティビティ・センター・データベースに格納されます。これらは、コネクタのインスタンスを作成する際、実行時に使用されます。

    詳細は、第4.2.2項「Oracleチーム・プロダクティビティ・センター・コネクタ構成ファイルの作成方法」を参照してください。

  3. Oracleチーム・プロダクティビティ・センターに公開するオブジェクト・タイプを決定します。たとえば、MSプロジェクト・サーバー・コネクタの作成者が、タスク、プロジェクトおよびリソース・データを表示するように決定すると、3つのオブジェクト・タイプが存在することになります。

  4. リポジトリ・オブジェクト定義XMLファイルを作成します。このファイルでは、各オブジェクト・タイプのフィールド詳細、デフォルト・ラベル、使用するデフォルトUIコントロール・タイプ、必須かどうかなどが提供されます。

    詳細は、第4.1.7項「チーム・プロダクティビティ・センターのリポジトリ・データの定義方法」を参照してください。

  5. 特定のリスナーを使用している場合は、workitem.propertiesファイルに追加して、ファイルがコネクタ・バンドルに含まれていることを確認します。

    詳細は、第4.1.8項「コネクタへのリスナーの追加方法」を参照してください。

  6. コネクタUIレイアウトXMLファイルを作成します。これによって、チーム・プロダクティビティ・センター宣言UIフレームワークで提供されるUIタグを使用して、UIをレイアウトできます。

  7. WorkItemConnectorおよび(オプションで)WorkItemAttachmentインタフェース・メソッドを実装するクラスを作成します。このクラスでは、バックエンド・リポジトリから使用できる適切なAPIを使用して、接続の確立、リポジトリ・データの送受信、チーム・プロダクティビティ・センターで使用される作業アイテム書式へのデータの変換が実行されます。

  8. 状況依存ヘルプ・ファイルを提供します。ヘルプ・ファイルは、ユーザーが作業アイテム詳細UIをフォーカスしている状態で[F1]を押すと、JDeveloperヘルプ・センターによってロードされます。

    詳細は、第4.4.1項「チーム・プロダクティビティ・センター・コネクタへのヘルプの追加方法」を参照してください。

  9. 複数言語サポート用のリソース・バンドル・ファイルを提供します。

    詳細は、第4.5.4項「コネクタ・バンドル・ファイルの生成方法」を参照してください。

  10. コネクタをデプロイメント用の適切なZIP形式にパッケージ化します。

後続の各項では、各タスクについてさらに詳細に説明し、WorkItemConnectorインタフェースを実装するためのサンプル・コードを示します。

4.2.2 Oracleチーム・プロダクティビティ・センター・コネクタ構成ファイルの作成方法

コネクタ構成XMLファイルには、ランタイム・コネクタ・インスタンスの作成時に使用されるパラメータが含まれています。パラメータは、チーム・レベルまたはサーバー・レベルで設定できます。この構成ファイルは、インストール時に、Oracleチーム・プロダクティビティ・センター・インストーラによって読み込まれ、シード・データがチーム・プロダクティビティ・センター・データベース表に移入されます。

connector.xmlファイルは、コネクタのパラメータを追加できるように作成する必要があり、これらのパラメータには、チーム・リーダーまたは管理者が値を定義できます。

connector.xmlファイルを作成する手順は、次のとおりです。

  1. アプリケーション・ナビゲータで拡張機能プロジェクトを右クリックします。

  2. 「新規」→「XML」→「XMLドキュメント」の順に選択します。

  3. このファイルにconnector.xmlという名前を付け、プロジェクトの下のsrc/META-INFフォルダ内に保存します。

この構成ファイルでは、almcommon-api.jarファイルにあるconnector.xsdファイルに定義されたタグが使用されます。このJARファイルは、JDeveloperインストール・フォルダ\jdeveloper\jdev\extensions\oracle.teamproductivitycenter\libにあります。

例4-2は、構成ファイルの例を示しています。

例4-2 構成ファイル・サンプル・コード

<?xml version="1.0" encoding="UTF-8"?>
<ConnectorDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://www.oracle.com/alm connector.xsd"
                     xmlns="http://www.oracle.com/alm">
  <configuration id="Sample"
                 className="oracle.sampleconnector.model.SampleConnectorService"
                 repositoryType="Work Item"
                 uiFileName="/META-INF/SampleUI.xml"
                 modelFileName="/META-INF/SampleDef.xml"
                 version="1.0">
    <parameter>
      <name>SampleParam1</name>
      <defaultValue>Default value 1</defaultValue>
      <label>
        <locale>US</locale>
        <value>Sample Param 1</value>
      </label>
      <description>This is the sample admin param one</description>
      <accessLevel>ALM-Admin</accessLevel>
    </parameter>
    <parameter>
      <name>SampleParam2</name>
      <defaultValue>Default value 2</defaultValue>
      <label>
        <locale>US</locale>
        <value>Sample Param 2</value>
      </label>
      <description>This is the sample admin param two</description>
      <accessLevel>ALM-Admin</accessLevel>
    </parameter>
    <parameter>
      <name>SampleTeamParam</name>
      <defaultValue>Sample Team Param</defaultValue>
      <label>
        <locale>US</locale>
        <value>Sample Team Param</value>
      </label>
      <description>This is a sample team parameter</description>
      <accessLevel>Team-Admin</accessLevel>
    </parameter>
  </configuration>
</ConnectorDefinition>

表4-2に、使用されているタグとその説明を示します。

表4-2 connector.xmlで使用されているタグ

構成タグ 属性 説明

configuration

id

コネクタの名前


className

実行時にコネクタ・インスタンスを作成する際にロードするコネクタ・クラス。


uiFileName

コネクタUI定義を含む、コネクタjarファイル内のファイルへのパス。


modelFileName

コネクタ・モデル定義を含む、コネクタjarファイル内のファイルへのパス。


version

現在のコネクタのバージョン。新規/アップグレードのコネクタ・パッケージでは、新規バージョンを使用する必要があります。

parameter


各構成可能パラメータを指定します。

name


パラメータ名。

label


チーム管理UI(または管理UI)で使用する表示テキスト。

locale


ローカライズ・サポート。

value


指定したロケールの値。

description


このパラメータの内容の簡単な説明。これは、管理UIに表示されます。

accessLevel


ALM-Admin: TPC管理者のみが、管理UI→「リポジトリ」タブでこのパラメータを構成できることを示します。

Team-Admin: チーム管理者のみが、管理UI→「チーム」→「リポジトリ」タブでこのパラメータを構成できることを示します。


4.2.3 カスタマイズしたリスナーおよびマネージドBeanの使用方法

チーム・プロダクティビティ・センターに対するコネクタの開発者は、作業アイテムのUIコントロールの動作をカスタマイズすることによって、コネクタ固有の機能を提供できます。

チーム・プロダクティビティ・センターには、すべてのメタデータ・リソースを登録するためのコネクタ・レベルの構成ファイルtpc-config.xmlが用意されています。このファイルは、src/META-INF/の下のコネクタ・ソース・コード・ディレクトリに格納する必要があります。

構成ファイルでサポートされるタグおよび属性の詳細は、Oracle Fusion Middleware Oracle Team Productivity Center Connectorsタグ・リファレンスを参照してください。

カスタム・マネージドBeanを作成する手順は、次のとおりです。

チーム・プロダクティビティ・センターに対するコネクタを作成する場合は、次の手順に示すように、値バインディング・サポート用にカスタマイズしたマネージドBeanを作成できます。

  1. 例4-3に示すように、ファイルtpc-config.xmlにマネージドBeanエンティティを登録します。

    例4-3 マネージドBeanエンティティの登録

      <managed-bean>
          <name>labelBean</name>
              <impl-class>oracle.alm.sample.resbean.LabelBean</impl-class>
              <lifecycle>page</lifecycle>
      </managed-bean>
    
  2. 例4-4に示すように、LabelBeanを実装します。

    例4-4 LabelBeanの実装

    public class LabelBean
    {
       public LabelBean(){}
       public String getLabel()
          {
               return _label;
              }
       public  void setLabel(String label)
        { 
              _label = label;
            }
       String _label = "test label";
    }
    
  3. 作業アイテム定義メタデータ・ファイル(たとえば、作業アイテム・フィールド用)、またはUIメタデータ・ファイルのUIコントロールに対するラベル属性のいずれかで、マネージドBeanを使用します。

    label="${labelBean.label}"

カスタマイズしたUIリスナーを作成する手順は、次のとおりです。

また、カスタマイズしたUIリスナーを作成し、作業アイテムUIメタデータのコントロールに登録するには、次の手順を実行します。

  1. 例4-5に示すように、tpc-config.xmlにリスナーを登録します。

    例4-5 リスナーの登録

      <managed-bean>
        <name>opentask </name> 
        <impl-class>oracle.alm.sample.view.OpenTaskListener </impl-class>
        <lifecycle>page </lifecycle>
      </managed-bean>
    
  2. OpenTaskListenerクラスを実装します。

    例4-6 クラスOpenTaskListenerの実装

    package oracle.alm.sample.view;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import java.util.List;
     
    import oracle.alm.connector.data.WorkItem;
    import oracle.alm.view.application.ViewManager;
    import oracle.alm.view.context.AlmELContext;
    import oracle.alm.view.model.AlmDataTableModel;
    import oracle.alm.view.uicomponents.AlmComponent;
    import oracle.alm.view.uicomponents.AlmContextMenuComponent;
    import oracle.alm.view.uicomponents.AlmTableComponent;
    import oracle.alm.view.uicomponents.RenderingContext;
     
    public class OpenTaskListener
      implements ActionListener, AlmScope
    {
      public OpenTaskListener(RenderingContext rcontext, AlmComponent component)
      {
       super();
       _rcontext = rcontext;
       _component = component;
      }
      
      public void actionPerformed(ActionEvent e)
      {
        if (_component instanceof AlmContextMenuComponent)
        {
          AlmComponent parent = _component.getParent();
          if (parent instanceof AlmTableComponent)
          {
            AlmTableComponent tableComp = (AlmTableComponent) parent;
            List<Integer> rows = tableComp.getSelectedRows();
            if (rows != null)
            {
              ViewManager vmanger = ViewManager.getInstance(); 
              for (int row: rows)
              {
                AlmELContext elcontext = vmanger.getELContext(_rcontext);
                AlmDataTableModel dataModel = tableComp.getValue(elcontext);
                Object selectedValue = dataModel.getSelectedItem(row);
                if (selectedValue instanceof WorkItem) 
                {
                  String wiType = _rcontext.getCurrentWorkItemType();
                  String reposName = _rcontext.getCurrentReposName();
                  String reposId = _rcontext.getCurrentReposId(); 
                  vmanger.OpenWorkItemInEditor(((WorkItem) selectedValue),
                                               wiType, reposName, reposId);
                }
              }
            }
          }
        }
      }
      public void setRenderingContext(RenderingContext rc){_rcontext = rc};
      public RenderingContext getRenderingContext(){return _rcontext};
      public void setSourceComponent(AlmComponent component) {_component = component};
      public AlmComponent getSourceComponent() {return _component};
      private RenderingContext _rcontext;
      private AlmComponent _component;}
    
  3. カスタマイズしたリスナーを作業アイテムUIメタデータで使用します。

    例4-7 カスタマイズしたリスナーの作業アイテム内での使用

    <?xml version="1.0" encoding="windows-1252" ?>
    <regions resFile="/META-INF/res/uiresources.xml">  
    <region id="Default" helpTopicId="f1_connector_sample_htm">
        <formLayout columns="1" blockSize="10" fieldWidth="400">
          <inputText label="#{workitemmodel.labels.TASKID}" 
                 value="#{workitemmodel.values.TASKID}" readOnly="true"/>          
          <inputText label="#{workitemmodel.labels.DESC}"
                 value="#{workitemmodel.values.DESC}"/> 
          <listOfValues label="#{workitemmodel.labels.OWNER}" 
                 value="#{workitemmodel.values.OWNER}" 
                 source="OWNER" pprTargets="statusID"/>
          <comboBox label="#{workitemmodel.labels.STATUS}"
                 value="#{workitemmodel.values.STATUS}"
                 valueSet="#{workitemmodel.listItems.STATUS}"
                 readOnly="true" id="statusID"/>
          <inputDate label="#{workitemmodel.labels.DUEDATE}"
                 value="#{workitemmodel.values.DUEDATE}"/>
          <inputText label="#{workitemmodel.labels.URL}" 
                 value="#{workitemmodel.values.URL}"/> 
        </formLayout>
        <panelLayout>
          <action text="Open Task" actionListener="${opentask}"/>
        </panelLayout>
      </region>
    </regions>
    

ポップアップ・メニュー・アクションをカスタマイズする手順は、次のとおりです。

ユーザーが問合せ結果表でマウスの右ボタンをクリックしたときに表示される、カスタマイズ・メニュー項目を追加できます。この手順は次のとおりです。

  1. リスナーをtpc-config.xmlに登録し、メニュー項目の詳細を指定します。

    例4-8 詳細を指定したリスナーの登録

      <managed-bean>
      <name>savetask</name>
      <impl-class>oracle.alm.sample.model.SaveTaskListener</impl-class>
      <lifecycle>page</lifecycle>
      </managed-bean>
      <contextMenuDef>
      <menuItemDef label="Save" listenerRef="savetask"/>
      </contextMenuDef>
    
  2. SaveTaskListenerクラスを実装します。

    例4-9 クラスSaveTaskListenerの実装

    package oracle.alm.sample.model;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.List;
    import javax.swing.JOptionPane;
    import oracle.alm.connector.data.WorkItem;
    import oracle.alm.view.application.ViewManager;
    import oracle.alm.view.context.AlmELContext;
    import oracle.alm.view.model.AlmDataTableModel;
    import oracle.alm.view.uicomponents.AlmComponent;
    import oracle.alm.view.uicomponents.AlmContextMenuComponent;
    import oracle.alm.view.uicomponents.AlmTableComponent;
    import oracle.alm.view.uicomponents.RenderingContext;
     
    public class SaveTaskListener implements ActionListener, AlmScope
    {
      public SaveTaskListener(RenderingContext rcontext, AlmComponent component)
      {
       super();
       if (component instanceof AlmContextMenuComponent)  
             _almComponent = (AlmContextMenuComponent) component;  
                     _renderingContext = rcontext;
       }
       
       public void actionPerformed(ActionEvent e)
       {
        ViewManager vmgr = ViewManager.getInstance();
            
            //First get the corresponding AlmTableComponent
            AlmComponent parent = _almComponent.getParent();
            if (parent instanceof AlmTableComponent)
            {
               AlmTableComponent tableComp = (AlmTableComponent) parent;
            //Then call public API on tableComp to get selected rows
            List&l;Integer> rows = tableComp.getSelectedRows();
            
            if (rows != null)
             {
              int row = rows.size();
              String cs = "";
              if (row == 1)
              { 
                //show the ID and subject of the selected item
                    //Then get the selected value object throw the tableComp's UI model.
                    ViewManager vmanger = ViewManager.getInstance(); 
                    AlmELContext elcontext = vmanger.getELContext(_renderingContext);
                    AlmDataTableModel dataModel = tableComp.getValue(elcontext);
                    Object selectedValue = dataModel.getSelectedItem(row);
                    if (selectedValue instanceof WorkItem)
                    {
                         cs = "Save Task listener: work item ";
                             WorkItem wi = (WorkItem)selectedValue;
                             cs += wi.getRowKey() + " with subject \'";
                             cs += wi.getSubject() + "\' has been selected.";
                    }
              }
              else if (row > 1)
              {
                //show the number of rows selected
                    cs = "Save Task listener: " + Integer.toString(row) + " rows selected";
                    }
                    JOptionPane.showMessageDialog(vmgr.getIDEMain(), cs);
              }
            }
      }
    public void setRenderingContext(RenderingContext rc){_ renderingContext = rc};
    public RenderingContext getRenderingContext(){return _ renderingContext };
    public void setSourceComponent(AlmComponent component) {_almComponent = component};
    public AlmComponent getSourceComponent() {return _almComponent };
     
    AlmContextMenuComponent _almComponent;
    RenderingContext _renderingContext;
    }
    

4.2.4 ファイアウォールを介したコネクタ・データへのアクセス方法

JDeveloperが背後で実行されているファイアウォールを介したデータのフェッチのために、コネクタでHTTPプロトコルを使用する必要がある場合は、次の特別な変更が必要です。

  1. JDeveloperで、「ツール」→「プリファレンス」の順に選択します。

  2. 「プリファレンス」ダイアログで、「Webブラウザとプロキシ」ノードを開きます。

  3. 「プロキシの使用」チェック・ボックスを選択し、「ホスト名」「ポート」および「例外」の値を入力します。

  4. コネクタ作成者は、HttpClientに対するプロキシ構成を、データをフェッチする必要があるコネクタ・コード内(例: getQueryResult() API内)に設定する必要があります。

    例4-10 コネクタ・コード内のプロキシ構成の設定

      HttpClient httpclient = new HttpClient();
      String proxyHost = System.getProperty("http.proxyHost");
      String proxyPort = System.getProperty("http.proxyPort");
      Boolean useProxy = null;
     
      if (proxyHost != null && !proxyHost.isEmpty()&&
          proxyPort != null && !proxyPort.isEmpty())
      {
        String proxyExceptions = System.getProperty("http.nonProxyHosts");
        useProxy = (proxyExceptions == null);
        if (!useProxy)
        {
          String host = "";
          try
          {
            URL url = new URL(getServerURL());
            host = url.getHost();
            useProxy = true;
          }
          catch (Exception e)
          {
            e.printStackTrace();
          }
     
          proxyExceptions = proxyExceptions.replace("*", ".*");
          useProxy = (Pattern.matches(proxyExceptions, host) == false);
        }
      }
     
      if (useProxy != null && useProxy.equals(Boolean.TRUE))
            httpclient.getHostConfiguration().setProxy(proxyHost, Integer.parseInt(proxyPort));
    

4.2.5 チーム・プロダクティビティ・センターUIを使用してデータを宣言的に表示する方法

Oracleチーム・プロダクティビティ・センターには、すべてのコネクタに対する宣言UIをサポートするフレームワークが用意されています。コネクタ作成者は、workitem-ui.xsdに定義されているUIタグを使用して、作業アイテムUIをレイアウトできます。入力テキスト、ラジオ・ボタン、コンボ・ボックス、チェック・ボックス、選択リスト、値リスト(LOV)などの基本的なUI要素はすべてサポートされています。

この手順では、リポジトリ・オブジェクトをユーザーに示すために、UI定義を格納するXMLデータ・オブジェクトを定義します。このファイルの名前は、connector.xmlファイルにuiFileNameとして指定する必要があります。このUIファイルを作成し、プロジェクトの下のsrc/META-INFフォルダ内に格納します。

workitem-ui.xsdは、ファイルalmcommon-api.jarにあります。

事前定義のcontrolTypeのデフォルトをモデル定義で使用すると、モデルからコントロール・タグを自動的に取得するformLayoutコンポーネントを使用するのみで、UIを簡単にレイアウトできます。この項では、これを実行できる方法の例をいくつか示します。

例4-11 作業アイテムUIページを表示するための簡単な方法

<?xml version="1.0" encoding="windows-1252" ?>
<regions resFile="/META-INF/res/uiresources.xml">
  <region name="Easy" helpTopicId="f1_connector_sample_htm">
    <formLayout value="${workitemmodel}" columns="1" blockSize="10"/>
  </region>
</regions>

表4-3 前述の例で使用されているUIタグ

UIタグ 属性 説明

Regions


使用されているすべてのUIリージョンのカプセル化。


resFile

複数言語サポート用に使用するリソース・バンドル・ファイルを指定します。

Region


その名前属性で識別される1ページのレイアウト。


helpTopicId

(コネクタjarファイル内から)使用するヘルプ・ファイル名をJDeveloperに通知します。

formLayout

value

値は"${workitemmodel}"であり、これは、実行時に適切なコネクタ・モデルに解決されます。


columns

フォームをレイアウトする列数を設定します。


blockSize

各blockSize行の後に、行セパレータが追加されることを示します。


rowToSpan

モデルのどの行がページの行全体にわたって表示されるかを示します。"1, 3, 5"の場合、1番目、3番目および5番目の行がページの行全体にわたって表示されます。


明示的なレイアウトを使用してUIページを表示する手順は、次のとおりです。

この例は、例4-11と同じUIを示していますが、かわりに明示的なレイアウトを使用しています。これは、同じデータ・モデルの複数のUIビューがある場合に必要です。たとえば、オブジェクトの新規インスタンスの作成時にはフィールドのサブセットのみが表示されるようにするが、保存後はすぐに、すべてのフィールドが表示されるようにする場合があります。

例4-12 UIページの明示的なレイアウト

<?xml version="1.0" encoding="windows-1252" ?>
<regions resFile="/META-INF/res/uiresources.xml">
  <region name="Default" helpTopicId="f1_connector_sample_htm">
    <formLayout columns="1" blockSize="10" >
        <inputText label="#{workitemmodel.labels.TASKID}" 
                   value="#{workitemmodel.values.TASKID}" 
                   readOnly="true"/>
        <inputText label="#{workitemmodel.labels.DESC}" 
                   value="#{workitemmodel.values.DESC}"/>
        <listOfValues label="#{workitemmodel.labels.OWNER}" 
                   value="#{workitemmodel.values.OWNER}"
                   srcAttr="OWNER"
                   lovDef="#{workitemmodel.lovDefs.OWNER}"/>
  <comboxBox label="#{workitemmodel.labels.STATUS}" 
                   value="#{workitemmodel.values.STATUS}"
                   valueSet="#{workitemmodel.listItems.STATUS}"/>      
  <inputDate label="#{workitemmodel.labels.DUEDATE}" 
                   value="#{workitemmodel.values.DUEDATE}"/>
        <inputText label="#{workitemmodel.labels.URL}" 
                   value="#{workitemmodel.values.URL}"/>
    </formLayout>
  </region>
</regions>

表4-4 コントロール・タイプ

UIタグ 属性 説明

inputText

label

UIに表示するフィールド・ラベル。


value

ランタイム・フィールド値。


required

必須かどうかを示します。


readOnly

データを編集できるかどうかを示します。

inputDate

label

UIに表示するフィールド・ラベル。


value

ランタイム・フィールド値。


required

必須かどうかを示します。


readOnly

データを編集できるかどうかを示します。

comboBox

label

UIに表示するフィールド・ラベル。


value

ランタイム・フィールド値。


required

必須かどうかを示します。


readOnly

データを編集できるかどうかを示します。

checkBox

label

UIに表示するフィールド・ラベル。


value

ランタイム・フィールド値。


required

必須かどうかを示します。


readOnly

データを編集できるかどうかを示します。

radio

label

UIに表示するフィールド・ラベル。


value

ランタイム・フィールド値。


required

必須かどうかを示します。


readOnly

データを編集できるかどうかを示します。


valueSet

値リストの取得場所を定義します。

listOfValues

label

UIに表示するフィールド・ラベル。


value

ランタイム・フィールド値。


required

必須かどうかを示します。


readOnly

データを編集できるかどうかを示します。


srcAttr

使用するソース・フィールドを定義します。


lovDef

ソース・フィールドのlovDefを定義します。

textEditor

label

UIに表示するフィールド・ラベル。


value

ランタイム・フィールド値。


required

必須かどうかを示します。


readOnly

データを編集できるかどうかを示します。


rows

表示する行数。


required

必須かどうかを示します。

list

label

UIに表示するフィールド・ラベル。


value

ランタイム・フィールド値。


valueSet

値リストの取得場所を定義します。


パネルを使用してより複雑なUIをレイアウトする手順は、次のとおりです。

より複雑なUIレイアウトの場合は、パネルを使用してコントロールをレイアウトすることもできます。パネルには、水平方向または垂直方向にするプロパティがあります。パネルはネストすることもできます。

例4-13 パネルを使用したコントロール・レイアウト

<?xml version="1.0" encoding="windows-1252" ?>
<regions resFile="/META-INF/res/uiresources.xml">
  <region name="Default" helpTopicId="f1_connector_sample_htm">
                <panelLayout layout=”horizontal”>
    <formLayout columns="1" blockSize="10" >
        <inputText label="#{workitemmodel.labels.TASKID}" 
                   value="#{workitemmodel.values.TASKID}" 
                   readOnly="true"/>
        <inputText label="#{workitemmodel.labels.DESC}" 
                   value="#{workitemmodel.values.DESC}"/>
        <listOfValues label="#{workitemmodel.labels.OWNER}" 
                   value="#{workitemmodel.values.OWNER}"
                   srcAttr="OWNER"
                   lovDef="#{workitemmodel.lovDefs.OWNER}"/>
  <comboxBox label="#{workitemmodel.labels.STATUS}" 
                   value="#{workitemmodel.values.STATUS}"
                   valueSet="#{workitemmodel.listItems.STATUS}"/>      
  <inputDate label="#{workitemmodel.labels.DUEDATE}" 
                   value="#{workitemmodel.values.DUEDATE}"/>
        <inputText label="#{workitemmodel.labels.URL}" 
                   value="#{workitemmodel.values.URL}"/>
    </formLayout>
         <textEditor value="#{workitemmodel.values.BIGDESC}"/>
  </region>
</regions>

表4-5 パネルの例で使用されているUIタグ

UIタグ 属性 説明

panelLayout

layout

グループ化コントロールのレイアウトの方向を指定します。有効な値はverticalおよびhorizontalです。


4.2.6 Oracleチーム・プロダクティビティ・センター・リポジトリからのデータの取得方法

様々な作業アイテム・タイプに対するモデルおよびUIレイアウトを定義した後、次のステップは、WorkItemConnectorインタフェース上のメソッド、およびWorkItemAttachmentインタフェース上のメソッド(コネクタで添付ファイルがサポートされている場合)の実装です。このトピックでは、これらのメソッドの詳細を説明します。

これらのメソッドを実装するには、チーム・プロダクティビティ・センターのJARファイルの場所をプロジェクトに追加して、WorkItemConnectorおよびWorkItemAttachmentインタフェースの適切なクラスを取得できるようにする必要があります。

チーム・プロダクティビティ・センターのJARファイルの場所をプロジェクトに追加する手順は、次のとおりです。

  1. 拡張機能プロジェクトをダブルクリックして、「プロジェクト・プロパティ」→「ライブラリとクラスパス」の順に選択します。

  2. 右側で、「JAR/ディレクトリの追加」を選択します。

  3. JDeveloperをインストールした場所にナビゲートします。JDev/Extensions/oracle.teamproductivitycenter/libフォルダの下で、almcommon-ip.jarファイルを検索して含めます。

4.2.6.1 WorkItemConnectorインタフェースの実装

JARが追加されたので、WorkitemConnectorに対するインタフェースを実装できます。

インタフェースを実装する手順は、次のとおりです。

  1. 「ファイル」→「新規」の順に選択します。

  2. 「一般」→「Java」→「Javaクラス」の順に選択します。

  3. Javaクラスの作成ウィザードで、クラスおよびパッケージ名を入力します。

  4. 「オプション属性」セクションで、プラス記号をクリックして、インタフェースを実装します。

  5. 「クラスおよびパッケージ・ブラウザ」で、「階層」タブを選択し、クラスoracle/alm/connector/WorkItemConnectorを検索します。WorkItemAttachmentインタフェースを実装する予定の場合は、[CTRL]キーを使用してそのインタフェースも選択します。

  6. 「OK」をクリックします。

この結果、実装する必要があるすべてのメソッドが含まれたスケルトン・ファイルが提供されます。

表4-6 メソッドの要約

API
説明

void

init(Map sessionContext)

クライアント側のコネクタ・インスタンスを初期化し、その対応するリポジトリに対して、コネクタの物理的な接続パラメータを作成します。

void

login(Map sessionContext, String userID, String password)

クライアント側のコネクタ・インスタンスとバックエンド・リポジトリ間のユーザー接続を確立します。

void

logout(Map sessionContext)

ユーザーをバックエンド・リポジトリから切断します。データ・ハッシュ構造を使用して状態を保存できます。

Void

setWorkItemDefs(Map sesion, Map<String, WorkItemDef> wiDefs)

フレームワークによって、コネクタ・モデル定義に定義されている作業アイテム・タイプに対するランタイム・データ構造が構築されます。

List<WorkItem>

getQueryResult(Map sessionContext, String wiType, QueryInfo query)

QueryInfoで定義される問合せ基準を満たす問合せ結果セットを取得します。

WorkItem

getWorkItem(Map sessionContext, String wiType, WorkItem workItem)

特定の作業アイテムを、そのタイプと一意の識別子によって取得します。

void

updateWorkItem(Map sessionContext, String wiType, WorkItem workItem)

既存の作業アイテムを、そのタイプと一意の識別子によって更新します。

void

createWorkItem(Map sessionContext, String wiType, WorkItem workItem)

指定したタイプの新規作業アイテムをそのバックエンド・リポジトリに作成します。


deleteWorkItem(Map sessionContext, String wiType, WorkItem workItem)

作業アイテムをそのバックエンド・リポジトリから削除します。

List<Row>

getLOVQueryResult(Map sessionContext, QueryInfo query, String fieldName)

事前定義のLOV(値リスト)に対する値セットを取得します。

boolean

IsAttachmentSupported (Map sessionContext, WorkItem wi)

指定した作業アイテムに対して添付ファイルがサポートされているかどうかを判断します。yesの場合は、作業アイテム・モデルでWorkItemAttachmentインタフェースを実装する必要があります。

String

getUIRegionName(Map sessionContext, String wiType, WorkItem wi)

コネクタUI XMLで定義されているリージョン名を取得します。

boolean

hasDynamicUI(Map session)

コネクタで動的UIがサポートされている場合は、trueを返します。

String

getDynamicUI(Map session, String currentUI)

新規作業アイテムUI定義のXML文字列を取得します。

boolean

hasDynamicModel(Map session)

コネクタで動的モデルがサポートされている場合は、trueを返します。

String

getDynamicModel (Map session, String currentModel)

新規作業アイテム・モデル定義のXML文字列を取得します。


4.2.7 カスタム・アクションに基づいた作業アイテム詳細のリフレッシュ方法

特定のシナリオでは、既存のレイアウトにおけるなんらかのカスタム・アクションに基づいて、作業アイテム詳細ページを新しいレイアウトにリフレッシュする必要があります。たとえば、ユーザーによるコンボ・ボックスからの新しい値の選択、日時ピッカーからの日付変更、ページ内のボタンの単純なクリックなどがあります。

タスクがその詳細エディタに表示されるとき、そのベースUIには「Status」コンビネーション・ボックスがあります。

図4-1 UIの「Status」コンビネーション・ボックス

UIの「Status」コンビネーション・ボックス

ステータスの値が「New」から「In-Progress」に変わると、ユーザーがステータスの進行状況に関する情報を提供できるリッチ・テキスト・コントロールを含む新規レイアウトが表示されます。

図4-2 ステータスUIに対する新規リッチ・テキスト・コントロール

ステータスUIに対する新規リッチ・テキスト・コントロール

ユーザーが作業アイテムの編集を終了し、「Submit」をクリックすると、成功または失敗メッセージを含んだ確認ページが表示されます。

図4-3 リッチ・テキスト・コントロール使用後の確認ページ

リッチ・テキスト・コントロール使用後の確認ページ

更新したタスク詳細ページを表示するには、「Return to Home」をクリックします。

機能を実装する手順は、次のとおりです。

  1. 動的なUI変更をトリガーするためのアクション・ソースとして使用するUIコントロール、およびUI相互作用を制御するリスナーを決定します。

  2. 作業アイテムUIレイアウト・メタデータ・ファイルに、新規UIリージョンを定義します。

  3. 対応するリスナーをマネージドBeanで実装します。

  4. 様々な条件に基づいて様々なUIリージョンを返すためのAPI getUIRegionName()を実装します。

  5. マネージドBeanをコネクタのtpc-config.xmlファイルに登録します。

  6. EL式を介して、UIメタデータでBeanを使用します。

後続の各項では、サンプル・コネクタを使用してさらに詳細に説明します。

4.2.7.1 UIコントロールおよびリスナー属性の決定

サンプル・コネクタでは、アクション・ソースとしてステータス・フィールドに対するコンビネーション・ボックス・コントロールを使用します。また、コンボ・ボックス・コントロール上でPopupMenuListenerを使用して、選択の変更をリスニングし、UIの動的更新作業を実行します。また、「Submit」ボタンを使用して、タスク詳細ページと確認ページ・レイアウト間をナビゲートします。

構成の詳細は、SampleDef.xmlファイルにあります。次の例では、ステータス・コンビネーション・ボックスと送信アクションが、それぞれ対応する属性名と値のペアでどのように定義されているかに注意してください。

例4-14 UIコントロールおよびリスナー属性の選択

<?xml version="1.0" encoding="windows-1252" ?>
    <region id="Homepage">
        <formLayout columns="1" blockSize="10" fieldWidth="400" labelWidth="60">
            <inputText label="#{workitemmodel.labels.PARENT_TASKID}" 
                              value="#{workitemmodel.values.PARENT_TASKID}" readOnly="true"/>            
            <inputText label="#{workitemmodel.labels.TASKID}" 
                              value="#{workitemmodel.values.TASKID}" readOnly="true"/>            
            <inputText label="#{workitemmodel.labels.DESC}" 
                               value="#{workitemmodel.values.DESC}"/>
            <listOfValues label="#{workitemmodel.labels.OWNER}" 
                                   value="#{workitemmodel.values.OWNER}" source="OWNER" 
                                   pprTargets="statusID"/>
            <comboBox label="#{workitemmodel.labels.STATUS}" 
                   value="#{workitemmodel.values.STATUS}" id="statusID" 
                   valueSet="#{workitemmodel.listItems.STATUS}" readOnly="true"                          
                   popupMenuListener="#{mainBean.statusListener}"/>
            <inputDate label="#{workitemmodel.labels.DUEDATE}" 
                               value="#{workitemmodel.values.DUEDATE}"/>
            <inputText label="#{workitemmodel.labels.URL}"  
                              value="#{workitemmodel.values.URL}"/>
           <panelLayout>
   <action text="Submit" actionCommand="gotoc                 actionListener="${dynamicBean.actionListener}"/>onfirmpage" 
           </panelLayout>
        </formLayout>        
        <separator/>        
    </region>

4.2.7.2 UIメタデータ・ファイルでの新規リージョンの定義

デフォルトのHomePageリージョンに加え、このコードでは、リージョンDemo(ステータスが「in-progress」に変わると表示)とリージョンconfirmation(ユーザーが「Submit」をクリックすると表示)の2つの新規リージョンが作成されます。

例4-15 新規リージョンの定義

<region id="Demo" helpTopicId="f1_connector_sample_htm">
     <formLayout columns="1" blockSize="10" fieldWidth="400" labelWidth="60">
            <inputText label="#{workitemmodel.labels.PARENT_TASKID}" 
                            value="#{workitemmodel.values.PARENT_TASKID}" readOnly="true"/>            
            <inputText label="#{workitemmodel.labels.TASKID}" 
                            value="#{workitemmodel.values.TASKID}" readOnly="true"/>            
            <inputText label="#{workitemmodel.labels.DESC}" value="#{workitemmodel.values.DESC}"/>
            <listOfValues label="#{workitemmodel.labels.OWNER}" 
                                pprTargets="statusID" value="#{workitemmodel.values.OWNER}" source="OWNER"/>
            <comboBox label="#{workitemmodel.labels.STATUS}" 
                                 value="#{workitemmodel.values.STATUS}" 
                                 popupMenuListener="#{mainBean.statusListener}"
                                 valueSet="#{workitemmodel.listItems.STATUS}" readOnly="true" 
                                 id="statusID"/>
            <inputDate label="#{workitemmodel.labels.DUEDATE}" 
                               value="#{workitemmodel.values.DUEDATE}"/>
            <inputText label="#{workitemmodel.labels.URL}" value="#{workitemmodel.values.URL}"/>
            <textEditor label="#{workitemmodel.labels.STATUS_REPORT}" 
                                value="#{workitemmodel.values.STATUS_REPORT}" contentType="html"/>            
            <panelLayout>
                  <action text="Submit" actionCommand="gotoconfirmpage" 
                            actionListener="${dynamicBean.actionListener}"/>
            </panelLayout>
        </formLayout>   
</region>

<region id="confirmation">
     <panelLayout layout="vertical">
        <inputText value="Task has been updated successfully." readOnly="true"/>
        <action text="Return to Home" actionCommand="gotohomepage" 
                               actionListener="${dynamicBean.actionListener}"/>
      </panelLayout>
    </region>

4.2.7.3 マネージドBeanでの対応するリスナーの実装方法

ステータス・コンボ・ボックスのリスナー・オブジェクト(popupMenuListener)は、HomePageBean.javaに次のように実装されます。

例4-16 マネージドBeanでのリスナーの実装

  public PopupMenuListener getStatusListener()
  {
    if (statusListener == null)
    {
      statusListener = new PopupMenuListener()
        {
          public void popupMenuWillBecomeInvisible(PopupMenuEvent e)
          {
            JComboBox src = (JComboBox) e.getSource();   
            Object[] selected = (Object[])src.getSelectedItem();
            if(selected == null)
              return;

            String value = (String)selected[1];
            if (value != null && value.contains("Progress"))
            {
               _rcontext.getConnectorParams().put("navigatorpage", "D");
            }
            else
              _rcontext.getConnectorParams().put("navigatorpage", "H");
            //we just need to refresh the current page;
            ViewManager vm = ViewManager.getInstance();
            if(vm != null)
              vm.refreshWorkItemDetailUI(_rcontext);
          }
          public void popupMenuCanceled(PopupMenuEvent e)
          {
          }
          public void popupMenuWillBecomeVisible(PopupMenuEvent e)
          {
          }
        };
    }
    return statusListener;
  }

「Submit」ボタンのリスナー・オブジェクト(actionListener)は、DynamicRegionBeanに次のように実装されます。

例4-17 「Submit」ボタンのリスナーの実装

  public ActionListener getActionListener()
  {
    if (actionListener == null)
    {
      actionListener = new ActionListener()
        {
          public void actionPerformed(ActionEvent event)
          {
            String command = event.getActionCommand();
            ViewManager vm = ViewManager.getInstance();
            if (command != null && command.equals("gotohomepage"))
            {
              _rcontext.getConnectorParams().put("navigatorpage", "H");
            }
            else if (command != null && command.equals("gotowelcomepage"))
            {
              _rcontext.getConnectorParams().put("navigatorpage", "W");
            }
            else if (command != null && command.equals("gotodemopage"))
            {
              _rcontext.getConnectorParams().put("navigatorpage", "D");
            }

            vm.refreshWorkItemDetailUI(_rcontext);
          }
        };
    }

4.2.7.4 マネージドBeanを実装するためのガイドライン

すべてのマネージドBeanでAlmScopeインタフェースを実装する必要があります。Oracleチーム・プロダクティビティ・センターでは、AlmScopeを使用して、マネージドBeanを使用するUIコントロールに対するrenderingContextと対応するAlmComponentが同期化されます。

コネクタのマネージドBeanレイヤーからの情報を渡して、他のコネクタ・クラスで使用できるようにする方法は2通りあります。

  • RenderingContextを使用する方法

    パラメータ名と値のペアをコネクタ・セッション・レベルで含めることができます。前述の例で示したコードを確認する方法は、次のとおりです。

    例4-18 コネクタ・セッション・レベルでのパラメータ名と値のペア

    _rcontext.getConnectorParams().put("navigatorpage", "H");
    

    この情報は、次に示すように、他のコネクタ・クラス内で取得できます。

    例4-19 他のコネクタ・クラス内での情報の取得

    Map params = (Map) session.get(WorkItemConnector.SESSION_PARAMS_KEY);
    
  • 現在の作業アイテム・オブジェクトを使用する方法

    ViewManagerクラスを使用して、現在の作業アイテム・オブジェクトにアクセスできます。

    例4-20 ViewManagerクラスを使用した作業アイテムへのアクセス

    public   WorkItem getCurrentWorkItem(RenderingContext rcontext);
    

    マネージドBeanクラス内で、作業アイテムの発行値を変更できます。次に、他のコネクタ・クラスでそれを使用して、異なるフィールド値に基づいてロジックを処理できます。

ViewManager APIを使用して、作業アイテム詳細ページをリフレッシュします。

例4-21 作業アイテム詳細ページのリフレッシュ

public void refreshWorkItemDetailUI(RenderingContext rcontext);

このAPIによって、getUIRegionName()へのコールがトリガーされ、コネクタ・パラメータまたは作業アイテムのフィールド値に基づいて新規リージョン名が返されます。たとえば、サンプル・コネクタでは、パラメータを使用して新規リージョン名が返されます。

例4-22 パラメータを使用して新規リージョン名を返す方法

  public String getUIRegionName(Map session, String wiType, WorkItem workItem)
    throws ALMException
  {
    String region = "";

    Map params = (Map) 
session.get(WorkItemConnector.SESSION_PARAMS_KEY);
    if (params != null)
    {
      Object val = params.get("navigatorpage");
      if (val == null || val.equals("H"))
        region = "Homepage";
      else if (val != null && val.equals("W"))
        region = "Confirmation";
      else if (val != null && val.equals("D"))
        region = "Demo";
    }

    return region;
  }

4.2.7.5 tpc-config.xmlへのBeanクラスの登録

次のように、マネージドBean DynamicRegionBeanを、ファイルtpc-config.xmlに名前UIBeanで登録します。

例4-23 tpc-config.xmlへのBeanクラスの登録

<?xml version="1.0" encoding="windows-1252" ?>
<!-- TPC Configuration file -->
<tpc-config version="11.1.1.1.0" xmlns="http://fusion.oracle.com/tpc">
  <managed-bean>
    <name>mainBean</name>
    <impl-class>oracle.sampleconnector.view.mbean.HomePageBean</impl-class>
    <lifecycle>page</lifecycle>
  </managed-bean>
  <managed-bean>
    <name>dynamicBean</name>
    <impl-class>oracle.sampleconnector.view.mbean.DynamicRegionBean</impl-class>
    <lifecycle>page</lifecycle>
  </managed-bean>
  <managed-bean>
    <name>compBean</name>
    <impl-class>oracle.sampleconnector.view.mbean.ComponentBean</impl-class>
    <lifecycle>page</lifecycle>
  </managed-bean>
</tpc-config>

4.2.8 JDeveloper内で新規エディタを開く方法

作業アイテム詳細ページで、コネクタ作成者は、クリックしたときにチーム・プロダクティビティ・センター固有の新しいエディタを開くリンクを作成できます。たとえば、Bugzillaのバグには、依存先フィールドがあり、別のバグのバグ番号を保持できます。Bugzillaのコネクタ作成者は、ラベルにリンクを作成できます。クリックすると、そのバグの詳細を示す新規エディタがJDeveloper内に開きます。

チーム・プロダクティビティ・センターでは、リソース・プロトコルとしてalmが使用され、これらのURL書式がサポートされます。

  • 作業アイテム

    alm:/reposName/workitemType/workitemId.wid

  • チーム問合せ

    alm:/reposName/workitemType/Team Queries/queryName.wiq

  • ユーザー問合せ

    alm:/reposName/workitemType/My Queries/queryName.wiq

  • 一般ページ

    alm:/path/filename.tpcx?repository=reposName&…..

一般ページの場合は、コネクタ作成者が次の処理を実行する必要があることに注意してください。

  1. UIページのファイルを、コネクタ・ソース・コード・ツリーの/META-INF/pagesフォルダの下に直接格納します。これは、/META-INF/pagesがTPCフレームワークでデフォルトのDOC_HOMEとして設定されているためです。

  2. repository=reposNameをパラメータとしてURLに添付します。

たとえば、サンプル・コネクタで使用されるURLはalm:/component/component.tpcx?repository=SampleConnector&component=inputDateであるため、/META-INF/pages/componentフォルダの下にcomponent.xmlファイルが存在する必要があります。

新規エディタを開く手順は、次のとおりです。

これらのURLを使用して、チーム・プロダクティビティ・センター固有のエディタを開く異なる2つの方法があります。

  1. ViewManagerOpenTPCPageInEditor () APIを使用します。

    例4-24 OpenTPCPageInEditor() APIの使用

    ViewManager vm = ViewManager.getInstance();
    vm.OpenTPCPageInEditor("/component/component.tpcx?
    repository=SampleConnector&component=inputDate");
    

    同様に、次のコードで特定の作業アイテム・エディタを開きます。

    例4-25 特定の作業アイテム・エディタを開く方法

    ViewManager.getInstance().OpenTPCPageInEditor
     ("reposName/workitemType/workitemId.wid");
    
  2. WebResourceタグを使用します。

    例としてサンプル・コネクタを使用すると、その値の部分がリンクであるフィールド「Parent ID」があります。クリックすると、親タスクに対する作業アイテム・エディタが開きます。これを実行するには、次の手順を実行します。

    • WebResourceタグを使用して、URLを生成できるフィールドをコネクタ定義ファイルに定義します。

      例4-26

      <RepositoryModel resName="res" resFile="/META-INF/res/modelresource.xml">
        <WorkItem type="Task"    
                          webURLHandler="oracle.sampleconnector.SampleConnectorService">
          <Fields>
            <Field name="PARENT_TASKID" label="${res.PARENT_TASK_ID}" type="number"   
                      readOnly="true"/>
            <Field name="TASKID" label="${res.TASK_ID}" type="number" readOnly="true"/>
            <Field name="DESC" label="${res.TASK_DESC}" required="true"
                maxLength="80" type="string"/>
       ……
          <Fields/>
          <WebResource>
      <URLDef name="PARENT_TASKID" archorOn="label"/>
      ……
          </WebResource>
      ……
        <WorkItem/>
      <RepositoryModel/>
      

      属性archorOnの有効な値は、"label"および"value"です。属性値が"label"の場合は、フィールド・ラベルがハイパーリンクになります。それ以外の場合は、値がハイパーリンクとして機能します。

    • WorkItemFieldFeatureインタフェースにgetURL() APIを実装します。

      クラスSampleConnectorServiceによって、このインタフェースにメソッドが実装されます。getURL()メソッドによって、親タスク・フィールドのURLが作成されます。

      例4-27

        public URL getURL(Map session, String attrName, Object attrValue, WorkItem wi)
        {
          String urlString = "";
          if (attrName.equalsIgnoreCase("PARENT_TASKID"))
          {
            Integer taskid = (Integer) attrValue;
            String reposName = (String)session.get("repositoryName");
            String wiType = (String)session.get("wiType");
      
            if(reposName != null && wiType != null)
              urlString = "alm:/" + reposName + "/" + wiType + "/" + taskid + ".wid";
          }
      
          try
          {
            return new URL(urlString);
          }
          catch (MalformedURLException e)
          {
            System.out.println(e);
          }
          return null;
        }
      
    • コネクタ定義ファイルで、作業アイテム・セクションを検索し、属性webURLHandlerの値としてクラス名を含めます。最初の箇条書きのサンプル・コードを参照してください。

      anchorOnの値を"label"に設定している場合は、対応する作業アイテム・フィールドのUIメタデータをinputTextinputDateListOfValuesなどの入力フィールドに設定する必要があります。

      anchorOnの値を"value"に設定している場合は、対応する作業アイテム・フィールドのUIメタデータを読取り専用のinputTextに設定する必要があります。

4.2.9 Oracleチーム・プロダクティビティ・センター・コネクタのデバッグ方法

コネクタを開発した後は、実行時にデバッガ内でそのコネクタを実行できる必要があります。この機能は、プロジェクトにすでに組み込まれています。

JDeveloperデバッガ内でコネクタを実行する手順は、次のとおりです。

  • 作成/デプロイしたプロジェクトを右クリックし、「拡張機能のデバッグ」を選択します。

この結果、JDeveloperの別のコピーが起動され、そこからチーム・プロダクティビティ・センターを開いて、コネクタが定義されているOracleチーム・プロダクティビティ・センター・サーバーに接続できます。次に、Javaコードにブレークポイントを設定して、変数に対する監視ウィンドウを使用しながらコードをステップ実行し、標準のデバッグ・ユーティリティを使用できます。

4.3 Oracleチーム・プロダクティビティ・センター・コネクタ・エラーの処理

Oracleチーム・プロダクティビティ・センターで使用するためのコネクタを開発した後には、実行するタスクが多数あります。重要なタスクの1つは、コネクタの使用時に発生するエラーの処理です。Oracleチーム・プロダクティビティ・センターには、クライアントにエラーおよびメッセージを伝播する方法が2通りあります。ここでは、これらについて説明します。

開発したコネクタを使用するチーム・メンバーを支援するために、そのコネクタに関するヘルプ・ファイルを組み込むことができます。ヘルプは、JDeveloperのオンライン・ヘルプ・ブラウザまたは外部ヘルプ・ビューアに表示できます。

また、他のチーム・メンバーがダウンロードできるように、Oracleチーム・プロダクティビティ・センター・コネクタをパッケージ化する必要があります。これには、JARファイルおよびバンドル・ファイルへのコネクタの圧縮が含まれます。さらに、コネクタ用に作成したヘルプ・ファイルをJARファイルに組み込む必要があります。

Oracleチーム・プロダクティビティ・センターには、チーム・プロダクティビティ・センター・クライアントにエラーおよびメッセージを伝播する方法が2通りあります。

コネクタ内で何か重大な事象が発生した場合は、すべてのインタフェース・メソッドでALMExceptionがスローされます。ALMExceptionのランタイム・インスタンスを使用して、適切な警告またはメッセージを配置できます。これは、クライアント・フレームワークによって、エンド・ユーザーに表示されます。

例4-28 エラー処理

 try
 {
    connector.hasDynamicUI(session);
    }
 catch(ALMException e) 
 {
    setLastError(e);
 }

また、パッケージoracle.alm.common.messageで提供されているクラスを使用して、エラー・メッセージをクライアントに伝播することもできます。このパッケージには2つのクラスが定義されています。

表4-7 クラスの要約

AlmMessage

AlmMessageFactory

バックエンド・リポジトリへの接続を管理します。


AlmMessageFactoryはメッセージ登録用のクラスで、チーム・プロダクティビティ・センターを介してアクセスします。このクラスおよびAlmMessageを使用して、クライアントに報告するすべてのメッセージを、UIフレームワークを介してログに記録します。

AlmMessageFactoryは、シングルトンとして実装されます。AlmMessageFactoryを取得するには、次をコールします。

AlmMessageFactory msgFactory = AlmMessageFactory.getInstance()

メッセージを追加するには、messageIDおよび関連するメッセージ文字列を渡すことによって、AlmMessageFactory.addMessage()をコールします。

4.4 Oracleチーム・プロダクティビティ・センター・コネクタへのヘルプの追加

Oracleチーム・プロダクティビティ・センター・コネクタには、状況依存ヘルプなどのカスタム・ヘルプ・ファイルを追加できます。この結果、ユーザーは、コネクタの設定操作のヘルプに必要な情報にアクセスできます。

コネクタ固有のヘルプ・ページをコネクタのユーザーに表示する方法は2通りあります。最初の方法は、これらのヘルプ・ページをJDeveloperヘルプ・センター内に表示することです。2番目の方法は、これらのページをクライアントのデスクトップ上の独自フレームまたはWebブラウザに表示することです。

拡張ヘルプは、チーム・プロダクティビティ・センター・コネクタなどのJDeveloper拡張機能に対するヘルプの作成者が、ヘルプ拡張機能の開発に関するトピック内で使用できます。

4.4.1 チーム・プロダクティビティ・センター・コネクタへのヘルプの追加方法

コネクタ固有のヘルプを作成し、ユーザーが参照するJDeveloperヘルプ・センター内に表示できます。JDeveloperヘルプをJDeveloperヘルプ拡張機能として実装した場合、ユーザーは、コネクタでダイアログを表示している間に[F1]キーを押すことによって、このヘルプにアクセスできます。

チーム・プロダクティビティ・センター・コネクタに対するヘルプを組み込む手順は、次のとおりです。

  1. JDeveloperで表示される各ページに対するF1ヘルプ・ファイルをHTML形式で提供します。これらは、フォルダ/Helpのパッケージ化されたコネクタJARファイル内に格納する必要があります。

  2. これらのヘルプ・ファイルのみを含む新しいJDeveloper拡張機能を作成します。

  3. コネクタのヘルプIDをコネクタUI定義XMLファイルに追加します。

    例4-29 コネクタのヘルプID

      <region name=”Edit” helpTopicId="f1_connector_htm" >
        <formLayout value="${workitemmodel}" 
                    columns="2" 
                    blockSize="6" 
                    id="wiFormId" 
                    rowToSpan="1"/>
      </region>
    

4.4.2 チーム・プロダクティビティ・センター・コネクタのヘルプを外部ビューアで表示する方法

コネクタに対するヘルプは、ユーザーのデフォルトのWebブラウザまたはPDFビューアなどの外部ビューアに表示できます。

コネクタのヘルプを外部ビューアで表示する手順は、次のとおりです。

  1. 表示される各ページに対するF1ヘルプ・ファイルをHTML形式で提供します。これらは、/Helpというフォルダのパッケージ化されたコネクタJARファイル内に格納する必要があります。

  2. これらのヘルプ・ファイルのみを含む新しいJDeveloper拡張機能を作成します。

  3. 作業アイテム詳細UIに「Help」ボタンを追加します。これを実行するには、コネクタUI定義XMLファイルにツールバーを追加し、このツールバー上に1つのヘルプ・ボタンを追加します。

    例4-30 ツールバーへの「Help」ボタンの追加

    <region name=”Edit”>
      <toolbar title="Actions">
        <action text="Help" 
           actionCommand="showHelp"
           icon="HELP"
           actionListener="${showHelp}"/>
      <toolbar/>
      <formLayout value="${workitemmodel}" 
                    columns="2" 
                    blockSize="6" 
                  id="wiFormId" 
                    rowToSpan="1"/>
    </region>
    
  4. リスナー・オブジェクト・クラスを実装します。

4.5 コネクタのパッケージ化

Oracleチーム・プロダクティビティ・センター・コネクタの準備の最終フェーズは、JDeveloper拡張機能としてインストールするために、コネクタをJARファイルにパッケージ化することです。この結果、チーム・プロダクティビティ・センター・サーバーにコネクタをインストールでき、このコネクタが適用されるリポジトリにチーム・メンバーが接続できるようになります。

4.5.1 コネクタのパッケージ化方法

コネクタをサーバーにインストールして、拡張機能としてJDeveloperにインストールできるようにするには、正しくパッケージ化する必要があります。パッケージ化には、3つの部分があります。

  1. コネクタとそれに必要なファイルをすべて含むJARファイル。

  2. ヘルプ・ファイルとそれに必要なファイルを含む個別のJARファイル。

  3. 前述の2つのJARファイルと、これをJDeveloperで拡張機能としてインストールできる方法を説明するためのbundle.xmlファイルを含むZIP形式のバンドル。

プロジェクト内にデプロイメント・プロファイルを作成すると、これらのファイルをすべて生成できます。

デプロイメント・プロファイルを作成する前に、プロジェクトを正常に作成していること、およびすべての出力ファイルが正しいディレクトリに作成されていることを確認してください。

4.5.2 コネクタJARファイルの生成方法

コネクタJARファイルには、コネクタ専用の拡張機能に組み込まれる、コネクタのすべてのコンポーネントが含まれます。

コネクタJARファイルを生成する手順は、次のとおりです。

  1. アプリケーション・ナビゲータでプロジェクトをダブルクリックし、「プロジェクト・プロパティ」→「デプロイメント」の順に選択します。

  2. 「新規」をクリックします。

  3. アーカイブ・タイプとして「JARファイル」を選択し、JARファイルの名前を入力します。通常、これはConnector<your connector name>.JARです。

  4. 「JARデプロイメント・プロファイルのプロパティの編集」ダイアログで、「フィルタ」を選択します。META-INFディレクトリ内のすべてのファイル(この後すぐに定義されるBundle.xmlを除く)およびパッケージ・ディレクトリ内のすべてのファイルを選択します。

  5. 「OK」をクリックします。

コネクタJARデプロイメントをテストするには、プロジェクトを右クリックし、「デプロイ」→「<your deploy profile>」→「JARファイルへ」の順に選択します。

4.5.3 コネクタのヘルプJARファイルの生成方法

ヘルプJARファイルには、コネクタ拡張機能にヘルプを組み込むために必要なすべてのものが含まれます。JDeveloper拡張機能ツールには、コネクタのヘルプJARファイルを生成するための統合プロセスが用意されています。

コネクタのヘルプJARファイルを生成する手順は、次のとおりです。

  1. アプリケーション・ナビゲータでプロジェクトをダブルクリックし、「プロジェクト・プロパティ」→「デプロイメント」の順に選択します。

  2. 「新規」をクリックします。

  3. アーカイブ・タイプとして「JARファイル」を選択し、ヘルプJARファイルの名前を入力します。通常、これはConnector<your connector name>Help.JARです。

  4. 「JARデプロイメント・プロファイルのプロパティの編集」ダイアログで、「フィルタ」を選択します。すべてのヘルプ関連ファイルまたはそれらが格納されているディレクトリを選択します。他のすべてのファイルの選択を解除します。

  5. 「OK」をクリックします。

コネクタJARデプロイメントをテストするには、プロジェクトを右クリックし、「デプロイ」→「<your help deploy profile>」→「JARファイルへ」の順に選択します。

4.5.4 コネクタ・バンドル・ファイルの生成方法

コネクタJARファイルが作成されると、バンドル・ファイルを生成することによってそれをデプロイする準備ができます。これは、コネクタ拡張機能のインストールに使用できるZIPファイルです。

コネクタ・バンドル・ファイルを生成する手順は、次のとおりです。

  1. プロジェクトをダブルクリックし、「プロジェクト・プロパティ」→「デプロイメント」の順に選択します。

  2. 「新規」をクリックします。

  3. アーカイブ・タイプとして「JARファイル」を選択します。

  4. manifestを含めるの選択を解除します。

  5. バンドルZIPファイルの名前を入力します。

    これは通常、「デプロイ」フォルダと同じレベルにある「バンドル」フォルダ内にあり、Connector<your connector name>Bundle.ZIPという名前になります。必ず、.JARではなく.ZIPという名前にしてください。

  6. 「JARデプロイメント・プロファイルのプロパティの編集」ダイアログで、「プロジェクトの出力」ノードを展開し、「フィルタ」を選択します。

  7. このファイル・グループの名前を「JAR Output」に変更します。「アーカイブのターゲット・ディレクトリ」をoracle.teamproductivitycenter/connectors/<your connector name>に変更します。末尾に.JARを指定しないでください。これは、このファイルの解凍先となるZIPファイル内のパスです。


    注意:

    インストーラでは大/小文字が区別されるため、ファイル・パスの大/小文字が正しいことを確認してください。


  8. 「JAR Output」ファイル・グループの下の「コントリビュータ」ノードに移動します。「追加」をクリックし、コネクタJARファイルおよびヘルプJARファイルが生成される場所を追加します。

  9. 「JAR Output」ファイル・グループの下の「フィルタ」ノードに移動します。すでに生成したコネクタJARファイルおよびコネクタのヘルプJARファイルを選択します。

  10. 「ファイル・グループ」ノードを選択し、「新規」をクリックします。「Bundle Output」という新しいファイル・グループを作成します。

  11. 「Bundle Output」ファイル・グループの下の「フィルタ」に移動し、bundle.xmlファイルを除いてすべての選択を解除します。「アーカイブのターゲット・ディレクトリ」編集ボックスが空白であることを確認してください。

  12. 「プロファイルの依存性」ノードに移動し、依存性としてコネクタおよびヘルプのデプロイ・プロファイルを追加します。

  13. 「OK」をクリックします。

コネクタ・バンドルZIPデプロイメントをテストするには、プロジェクトを右クリックし、「デプロイ」→「<your bundle profile>」→「JARファイルへ」の順に選択します。この結果、コネクタJAR、ヘルプJARおよびbundle.xmlファイルを含む新しいZIPファイルが作成されます。

4.5.5 コネクタ・バンドル・ファイルの依存性の定義方法

bundle.xmlファイルには、拡張機能の内容およびその依存性の内容が記述されます。また、バージョン情報および作成者に関する情報も格納されます。

例4-31 コネクタ・バンドル・ファイルbundle.xml

<update-bundle version="1.0"
    xmlns="http://xmlns.oracle.com/jdeveloper/updatebundle"
    xmlns:u="http://xmlns.oracle.com/jdeveloper/update">
 
  <u:update id="oracle.teamproductivitycenter.sampleconnector">
    <u:name>Oracle Sample Connector</u:name>
    <u:version>1.0</u:version>
    <u:author>Oracle Corporation</u:author>
    <u:author-url>http://www.oracle.com</u:author-url>
    
    <u:description>
      Sample connector for Oracle Team Productivity Center
    </u:description>
 
    <u:requirements>
      <u:requires-extension id="oracle.jdeveloper"
        minVersion="11.1.1.1.00"
        maxVersion="11.1.1.1.99" /> 
      <u:requires-extension id="oracle.teamproductivitycenter"
        minVersion="11.1.1.1.00"
        maxVersion="11.1.1.1.99" /> 
    </u:requirements>
  </u:update>
</update-bundle>

すべてのチーム・プロダクティビティ・センター・コネクタには、JDeveloperとチーム・プロダクティビティ・センター両方に対する依存性があります。これらは必ず含まれている必要があります。

4.6 チーム・プロダクティビティ・センター・コネクタの国際化

Oracleチーム・プロダクティビティ・センターでは、実行中のJDeveloperロケール基づいた、コネクタによる適切なUIの表示がサポートされています。作業アイテムUIおよびモデル定義XMLファイルに表示されるように、ローカライズ文字列の格納にリソース・ファイルを使用できます。たとえば、JDeveloperがJPNロケールで実行されている場合、ユーザーは同じロケールでコネクタ詳細ページを表示できます。これをサポートするために、言語固有のリソース・バンドル・ファイルを作成できます。例4-32は、modelresource.xmlの例です。

例4-32 国際化ファイルmodelresource.xml

<?xml version="1.0" encoding="ISO8859-1" ?>
<resources xmlns="http://xmlns.oracle.com/bali/rts/tpc" package="company.bugzilla.res">
  <resource key="MSG_SAVEBUG_TITLE">BugDB: Save A Bug</resource>
  <resource key="MSG_NEWBUG_TITLE">BugDB: Create A Bug</resource>
  <resource key="MSG_BUGAPI_ERROR">Bug API Error: </resource>
  <resource key="DESCRIPTION">Description</resource>
  <resource key="BUG_NAME">Bug </resource>
  <resource key="BUG_NO">Bug Number</resource>
  <resource key="BUG_BASEBUG_NO">Base Bug No</resource>
  <resource key="BUG_STATUS">Status</resource>
  <resource key="BUG_SUBJECT">Subject</resource>  
  <resource key="BUG_PRODUCT">Product</resource>
  <resource key="BUG_PRIORITY">Severity</resource>  
  <resource key="BUG_COMPONENT">Component</resource>
  <resource key="BUG_SUBCOMPONENT">Sub Component</resource>
  <resource key="BUG_ASSIGNEE">Assigned</resource>
</resources>

次は、ファイルuiresource.xmlの例です。

例4-33 国際化ファイルuiresource.xml

<?xml version="1.0" encoding="ISO8859-1" ?>
<resources xmlns="http://xmlns.oracle.com/bali/rts/tpc"
           package="company.bugzilla.res">
  <resource key="COMMMENTS">Comments</resource>
  <resource key="ADD_COMMENTS">Add Comments</resource>
  <resource key="UPDATE_COMMENTS">Update Comments</resource>
</resources>

JDeveloperが日本語で実行されている場合は、フレームワークによってmodelresource_jp.xmlおよびuiresource_jp.xmlというリソース・バンドル・ファイルが検索され、日本語のラベルが検出されて表示されます。これらのファイルを作成し、中央の場所に格納できます。これらのリソース・バンドル・ファイルを、フォルダMETA_INF\resの下のコネクタjarファイルに格納します。