Anhand dieser Auszüge aus EGL-Programmen wird die Interaktion mit seriellen IMS-Dateien, IMS-Terminals und IMS-Nachrichtenwarteschlangen gezeigt.
//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>
Da es sich bei 'addtrans' um ein textUI-Programm handelt, wird in EGL die Steuerlogik als Schnittstelle zur IMS-Umgebung generiert. Es wird erwartet, dass die Eingabenachrichtenwarteschlange von IMS-Programmen gelesen wird, bis diese leer ist. Daher wird in EGL eine Logik im Programm generiert, die bewirkt, dass das Programm in einer Schleife jeweils die nächste Eingabenachricht aus der Warteschlange liest, sobald das Programm auf den aktuellen Benutzer reagiert (mithilfe einer CONVERSE- oder SHOW-Anweisung) oder die Verantwortung zum Reagieren (mithilfe einer TRANSFER- oder TRANSACTION-Anweisung) weitergibt. Eine Übersicht finden Sie im Kapitel In IMS mit Terminals interagieren, weitere Informationen finden Sie in diesem Kapitel im Abschnitt 'Mehrere Benutzer und Nachrichtenwarteschlangen'.
Sie können auch ein Programm erstellen, mit dem die Nachrichten verarbeitet werden, die vom Programm 'addtrans' in die Nachrichtenwarteschlange geschrieben werden. Bei dem Programm muss es sich um ein Basisprogramm handeln, mit dem Datensätze von einer seriellen Datei abgerufen werden und mit dem die serielle Datei dem Eingabe-/Ausgabe-PCB zugeordnet wird.
//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
Wenn Sie das Programm für IMS/VS- oder IMS-BMP-Umgebungen generieren, müssen Sie auch einen Ressourcenzuordnungsabschnitt angeben, mit dem die serielle Datei einer Nachrichtenwarteschlange zugeordnet wird, sowie den Namen des zu verwendenden PCBs. In diesem Fall wird der Eingabe-/Ausgabe-PCB, wie im Abschnitt 'ResourceAssociations' im vorherigen Abschnitt gezeigt, für die Eingabe verwendet. Die Eigenschaft 'systemName' ist optional. Im Programm wird die Nachrichtenwarteschlange, die der Transaktion zugeordnet wurde, mit der das Programm gestartet wurde, basierend auf der IMS-Systemdefinition gelesen. In EGL wird anhand der IMS-Transaktions-ID in der Eingabenachricht der Wert für 'sysVar.transactionID' festgelegt.