生成された EGL プログラムでは、IMSADF プログラムへの移動、または IMSADF プログラムからの移動が可能です。 即時のプログラム間メッセージ交換は、IMSADF II 会話型プログラムと、ビルド記述子オプション spaADF を YES に設定して生成された EGL セグメント化会話型プログラムの間で実行できます。 さらに、IMSADF II 2 次トランザクションは EGL バッチ・プログラムにより処理が可能です。
EGL は、IMSADF II の開始には使用できませんが、IMSADF II トランザクション・ドライバーに対する制御権の受け取り、または制御権の返還には使用できます。 これは、IMSADF II プログラム・システムが作業データベースで IMSADF II 28 バイト SPA を使用する場合にのみサポートされます。
//*** RECORD=ADFWKDB ****
// ADFWORK データベースのサンプル・セグメント・レイアウトのデフォルト・
// セグメント・サイズは 6000 バイトです。 この DLISegment 定義は、
// ADF 作業データベースに対するデータの取得および保存に使用されます。
// 更新するフィールドについて詳しくは、「IMSADF Application Development Guide」
// 『付録 E』を参照してください。
// ***********************
Record ADFWKDB type DLISegment {
keyItem = "LTERMNME"
}
3 LTERMNME char(8) ;
3 SPALEGTH smallint ;
3 * char(4) ;
3 SPATRANS char(8) ;
3 * char(397) ;
3 SPABITS hex(2) ;
3 * char(6) ;
3 SPAFIRST smallint ;
3 SPARTNCD int ;
3 SPASECTX smallint ;
3 * char(4) ;
3 SPAPGOPT smallint ;
3 SPASWITH char(2) ;
4 RDFSWITH smallint ;
3 SPATRX char(3) ;
3 SPACGTRX char(3) ;
3 * char(66) ;
3 SPASHOTR char(8) ;
3 * char(31) ;
3 SPAKEYID char(255) ;
3 SPAFLDSG char(5192) ;
end // end ADFWKDB
Rational® COBOL Runtime for zSeries では、IMSADF II とその作業データベースを共用しません。 2 つのデータベースは形式が異なります。 IMSADF II 作業データベースへの変更は、Rational COBOL ランタイム作業データベースに影響しません。 同様に、EGL プログラムによる Rational COBOL ランタイム作業データベースへの変更は、IMSADF II 作業データベースに影響しません。
ssssTcc
プログラム・ユーザーが EGL プログラムに対応する IMSADF II トランザクション ID を入力すると、IMSADF II は要求されたトランザクションに即時のプログラム間メッセージ交換を実行します。 IMSADF II は独自の 28 バイト SPA を IMS™ メッセージ・キューに書き込んで、交換を実行します。
EGL プログラムは、ビルド記述子オプション spaADF を YES に設定し、spaSize を IMSADF II SPA サイズに一致する 28 に設定して生成される必要があります。 IMS が新規のトランザクションをスケジュールする場合、EGL プログラム制御ロジックでは入出力 PCB から IMSADF II SPA を読み取ります。 上記のビルド記述子オプションがあるために、EGL プログラム制御ロジックは SPA を変更しません。 その結果、EGL プログラムは、最終的に即時のプログラム間メッセージ交換を実行して IMSADF II 会話型トランザクション・ドライバーに戻ることができます。 IMSADF II サインオン・トランザクションへの直接の交換はサポートされていません。
IMSADF II 会話型トランザクション・ドライバーに交換して戻る前に複数の EGL プログラムが実行される場合は、すべての EGL プログラムが上記と同じビルド記述子オプションで生成される必要があります。 プログラム制御ロジックは、Rational COBOL ランタイム作業データベース、または SPA に続く第 2 メッセージ・セグメントを使用して、EGL プログラム間でレコードを渡します。これにより、IMSADF II フォーマットの SPA は保持されます。 据え置きおよび即時の両方のプログラム間メッセージ交換が EGL プログラムの間で使用できます。
また、ビルド記述子オプション spaStatusBytePosition=p を指定することもできます。p は、EGL のセグメンテーション状況バイトに使用できる IMSADF II SPA の使用可能バイトを示します。 IMSADF II トランザクション・ドライバーから開始された一連のメッセージ交換に関連するすべての EGL プログラムには、同一のビルド記述子オプション spaSize、spaADF、 および spaStatusBytePosition が必要です。 使用可能な SPA の位置に関する情報については、ご使用の IMSADF II の資料を参照してください。
COBOL プログラムのように、EGL は IMSADF II 作業データベースにアクセスして、IMSADF II 通信域内の情報を使用または変更できます。 IMSADF II 作業データベースにアクセスする場合、EGL ではその他のプログラム・データベースに対する方法で IMSADF II 作業データベースを処理します。 IMSADF II 作業データベースにアクセスするには、上記のレコード定義を使用してください。 DL/I IMSADF II 作業データベースを使用する場合は、EGL プログラムの PSB 定義に必ずデータベース PCB を含めてください。
IMSADF II トランザクション・ドライバーに切り替え戻すには、制御の受け取り時にそのトランザクション・ドライバーが実行する作業を通知する IMSADF II 作業データベース内のフラグを EGL プログラムで設定する必要があります。 詳しくは、ご使用のシステムの IMSADF II 資料を参照してください。 EGL プログラムでは、レコードを指定しない transfer to transaction ステートメントを使用して制御権を移動します。 開始する新規トランザクションの名前に sysVar.transferName を設定します。 この変数には、IMSADF II の変数 SPATRANS に配置された同じ値を格納する必要があります。 EGL プログラム制御ロジックは SPA を挿入し、結果として IMSADF II に戻す即時のプログラム間メッセージ交換が実行されます。
このセクションで説明されている手法は、IMSADF II から一連の EGL プログラムおよび非 EGL プログラムへの移動が IMSADF II へ戻す移動の前にある場合にのみ使用されます。 単一の EGL プログラムが実行され、次に IMSADF II に戻して移動する場合、プログラム制御ロジックでは自動的に IMSADF II SPA を保持します。 IMSADF II が関連しない場合の移動については、『IMS/VS 環境における制御権移動』を参照してください。
下の表に、ビルド記述子オプション spaADF が YES に設定されている場合の EGL プログラム間の移動に使用される規則を示します。 これらの規則は、特別な手法がレコードの受け渡しに使用されるため SPA をそのまま保持できるという点で、IMSADF II が関与しない場合に使用される手法とは異なっています。 ADF モードでは、セグメント化の非会話型プログラム間の移動はサポートされていません。
| アクション | 即時の交換 (入力フォームはオプション) | 据え置きの交換 (入力フォーム付き) |
|---|---|---|
| コーディングおよび生成 | 両方のプログラムを segmented = YES として定義する。ビルド記述子オプション spaSize を 28 に設定し、spaADF を YES に設定して、両方のプログラムを会話型として生成する。 | 両方のプログラムを segmented = YES として定義する。ビルド記述子オプション spaSize を 28 に設定し、spaADF を YES に設定して、両方のプログラムを会話型として生成する。 |
| 移動の実行 | 発生元のプログラムはフォームを送信できない。 EGL プログラムである場合は、レコードで transfer to transaction ステートメントを使用してこれを実行する。 | 発生元のプログラムは、SPA の最初の書き込み後に端末に関連付けられたメッセージ・キューにフォームを書き込む必要がある。 EGL プログラムである場合は、フォームおよびオプションのレコードで show ステートメントを使用し、これを実行する。 |
| 入力フォームの使用 | ターゲット・プログラムはオプションで入力フォームを取得できる。 | ターゲット・プログラムには入力フォームが必要。 |
| レコードの受け渡し。 | レコードは SPA に後続するメッセージ・セグメントに転送される。 | レコードがある場合、レコードは作業データベースを経由して転送される。 |
| セグメンテーション状況バイトの指定 | spaStatusBytePosition が指定された場合、ターゲット・プログラムでは、SPA の指定されたオフセット位置にあるセグメンテーション状況バイトの値を常に無視する。 | spaStatusBytePosition が指定された場合、ターゲット・プログラムでは、プログラム・ユーザーが PA1 または PA2 を押すことにより発生する入力フォームの整合性に関する問題がある場合に、指定されたオフセット位置にあるセグメンテーション状況バイトの値を使用する。 |
| spaStatusBytePosition によって指定されるセグメンテーション状況バイトは、会話型プログラムのプログラム間の移動に対してのみ使用されます。 バイトは、会話型プログラムとその他のプログラムとの間の移動用に存在します。 ただし、非 EGL プログラムの移動には、常にバイトをブランクに設定する必要があります。 ターゲットの非 EGL プログラムでは、セグメンテーション状況バイトの値を無視できます。 | ||
この手法では、2 つのセグメント化会話型の EGL プログラムが、フォームをプログラム・ユーザーに提示することなく、トランザクション名と PSB 名の両方を交換できます。 2 つのプログラムで、異なる FormGroup を使用できます。 2 つのプログラムのスケルトン定義については、『IMS/VS 環境における制御権移動』で『2 つの EGL プログラム間の即時の交換』を参照してください。IMSADF II プログラムが関連する場合は、ビルド記述子オプション spaADF を YES に設定する必要があることに注意してください。
EGL プログラム制御ロジックでは、SPA を自動的に保持し、プログラム A および B の両方について SPA に後続するメッセージ・セグメントとして渡されるレコードを管理します。プログラム A および B の両方に同じビルド記述子オプション spaSize (28 バイト) を指定してください。
非 EGL プログラムは、IMS 会話型プログラムでなければなりません。EGL プログラムは、『IMS/VS 環境における制御権移動』にある『2 つの EGL プログラム間の即時の交換』のプログラム B と同様に定義される必要があります。IMSADF II プログラムが関連する場合は、ビルド記述子オプション spaADF を YES に設定する必要があることに注意してください。
非 EGL プログラムは、IMS 会話型プログラムでなければなりません。EGL プログラムは、『IMS/VS 環境における制御権移動』にある『2 つの EGL プログラム間の即時の交換』のプログラム A と同様に定義される必要があります。IMSADF II プログラムが関連する場合は、ビルド記述子オプション spaADF を YES に設定する必要があることに注意してください。
この手法では、フォームがプログラム・ユーザーに提示される場合、2 つのセグメント化会話型の EGL プログラムがトランザクション名と PSB 名の両方を交換できます。 2 つのプログラムで、同じ FormGroup を使用する必要があります。 レコードを転送する必要はありませんが、フォームは必須です。 2 つのプログラムのスケルトン定義については、『IMS/VS 環境における制御権移動』で『2 つの EGL プログラム間の据え置きの交換』を参照してください。IMSADF II プログラムが関連する場合は、ビルド記述子オプション spaADF を YES に設定する必要があることに注意してください。
非 EGL プログラムは、IMS 会話型プログラムでなければなりません。EGL プログラムは、『IMS/VS 環境における制御権移動』にある『2 つの EGL プログラム間の据え置きの交換』のプログラム B と同様に定義します。 IMSADF II プログラムが関連する場合は、ビルド記述子オプション spaADF を YES に設定する必要があることに注意してください。
非 EGL プログラムは、IMS 会話型プログラムでなければなりません。EGL プログラムは、『IMS/VS 環境における制御権移動』にある『2 つの EGL プログラム間の据え置きの交換』のプログラム A と同様に定義します。 IMSADF II プログラムが関連する場合は、ビルド記述子オプション spaADF を YES に設定する必要があることに注意してください。 EGL プログラムでは、非 EGL プログラムが入力として必要とするフォーム上のすべての変数データ・フィールドの modified プロパティーを YES に設定する必要があります。