Hi,
I am sorry...I think I sent you on a path that would not work. ELABNEW is a "CICS" program, so it cannot be invoked directly from batch. If you write a front end that runs as a batch program and then invokes it using EXCI, then it could be used. I may try to create an example for this, but for now:
To answer your question... external to EGL, there are ways to issue CICS commands from JCL using the modify command, through REXX (I am told), and other utilities. I don't have this on my machine or not authorized to do it. But in working with your systems/CICS systems programmers, you may be able to set this up.
The trick to invoking this JCL is to "call" out from the build scripts. The EGL Build Server provides a "CALL" command to enable this. See the following section of the EGL Generation Guide in the knowledge center:
http://www-01.ibm.com/support/knowledgecenter/SSMQ79_9.5.0/com.ibm.egl.gg.doc/topics/gegl_cobol_pseudojclcallstatement.html
So, in the build script, you just add a step in the build scripts to use the CALL.
The call can invoke a separate job and that job can do whatever you want. Any symbolics in the called JCL will be substituted with values just like the ones in the build scripts.
So, simple example (using IEBCOPY)
- In the pds that holds the build scripts, you can add a new member... lets call it IEBCOPY
- In IEBCOPY, you could have the following:
//MEVANSA JOB CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),USER=MEVANS,
// NOTIFY=MEVANS
//COPY EXEC PGM=IEBCOPY
//INDD DD DISP=SHR,DSN=MEVANS.V75.ZOSCICS.LOAD
//OUTDD1 DD DISP=SHR,DSN=MEVANS.VAG.MVSCICS.LOAD
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
COPY INDD=((INDD,R)),OUTDD=OUTDD1
SELECT MEMBER=(&MBR)
//
In each of the build scripts, you would include the following at the bottom. If the member is in the same PDS that is specified in the CCUPROC DD of the CCUMVS job, then the PDS name is not required).
//COPY CALL MEMBER=MEVANS.V751.$PROCLIB(IEBCOPY),WAIT=YES
In the example above, the &MBR will be replaced by the build server before the JCL is submitted. It uses the name of the part being generated. To be safe, you may want to use &EZEALIAS if your names are getting aliased to something different.
Also, I found that the build server appends a CCU0 step onto the step in the JCL to send back the return code. This appended step refers to a &CCULIB symbolic. Its value needs to be the name of the load module holding the EGL COBOL Runtime load modules (PDS ending in SELALMD). So, you can create the CCULIB symbolic to be used in the job or the easiest is to add it to the build descriptor symbolic parameter options.
So, the above is the basic process. From Google, I found an example of commands in JCL to do a new copy when the "modify (or F)" command is used. I am sure there are other ways.
//IEFBR EXEC PGM=IEFBR14
// F CICSC05,'CEMT SET PROG(<name>) NEW'
//
This only works if the JCL can invoke a "console" command to CICS.
Finally, a note:
- EGL datatables can be made Resident. This is not the same as CICS Residency as EGL manages the contents/use counts in shared memory. The shared memory is initially created by copying the contents from the load module. Therefore, doing a newcopy on an EGL datatable will only refresh the load module. It will not refresh the contents that EGL and your programs are referring to. That is one of the functions ELABNEW and the online EGL new copy transaction (ELAN) will do and one will need to be used.
Let me know if you have any questions.
Mark
markevans