I have a CL program that calls an RPG program to accept a bunch of parameters (via a subfile). These get saved in a QTEMP file. The CL program would then SUBMIT a second RPG program to run in batch to generate a report based on the parameters captured. How do I send the stuff from the calling CL's QTEMP to the batch QTEMP? The OS/400 SBMJOB command does have a 'Copy environment variables Y/N ?' option, would that do the trick?
What you need to do is to make the file in QTEMP available to your submitted job by putting it into a proper library. When you create the file, name it using the job number of the creating (interactive, in you case) job - like this:
: Dcl &JobNum *Char Len(6) Dcl &File *Char Len(10) : : RtvJobA Nbr(&JobNum) : : ChgVar &File ('X' *CAT &JobNum) CrtDupObj BaseFile BaseLib *File WorkLib &File Data(*No) MonMsg CPF0000 : : SbmJob BatchJob Cmd(Call MyPgm Parm(&parm1 &parm2 &File)) .... :
We pass the name of the file to the submitted job, which does its override and reads the file. Once it has finished processing, it will delete the file.
This technique is fine as long as the user does not run the program more than once between the interactive side creating the file and the batch side deleting it -- if that is likely to happen, you will have to devise a more unique naming method. Try involving a sequential number, and incrementing it if your interactive CL finds that a file with that name (X + Job number + Sequence) already exists:
: Dcl &JobNum *Char Len(6) Dcl &SeqNum *Dec Len(3 0) Value(0) Dcl &SeqChr *Char Len(3) Dcl &File *Char Len(10) : : RtvJobA Nbr(&JobNum) : : Loop: ChgVar &SeqNum (&SeqNum + 1) ChgVar &SeqChr (&SeqNum) ChgVar &File ('X' *CAT &JobNum *CAT &SeqChr) CrtDupObj BaseFile BaseLib *File WorkLib &File Data(*No) MonMsg CPF0000 Exec(GoTo Loop) : : SbmJob BatchJob Cmd(Call MyPgm Parm(&parm1 &parm2 &File)) .... :
Another way to pass a list of data is in a User Space. This is a much more involved process, and requires the use of a number of IBM APIs. You still have to uniquely name the object and pass the name to the batch job. Lastly, you could pass data using a 'pipe'. This is another API-based solution, and uses programs and techniques associated with Qshell. Best to stick with the file option, I think!
MORE INFORMATION ON THIS TOPIC
The Best Web Links: tips, tutorials and more.
Visit the ITKnowledge Exchange and get answers to your developing questions fast.
Ask the Experts yourself: Our application development gurus are waiting to answer your programming questions.
Dig Deeper on iSeries COBOL programming
Related Q&A from John Blenkinsop
When an error occurs on an IBM command, the diagnostic messages are sent first, then an escape message, which you can monitor. On AS/400 you see the ... Continue Reading
Learn how to 'append data to the file' with the FTP DIR command, and eliminate the hassle of having to end the FTP session and restart to view ... Continue Reading
RPGIV will 'think of' incoming integer fields as binary, and then will redefine them in the program structures as PACKED. So, when you chain a record... Continue Reading