EGL プログラムから抜粋した以下のコードは、IMS™ 端末、メッセージ・キュー、およびシリアル・ファイルとの対話を示しています。
//define PSB
Record addToQueue type PSBRecord { defaultPSBName="MYTRXCD1" }
// three PCBs required for CBLTDLI on IMS
iopcb IO_PCBRecord { @PCB { pcbType = TP } };
elaalt ALT_PCBRecord { @PCB { pcbType = TP } };
elaexp ALT_PCBRecord { @PCB { pcbType = TP } };
// other database PCBs
...
end
Record myTransactionPart type serialRecord
{ fileName="MYMSGQUE" }
...
end
program addtrans type textUIProgram
{ alias = "MYTRXCD1", // IMS requires pgm to match PSB name
segmented = yes,
@DLI { psb = "mypsb" }}
use MYFORMS; // MYFORMS is a formGroup containing FORM1
// declare variables
myTransaction myTransactionPart; // serial record for message queue
mypsb addToQueue; // psb
function main()
...
converse FORM1;
// do whatever processing is necessary
move FORM1 to myTransaction byName;
add myTransaction;
...
end
end
<ResourceAssociations name="IMS_RESOURCE_ASSOCIATION">
<association fileName="MYMSGQUE">
<imsvs>
<smsgq systemName="NEXTTRX" pcbName="elaalt"/>
</imsvs>
</association>
<association fileName="MYINQUE">
<imsvs>
<smsgq systemName="NEXTTRX" pcbName="iopcb"/>
</imsvs>
</association>
</ResourceAssociations>
addtrans は textUI プログラムであるため、EGL は IMS 環境とインターフェースするための制御ロジックを生成します。IMS プログラムは、入力メッセージ・キューが空になるまで、そのキューを読み取ることが期待されています。したがって EGL は、プログラムが (converse または show ステートメントを使用して) 現行ユーザーに応答するか、または (transfer to transaction ステートメントを使用して) 応答の責務を転送すると、プログラムがループしてメッセージ・キューから次の入力メッセージを読み取るよう、プログラムにロジックを生成します。概要については IMS での端末との対話を参照してください。詳細については、このトピックの『複数のユーザーおよびメッセージ・キュー』を参照してください。
プログラム addtrans がメッセージ・キューに書き込むメッセージを処理するためのプログラムを作成することもできます。このプログラムは、シリアル・ファイルからレコードを取得して、そのシリアル・ファイルを入出力 PCB に関連付ける基本プログラムである必要があります。
//define PSB
Record getFromQueue type PSBRecord { defaultPSBName="MYTRXCD2" }
// three PCBs required for CBLTDLI on IMS
iopcb IO_PCBRecord { @PCB { pcbType = TP } }
elaalt ALT_PCBRecord { @PCB { pcbType = TP } };
elaexp ALT_PCBRecord { @PCB { pcbType = TP } };
// other database PCBs
end
program gettrans type basicProgram
{ alias = "MYTRXCD2"
@DLI { psb = "mypsb" }}
// declare variables
myTransaction myTransactionPart // serial record for message queue
{fileName="MYINQUE"};
mypsb getFromQueue; // psb
function main()
while (myTransaction not endOfFile)
get next myTransaction;
// do whatever processing is necessary
end
end
end
IMS/VS または IMS BMP 環境用のプログラムを生成する場合は、シリアル・ファイルをメッセージ・キューに関連付けるリソース関連パーツも、使用する PCB の名前とともに指定する必要があります。この場合、入出力 PCB は、前のセクションの ResourceAssociations パーツで示しているように、入力に使用されます。systemName プロパティーはオプションです。このプログラムは、IMS システム定義に基づき、このプログラムを開始したトランザクションに関連付けられているメッセージ・キューを読み取ります。EGL は入力メッセージ内の IMS トランザクション ID に基づき、sysVar.transactionID を設定します。