Solved

Executing AS/400 CL from VB Application

Posted on 2004-03-31
12
1,437 Views
Last Modified: 2010-05-18
I am having difficulty calling a simple CL Program on the AS/400 from a VB Application.  I have used the IBM Client Access example showing how to retrieve a library description and it works in our environment.  I mimiced my VB program after the IBM example and it appears to run but I do not get the results of the CL program on the AS/400.  I know that it is seeing the CL Program because if I change the VB to pass fewer parameters I get an error message saying that I am passing a wrong number of paramters.

The CL Program executes fine from a command line on the AS/400 both through a CALL with parameters and through a simple command I have created.  The CL program's purpose is to put an active job on HOLD or RELEASE base on the parameters passed.  It accepts a &CHGSTATUS parameter (HLD or RLS) and &JOBNAM parameter.  The &JOBNAM is passed through a common RPG module to retrieve the job number, etc so the correct job can be accessed.  

I am including both the VB and CL code for review.  I have tried putting a delay in the CL and then running the VB application in an attempt to find the JOB on the AS/400 and start an interactive debug against it so I can see what is happening.  However, I have never been able to find the job on the system.

Thanks in advance for all comments and assistance.

'******VB CODE************

Private Function A400TST()
Dim systemNames As New cwbx.systemNames
Dim as400 As New cwbx.AS400System
Dim pgmCatNRls As New cwbx.Program
Dim parms As New cwbx.ProgramParameters
Dim strCvtr As New cwbx.StringConverter

as400.Define systemNames.DefaultSystem

Set pgmCatNRls.System = as400

pgmCatNRls.LibraryName = "KLDEVELOP"
pgmCatNRls.ProgramName = "CATCHNRELS"

strCvtr.Length = 3
parms.Append "CHGSTATUS", cwbrcInput
parms("CHGSTATUS") = strCvtr.ToBytes("HLD")
strCvtr.Length = 10
parms.Append "JOBNAM", cwbrcInput
parms("JOBNAM") = strCvtr.ToBytes("TWEBOS")

GetLibraryDesc.Call parms

End Function



'********** AS/400 CL ***********
 HLDTRGMON:  PGM        PARM(&CHGSTATUS &JOBNAM)                                
                                                                               
 /********************************************************************/        
 /********************************************************************/        
 /*                                                                  */        
 /*                                                                  */        
 /*    DATE      PROJ              DESCRIPTION           PROGRAMMER  */        
 /*  --------   -----    ------------------------------  ----------  */        
 /*  03/13/04   Weboes   NEW APPLICATION                 K. Latoz    */        
 /*                                                                  */        
 /*                                                                  */        
 /*                                                                  */        
 /********************************************************************/        
 /********************************************************************/        
             DCL        VAR(&CHGSTATUS)  TYPE(*CHAR) LEN(3)                    
             DCL        VAR(&JOBNAM)  TYPE(*CHAR) LEN(10)                      
             DCL        VAR(&PASSINFO)   TYPE(*CHAR) LEN(275)                  
             DCL        VAR(&JOBNAME) TYPE(*CHAR) LEN(10)                      
             DCL        VAR(&JOBUSR) TYPE(*CHAR) LEN(10) +                      
                          VALUE('*ALL')                                        
             DCL        VAR(&JOBNUM) TYPE(*CHAR) LEN(6) VALUE('*ALL')          
             DCL        VAR(&JOBTYPE) TYPE(*CHAR) LEN(1) VALUE('*')            
             DCL        VAR(&JOBSTS) TYPE(*CHAR) LEN(10) +                      
                          VALUE('*ACTIVE')                                      
             DCL        VAR(&ENTRYNBR) TYPE(*DEC) LEN(5 0) VALUE(0)            
             DCL        VAR(&ENTRYAVL) TYPE(*DEC) LEN(5 0) VALUE(0)            
             DCL        VAR(&RTNJOBNAM)  TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&RTNUSRPRF)  TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&RTNJOBNBR)  TYPE(*CHAR) LEN(6)                    
             DCL        VAR(&RTNJOBTYP)  TYPE(*CHAR) LEN(1)                    
             DCL        VAR(&RTNSUBTYP)  TYPE(*CHAR) LEN(1)                    
             DCL        VAR(&RTNJOBSTS)  TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&ACTSTS)     TYPE(*CHAR) LEN(4)                    
             DCL        VAR(&CURUSER)    TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&COMPSTS)    TYPE(*CHAR) LEN(1)                    
             DCL        VAR(&TIMEACT)    TYPE(*CHAR) LEN(13)                    
             DCL        VAR(&TIMEENT)    TYPE(*CHAR) LEN(13)                    
             DCL        VAR(&FUNCTYP)    TYPE(*CHAR) LEN(1)                    
             DCL        VAR(&FUNCNAM)    TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&GRPPRF)     TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&JOBACCT)    TYPE(*CHAR) LEN(15)                    
             DCL        VAR(&JOBDLIB)    TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&JOBDNAME)   TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&JOBQLIB)    TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&JOBQNAME)   TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&JOBQSTS)    TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&SBSDLIB)    TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&SBSDNAME)   TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&RTNINTNBR)  TYPE(*CHAR) LEN(16)                    
             DCL        VAR(&XLDMSGDTA)  TYPE(*CHAR) LEN(26)                    
             DCL        VAR(&XLDMSGINF)  TYPE(*CHAR) LEN(10)                    
                                                                               
             DCL        VAR(&DATALIB) TYPE(*CHAR) LEN(10)                      
             DCL        VAR(&SRCLIB)  TYPE(*CHAR) LEN(10)                      
             DCL        VAR(&LIBPTR)  TYPE(*DEC) LEN(4) VALUE(1)                
             DCL        VAR(&GOODEOJ)   TYPE(*CHAR) LEN(01) VALUE(N)            
                                                                               
             MONMSG     MSGID(CPF0000 CPF9999 MCH0000 MCH9999 +                
                        CPD0000 CPD9999 LBL0000 LBL9999 RPG0000) +              
                        EXEC(GOTO CMDLBL(ERREXIT))                              
                                                                               
             CHGJOB     LOG(4 0 *SECLVL) INQMSGRPY(*RQD)                        
                                                                               
       /*    CLRLIB     LIB(QTEMP)  */                                          
             CHGCURLIB  CURLIB(*CRTDFT)                                        
             RTVDTAARA  DTAARA(*LIBL/LIBDTAARA (&LIBPTR 10 )) +                
                          RTNVAR(&DATALIB)                                      
             CHGVAR     VAR(&LIBPTR) VALUE(&LIBPTR + 20)                        
             RTVDTAARA  DTAARA(*LIBL/LIBDTAARA (&LIBPTR 10 )) +                
                          RTNVAR(&SRCLIB)                                      
             CRTDTAARA  DTAARA(QTEMP/RETCODEDTA) TYPE(*CHAR) LEN(4) +          
                          VALUE('0000')                                        
             MONMSG     MSGID(CPF1023)                                          
             CHGVAR     VAR(&JOBNAME) VALUE(&JOBNAM)                            
                                                                               
             DLYJOB     DLY(1)                                                  
/********************************************************************/          
/********************************************************************/          
/*   THIS SUBROUTINE WILL CALL A COMMON MODULE TO RETRIEVE INFO     */          
/*   FOR SPECIFIC JOB(S).                                           */          
/********************************************************************/          
/********************************************************************/          
JOBINFO:                                                                        
             CHGVAR     VAR(%SST(&PASSINFO   1  10)) VALUE(&JOBNAME)            
             CHGVAR     VAR(%SST(&PASSINFO  11  10)) VALUE(&JOBUSR)            
             CHGVAR     VAR(%SST(&PASSINFO  21   6)) VALUE(&JOBNUM)            
             CHGVAR     VAR(%SST(&PASSINFO  27   1)) VALUE(&JOBTYPE)            
             CHGVAR     VAR(%SST(&PASSINFO  28  10)) VALUE(&JOBSTS)            
             CHGVAR     VAR(%SST(&PASSINFO  38   5)) VALUE(&ENTRYNBR)          
             CHGVAR     VAR(%SST(&PASSINFO  43   5)) VALUE(&ENTRYAVL)          
                                                                               
             CALL       PGM(N990080C) PARM(&PASSINFO)                          
                                                                               
             CHGVAR     VAR(&JOBNAME)   VALUE(%SST(&PASSINFO   1 10))          
             CHGVAR     VAR(&JOBUSR)    VALUE(%SST(&PASSINFO  11 10))          
             CHGVAR     VAR(&JOBNUM)    VALUE(%SST(&PASSINFO  21  6))          
             CHGVAR     VAR(&JOBTYPE)   VALUE(%SST(&PASSINFO  27  1))          
             CHGVAR     VAR(&JOBSTS)    VALUE(%SST(&PASSINFO  28 10))          
             CHGVAR     VAR(&ENTRYNBR)  VALUE(%SST(&PASSINFO  38  5))          
             CHGVAR     VAR(&ENTRYAVL)  VALUE(%SST(&PASSINFO  43  5))          
             CHGVAR     VAR(&RTNJOBNAM) VALUE(%SST(&PASSINFO  48 10))          
             CHGVAR     VAR(&RTNUSRPRF) VALUE(%SST(&PASSINFO  58 10))          
             CHGVAR     VAR(&RTNJOBNBR) VALUE(%SST(&PASSINFO  68  6))          
             CHGVAR     VAR(&RTNJOBTYP) VALUE(%SST(&PASSINFO  74  1))          
             CHGVAR     VAR(&RTNSUBTYP) VALUE(%SST(&PASSINFO  75  1))          
             CHGVAR     VAR(&RTNJOBSTS) VALUE(%SST(&PASSINFO  76 10))          
             CHGVAR     VAR(&ACTSTS)    VALUE(%SST(&PASSINFO  86  4))          
             CHGVAR     VAR(&CURUSER)   VALUE(%SST(&PASSINFO  90 10))          
             CHGVAR     VAR(&COMPSTS)   VALUE(%SST(&PASSINFO 100  1))          
             CHGVAR     VAR(&TIMEACT)   VALUE(%SST(&PASSINFO 101 13))          
             CHGVAR     VAR(&TIMEENT)   VALUE(%SST(&PASSINFO 114 13))          
             CHGVAR     VAR(&FUNCTYP)   VALUE(%SST(&PASSINFO 127  1))          
             CHGVAR     VAR(&FUNCNAM)   VALUE(%SST(&PASSINFO 128 10))          
             CHGVAR     VAR(&GRPPRF)    VALUE(%SST(&PASSINFO 138 10))          
             CHGVAR     VAR(&JOBACCT)   VALUE(%SST(&PASSINFO 148 15))          
             CHGVAR     VAR(&JOBDNAME)  VALUE(%SST(&PASSINFO 163 10))          
             CHGVAR     VAR(&JOBDLIB)   VALUE(%SST(&PASSINFO 173 10))          
             CHGVAR     VAR(&JOBQNAME)  VALUE(%SST(&PASSINFO 183 10))          
             CHGVAR     VAR(&JOBQLIB)   VALUE(%SST(&PASSINFO 193 10))          
             CHGVAR     VAR(&JOBQSTS)   VALUE(%SST(&PASSINFO 203 10))          
             CHGVAR     VAR(&SBSDNAME)  VALUE(%SST(&PASSINFO 213 10))          
             CHGVAR     VAR(&SBSDLIB)   VALUE(%SST(&PASSINFO 223 10))          
             CHGVAR     VAR(&RTNINTNBR) VALUE(%SST(&PASSINFO 233 16))          
                                                                               
                                                                               
             IF         COND(&CHGSTATUS *EQ 'HLD') THEN(DO)                    
                HLDJOB     JOB(&RTNJOBNBR/&RTNUSRPRF/&RTNJOBNAM)                
             ENDDO                                                              
             ELSE DO                                                            
                IF COND(&CHGSTATUS *EQ 'RLS') THEN(DO)                          
                   RLSJOB JOB(&RTNJOBNBR/&RTNUSRPRF/&RTNJOBNAM)                
                ENDDO                                                          
                ELSE DO                                                        
                   GOTO CMDLBL(ERRCHK)                                          
                ENDDO                                                          
             ENDDO                                                              
 GOODEND:                                                                      
             CHGVAR     VAR(&GOODEOJ) VALUE('Y')                                
 ERRCHK:     IF         COND(&GOODEOJ *EQ 'Y') THEN(GOTO ERREXIT)              
                                                                               
             RTVJOBA    NBR(&XLDMSGINF)                                        
             CHGVAR     VAR(&XLDMSGDTA) VALUE(&XLDMSGINF)                      
             RTVJOBA    USER(&XLDMSGINF)                                        
             CHGVAR     VAR(%SST(&XLDMSGDTA  7 10)) VALUE(&XLDMSGINF)          
             RTVJOBA    JOB(&XLDMSGINF)                                        
             CHGVAR     VAR(%SST(&XLDMSGDTA 17 10)) VALUE(&XLDMSGINF)          
                                                                               
             SNDPGMMSG  MSGID(XLD0001) MSGF(QABORT) +                          
                          MSGDTA(&XLDMSGDTA) TOUSR(*SYSOPR) +                  
                          MSGTYPE(*ESCAPE)                                      
             MONMSG     MSGID(CPF0000 MCH0000)                                  
                                                                               
             SNDPGMMSG  MSGID(XLD0001) MSGF(QABORT) +                          
                          MSGDTA(&XLDMSGDTA) MSGTYPE(*ESCAPE)                  
             MONMSG     MSGID(CPF0000 MCH0000)                                  
                                                                               
 ERREXIT:                                                                      
             ENDPGM                                                            

0
Comment
Question by:apklatoz
  • 7
  • 3
  • 2
12 Comments
 
LVL 14

Expert Comment

by:daveslater
Comment Utility
Hi
I can have a look next week if no one else responds

Dave
0
 
LVL 2

Expert Comment

by:MrPan
Comment Utility
You have an unreferenced variable change the last line to be

pgmCatNRls.Call parms
0
 
LVL 1

Author Comment

by:apklatoz
Comment Utility
Thanks - that was in there incorrectly.  It was a left over from trial and retrial.  However, even after changing the line I still get the same results.  The VB appears to execute correctly but the AS/400 CL doesn't seem to perform it's function of putting the application on Hold.  Again the CL works from a command line on the AS/400.

Thanks
0
 
LVL 14

Expert Comment

by:daveslater
Comment Utility
Hi
just a quick thought. When processed from VB does the user have the authority to change the job?

Dave
0
 
LVL 14

Expert Comment

by:daveslater
Comment Utility
Ps
for a quick test you could re-create the cl using adopted authority, and set the usrprf to *owner and set the owner to some one who has a bit of authority.

Dave
0
 
LVL 1

Author Comment

by:apklatoz
Comment Utility
I tried this and did not get any different results.  I would've expected that if it was an authority issue I wouldn't be able to see the program at all and it appears that I am able to see the program since I can create an error message when I change the number of Parms the CL is expecting.

I appreciate your continued suggestions
0
What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

 
LVL 14

Expert Comment

by:daveslater
Comment Utility
Hi
you have declared you program as

Dim pgmCatNRls As New cwbx.Program

but you are trying to run  program

GetLibraryDesc.Call parms

try
pgmCatNRls.call parms

Dave
0
 
LVL 14

Expert Comment

by:daveslater
Comment Utility
Hi
change the CL to send a message to yourself before and after the call to

CALL       PGM(N990080C) PARM(&PASSINFO)

you can then tell if the &passinfo is populated correctly

Dave
0
 
LVL 14

Accepted Solution

by:
daveslater earned 250 total points
Comment Utility
The job name will be

QZRCSRVS under QUSER

dave
0
 
LVL 2

Expert Comment

by:MrPan
Comment Utility
I think it might be special authorities you would have to

CHGUSRPRF USRPRF(XXXX) SPCAUT(*JOBCTL)

where xxx is the user running the JOb

Or you could compile your cl with a user who has authority and make it

 CHGPGM PGM(A) USRPRF(*OWNER)

You might then have to grant access for other users to use it.

Either of these should get around your problem
0
 
LVL 1

Author Comment

by:apklatoz
Comment Utility
Thanks to all.  I awarded points to daveslater because his info on the location of the JOB on the AS/400 and the SNDUSRMSG both contributed to my finding the problem.  With his information I was able to find a job log and realized that QUSER user profile didn't have the correct libraries in its profile to setup the job environment.  When I hard coded the libraries into the job it took off like a champ.  I get queazy hard coding libraries with Test and Production environments but I'm going to get around it by adding a "MODE" parameter which will let the program know T or P and add the appropriate libraries.  

Thanks to all for their time and Help!
0
 
LVL 14

Expert Comment

by:daveslater
Comment Utility
Hi
Thanks for the points, but in my opinion this was a joint effort in sorting the problem.
There is  a facility to split the points between experts.
I think a 60 / 40 split would have been fair.

Dave
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Marketing can be an uncomfortable undertaking, especially if your material is technology based. Luckily, we’ve compiled some simple and (relatively) painless tips to put an end to your trepidation and start your path to success.
Possible fixes for Windows 7 and Windows Server 2008 updating problem. Solutions mentioned are from Microsoft themselves. I started a case with them from our Microsoft Silver Partner option to open a case and get direct support from Microsoft. If s…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now