ナビゲーションに戻る

登録したインターフェイスの実装

インターフェイスを登録したら、プロバイダ アプリケーションに実装します。コンシューマ アプリケーションで予期しない動作が発生しないように、プロバイダ アプリケーションにはインターフェイスを正確に実装する必要があります。

次の各トピックでは、以下の作業方法について説明します。

登録済みのタイプ インターフェイスを実装するには、次の手順に従います。

注: 登録済みのタイプは、PeopleCode アプリケーション クラスとして実装します。

  1. アプリケーション デザイナで、名称指定規則 <NAMESPACE_PREFIX>_TYPES を使用して、機能モジュールごとにアプリケーション パッケージを作成します。

    第 1 レベルのサブパッケージを使用して、実装クラスを機能別にグループ化し、第 2 レベルのサブパッケージを使用して、クラスをバージョン別にグループ化します。

  2. インターフェイス タイプを実装するアプリケーション クラスを作成します。

    アプリケーション クラスを作成する場合は、アプリケーション クラスを以下のようにする必要があります。

    • baseType クラスを拡張する。

    • baseType 親クラス定義を持つパッケージをインポートする。

    • タイプが "string" の読み取り専用のプロパティ IUD を表示する。

    • レジストリ内の対応するインターフェイスの正しい IUD を含む IUD プロパティがある。

    • クラスで定義された配列プロパティを、エレメントなしの配列プロパティとしてインスタンス化する。

    • toXmlNode、toXmlNodeString、fromXmlNode、truncateType の必須パブリック メソッドを実装する。

  3. このインターフェイスの "レジストリ ウィザード - 実装" ページで、[クラス コードを作成] ボタンをクリックして作成されたスタブ コードをコピーし、インターフェイス タイプを実装するアプリケーション クラスに貼り付けます。

    生成されたスタブ コードには、以下の必須メソッドが含まれます。

    method toxmlNode(&parentNode As XmlNode);
    method fromXmlNode(&parentNode As XmlNode);
    method toXmlNodeString(&nodeName As string) Returns string;
    method TruncateType();

    XML 形式の必須メソッドは、このタイプを XML 表示できるようにマーシャリングしたり、XML 表示からアンマーシャリングするのに使用され、このタイプをリモート サービス呼び出しで使用する場合に必要になります。truncateType 必須メソッドは、全てのタイプ エレメントの値を表します。

  4. レジストリ ウィザードで、レジストリに登録されているタイプ インターフェイスにアクセスし、タイプの実装の詳細にアプリケーション クラスを追加します。

コンシューマ プログラムでは、サービス実装クラスを直接インスタンス化できません。バインドの遅延とリモート プロシージャ コールのサポートにより、このフレームワークでは、実装クラス名の変換が実行時まで遅延されます。このため、設計時にサービス コンシューマで利用可能な情報のみがインターフェイス名になります。

サービス マネージャは、実行時にレジストリ検索機能を使用して、インターフェイス名を実装クラス名に変換します。レジストリで定義した実装の詳細に応じて、サービス マネージャはローカル実装クラスまたはリモート実装のプロキシ クラスのいずれかのインスタンスをコンシューマに返します。

これらを考慮して、プロバイダ アプリケーションでは、サービスを完全に実装するために、以下の 2 つのアプリケーションクラスを提供する必要があります。

  • 設計時にコンシューマ アプリケーションが参照可能なインターフェイス

  • 実行時にサービス マネージャがバインド可能な実装クラス

注: 登録済みのサービスは、PeopleCode アプリケーション クラスとして実装します。

登録済みのサービス インターフェイスを実装するには、次の手順に従います。

  1. アプリケーション デザイナで、名称指定規則 <NAMESPACE_PREFIX>_SERVICES を使用して、機能モジュールごとにアプリケーション パッケージを作成します。

    第 1 レベルのサブパッケージを使用して、実装クラスを機能別にグループ化し、第 2 レベルのサブパッケージを使用して、クラスをバージョン別にグループ化します。第 3 (アプリケーション クラス) レベルのサブパッケージを使用して、インターフェイスとサービス実装を定義します。

  2. サービス、インターフェイス、実装クラスを実装するアプリケーション クラスを 2 つ作成します。

  3. レジストリに登録されているインターフェイスから、このサービスを選択し、[プロバイダ コードの生成] ボタンをクリックします。以下の 3 つのグループ ボックスで構成されるページが表示され、各ボックスにコードが表示されます。

    • インターフェイス PeopleCode

      インターフェイス PeopleCode をコピーし、インターフェイス アプリケーション クラスに貼り付けます。

    • 実装 PeopleCode

      実装 PeopleCode をコピーし、実装アプリケーション クラスに貼り付けます。生成される実装コードは、アプリケーション クラスの実際のロジックの単なる骨組みです。このため、開発チームはプロバイダ アプリケーションの要件に合わせて、この実装クラスを修正する必要があります。

    • プロキシ PeopleCode

  4. 必要な情報がインターフェイス クラスと実装クラスに含まれていることを確認します。

    この 2 つのアプリケーションの機能は異なります。インターフェイス クラスは抽象定義であり、実装クラスでどのメソッドとプロパティを登録済みの仕様に準拠させるかを詳細に記述しますが、実装の詳細は含まれません。実装クラスでは、インターフェイスを実際に実装し、抽象メソッド定義の実行コードを提供します。

    インターフェイス アプリケーション クラスは、以下のようにする必要があります。

    • 登録済みのサービスと同一の名前にする。

    • baseService クラスを拡張する。

    • baseService 親クラス定義をインポートする。

    • 親 baseService クラスのインスタンスを作成するコンストラクタ メソッドを含める。

    • 登録済みのサービスの署名に一致する署名を持つ抽象 DoService メソッドを定義する。

  5. サービスの実装で以下のことを確認します。

    • インターフェイスを実装する。

    • DoService メソッドの具体的な実装を提供する。

      開発チームはサービスの提供を決定したら、インターフェイスとインターフェイスを実装する実装クラスを作成します。

    • 実装するインターフェイスと、インターフェイスで処理するタイプと例外をインポートする。

      インポートは、プロバイダ コードを生成するごとに行います。

    • エラーに対応するために、登録済みのインターフェイス仕様に従って例外をスローする。

    • インターフェイス仕様に従って、警告をログに記録できるようにする。

      インターフェイス アプリケーション クラスでは、サービスの実行時に生成された全ての警告の詳細を提供します。

    • 実装がコンポーネント インターフェイスベースの場合は、API2CI フレームワークを使用して、コンポーネント インターフェイス仕様から抽象化する。

      コンポーネント インターフェイスベースのサービスでは、以下のコードを使用して CI ライブラリ (レジストリで提供) をインポートする必要があります。

      import HMCR_API2CI

      コンポーネント インターフェイスは直接操作することができないため、DoService メソッドを使用する場合は、ciHandler と ciIdent の 2 つのローカル オブジェクトを宣言する必要があります。ciHandler は、コンポーネント インターフェイスへの全てのアクセスを管理するクラスです。ciIdent では、各 ciHandler インスタンスの固有の属性を定義します。

  6. レジストリに登録されているサービス インターフェイスにアクセスし、タイプの実装の詳細に実装アプリケーション クラスを追加します。

注: 業務タスクを実行する場合に、他の複数のサービスを整理するサービスを使用することができます。これは集約サービスと呼ばれます。集約サービスは、業務取引や日常業務を管理したり、保存処理を実行するためのサービスであり、これらのプロセスは 1 回だけ実行すれば済むため、全体のパフォーマンスが向上します。サービスが集約モードで別のサービスを実行している場合、呼び出し元のサービス (集約サービス) では、呼び出し対象のサービスに RunAggregated フラグを設定するため、呼び出し対象のサービスでは日常業務や保存処理がスキップされます。

PeopleSoft では、デフォルトの例外処理を提供する baseException クラスが用意されています。このクラスは、PeopleTools 例外クラス上にあります。baseException クラス コンストラクタは、以下のパラメータを取ります。

  • サービス ログのインスタンス

  • メッセージ セット番号とメッセージ番号

  • デフォルトのメッセージ テキスト

  • メッセージ パラメータ "1 から 5" または "Null" (パラメータがない場合)

baseException クラス コンストラクタは、以下のロジックを実行します。

  • PSMessages コレクションをサービス ログに追加します。

  • 提供されたメッセージ セットとメッセージ番号の PeopleTools 例外を作成します。

登録済みのタイプ インターフェイスを実装するには、次の手順に従います。

注: 登録済みの例外は、PeopleCode アプリケーション クラスとして実装します。

  1. アプリケーション デザイナで、名称指定規則 <NAMESPACE_PREFIX>_EXCEPTIONS を使用して、機能モジュールごとにアプリケーション パッケージを作成します。

    第 1 レベルのサブパッケージを使用して、実装クラスを機能別にグループ化し、第 2 レベルのサブパッケージを使用して、クラスをバージョン別にグループ化します。

  2. このインターフェイスの "レジストリ ウィザード - 実装" ページで、[クラス コードを作成] ボタンをクリックして生成されたスタブ コードをコピーし、例外を実装するアプリケーション クラスに貼り付けます。

  3. 例外の実装に以下の情報が含まれていることを確認します。

    • PeopleTools メッセージ カタログ内のエントリへのリンク

    • デフォルトのエラー処理

    • 例外固有のエラー処理 (必要な場合)

    注: レジストリに登録されている例外では、例外名、エラー メッセージ構造、および例外の意味構造 (説明) を定義します。

  4. 例外クラスの実装で以下のことを確認します。

    • レジストリに登録されている名前と同一である。

    • baseException を拡張して、baseException クラス定義をインポートする。

    • 以下のコンストラクタが含まれている。

      - 単一パラメータとして LogType のインスタンスを取り、LogType クラス定義をインポートする。

      - 親クラスのインスタンスによってデフォルトのエラー処理を容易にする。

      - レジストリ内の対応する例外の正しい IUD を IUD プロパティに割り当てる。

    • タイプが "string" の読み取り専用のプロパティ IUD を表示する。

登録済みの sqlView インターフェイスを実装するには、次の手順に従います。

注: 登録済みの sqlView インターフェイスは、タイプが "view" の PeopleSoft レコード定義として実装します。

  1. レコード定義にフィールドを作成し、登録済みの sqlView インターフェイスの各フィールドに対応させます。

  2. SQL の CREATE コマンドを実行し、データベースにビューを作成します。

  3. レジストリに登録済みの sqlView を開き、実装レコード名を追加します。

    新規のインターフェイス ビューを作成する場合は、レジストリ ウィザード コンポーネントを使用する必要があります。既存のビューを更新する場合は、レジストリにアクセスして、更新ボタンをクリックします。レジストリ ウィザード コンポーネントが表示されます。

    新規インターフェイスの登録」を参照してください。