From 8b98947e3e4b6ca0c575f650b019c1c83a2ef74b Mon Sep 17 00:00:00 2001 From: Joseph Walther Date: Thu, 4 Sep 2025 18:45:23 -0500 Subject: [PATCH] Include Access to USER DATA for Exits --- .../C1UEXT02 Reuse CCID and Comment.cob | 58 ++++++++++---- ...C1UEXT03 Processor Reporting via Exit3.cob | 10 ++- .../C1UEXTR2 Reuse CCID and Comment.rex | 75 ++++++++++++++++++- ...C1UEXTR3 Processor Reporting via Exit3.rex | 7 +- 4 files changed, 129 insertions(+), 21 deletions(-) diff --git a/endevor/Field-Developed-Programs/Exit-Examples/C1UEXT02 Reuse CCID and Comment.cob b/endevor/Field-Developed-Programs/Exit-Examples/C1UEXT02 Reuse CCID and Comment.cob index 2cf7434..3844d90 100644 --- a/endevor/Field-Developed-Programs/Exit-Examples/C1UEXT02 Reuse CCID and Comment.cob +++ b/endevor/Field-Developed-Programs/Exit-Examples/C1UEXT02 Reuse CCID and Comment.cob @@ -1,6 +1,7 @@ PROCESS DYNAM OUTDD(DISPLAYS) ***************************************************************** - * DESCRIPTION: THIS PGM IS CALLED before Element processing * + * https://github.com/BroadcomMFD/broadcom-product-scripts + * DESCRIPTION: C1UEXT02 is called before Element processing. * * It gathers Endevor info from the exit blocks * * then calls REXX program C1UEXTR2. * * * @@ -14,6 +15,9 @@ * DELIMITED BY SIZE * * INTO ALLOC-TEXT * * END-STRING. * + * * + * Change the .REXX dataset name to the name of your dataset * + * that contains your C1UEXTR2 Rexx program. * ***************************************************************** ** see also EAGGXCOB for Calling IRXEXEC - the IBM example * ** for calling IRXEXEC from a Cobol program * @@ -51,19 +55,21 @@ 01 IRXEXEC-PGM PIC X(08) VALUE 'IRXEXEC'. 01 WS-VARIABLES. - 03 WS-POINTER PIC 9(8) COMP. - 03 WS-WORK-ADDRESS-ADR PIC S9(8) COMP SYNC . - 03 WS-WORK-ADDRESS-PTR REDEFINES WS-WORK-ADDRESS-ADR + 03 WS-POINTER PIC 9(8) COMP. + 03 WS-WORK-ADDRESS-ADR PIC S9(8) COMP SYNC . + 03 WS-WORK-ADDRESS-PTR REDEFINES WS-WORK-ADDRESS-ADR USAGE IS POINTER . - 03 ADDRESS-ECB-RETURN-CODE PIC 9(10) . - 03 ADDRESS-ECB-MESSAGE-CODE PIC 9(10) . - 03 ADDRESS-ECB-MESSAGE-LENGTH PIC 9(10) . - 03 ADDRESS-ECB-MESSAGE-TEXT PIC 9(10) . - 03 ADDRESS-REQ-SISO-INDICATOR PIC 9(10) . - 03 ADDRESS-REQ-CCID PIC 9(10) . - 03 ADDRESS-REQ-COMMENT PIC 9(10) . - 03 WS-INSPECT-CCID PIC X(12) . - 03 WS-INSPECT-COMMENT PIC X(40) . + 03 ADDRESS-ECB-RETURN-CODE PIC 9(10) . + 03 ADDRESS-ECB-MESSAGE-CODE PIC 9(10) . + 03 ADDRESS-ECB-MESSAGE-LENGTH PIC 9(10) . + 03 ADDRESS-ECB-MESSAGE-TEXT PIC 9(10) . + 03 ADDRESS-REQ-SISO-INDICATOR PIC 9(10) . + 03 ADDRESS-REQ-CCID PIC 9(10) . + 03 ADDRESS-REQ-COMMENT PIC 9(10) . + 03 ADDRESS-REQ-USER-DATA PIC 9(10) . + 03 ADDRESS-REQ-ALTER-WITH-UPDATE PIC 9(10) . + 03 WS-INSPECT-CCID PIC X(12) . + 03 WS-INSPECT-COMMENT PIC X(40) . 01 BPXWDYN PIC X(8) VALUE 'BPXWDYN'. @@ -180,6 +186,16 @@ MOVE WS-WORK-ADDRESS-ADR TO ADDRESS-REQ-COMMENT . + SET WS-WORK-ADDRESS-PTR TO + ADDRESS OF REQ-USER-DATA . + MOVE WS-WORK-ADDRESS-ADR + TO ADDRESS-REQ-USER-DATA . + + SET WS-WORK-ADDRESS-PTR TO + ADDRESS OF REQ-ALTER-WITH-UPDATE . + MOVE WS-WORK-ADDRESS-ADR + TO ADDRESS-REQ-ALTER-WITH-UPDATE . + ***** ***** / Convert COBOL exit block Datanames into Rexx \ ***** @@ -226,6 +242,18 @@ DELIMITED BY SIZE ';' DELIMITED BY SIZE + 'Address_REQ_USER_DATA = ' + DELIMITED BY SIZE + ADDRESS-REQ-USER-DATA + DELIMITED BY SIZE + ';' + DELIMITED BY SIZE + 'Address_REQ_ALTER_WITH_UPDATE = ' + DELIMITED BY SIZE + ADDRESS-REQ-ALTER-WITH-UPDATE + DELIMITED BY SIZE + ';' + DELIMITED BY SIZE 'REQ_COMMENT = "' DELIMITED BY SIZE REQ-COMMENT @@ -577,7 +605,7 @@ MOVE SPACES TO ALLOC-TEXT . STRING 'ALLOC DD(REXFILE2) ', - 'DA(SYSMD32.NDVR.ADMIN.ENDEVOR.ADM1.CLSTREXX)' + 'DA(YOURSITE.NDVR.REXX)' DELIMITED BY SIZE ' SHR REUSE' DELIMITED BY SIZE @@ -592,7 +620,7 @@ MOVE SPACES TO ALLOC-TEXT . STRING 'ALLOC DD(SYSEXEC) ', - 'DA(SYSMD32.NDVR.ADMIN.ENDEVOR.ADM1.CLSTREXX)' + 'DA(YOURSITE.NDVR.REXX)' DELIMITED BY SIZE ' SHR REUSE' DELIMITED BY SIZE diff --git a/endevor/Field-Developed-Programs/Exit-Examples/C1UEXT03 Processor Reporting via Exit3.cob b/endevor/Field-Developed-Programs/Exit-Examples/C1UEXT03 Processor Reporting via Exit3.cob index ff88359..e85215e 100644 --- a/endevor/Field-Developed-Programs/Exit-Examples/C1UEXT03 Processor Reporting via Exit3.cob +++ b/endevor/Field-Developed-Programs/Exit-Examples/C1UEXT03 Processor Reporting via Exit3.cob @@ -189,6 +189,12 @@ DELIMITED BY SIZE '";' DELIMITED BY SIZE + 'REQ_USER_DATA = "' + DELIMITED BY SIZE + REQ-USER-DATA + DELIMITED BY SIZE + '";' + DELIMITED BY SIZE 'REQ_SISO_INDICATOR = "' DELIMITED BY SIZE REQ-SISO-INDICATOR @@ -555,7 +561,7 @@ MOVE SPACES TO ALLOC-TEXT . STRING 'ALLOC DD(REXFILE) ', - 'DA(SYSMD32.NDVR.ADMIN.ENDEVOR.ADM1.CLSTREXX)' + 'DA(YOURSITE.NDVR.REXX)' 00051710 DELIMITED BY SIZE ' SHR REUSE' DELIMITED BY SIZE @@ -570,7 +576,7 @@ MOVE SPACES TO ALLOC-TEXT . STRING 'ALLOC DD(SYSEXEC) ', - 'DA(SYSMD32.NDVR.ADMIN.ENDEVOR.ADM1.CLSTREXX)' + 'DA(YOURSITE.NDVR.REXX)' 00053210 DELIMITED BY SIZE ' SHR REUSE' DELIMITED BY SIZE diff --git a/endevor/Field-Developed-Programs/Exit-Examples/C1UEXTR2 Reuse CCID and Comment.rex b/endevor/Field-Developed-Programs/Exit-Examples/C1UEXTR2 Reuse CCID and Comment.rex index fa0c098..ce6cd2a 100644 --- a/endevor/Field-Developed-Programs/Exit-Examples/C1UEXTR2 Reuse CCID and Comment.rex +++ b/endevor/Field-Developed-Programs/Exit-Examples/C1UEXTR2 Reuse CCID and Comment.rex @@ -2,6 +2,7 @@ /* -------------------------------------------------------------- */ /* This is a simple version that: */ /* o Reuses a CCID value already on the element if CCID is blank */ +/* o Validates a CCID with Service-Now */ /* o Reuses a comment value from element if comment is blank */ /* o Gives a friendly reminder if the SIGNOUT OVERRIDE is on */ /* -------------------------------------------------------------- */ @@ -39,8 +40,12 @@ Message ='' MessageCode = ' ' - /* If CCID is left blank, then apply last used CCID */ + /* If CCID is left blank, then apply last used CCID */ + /* otherwise if it appears to be a ServiceNow - validate */ If REQ_CCID = COPIES(' ',12) then Call Update_CCID; + Else, + If Substr(REQ_CCID,1,3) = 'PRB' |, + Substr(REQ_CCID,1,3) = 'CHG' then Call Validate_CCID; /* If COMMENT is left blank, then apply last used COMMENT */ If MyRc < 8 &, @@ -48,6 +53,18 @@ sa= 'MyRc =' MyRc + If SRC_ENV_SYSTEM_NAME = 'ADMINSYS' |, + TGT_ENV_SYSTEM_NAME = 'ADMINSYS' then, + Do + hexAddress = D2X(ADDRESS_REQ_USER_DATA) + storrep = STORAGE(hexAddress,,'Endevor Admin Work') + hexAddress = D2X(ADDRESS_REQ_ALTER_WITH_UPDATE) + storrep = STORAGE(hexAddress,,'00000004'X) + hexAddress = D2X(Address_ECB_RETURN_CODE) + storrep = STORAGE(hexAddress,,'00000004'X) + Exit + End + /* Did user specify OVERRIDE SIGNOUT ? */ If MyRc = 0 & REQ_SISO_INDICATOR = 'Y' then Do @@ -103,6 +120,62 @@ Update_CCID: Return; +Validate_CCID: + + /* build STDENV input */ + CALL BPXWDYN , + "ALLOC DD(STDENV) LRECL(080) BLKSIZE(24000) SPACE(1,1) ", + " RECFM(F,B) TRACKS ", + " NEW UNCATALOG REUSE "; + Queue "EXPORT PATH=$PATH:" ||, + "'/usr/IBM/python/lib/python#.##/'" + Queue "EXPORT VIRTUAL_ENV=" ||, + "'u/your/venv/lib/python#.##/site-packages/'" + "EXECIO 2 DISKW STDENV (finis" + + /* build BPXBATCH inputs and outputs */ + /* build STDPARM input */ + CALL BPXWDYN , + "ALLOC DD(STDPARM) LRECL(080) BLKSIZE(24000) SPACE(1,1) ", + " RECFM(F,B) TRACKS ", + " NEW UNCATALOG REUSE "; + Queue "sh cd " ||, + "u/your/venv/lib/python#.##/site-packages;" + Queue "python ServiceNow.py" REQ_CCID + "EXECIO 2 DISKW STDPARM (finis" + + CALL BPXWDYN , + "ALLOC DD(STDOUT) LRECL(200) BLKSIZE(20000) SPACE(5,5) ", + " RECFM(F,B) TRACKS ", + " NEW UNCATALOG REUSE "; + Notnow =, + "ALLOC DD(STDOUT) DA('IBMUSER.STDOUT') OLD REUSE " + + CALL BPXWDYN "ALLOC DD(STDIN) DUMMY SHR REUSE" + CALL BPXWDYN "ALLOC DD(STDERR) DA(*) SHR REUSE" + + ADDRESS LINK 'BPXBATCH' + + "EXECIO * DISKR STDOUT (Stem stdout. finis" + lastrec# = stdout.0 + lastrecord = Substr(stdout.lastrec#,1,40) + + If Pos("Exists",lastrecord) = 0 then, + Do + Message = 'C1UEXTR2 - CCID ' REQ_CCID ||, + ' is not defined to Service-Now' + MessageCode = 'U012' + MyRc = 8 + End + + CALL BPXWDYN "FREE DD(STDENV) " + CALL BPXWDYN "FREE DD(STDPARM)" + CALL BPXWDYN "FREE DD(STDOUT) " + CALL BPXWDYN "FREE DD(STDIN) " + CALL BPXWDYN "FREE DD(STDERR) " + + Return; + Update_COMMENT: If Wordpos(ECB_ACTION_NAME,ActionsThatUse_SRC) > 0 then, diff --git a/endevor/Field-Developed-Programs/Exit-Examples/C1UEXTR3 Processor Reporting via Exit3.rex b/endevor/Field-Developed-Programs/Exit-Examples/C1UEXTR3 Processor Reporting via Exit3.rex index 62de7d1..73e555b 100644 --- a/endevor/Field-Developed-Programs/Exit-Examples/C1UEXTR3 Processor Reporting via Exit3.rex +++ b/endevor/Field-Developed-Programs/Exit-Examples/C1UEXTR3 Processor Reporting via Exit3.rex @@ -10,7 +10,7 @@ CALL BPXWDYN STRING; /* Indicate your choices here..... */ - LoggingPrefix = 'SYSMD32.NDVR.LOGGING' + LoggingPrefix = 'YOURSITE.NDVR.LOGGING' HowManyEntries= 20 /* If C1UEXTR3 is allocated to anything, turn on Trace */ @@ -41,9 +41,10 @@ Message ='' MessageCode = ' ' /* - If TGT_ENV_TYPE_OF_BLOCK = 'C' then, - If SRC_ENV_IO_TYPE = 'I' then, */ + If SRC_ENV_SYSTEM_NAME = 'ADMINSYS' |, + TGT_ENV_SYSTEM_NAME = 'ADMINSYS' then, + Say REQ_USER_DATA sa= SRC_ENV_TYPE_OF_BLOCK sa= TGT_ENV_TYPE_OF_BLOCK