シリアル・ファイルは、IMS/VS では IMS™ メッセージ・キューとして実装する必要があります。IMS BMP の場合は、シリアル・ファイルはメッセージ・キュー、OS/VS ファイル、VSAM ファイル、または GSAM ファイルとして実装できます。 z/OS® バッチの場合は、シリアル・ファイルは OS/VS ファイル、VSAM ファイル、または GSAM ファイルとして実装できます。 以下では、GSAM ファイルまたはメッセージ・キューにシリアル・ファイルを使用する場合について論じます。
シリアル・ファイルまたは印刷ファイルを GSAM ファイルとして識別します。それには、生成中にリソース関連パーツを使用して、GSAM のファイル・タイプと PCB 名を指定します。
IMS/VS で実行するオンライン・プログラムは、シリアル・ファイルを IMS メッセージ・キューとして実装します。 IMS BMP プログラムとして実行されるプログラムも、シリアル・ファイルをメッセージ・キューとして実装できます。 出力ファイルには、add ステートメントと get next I/O ステートメントのほか、close も使用できます。 IMS/VS または IMS BMP をターゲットのランタイム環境として選択した場合、 シリアル・ファイルまたは印刷ファイルをメッセージ・キューに関連付けて定義することができます。IMS/VS の場合は、すべてのシリアル・ファイルと印刷ファイルをメッセージ・キューに関連付ける必要があります。メッセージ・キューに関連付けることができるのは、単一の入力ファイルだけです。
印刷ファイル・データまたはシリアル・ファイル・データの 1 文字から 8 文字の宛先 ID を示す必要があります。この名前は、IMS 論理端末の ID、または IMS システム定義で定義されているトランザクション・コードの ID に一致する必要があります。
ファイル名は、メッセージ・キューのデフォルトのリソース名です。リソース関連パーツ内のこのデフォルトは上書きできます。
選択した PCB が、変更可能な代替 PCB または特別代替 PCB の場合、プログラムで record.resourceAssociation (ファイルの場合) または converseVar.printerAssociation (プリンターの場合) の値を設定すると、実行時にデフォルトのメッセージ・キューを上書きできます。record.resourceAssociation は、ローカル変数として扱われます。あるプログラムでレコードに record.resourceAssociation を設定しても、別のプログラム内の record.resourceAssociation には影響しません。add ステートメントは、そのプログラムの record.resourceAssociation の設定値で識別されるメッセージ・キューに書き込まれます。
複数セグメントメッセージ・キューの場合、シリアル・ファイルへの一連の追加は、各 add ステートメントが単一のメッセージのセグメントに対するものであるかのように処理されます。メッセージは、close ステートメントを発行するか、またはコミット点に達するまで終了しません。生成された COBOL プログラムは、close ステートメントを要求する IMS PURG 呼び出しを発行します。 これで、別のメッセージのセグメントの追加を開始し、そのメッセージを閉じることができます。複数セグメントのメッセージ・キューは、印刷ファイルに対しては無効です。
MMSGQ シリアル・ファイルに対して get next ステートメントを発行すると、生成されたプログラムが IMS get unique 呼び出しを発行して、メッセージの最初のセグメントを取得します。get next ステートメントを追加すると、メッセージの残りのセグメントを取得するために、GN 呼び出しが発行されます。生成された COBOL プログラムは、メッセージ内のすべてのセグメントの終了時に、noRecordFound レコード状態を設定します。スキャンを続行すると、生成されたプログラムが別の一連の get unique (GU) 呼び出しを開始し、それに続けて get next (GN) 呼び出しを発行します。これ以上メッセージが見つからなくなると、生成されたプログラムは endOfFile 状態を返します。
メッセージ・キューに関連付けられているシリアル・ファイルには PCB 名も指定する必要があります。シリアル入力ファイルの PCB 名としては、入力 PCB に割り当てられている名前を指定する必要があります。入力 PCB は、入力に使用される唯一のメッセージ・キューです。シリアル入力ファイルを使用する場合は、メインのバッチ・プログラムまたは呼び出し先バッチ・プログラムを使用する必要があります。生成されたプログラムは、メインの textUI プログラムのすべての入出力 PCB ロジックを処理します。
メッセージ・キューに関連付けるシリアル・レコードを定義する場合は、プログラム・データのみを定義する必要があります。生成された COBOL プログラムでは、add ステートメントについて IMS メッセージ・ヘッダー (長さ、ZZ、 およびトランザクション・コード) を追加し、get next ステートメントについてはこれを除去します。
| EGL I/O エラー・コード | IMS メッセージ・キューの状況コード | 重大度 |
|---|---|---|
| endOfFile | QC | ソフト |
| noRecordFound | QD | ソフト |
| ioError | 非ブランクの任意の状況コード | ハードまたはソフト |
| hardIOError | QC、QD、CE、CF、CG、CI、CJ、CK、CL 以外の非ブランクの状況コード | ハード |
| EGL I/O エラー・コード | GSAM 状況コード | 重大度 |
| endOfFile | GB | ソフト |
| ioError | 非ブランクの任意の状況コード | ハードまたはソフト |
| hardIOError | GB 以外の非ブランクの状況コード | ハード |
IMS/VS の場合は、印刷ファイルをメッセージ・キューに関連づける必要があります。IMS BMP の場合は、印刷ファイルをメッセージ・キューに関連付けることができます。印刷ファイルをメッセージ・キューに関連付ける方法は、シリアル・ファイルをメッセージ・キューに関連付ける方法と同じです。ただし、ファイル名が「printer」であるリソース関連で有効なファイル・タイプは SMSGQ のみです。IMS システム定義では、ランタイム環境で使用するメッセージ・キューの名前を論理端末として定義する必要があります。 converseVar.printerAssociation を使用すると、実行時にプリント出力先を変更できます。例えば、ユーザー ID、および各ユーザーが通常使用するプリンター ID のテーブルを定義することができます。converseVar.printerAssociation を設定すると、プリンター出力をプログラム・ユーザーに近いプリンターに送ることができます。