Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Beispiel 8 - JV-Makros, mit ONEVT-Makro

&pagelevel(3)&pagelevel

JV-Makros, mit ONEVT-Makro

Das Programm BONEVT setzt einen ONEVT-Makroaufruf für die Ereigniskennung ONEVTEST ab, der immer dann einen POSSIG-Aufruf verursacht, wenn eine der folgenden Bedingungen erfüllt ist:

  • Jobvariable JV1 ist zum Zeitpunkt des ONEVT-Aufrufs auf ’MELDUNG’ gesetzt

  • JV1 wird auf ’MELDUNG’ gesetzt

  • Katalog wird exportiert

Die Anzahl der POSSIG-Aufrufe ist auf drei beschränkt (COUNT=3), d.h. dieser ONEVT-Makroaufruf registriert maximal 3 mal „Bedingung erfüllt“. Mit SOLSIG wird ein Signal angefordert und anschließend die übergebene Post Code-Information geprüft. Abhängig vom Bedingungsergebnis gibt das Programm dann nach jedem SOLSIG eine Meldung aus (MELD1, MELD2 oder FMELD).

Programm BONEVT

BONEVT   START
         BALR  3,0
         USING *,3
         PRINT NOGEN
ANF      DCLJV JV1,VERSION=1           "JV1 definieren"
         ENAEI EINAME=ONEVTEST,EIIDRET=KUKE,SCOPE=GLOBAL
         ONEVT 'JV1=''MELDUNG''',EIID=KUKE,POST='B1',COUNT=3,VERSION=1
CHECK    CHKEI EIID=KUKE               "Warteschlange prüfen"
         LR    5,1
         CMD   '%DISPLAY %15,%5'
SIGNAL   MVC   EMPF,NULL               "Signal anfordern"
         SOLSIG EIID=KUKE,COND=UNCOND,RPOSTAD=EMPF,LIFETIM=10
*** POST-CODE PRUEFEN ***************************************
PRUEF    CLI   ANZ,X'14'               "Ereignisanzeige"
         BNE   FMELD
         CLC   ONKEN,POST              "POST-Wert"
         BNE   FMELD
         CLI   ERG,X'00'               "JV1 gesetzt"
         BE    MELD1
         CLI   ERG,X'08'               "Katalog exportiert"
         BE    MELD2
         B     FMELD
*** MELDUNGEN, DIE AUSGEGEBEN WERDEN ************************
MELD1    WROUT MLDG1,ENDE              "JV1 gesetzt"
         B     CHECK
MELD2    WROUT MLDG2,ENDE              "Katalog exportiert"
         B     FRAGE
FMELD    WROUT FEHLER,ENDE      "kein POSSIG durch ONEVT empfangen"
         B     FRAGE
FRAGE    WRTRD ABFRAG,,EINB,,5,ENDE    "Programm beenden ?"


Die Wirkung des ONEVT-Makros wird in diesem Beispiel an der Bedingung „JV1 wird auf ’MELDUNG’ gesetzt“ demonstriert:

Ablaufprotokoll LST.BONEVT des Programms BONEVT

(IN)     mod-job-options logging=*par(listing=*yes)
(IN)     delete-system-file system-file=*omf
(IN)     start-assembh—————————————————————————————————————————————————  (1) 
(OUT)    % PROGRAM 'ASSEMBH', VERSION '01.2D01' OF '2007-08-07' LOADED
(OUT)    % COPYRIGHT (C) FUJITSU TECHNOLOGY SOLUTIONS   2009. 
(  )        ALL RIGHTS RESERVED
(OUT)    %  ASS6010 V01.2D01 OF BS2000 ASSEMBH  READY
(IN)     compile source=bonevt,mod-lib=ass.plamlib(bonevt),test-support=yes
(OUT)    ASS6011 ASSEMBLY TIME: 604 MSEC 
(OUT)    %  ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES
(OUT)    %  ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS
(OUT)    %  ASS6006 LISTING GENERATOR TIME: 66 MSEC
(IN)     end
(OUT)    %  ASS6012 END OF ASSEMBH 
(IN)     load-exe from=(lib=ass.plamlib,elem=bonevt),test-opt=*aid—————  (2) 
(OUT)    %  BLS0517 MODULE 'BONEVT' LOADED
(IN)     %insert check—————————————————————————————————————————————————  (3) 
(IN)     resume-program
(OUT)
(OUT)   STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT
(IN)     mod-jv jv=jv1,set-val='MELDUNG'———————————————————————————————  (4) 
(IN)     mod-jv jv=jv1,set-val='MELDUNG'
(IN)     mod-jv jv=jv1,set-val='MELDUNG'
(IN)     mod-jv jv=jv1,set-val='MELDUNG'
(IN)     mod-jv jv=jv1,set-val='MELDUNG'
(IN)     resume-program
(OUT)    *** TID: 0001005E *** TSN: 0FDB ************************************
(NL)     CURRENT PC: 000000E0    CSECT: BONEVT  *****************************
(NL)     %15             = 2C000000————————————————————————————————————  (5) 
(NL)     %5              = 00000003————————————————————————————————————  (6) 
         CLI   ANTW,'N'
         BE    DONEVT                  "Programm nicht beenden"
         CLI   ANTW,'J'
         BE    ENDE                     "beenden"
         B     FRAGE                    "Abfrage wiederholen"
*
DONEVT   DONEVT EIID=KUKE,VERSION=1
         DISEI EIID=KUKE                "Ereigniskennung löschen"
         ERAJV JV1,VERSION=1
         B     ANF
ENDE     TERM
*** DEFINITIONEN ********************************************
EMPF     DS    0F
ANZ      DS    CL1
ERG      DS    CL1
ONKEN    DS    CL2
POST     DC    C'B1'
KUKE     DC    C'KURZ'
NULL     DC    F'0'
MLDG1    DC    Y(END1-MLDG1)
         DS    L2
         DC    X'01'
         DC    'JV1 WURDE GESETZT'
END1     EQU   *
MLDG2    DC    Y(END2-MLDG2)
         DS    L2
         DC    X'01'
         DC    'KATALOG WURDE EXPORTIERT'
END2     EQU   *
FEHLER   DC    Y(FEND-FEHLER)
         DS    L2
         DC    X'01'
         DC    '***   FEHLER   ***'
FEND     EQU   *
ABFRAG   DC    Y(ABEND-ABFRAG)
         DS    CL2
         DC    X'01'
         DC    'PROGRAMM BEENDEN?(J/N)'
ABEND    EQU   *
EINB     DS    0CL5
         DS    CL4
ANTW     DS    CL1
         END  

(1)

Das Programm BONEVT wird mit dem Assembler ASSEMBH übersetzt und in der Bibliothek ASS.PLAMLIB abgelegt.

(2)

Das Programm wird geladen und soll mit der Testhilfe AID getestet werden.

(3)

Mit dem AID-Kommando %INSERT wird der Testpunkt CHECK vereinbart.

(4)

Die Jobvariable JV1 wird fünfmal auf ’MELDUNG’ gesetzt.

(5)

Der CHKEI-Makro zeigt die POSSIG-Warteschlange (Register 15).

(6)

Der CHKEI-Makro zeigt, dass die Anzahl der POSSIG-Aufrufe 3 ist (Register 5).

(OUT)    JV1 WURDE GESETZT—————————————————————————————————————————————  (7) 
(OUT)
(OUT)    STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT
(IN)     %display EMPF%X———————————————————————————————————————————————  (8) 
(OUT)    CURRENT PC: 000000A8    CSECT: BONEVT  *****************************
(NL)     V'0000028C' = EMPF     + #'00000000'
(NL)     0000028C (00000000) 1400C2F1                               ..B1
(IN)     resume-program
(OUT)    CURRENT PC: 000000E0    CSECT: BONEVT  *****************************
(NL)     %15             = 2C000000
(NL)     %5              = 00000002
(OUT)    JV1 WURDE GESETZT
(OUT)    STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT
(IN)     resume-program
(OUT)    %15             = 2C000000
(NL)     %5              = 00000001
(OUT)    JV1 WURDE GESETZT
(OUT)    STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT
(IN)     resume-program
(OUT)    %15             = 30000000
(NL)     %5              = 8F0000AC
(OUT)    ***   FEHLER   ***————————————————————————————————————————————  (9) 
(OUT)    PROGRAMM BEENDEN?(J/N)
(IN)     N
(OUT)
(OUT)    STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT

(7)

Der erste POSSIG wurde mit SOLSIG angefordert. Das Bedingungsergebnis wird abgefragt und dementsprechend eine Meldung ausgegeben.

(8)

Das Empfangsfeld EMPF enthält nach dem SOLSIG-Aufruf den übergebenen Post Code:

X’14’

POSSIG wurde durch einen ONEVT-Makro verursacht

X’00’

Bedingungsergebnis „Jobvariable gesetzt“

X’C2F1’

ONVEVT-Kennungswert B1

(9)

Nachdem alle 3 POSSIG-Aufrufe mit SOLSIG angefordert wurden, ist die Warteschlange leer (Register 15 des CHKEI-Makros: SI=X’30’). Die Prüfung des Post Codes nach einem weiteren SOLSIG führt zur Meldung „FEHLER“. Die Abfrage wird mit „N“ beantwortet, d.h. das Programm wird ab ANF noch einmal durchlaufen - ein erneuter ONEVT-Makro wird abgesetzt.

(IN)     mod-jv jv=jv1,set-val='MELDUNG'——————————————————————————————— (10) 
(IN)     mod-jv jv=jv1,set-val='MELDUNG'
(IN)     resume-program
(OUT)    %15              = 2C000000
(NL)     %5              = 00000002———————————————————————————————————— (11) 
(OUT)    JV1 WURDE GESETZT
(OUT)
(OUT)    STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT
(IN)     del-jv jv=jv1————————————————————————————————————————————————— (12) 
(OUT)    %  JVS04A3 ERROR WHEN DELETING JOB VARIABLE ':4V05:$COGNITAS.JV1'
(OUT)    %  JVS0447 JV NAME BEING USED BY CJC FUNCTION. COMMAND REJECTED
(IN)     resume-program
(OUT)    %15             = 2C000000
(NL)     %5              = 00000001
(OUT)    JV1 WURDE GESETZT
(OUT)
(OUT)    STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT
(IN)     resume-program
(OUT)    %15             = 30000000
(NL)     %5              = 8F0000AC
(OUT)    ***   FEHLER   ***
(OUT)    PROGRAMM BEENDEN?(J/N)
(IN)     N
(OUT)
(OUT)    STOPPED AT LABEL: CHECK ,SRC_REF: 84, SOURCE: BONEVT, PROC: BONEVT
(IN)     show-jv-attr jv=jv1——————————————————————————————————————————— (13) 
(OUT)    0000000 :4V05:$COGNITAS.JV1
(NL)     SUM    00001 JV'S; JV-VALUE = 00000000 BYTES
(IN)     show-jv-attr jv=jv1,inf=*all-attr
(OUT)    000000 :4V05:$COGNITAS.JV1
(NL)      USER-ACC   = ALL-USERS   ACCESS     = WRITE
(NL)      CRE-DATE   = 2010-08-04  EXPIR-DATE = 2010-08-04
(NL)      CRE-TIME   =   16:51:15  EXPIR-TIME =   00:00:00
(NL)      READ-PASS  = NONE
(NL)      WRITE-PASS = NONE
(NL)     SUM    00001 JV'S; JV-VALUE = 00000000 BYTES

(10)

Das Ereignis „JV1 setzen“ wird zweimal signalisiert.

(11)

Die Anzahl der POSSIG-Aufrufe ist 2.

(12)

Der Versuch, die Jobvariable JV1 zu löschen wird abgewiesen, da Jobvariablen, die in Makros (und Kommandos) der bedingungsabhängigen Auftragssteuerung verwendet werden, gegen Löschen geschützt sind.

(13)

Die Merkmale der Jobvariablen JV1 werden ausgegeben.

(IN)     show-jv jv=jv1———————————————————————————————————————————————— (14) 
(OUT)    %  JVS04B2 SPECIFIED JOB VARIABLE SUBSTRING EMPTY OR ILLEGAL. 
(   )    COMMAND REJECTED
(IN)     resume-program
(OUT)    %15             = 30000000
(NL)     %5              = 8F0000AC
(OUT)    ***   FEHLER   ***
(OUT)    PROGRAMM BEENDEN?(J/N)
(IN)     J
(IN)     del-jv jv=jv1————————————————————————————————————————————————— (15) 
(IN)     show-j-attr jv=jv1
(OUT)    %  JVS0433 REQUESTED JOB VARIABLE NOT CATALOGED. COMMAND REJECTED
(IN)     assign-syslst to=*prim

(14)

Der Jobvariablen JV1 ist kein Wert zugewiesen.

(15)

Die Jobvariable JV1 kann gelöscht werden.