MainframeSupports
tip uge 8/2000:

Med fremkomsten af MQS er det blevet meget populært med asynkron databehandling. Derfor vil vi i denne og nęste uge skrive lidt om forskellige faciliteter, som gør det muligt at lave asynkrone tasks i CICS og få andre tasks til at vente på, at de bliver færdige.

For at sætte noget i gang i CICS, der sker asynkront, så skal man lave en EXEC CICS START TRANSID(<trans-id>), hvor <trans-id> er navnet på den transaktion, man vil køre. Hvis man ikke angiver andet, så startes transaktionen op, så snart CICS får tid. Hvis man angiver et tidspunkt for opstart, så kan man med parameteren REQID(<navn>) give transaktionen et navn, mens den venter på at blive startet op. <navn> kan vælges frit og være op til 8 tegn. En ventende transaktion kaldes et Interval Control Element, også kaldet ICE. I princippet svarer en asynkron transaktion til et batch-job.

Man kan fjerne et ICE med en EXEC CICS CANCEL REQID(<navn>), svarende til at purge et batch-job, der ikke er gået igang endnu. Det kan faktisk være særdeles nyttigt, hvis man har designet en asynkron transaktion sådan, at den starter sig selv op med et vist interval. Hvis man nu forestiller sig, at den asynkrone transaktion bliver startet op flere gange inden for intervallet, så får man hurtigt et hav af gentagelser af den samme transaktion og det var måske ikke lige meningen. Dette undgår du på følgende måde:

...
EXEC CICS
  CANCEL REQID('MYREQID')
  NOHANDLE
END-EXEC
IF EIBRESP NOT = 0 AND EIBRESP NOT = 13
THEN
  /* FEJL */
ELSE
  /* RESTEN AF PROGRAMMET */
  ...
  EXEC CICS
    START TRANSID('MYID')
    INTERVAL(500)
    REQID('MYREQID')
  END-EXEC
  ...

Denne transaktion vil med statsgaranti kun blive udført een gang hver 5. minut, hvis ingen starter transaktionen på anden måde. Hvis den bliver startet midt i intervallet, så vil den ventende transaktion blive fjernet. EIBRESP = 13 får du, når det angivne REQID ikke findes.

Du kan læse mere om START TRANSID og CANCEL REQID i Application Programming Reference til CICS eller til Transaction Server. Hvis du kører under CICS version 3.3 eller tidligere er det ikke sikkert, at START TRANSID med REQID vil virke. Så skal du tilføje parameteren QUEUE(<navn>), men husk at fjerne den igen inden din CICS bliver opgraderet til Transaction Server, for så virker QUEUE-parameteren nemlig ikke længere.

Sidste uges tip        Tip oversigten