シリアル・ファイルは、IMS/VS で IMS™ メッセージ・キューとして実装する必要があります。 IMS BMP のメッセージ・キュー、OS/VS ファイル、VSAM ファイル、または GSAM ファイルとして、シリアル・ファイルを実装することができます。 シリアル・ファイルは、z/OS® バッチの OS/VS ファイル、VSAM ファイル、または GSAM ファイルとして実装することができます。 以下に、シリアル・ファイルに GSAM ファイルまたはメッセージ・キューを使用することについて検討します。
IMS/VS で実行されるオンライン・プログラムは、シリアル・ファイルを IMS メッセージ・キューとして実装します。 IMS BMP プログラムとして実行されるプログラムでも、シリアル・ファイルをメッセージ・キューとして実装できます。 出力ファイルには、add および get next I/O 文のほか、close も使用できます。 ターゲット・ランタイム環境として IMS/VS または IMS BMP を選択する場合、シリアル・ファイルまたは印刷ファイルを、メッセージ・キューに関連付けるものとして定義できます。 すべてのシリアル・ファイルおよび印刷ファイルを IMS/VS のメッセージ・キューと関連付ける必要があります。 単一の入力ファイルのみ、メッセージ・キューと関連付けることができます。
印刷ファイルまたはシリアル・ファイルのデータのために 1 文字から 8 文字の宛先 ID を示す必要があります。 その名前は、IMS 論理端末の ID または IMS システム定義で定義されるトランザクション・コードと一致する必要があります。
ファイル名は、メッセージ・キューのデフォルト・リソース名です。 リソース関連パーツでこのデフォルトをオーバーライドすることができます。
選択する PCB が変更可能代替または即時代替の PCB である場合、ファイルについては sysVar.resourceAssociation に値を設定し、プログラムにあるプリンターについては converseVar.printerAssociation に値を設定することで、実行時にデフォルト・メッセージ・キュー名をオーバーライドすることができます。 sysVar.resourceAssociation は、ローカル変数として処理されます。 あるプログラムのレコードに sysVar.resourceAssociation を設定しても、別のプログラムの sysVar.resourceAssociation には影響しません。add 文は、 そのプログラムの sysVar.resourceAssociation の設定によって識別されたメッセージ・キューに書き込みます。
複数セグメント・メッセージ・キューでは、シリアル・ファイルに対する一連の add は、各 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 名として、I/O PCB に割り当てられている名前を指定します。I/O PCB は、入力に使用される唯一のメッセージ・キューです。シリアル入力ファイルを使用する場合は、 メイン・バッチ・プログラムまたは呼び出し先バッチ・プログラムを使用する必要があります。 生成されたプログラムは、メイン・トランザクション・プログラムのすべての I/O PCB ロジックを処理します。
メッセージ・キューと関連付けるシリアル・レコードを定義する際、定義する必要があるにはプログラム・データだけです。 生成された COBOL プログラムは、add 文のための IMS メッセージ・ヘッダー (長さ、ZZ、およびトランザクション・コード) を追加し、get next 文についてはそれを除去します。
IMS/VS では、印刷ファイルをメッセージ・キューを関連付ける必要があります。 IMS BMP では、印刷ファイルをメッセージ・キューを関連付けることができます。 シリアル・ファイルをメッセージ・キューに関連付けるのと同じ方法で、 印刷ファイルをメッセージ・キューに関連付けます。 ただし、ファイル名が printer というリソース関連パーツについては、有効 なファイル・タイプは SMSGQ のみです。IMS システム定義において、ランタイム環境で使用するメッセージ・キュー名 を論理端末として定義する必要があります。 converseVar.printerAssociation を使用すると、実行時のプリント出力先を変更することができます。 例えば、各ユーザーが通常使用するユーザー ID とプリンター ID のテーブルを定義できます。 converseVar.printerAssociation を設定することによって、プログラム・ユーザーの近くのプリンターにプリンター出力を送ることができます。