IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

Using REXX to access SDSF; What am I doing wrong?


IBM Mainframe Forums -> CLIST & REXX
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
tom.glaser

New User


Joined: 08 Dec 2020
Posts: 15
Location: US

PostPosted: Tue Dec 08, 2020 9:42 pm
Reply with quote

Hi,

I'm trying to read the sysout of a currently executing job, but running into one issue. A Db2 bind is running in batch. Once this completes, I plan to have a rexx step calling sdsf to pull out the sysout information (sysprint) from the bind job.

Such as
DA
PRINT DATASET
PRINT 1 99999
PRINT CLOSE

This would capture the currently executing sysout.

Everything works if I point my sdsf command to ST, but fails pointing to DA. Let me show you want I'm trying to do:

Code:
/* REXX *************************************************************/
/* Pull out information of currently executing bind job             */
/* Store bind results into Db2 table           Tom G.               */
/********************************************************************/

rc=isfcalls('ON')                                      /* access to sdsf */

Address SDSF "ISFEXEC ST"                     /* open ST panel */
lrc=rc
if lrc ¬= 0 then call error_msg

isfprefix='D2ADME1'                                /* set job name */

do ix=1 to JNAME.0
 say 'this is JNAME.ix = 'JNAME.ix
  if JNAME.ix = "D2ADME1A" then                  /* if job is found */
    do
      Say '====> Job is found'
      Address SDSF "ISFACT ST TOKEN('"TOKEN.ix"') PARM(NP SA)"
      lrc=rc
      if lrc ¬= 0 then call error_msg
      do jx=1 to isfddname.0
              Say "Now reading" isfdsname.jx
              "EXECIO * DISKR" isfddname.jx "(STEM line. FINIS"
              Say "  Lines read:" line.0
              do kx = 1 to line.0
                Say "  line."kx "is:" line.kx
              end
      end
      if lrc<>0 then
        call error_msg
    end
end
rc=isfcalls("OFF")
exit
     /* Subroutine to list error messages */
error_msg:

say 'Error messages:'
say  isfmsg
say  isfmsg2.0
say  issmsg2.1
say  isfmsg2.2
exit


The above works....but it's pointing to ST:
Address SDSF "ISFEXEC ST"

But, if I point it to a currently executing job, it fails with rc=08
Address SDSF "ISFEXEC DA"

Any idea why? My job name is D2ADME1A and it would be the only executing job at that time. Maybe it shouldn't be written this way.

Thanks, Tom

Please use the code tags to present code and data. Coded for you this time.
Back to top
View user's profile Send private message
Joerg.Findeisen

Senior Member


Joined: 15 Aug 2015
Posts: 1246
Location: Bamberg, Germany

PostPosted: Tue Dec 08, 2020 10:13 pm
Reply with quote

There is RGEN to generate REXX for a lot of SDSF tasks. You could have a look there first.
Back to top
View user's profile Send private message
Willy Jensen

Active Member


Joined: 01 Sep 2015
Posts: 712
Location: Denmark

PostPosted: Wed Dec 09, 2020 2:17 am
Reply with quote

I can't remember the details, but I remember having to use the ST command and then scan for the active job, to do what you attempt. By the way, you have the ISFPREFIX before the SDSF ST command. Anything in the ISFMSG list?
Back to top
View user's profile Send private message
Willy Jensen

Active Member


Joined: 01 Sep 2015
Posts: 712
Location: Denmark

PostPosted: Wed Dec 09, 2020 2:54 am
Reply with quote

Part of my program, note the queue.ji='EXECUTION' statement.
Code:
 n=isfcalls('ON')                                                   
                                                                     
 isfprefix=mvsvar('symdef','jobname')  /* set isfprefix = jobname */
 Address  SDSF                                                       
 "ISFEXEC ST"                                                       
 if rc<>0 then call SdsfErr 'ST'                                     
 do ji=1 to jobid.0 until queue.ji='EXECUTION'  /* locate me */     
 end                                                                 
                                                                     
 "ISFACT ST TOKEN('"TOKEN.ji"') PARM(NP SA)"                         
 if rc<>0 then call SdsfErr 'ST NP SA'                               
 address tso                                                         
                                                                     
 "EXECIO * DISKR" isfddname.4 "(STEM line. FINIS)"                   
 say time() line.0 'lines read from list'                           
Back to top
View user's profile Send private message
tom.glaser

New User


Joined: 08 Dec 2020
Posts: 15
Location: US

PostPosted: Wed Dec 09, 2020 9:39 pm
Reply with quote

Thanks for the RGEN command, Joerg. This is actually how I created my original.

Willy, I think this might work. My end goal is to capture the current sysout I'm in. So I will change:

"ISFEXEC ST"

to

"ISFEXEC DA"

When I run this, I get a rc=8:

Code:

/*   rexx */

trace r

n=isfcalls('ON')

isfprefix=mvsvar('symdef','D2ADME1S') /* set isfprefix = jobname */
Address  SDSF
"ISFEXEC DA"

if rc<>0 then call SdsfErr 'ST'
do ji=1 to jobid.0 until queue.ji='EXECUTION'  /* locate me */
end

"ISFACT ST TOKEN('"TOKEN.ji"') PARM(NP SA)"
if rc<>0 then call SdsfErr 'ST NP SA'
address tso

"EXECIO * DISKR" isfddname.4 "(STEM line. FINIS)"
say time() line.0 'lines read from list'

SdsfErr:
say "at the end"

.
.
.
 5 *-* n=isfcalls('ON')
   >>>   "0"
 7 *-* isfprefix=mvsvar('symdef','D2ADME1S') /* set isfprefix = jobname */
   >>>   ""
 8 *-* Address  SDSF
 9 *-* "ISFEXEC DA"
   >>>   "ISFEXEC DA"
11 *-* if rc<>0
   >>>   "0"
12 *-* do ji=1 to jobid.0 until queue.ji='EXECUTION'  /* locate me */
   >>>   "1"
   >>>   "2"
13 *-* end
12 *-* do ji=1 to jobid.0 until queue.ji='EXECUTION'  /* locate me */
   >>>   "0"
13 *-* end
12 *-* do ji=1 to jobid.0 until queue.ji='EXECUTION'  /* locate me */
   >>>   "0"
15 *-* "ISFACT ST TOKEN('"TOKEN.ji"') PARM(NP SA)"
   >>>   "ISFACT ST TOKEN('TOKEN.3') PARM(NP SA)"
   +++ RC(8) +++
16 *-* if rc<>0
       >>>   "1"
       *-*  then
       *-*  call SdsfErr 'ST NP SA'
       >>>    "ST NP SA"
    22 *-*   SdsfErr:
    23 *-*   say "at the end"
       >>>     "at the end"
at the end


Any idea why the RC=8?

Thanks, Tom[/code]
Back to top
View user's profile Send private message
tom.glaser

New User


Joined: 08 Dec 2020
Posts: 15
Location: US

PostPosted: Wed Dec 09, 2020 10:13 pm
Reply with quote

Ok, the light bulb just went on. I see I can still us "ST" and as you pointed out, look for "execution." Let me work on this. thx
Back to top
View user's profile Send private message
tom.glaser

New User


Joined: 08 Dec 2020
Posts: 15
Location: US

PostPosted: Wed Dec 09, 2020 10:30 pm
Reply with quote

Thanks Willy, I understand what's going on. This was a big help.

Tom
Back to top
View user's profile Send private message
tom.glaser

New User


Joined: 08 Dec 2020
Posts: 15
Location: US

PostPosted: Wed Dec 09, 2020 11:04 pm
Reply with quote

One more question....in my rexx, I have the job name. It's possible this job name could change. Is there a way to find out the job name that this rexx exec is executing under?

Thanks, Tom
Back to top
View user's profile Send private message
Willy Jensen

Active Member


Joined: 01 Sep 2015
Posts: 712
Location: Denmark

PostPosted: Thu Dec 10, 2020 1:55 am
Reply with quote

Indeed: isfprefix=mvsvar('symdef','jobname')
Back to top
View user's profile Send private message
tom.glaser

New User


Joined: 08 Dec 2020
Posts: 15
Location: US

PostPosted: Thu Dec 10, 2020 7:53 am
Reply with quote

Ahhh....I was replacing jobname with the actual job. Got it. thanks!
Back to top
View user's profile Send private message
tom.glaser

New User


Joined: 08 Dec 2020
Posts: 15
Location: US

PostPosted: Sat Dec 12, 2020 3:01 am
Reply with quote

Willy,

The first job will bind the db2 package. The second step will pull in the rexx to read the sysout…and build an insert statement into a Db2 table. In theory, this should work. But, this call:

"ISFACT ST TOKEN('"TOKEN.ji"') PARM(NP SA)"

…fails, as if it cannot find it.

Code:

//STEP01   EXEC PGM=IKJEFT01,DYNAMNBR=20
//STEPLIB  DD  DSN=MCI.DB.D2T0.SDSNLOAD,DISP=SHR
//REPORT   DD  SYSOUT=*
//SYSPRINT DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//SYSOUT   DD  SYSOUT=*
//SYSTSPRT DD  SYSOUT=*,DCB=BLKSIZE=2420
//SYSTSIN  DD  *
DSN SYSTEM(D2T0)
REBIND PACKAGE(D2ADME1.CLASS1.(VERSION1))         EXPLAIN(YES)+
     DBPROTOCOL(DRDA)       APRETAINDUP(YES)      APREUSE(NO)
/*
//STEP02   EXEC PGM=IKJEFT1B,TIME=NOLIMIT,DYNAMNBR=20,REGION=64M,
//         PARM='%BINDSDSF'
//STEPLIB  DD  DISP=SHR,DSN=MCI.DB.D2T0.SHRD.SDSNEXIT
//         DD  DISP=SHR,DSN=MCI.DB.D2T0.SDSNEXIT
//         DD  DISP=SHR,DSN=MCI.DB.D2T0.SDSNLOAD
//SYSEXEC  DD  DISP=SHR,DSN=D2ADME1.BIND.ISPCLIB
//SYSTSIN  DD  DUMMY
//SYSTSPRT DD  SYSOUT=*
//SYSOUT   DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//SYSPRINT DD  SYSOUT=*


Here’s sdsf:

Code:

PREFIX=D2ADME1W  DEST=(ALL)  OWNER=*  SORT=JOBNAME/A  SYSNAME=*
NP   JOBNAME  JobID    Max-RC     Owner    Prty Queue      C  P
     D2ADME1W JOB74252 CC 0000    D2ADME1     1 PRINT      E 11
     D2ADME1W JOB74264 CC 0000    D2ADME1     1 PRINT      E 11
     D2ADME1W JOB74563 CC 0000    D2ADME1     1 PRINT      E 11


Trace r shows this:

Code:

DSNT275I  -D2T0 DSNTBRB2 REBIND OPTIONS FOR
           PACKAGE = MCD2T0.D2ADME1.CLASS1.(VERSION1)
           QUERYACCELERATION
           GETACCELARCHIVE
           ACCELERATOR
           CONCENTRATESTMT   NO
           ACCELERATIONWAITFORDATA
DSNT232I  -D2T0 SUCCESSFUL REBIND FOR
           PACKAGE = MCD2T0.D2ADME1.CLASS1.(VERSION1)
DSN
END
ACF0C038 ACF2 LOGONID ATTRIBUTES HAVE REPLACED DEFAULT USER ATTRIBUTES
    10 *-* n=isfcalls('ON')                                   /* connect to sdsf */
       >>>   "0"
    12 *-* isfprefix=mvsvar('symdef','jobname')
       >>>   "D2ADME1W"
    14 *-* Address  SDSF
    15 *-* "ISFEXEC ST"
       >>>   "ISFEXEC ST"
    17 *-* "ISFACT ST TOKEN('"TOKEN.1"') PARM(NP SA)"
       >>>   "ISFACT ST TOKEN('zDsjAhAcEpKEccHBUMXwQPx1wdXsxdxAzenKczABA4EAJgQ1lFXxTg0QBw
MSYBA4EAJgQ1Mh0FJNI=') PARM(NP SA)"
    18 *-* say 'this is isfprefix = 'isfprefix
       >>>   "this is isfprefix = D2ADME1W"
this is isfprefix = D2ADME1W
    19 *-* say 'this is jname.1 = 'jname.1
       >>>   "this is jname.1 = D2ADME1W"
this is jname.1 = D2ADME1W
    20 *-* say 'this is jobid.1 = 'jobid.1
       >>>   "this is jobid.1 = JOB74252"
this is jobid.1 = JOB74252
    21 *-* say 'this is jname.1 = 'jname.2
       >>>   "this is jname.1 = D2ADME1W"
this is jname.1 = D2ADME1W
    22 *-* say 'this is jobid.1 = 'jobid.2
       >>>   "this is jobid.1 = JOB74264"
this is jobid.1 = JOB74264
    23 *-* say 'this is jname.1 = 'jname.3
       >>>   "this is jname.1 = JNAME.3"
this is jname.1 = JNAME.3
    24 *-* say 'this is jobid.1 = 'jobid.3
       >>>   "this is jobid.1 = JOBID.3"
this is jobid.1 = JOBID.3
    25 *-* say 'this is jname.1 = 'jname.4
       >>>   "this is jname.1 = JNAME.4"
this is jname.1 = JNAME.4
    26 *-* say 'this is jobid.1 = 'jobid.4
       >>>   "this is jobid.1 = JOBID.4"
this is jobid.1 = JOBID.4
    27 *-* say 'this is jname.1 = 'jname.5
       >>>   "this is jname.1 = JNAME.5"
this is jname.1 = JNAME.5
    28 *-* say 'this is jobid.1 = 'jobid.5
       >>>   "this is jobid.1 = JOBID.5"
this is jobid.1 = JOBID.5
    30 *-* if rc<>0
       >>>   "0"
    31 *-* do ji=1 to jobid.0 until queue.ji='EXECUTION'    /* location bind job */
       >>>   "1"
       >>>   "2"
    32 *-* end                          /* if queue = execution, this is running */
    31 *-* do ji=1 to jobid.0 until queue.ji='EXECUTION'    /* location bind job */
       >>>   "0"
    32 *-* end                          /* if queue = execution, this is running */
    31 *-* do ji=1 to jobid.0 until queue.ji='EXECUTION'    /* location bind job */
       >>>   "0"
    34 *-* "ISFACT ST TOKEN('"TOKEN.ji"') PARM(NP SA)"
       >>>   "ISFACT ST TOKEN('TOKEN.3') PARM(NP SA)"
       +++ RC(8) +++
    35 *-* if rc<>0
       >>>   "1"
       *-*  then
       *-*  call SdsfErr 'ST NP SA'
       >>>    "ST NP SA"
    46 *-*   SdsfErr:
    47 *-*   say ' '
       >>>     " "

    48 *-*   say 'Error messages:'
       >>>     "Error messages:"
Error messages:
    49 *-*   say  isfmsg
       >>>     ""



For some reason, it doesn’t seem to be finding the sysout. Do you see anything in the rexx code as to why it cannot find it?

Thanks, Tom
Back to top
View user's profile Send private message
Pedro

Global Moderator


Joined: 01 Sep 2006
Posts: 2547
Location: Silicon Valley

PostPosted: Sat Dec 12, 2020 7:17 am
Reply with quote

I think this means that the value of jobid.0 is two.
Code:
    31 *-* do ji=1 to jobid.0 until queue.ji='EXECUTION'    /* location bind job */
       >>>   "1"
       >>>   "2"


And if you compare lines 17 and 34 of the trace, you can see that on line 17, the token.1 value is actually a pretty long character string, but on line 34 the variable seems to be an uninitialized variable.

On line 31, it looks like you are trying to skip some items until you find some jobs that are executing. But there are only two lines total and none are EXECUTION. For that reason, variable JI has incremented beyond the max of JOBID.0.

You should only execute line 34 if JI is still within the max of jobid.0
Back to top
View user's profile Send private message
Pedro

Global Moderator


Joined: 01 Sep 2006
Posts: 2547
Location: Silicon Valley

PostPosted: Sat Dec 12, 2020 7:38 am
Reply with quote

I think you can do what you want without using SDSF.

I suggest that in step two, add a DD statement that refers to the output file from the first step:
Code:
//BINDIN  DD  DSN=*.STEP1.SYSPRINT


And in your rexx program, use EXECIO to read from BINDIN. (I did not try this myself, so you may need to experiment or additional DD parameters)
Back to top
View user's profile Send private message
Willy Jensen

Active Member


Joined: 01 Sep 2015
Posts: 712
Location: Denmark

PostPosted: Sat Dec 12, 2020 12:34 pm
Reply with quote

looking at your trace, you have :
"ISFEXEC ST"
immediately folowed by
"ISFACT ST TOKEN('"TOKEN.1"') PARM(NP SA)"

I cycle through the stem from the ST command before doing the ISFACT:
"ISFEXEC ST"
do ji=1 to jobid.0 until queue.ji='EXECUTION' /* locate me */
end
"ISFACT ST TOKEN('"TOKEN.ji"') PARM(NP SA)"
Back to top
View user's profile Send private message
Willy Jensen

Active Member


Joined: 01 Sep 2015
Posts: 712
Location: Denmark

PostPosted: Sat Dec 12, 2020 1:32 pm
Reply with quote

Just looking through some of my old stuff, you can use the ISFFILTER variables to avoid the loop. Note the use of 'token.1' in the ISFACT command.
Code:
 isfprefix=mvsvar('symdef','jobname')  /* set isfprefix = jobname */
 isffilter='QUEUE EQ EXECUTION'                                     
 isffiltermode='AND'                                               
 Address  SDSF                                                     
 "ISFEXEC ST"                                                       
 if rc<>0 then ...                                   
 "ISFACT ST TOKEN('"TOKEN.1"') PARM(NP SA)"                         
 if rc<>0 then ...         
Back to top
View user's profile Send private message
tom.glaser

New User


Joined: 08 Dec 2020
Posts: 15
Location: US

PostPosted: Tue Dec 15, 2020 1:13 am
Reply with quote

Pedro,

I did try your suggestion:

Code:
 
//STEP1    EXEC PGM=IKJEFT01,DYNAMNBR=20
//STEPLIB  DD  DSN=MCI.DB.D2T0.SDSNLOAD,DISP=SHR
//REPORT   DD  SYSOUT=*
//SYSPRINT DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//SYSOUT   DD  SYSOUT=*
//SYSTSPRT DD  SYSOUT=*,DCB=BLKSIZE=2420
//SYSTSIN  DD  *
DSN SYSTEM(D2T0)
REBIND PACKAGE(D2ADME1.CLASS1.(VERSION1))         EXPLAIN(YES)+
     DBPROTOCOL(DRDA)       APRETAINDUP(YES)      APREUSE(NO)
/*
//STEP02   EXEC PGM=IKJEFT1B,TIME=NOLIMIT,DYNAMNBR=20,REGION=64M,
//         PARM='%BINDSDSF'
//STEPLIB  DD  DISP=SHR,DSN=MCI.DB.D2T0.SHRD.SDSNEXIT
//         DD  DISP=SHR,DSN=MCI.DB.D2T0.SDSNEXIT
//         DD  DISP=SHR,DSN=MCI.DB.D2T0.SDSNLOAD
//SYSEXEC  DD  DISP=SHR,DSN=D2ADME1.BIND.ISPCLIB
//SYSTSIN  DD  DUMMY
//BINDIN   DD  DSN=*.STEP1.SYSPRINT
//SYSTSPRT DD  SYSOUT=*
//SYSOUT   DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
.
.
.
IEF344I D2ADME1W STEP02 BINDIN - ALLOCATION FAILED DUE TO DATA FACILITY SYSTEM ERROR
IGD17102I CATALOG ERROR IN DEFINING NONVSAM DATA SET
D2ADME1.D2ADME1W.JOB15672.D0000103.?
RETURN CODE IS 144 REASON CODE IS 14 IGG0CLEG
IGD306I UNEXPECTED ERROR DURING IGG0CLEG PROCESSING
RETURN CODE 144 REASON CODE 14
THE MODULE THAT DETECTED THE ERROR IS IGDVTSCU
SMS MODULE TRACE BACK - VTSCU VTSCT VTSCR SSIRT
SYMPTOM RECORD CREATED, PROBLEM ID IS IGD00659


Willy,

Not sure why I cannot get this to work…so I tried your updated suggestion to avoid the loop. Here’s what I used:

Code:

/* REXX **********************************************
trace r

n=isfcalls('ON')

isfprefix=mvsvar('symdef','jobname')
isffilter = 'QUEUE EQ EXECUTION'
isffiltermode='AND'
Address  SDSF
"ISFEXEC ST"
say 'this is rc ST = 'rc

Address  SDSF
"ISFACT ST TOKEN('"TOKEN.1"') PARM(NP SA)"
say 'this is rc TOKEN = 'rc

exit
.
.
.
.
     4 *-* n=isfcalls('ON')
       >>>   "0"
     6 *-* isfprefix=mvsvar('symdef','jobname')
       >>>   "D2ADME1W"
     7 *-* isffilter = 'QUEUE EQ EXECUTION'
       >>>   "QUEUE EQ EXECUTION"
     8 *-* isffiltermode='AND'
       >>>   "AND"
     9 *-* Address  SDSF
    10 *-* "ISFEXEC ST"
       >>>   "ISFEXEC ST"
    11 *-* say 'this is rc ST = 'rc
       >>>   "this is rc ST = 0"
this is rc ST = 0
    13 *-* Address  SDSF
    14 *-* "ISFACT ST TOKEN('"TOKEN.1"') PARM(NP SA)"
       >>>   "ISFACT ST TOKEN('TOKEN.1') PARM(NP SA)"
       +++ RC(8) +++
    15 *-* say 'this is rc TOKEN = 'rc
       >>>   "this is rc TOKEN = 8"
this is rc TOKEN = 8
    17 *-* exit


From what I can tell, the ST command is working, but when it tries to pull off information from the 1st row being returned, it cannot find anything? I did look up isffiltermode…”to specify the AND or OR relationship between filters.” Is this performing an AND between EXECUTION and the job name of D2ADME1W?

Thanks, Tom
Back to top
View user's profile Send private message
Willy Jensen

Active Member


Joined: 01 Sep 2015
Posts: 712
Location: Denmark

PostPosted: Tue Dec 15, 2020 2:16 am
Reply with quote

Strange, I copy/pasted your code and it ran for me.
The isffiltermode is really just in preparation for if you later decide to add more conditions. You can probably leave it out, I keep it in just in case.
2 things
- I assume that you can browse the output afterwards ok in the ST panel?
- Add this to show error messages:
Code:
if rc<>0 then do
 say 'error:' isfmsg 
 say isfdisplay       
 do  i=1  to  isfmsg2.0
   say isfmsg2.i       
 end                   
end
Back to top
View user's profile Send private message
Willy Jensen

Active Member


Joined: 01 Sep 2015
Posts: 712
Location: Denmark

PostPosted: Tue Dec 15, 2020 2:27 am
Reply with quote

Could you have some other filter set, like sysname?
The 'say isfdisplay' should tell you. Mayube put that just after the 1st ST command.
Back to top
View user's profile Send private message
tom.glaser

New User


Joined: 08 Dec 2020
Posts: 15
Location: US

PostPosted: Tue Dec 15, 2020 2:54 am
Reply with quote

Here's what I ran:

Code:

/* REXX ****************************************************

n=isfcalls('ON')

isfprefix=mvsvar('symdef','jobname')
isffilter = 'QUEUE EQ EXECUTION'
isffiltermode='AND'
Address  SDSF
"ISFEXEC ST"
say 'this is rc ST = 'rc

Address  SDSF
"ISFACT ST TOKEN('"TOKEN.1"') PARM(NP SA)"
if rc<>0 then do
 say 'error rc:' rc
 say 'error:' isfmsg
 say isfdisplay
 do  i=1  to  isfmsg2.0
   say isfmsg2.i
 end
end
exit


It failed with:

Code:

this is rc ST = 0
error rc: 8
error:
PREFIX=D2ADME1W DEST=(ALL) OWNER=D2ADME1 SYSNAME= FILTERS=1
ISF754I Command 'PREFIX D2ADME1W' generated from associated variable ISFPREFIX.
ISF776I Processing started for action 1 of 1.
ISF746E Action request rejected, row token invalid.
ISF767I Request completed.
READY


Invalid token?

Tom
Back to top
View user's profile Send private message
tom.glaser

New User


Joined: 08 Dec 2020
Posts: 15
Location: US

PostPosted: Tue Dec 15, 2020 3:11 am
Reply with quote

The row token is created by the ISFEXEC command and must be passed unmodified to SDSF on the ISFACT command. Some of the conditions causing the token to become invalid are:
- The token has been modified or contains an invalid character
- The token does not correspond to the display being modified. For example, the token was generated for a row on the H panel but is being used on the O panel.
- The token was generated on a different level of SDSF than the one currently being run.
- The token was generated for a different use ID than the one performing the action.
Back to top
View user's profile Send private message
Willy Jensen

Active Member


Joined: 01 Sep 2015
Posts: 712
Location: Denmark

PostPosted: Tue Dec 15, 2020 3:21 am
Reply with quote

That makes absolutely no sense. I just read the message description, and I cannot see how it applies to this situation.
This is a long shot, I compared the output of your isfdisplay with mine and the only significant difference I could see, is that I have OWNER=*.
Try
- add isfowner='*' after the isfprefix= setting.
- add say 'token:' token.1 after the 1st ST command.
- add say isfdisplay after the 1st ST command,
Back to top
View user's profile Send private message
tom.glaser

New User


Joined: 08 Dec 2020
Posts: 15
Location: US

PostPosted: Tue Dec 15, 2020 4:03 am
Reply with quote

This is going to confuse the issue....I did some testing. Here's a job that works....first step is a non-db2 job:

Code:

READY
END
ACF0C038 ACF2 LOGONID ATTRIBUTES HAVE REPLACED DEFAULT USER ATTRIBUTES
token.1: zDsjAhAcEpKEccHBUMXwQPx1wdXsxdxAze/VWCwBA4EAJgQ1lFXxTg0QBwANJiOExNLB3NTEZEDF+0LE1bVyQMXmTcTAFCeCNQQ2MyUBA4EAJgQ1DB0JB/s=
isfdisplay:  PREFIX=D2ADME1Q DEST=(ALL) OWNER=* SYSNAME= FILTERS=1
this is second token display = zDsjAhAcEpKEccHBUMXwQPx1wdXsxdxAze/VWCwBA4EAJgQ1lFXxTg0QBwANJiOExNLB3NTEZEDF+0LE1bVyQMXmTcTAFCeCNQQ2
MyUBA4EAJgQ1DB0JB/s=
2token1: zDsjAhAcEpKEccHBUMXwQPx1wdXsxdxAze/VWCwBA4EAJgQ1lFXxTg0QBwANJiOExNLB3NTEZEDF+0LE1bVyQMXmTcTAFCeCNQQ2MyUBA4EAJgQ1DB0JB/s=
isfdisplay:  PREFIX=D2ADME1Q DEST=(ALL) OWNER=* SYSNAME= FILTERS=1
16:29:04 41 lines read from list


If I run the first step against db2 (perform a bind), then it fails:

Code:

ACF0C038 ACF2 LOGONID ATTRIBUTES HAVE REPLACED DEFAULT USER ATTRIBUTES
token.1: TOKEN.1
isfdisplay:  PREFIX=D2ADME1Q DEST=(ALL) OWNER=* SYSNAME= FILTERS=1
this is second token display = TOKEN.1
2token1: TOKEN.1
isfdisplay:  PREFIX=D2ADME1Q DEST=(ALL) OWNER=* SYSNAME= FILTERS=1
error rc: 8
error:
PREFIX=D2ADME1Q DEST=(ALL) OWNER=* SYSNAME= FILTERS=1
ISF754I Command 'OWNER *' generated from associated variable ISFOWNER.
ISF754I Command 'PREFIX D2ADME1Q' generated from associated variable ISFPREFIX.
ISF776I Processing started for action 1 of 1.
ISF746E Action request rejected, row token invalid.
ISF767I Request completed.
EXECIO "ddname" positional parameter is not valid.
16:29:13 LINE.0 lines read from list
    33 +++  do kx = 1 to line.0
Error running WILLY1, line 33: Bad arithmetic conversion


It seems when the first step is db2, then the token fails. If I go against a non-db2 step, then it works. Not sure why it would matter.

Tom
Back to top
View user's profile Send private message
Pedro

Global Moderator


Joined: 01 Sep 2006
Posts: 2547
Location: Silicon Valley

PostPosted: Tue Dec 15, 2020 11:32 am
Reply with quote

Sorry, I am retired and no longer have access to z/OS. I cannot verify my suggestions.

On STEP1, trying making SYSPRINT a temporary data set and DISP=(,PASS)
Back to top
View user's profile Send private message
Pedro

Global Moderator


Joined: 01 Sep 2006
Posts: 2547
Location: Silicon Valley

PostPosted: Tue Dec 15, 2020 11:36 am
Reply with quote

FYI. in my earlier post, I noted that it appears that you do not have any jobs in EXECUTION status. You should loop through all of the responses and display the value of the QUEUE variable for every job. And verify that QUEUE is the right variable to use.
Back to top
View user's profile Send private message
Willy Jensen

Active Member


Joined: 01 Sep 2015
Posts: 712
Location: Denmark

PostPosted: Tue Dec 15, 2020 11:00 pm
Reply with quote

I'll go with Pedro's latest post. How does it look when you do a display in SDSF? ST , then question mark in front.
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> CLIST & REXX Goto page 1, 2  Next

 


Similar Topics
Topic Forum Replies
No new posts Compile Several JCL JOB Through one r... CLIST & REXX 4
No new posts Running REXX through JOB CLIST & REXX 13
No new posts Error to read log with rexx CLIST & REXX 11
No new posts isfline didnt work in rexx at z/OS ve... CLIST & REXX 7
No new posts run rexx code with jcl CLIST & REXX 15
Search our Forums:

Back to Top