メッセージ交換用の IMS SPA のフォーマット

EGL は、以下のビルド記述子オプションに基づいて IMS™ スクラッチパッド領域のフォーマットを定義します。
spaSize
IMS に必要な各フィールド (SPA の長さ、SPA ID、および IMS トランザクション名) およびセグメンテーション状況バイトの EGL 所要量が含まれる、SAP の合計の長さを指定します。
spaStatusBytePosition
このオプション・フィールドは、15 (状況バイトがデータに先行する場合) または spaSize と同じ値 (状況バイトがデータに後続する場合) のいずれかに設定されます。
表 1. IMS スクラッチパッド領域のフォーマット
フィールド 長さ (バイト) データのタイプ 説明
SPA 長 2 2 進数 セグメントの長さ。
SPA ID 4 2 進数 IMS での SPA の識別に使用される固有名。 この名前は MPP では変更できません。
IMS トランザクション名 8 文字 EGL プログラムの IMS トランザクション名。
セグメンテーション状況バイト (オプション) 1 16 進数 このオプション・バイトは、spaSize=n および spaStatusBytePosition=15 が指定され、これが据え置きの切り替えである場合に使用されます。 データが作業データベースに保存されたかどうかを示します。
プログラム・データ 可変長 可変長 この領域には、transfer to transaction ステートメントに渡され、ターゲット・プログラムによってその入力レコードに受け取られるレコードが格納されます。
セグメンテーション状況バイト (オプション) 1 16 進数 このオプション・バイトは、これが即時切り替えであり、spaSize=n および spaStatusBytePosition=n である場合に使用されます。 (状況バイトの位置は、状況バイトがデータに先行する場合は 15、状況バイトがデータに後続する場合は SPA のサイズと同じ値になります。) この場合、バイトの内容は無視されます。 また、このオプション・バイトは、spaSize=n および spaStatusBytePosition=n が指定され、これが据え置きの切り替えである場合にも使用されます。 この場合、バイトはデータが作業データベースに保存されたかどうかを示します。

以下の例に、会話型処理に対する据え置きまたは即時のプログラム間メッセージ交換のいずれかで渡されるスクラッチパッド領域の COBOL 定義を示します。 PL/I では、COBOL での使用に 2 バイトではなく、4 バイトの長さのフィールドが必要であることに注意してください。 詳しくは、ご使用のシステムの IMS/VS 資料を参照してください。 特定のフィールド名は説明の目的にのみ使用されています。 実際のフィールド名は生成されるコードによって異なることがあります。

* SPA IO 領域。
 01 SPA.
   05 SPA-LENGTH                PIC S9(4) COMP.
   05 SPA-ID                    PIC S9(9) COMP.
   05 IMS-TRAN-NAME             PIC X(8).
   05 CSP-OPTIONAL-SSM-BYTE     PIC X(1).      注 1 を参照。
   05 CSP-APPL-WS-DATA.
     10 data-item-1             PIC ........................
     10 data-item-2             PIC ........................
         .
      .
      .
   05 CSP-OPTIONAL-SSM-BYTE     PIC X(1).      注 2 を参照。
この例には、以下の内容が適用されます。
  1. このオプション・バイトは、spaSize=n および spaStatusBytePosition=15 が指定され、これが据え置きの切り替えである場合に使用されます。 データが作業データベースに保存されたかどうかを示します。
  2. このオプション・バイトは、spaSize=n および spaStatusBytePosition=n が指定され、これが即時切り替えである場合に使用されます。 この場合、バイトの内容は無視されます。 また、このオプション・バイトは、spaSize=n および spaStatusBytePosition=n が指定され、これが据え置きの切り替えである場合にも使用されます。 この場合は、データが作業データベースに保存されたかどうかを示します。

上記の表で「プログラム・データ」として識別されるデータは、ターゲット・プログラムの入力レコードとして処理されます。 この手法により、非 EGL プログラムが SPA にデータを格納し、その SAP データを使用または変更する EGL プログラム (または一連の EGL プログラム) へ切り替えることが可能になります。 EGL プログラムでは最終的に、SPA に格納された EGL プログラムからの情報を伴って、非 EGL プログラムに切り替え戻すことができます。 SPA サイズの変更に関する IMS の制約事項に従ってください。

SPA サイズおよび移動レコード・サイズ

以下の表には、SPA、transfer to transaction または show ステートメントに指定されたレコード、およびターゲット・プログラムの入力レコードの、会話型処理での関係が定義されています。

表 2. レコードを移動する IMS SPA の関係
機能 データ域サイズ対移動レコード・サイズ 結果
transfer to transaction SPA 内のプログラム・データ域のサイズが、transfer to transaction または show ステートメントに指定された EGL レコードのサイズを超えている。 SPA のプログラム・データ域が EGL レコード全体を使用して作成され、SPA の残りのバイトは空白に初期化されます。
transfer to transaction SPA 内のプログラム・データ域のサイズが、transfer to transaction に指定された EGL レコードのサイズより小さい。 EGL レコードの余分のバイトは切り捨てられます。
ターゲット・プログラムの入力レコードの初期化 SPA 内のプログラム・データ域のサイズが、 ターゲット・プログラムの入力レコードに指定された EGL レコードのサイズを超過している。 SPA 内のプログラム・データ域の余分のバイトは、その入力レコードへの移動時に切り捨てられます。
ターゲット・プログラムの入力レコードの初期化 SPA 内のプログラム・データ域のサイズが、 ターゲット・プログラムの入力レコードに指定された EGL レコードのサイズより小さい。 入力レコードは SPA 内のプログラム・データ域で初期化され、入力レコードの残りのバイトはデータ・タイプに基づいて初期化されます。

フィードバック