Link to home
Start Free TrialLog in
Avatar of Anand K
Anand K

asked on

AS400 - SBMJOB with command prompter

I have tried two options.

Option 1. With passing the cmd value as RSTOBJ ?*RSTLIB(ABCLIB).

PGM                                                  
                                                     
 DCL  &CMD          *CHAR  1024                      
 DCL  &CMDLEN       *INT      4   VALUE(1024)        
 DCL  &OPTIONS      *CHAR    20                      
 DCL  &OPTIONSLEN   *INT      4   VALUE(20)          
 DCL  &OPTIONS      *CHAR    20                      
 DCL  &NEWCMD       *CHAR  1024                      
 DCL  &NEWCMDLENA   *INT      4   VALUE(1024)        
 DCL  &NEWCMDLENC   *INT      4   VALUE(1024)        
                                                     
  CHGVAR  %SST(&OPTIONS  1 4) VALUE(X'00000001')      
  CHGVAR  %SST(&OPTIONS  5 1) VALUE('0')              
  CHGVAR  %SST(&OPTIONS  6 1) VALUE('1')              
  CHGVAR  %SST(&OPTIONS  7 1) VALUE('0')              
  CHGVAR  %SST(&OPTIONS 12 4) VALUE(X'00000000')    
CHGVAR  %SST(&OPTIONS 16 5) VALUE(X'0000000000')
 

CHGVAR  &CMD     VALUE('RSTOBJ ?*RSTLIB(ABCLIB)')          
                                                               
                                                               
CALL    QCAPCMD   PARM(&CMD &CMDLEN &OPTIONS &OPTIONSLEN +    
                   'CPOP0100' &NEWCMD &NEWCMDLENA &NEWCMDLENC +
                   X'00000000')                              
 MONMSG  CPF6801  EXEC(RETURN)                                      
            SBMJOB     CMD(CALL PGM(QCMDEXC) PARM(&NEWCMD +          
                         &NEWCMDLENA)) JOB(RSTOBJ#) JOBQ(QBATCH)
                                                                     
 ENDPGM                                                            


After calling above program, below is the prompt, which only displays "restore to library" parameter. All other input parameters are not displayed.

                             Restore Object (RSTOBJ)                  
                                                                     
 Type choices, press Enter.                                          
                                                                     
 Restore to library . . . . . . . > ABCLIB    Name, *SAVLIB      


Option 2. With passing the cmd value will all parameters.

PGM                                                      
                                                         
 DCL  &CMD          *CHAR  1024                          
 DCL  &CMDLEN       *INT      4   VALUE(1024)            
 DCL  &OPTIONS      *CHAR    20                          
 DCL  &OPTIONSLEN   *INT      4   VALUE(20)              
 DCL  &OPTIONS      *CHAR    20                          
 DCL  &NEWCMD       *CHAR  1024                          
 DCL  &NEWCMDLENA   *INT      4   VALUE(1024)            
 DCL  &NEWCMDLENC   *INT      4   VALUE(1024)            
                                                         
  CHGVAR  %SST(&OPTIONS  1 4) VALUE(X'00000001')        
  CHGVAR  %SST(&OPTIONS  5 1) VALUE('0')                
  CHGVAR  %SST(&OPTIONS  6 1) VALUE('1')                
  CHGVAR  %SST(&OPTIONS  7 1) VALUE('0')                
  CHGVAR  %SST(&OPTIONS 12 4) VALUE(X'00000000')        

CHGVAR  %SST(&OPTIONS 16 5) VALUE(X'0000000000')

CHGVAR  &CMD     VALUE('RSTOBJ            +  
                        ??OBJ()               +  
                        ??SAVLIB()            +  
                        ??DEV()               +  
                        ??OBJTYPE(*FILE)      +  
                        ??VOL()               +  
                        ??SEQNBR()            +  
                        ??POSITION()          +
                        ??LABEL()             +    
                        ??ENDOPT()            +    
                        ??SAVF()              +    
                        ??OPTION(*NEW)        +    
                        ??FILEMBR()           +    
                        ??MBROPT(*NEW)        +    
                        ??SPLFDTA()           +    
                        ??SAVDATE()           +    
                        ??SAVTIME()           +    
                        ??ALWOBJDIF(*ALL)     +    
                        ??FRCOBJCVN()         +    
                        ?*RSTLIB(ABCLIB)      +    
                        ??OUTPUT(*PRINT)      +    
                        ??MEDDFN()            +    
                        ??OPTFILE()           +    
                        ??RSTASPDEV()         +    
                        ??RSTASP()            +    
                        ??OUTFILE()           +  
                       ??OUTMBR()            +    
                       ??INFTYPE()           +    
                       ??OMITLIB()           +    
                       ??OMITOBJ()')              
                                                 
 CALL    QCAPCMD   PARM(&CMD &CMDLEN &OPTIONS &OPTIONSLEN +          
                    'CPOP0100' &NEWCMD &NEWCMDLENA &NEWCMDLENC +    
                    X'00000000')                                    
                                                                     
                                                                     
 MONMSG  CPF6801  EXEC(RETURN)                                      
            SBMJOB     CMD(CALL PGM(QCMDEXC) PARM(&NEWCMD +          
                         &NEWCMDLENA)) JOB(RSTOBJ#) JOBQ(QBATCH)
                                                                     
 ENDPGM                                                            


For this option2. we get the prompt for all paramters, however, it fails with below error.

Message . . . . :  -CALL PGM(QCMDEXC) PARM('RSTOBJ ??OBJ(F0001)              
  ??SAVLIB(TESTLIB) ??DEV(TAPLIB1) ??OBJTYPE(*FILE) ??VOL(MA2041) ??SEQNBR(345)
  ??POSITION(*N) ??LABEL(*N) ??ENDOPT(*N) ??SAVF(*N) ??OPTION(*NEW)          
  ??FILEMBR(*N) ??MBROPT(*NEW) ??SPLFDTA(*N) ??SAVDATE(*N) ??SAVTIME(*N)      
  ??ALWOBJDIF(*ALL) ??FRCOBJCVN(*N) ?*RSTLIB(ABCLIB) ??OUTPUT(*PRINT)        
  ??MEDDFN(*N) ??OPTFILE(*N) ??RSTASPDEV(*N) ??RSTASP(*N) ??OUTFILE(*N)      
  ??OUTMBR(*N) ??INFTYPE(*N) ??OMITLIB(*N) ??OMITOBJ(*N)' 1024)              
   02/11/16  04:40:49.603159  QCANPARS     QSYS        094F     QCMD        QSYS
Message . . . . :   String '          ' contains a character that is not      
  valid.
Avatar of Gary Patterson, CISSP
Gary Patterson, CISSP
Flag of United States of America image

Most likely some of the falues you've promted are conditional, and you haven't supplied a value for the parameter that they are based on.

Assuming you want to protect the RSTLIB() parameter, but allow the user to specify any other values, then I suggest you try this:

?RSTOBJ RSTOBJ RSTLIB(ABCLIB)

http://www.ibm.com/support/knowledgecenter/SSAE4W_7.1.0/com.ibm.etools.iseries.pgmgd.doc/evfclmst162.htm
ASKER CERTIFIED SOLUTION
Avatar of Member_2_276102
Member_2_276102

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Anand K
Anand K

ASKER

This is the Best explanation i have seen for my question.  Thanks a ton !!

I used the QCMDCHK, this API solved the problem.

Here is my modified code.

 PGM                                                                
                                                                   
 DCL        VAR(&CMD) TYPE(*CHAR) LEN(4024)                        
 DCL        VAR(&CMDLEN) TYPE(*INT) LEN(4) VALUE(1024)              
 DCL        VAR(&OPTIONS) TYPE(*CHAR) LEN(20)                      
 DCL        VAR(&OPTIONSLEN) TYPE(*INT) LEN(4) VALUE(20)            
 DCL        VAR(&OPTIONS) TYPE(*CHAR) LEN(20)                      
 DCL        VAR(&NEWCMD) TYPE(*CHAR) LEN(4024)                      
 DCL        VAR(&NEWCMDLENA) TYPE(*INT) LEN(4) VALUE(4024)          
 DCL        VAR(&NEWCMDLENC) TYPE(*INT) LEN(4) VALUE(4024)          
                                                                   
 CHGVAR     VAR(%SST(&OPTIONS 1 4)) VALUE(X'00000001')              
 CHGVAR     VAR(%SST(&OPTIONS 5 1)) VALUE('0')                      
 CHGVAR     VAR(%SST(&OPTIONS 6 1)) VALUE('1')                      
 CHGVAR     VAR(%SST(&OPTIONS 7 1)) VALUE('0')                      
  CHGVAR     VAR(%SST(&OPTIONS 12 4)) VALUE(X'00000000')            
  CHGVAR     VAR(%SST(&OPTIONS 16 5)) VALUE(X'0000000000')          
      CHGVAR     VAR(&CMD) VALUE('?RSTOBJ OBJTYPE(*FILE) +          
                    OPTION(*NEW) MBROPT(*NEW) ALWOBJDIF(*ALL) +    
                     ?*RSTLIB(RESTORELIB) OUTPUT(*PRINT)')            
                                                                     
          CALL       PGM(QCMDCHK) PARM(&CMD 2000)                    
         MONMSG     MSGID(CPF6801) EXEC(RETURN)                      
      CALL       PGM(QCAPCMD) PARM(&CMD &CMDLEN &OPTIONS +            
                   &OPTIONSLEN 'CPOP0100' &NEWCMD +                  
                   &NEWCMDLENA &NEWCMDLENC X'00000000')              
         MONMSG     MSGID(CPF6801) EXEC(RETURN)                      
         SBMJOB     JOB(RSTOBJ#) JOBQ(QBATCH) RQSDTA(&NEWCMD)    
         ENDPGM