|
Script structure |
|
|
WSH scripts generated by the XFRAME job converter (xmvsconv) have the following structure:
All scripts must include the xebe.js javascript library, which contains the XFRAME Batch Environment interfaces. The reference of the functions may be found in XEBE Windows functions The package header The package header defines the WSH package and the referred XML schema. I.e.: <?xml version="1.0" encoding="utf-8" ?> <package xmlns="http://schemas.microsoft.com/WindowsScriptHost">
The job definition It defines the job identifier. I.e.: <job name="ZQDTAJ03"> XFRAME libraries inclusions In order to access the XEBE functions, the script xebe.js must be included. I.e.: <script language="JScript" src="xebe.js"/>
PROCs inclusion The PROCs are converted as separate functions included in dedicated scripts. All the functions (PROCs) referred by the job must be included. I.e. <script language="JScript" src="ENVS.js"/> Script body The body of the script is composed by the job declaration, followed by a sequence of steps. The job declaration is performed by the job() function, and defines the job name and the flush condition. I.e.: <script language="JScript"><![CDATA[ job("ZQDTAJ03", "getLastRC() > 4");
Each step corresponds to the source step defined in the mainframe version, and it is normally composed by:
I.e: // SRC: //ICEMAN1 EXEC PGM=ICEMAN // SRC: //SORTLIB DD DSN=SYS1.SORTLIB, // SRC: // DISP=SHR // SRC: //SYSOUT DD SYSOUT=* // SRC: //SORTIN DD DSN=QBFDTA.BAT.GDGBLZ.GESAMT.SEQ(0), // SRC: // DISP=SHR // SRC: //SORTOUT DD DSN=QBFDTA.BAT.GDGBLZ.GESAMT.SEQ(0), // SRC: // DISP=SHR // SRC: //SORTWK01 DD UNIT=WORK,SPACE=(CYL,(10,10)) // SRC: [warning]: (30) DD senza DSN su step 'ICEMAN1' SORTWK01 [] // SRC: //SORTWK02 DD UNIT=WORK,SPACE=(CYL,(10,10)) // SRC: [warning]: (31) DD senza DSN su step 'ICEMAN1' SORTWK02 [] // SRC: //SORTWK03 DD UNIT=WORK,SPACE=(CYL,(10,10)) // SRC: [warning]: (32) DD senza DSN su step 'ICEMAN1' SORTWK03 [] // SRC: //SYSIN DD * // SRC: SORT FIELDS=(183,5,A),FORMAT=BI // SRC: / *
step("ICEMAN1"); dd("SORTIN1", "QBFDTA.BAT.GDGBLZ.GESAMT.SEQ,cat=FLATCAT,disp=SHR,type=flat,gdg=0"); dd("SORTOUT", "QBFDTA.BAT.GDGBLZ.GESAMT.SEQ,cat=FLATCAT,disp=SHR,type=flat,gdg=0"); shell("xsort lrecl=187", " SORT FIELDS=(183,5,A),FORMAT=BI"); if (flushJob()) { log("step "+getCurrentStepName()+" flushing with RC "+getLastRC()); exitJob(); }
The job footer The job footer must define the job termination function, normally referred as exitJob. This function contains the code necessary to complete the job execution. I.e.: exitJob(); function exitJob() { jobObj.exit(); } A complete sample <?xml version="1.0" encoding="utf-8" ?> <package xmlns="http://schemas.microsoft.com/WindowsScriptHost"> <!-- script converted as JOB by xmvsconv $Revision: 1.89 $ (z/OS mode) on Fri May 4 12:57:09 EDT 2007 --> <!-- SRC: //ZQDTAJ03 JOB ('DTA00000'),'EINSP BLZ-GESAMTBAND', --> <!-- SRC: //* TYPRUN=HOLD, --> <!-- SRC: //* TIME=.., --> <!-- SRC: // COND=(4,LT), --> <!-- SRC: // CLASS=T, --> <!-- SRC: // MSGCLASS=P, --> <!-- SRC: // MSGLEVEL=(1,1), --> <!-- SRC: // REGION=17M --> <job name="ZQDTAJ03">
<script language="JScript" src="xebe.js"/> <script language="JScript" src="ENVS.js"/>
<script language="JScript"><![CDATA[ job("ZQDTAJ03", "getLastRC() > 4");
// SRC: //ICEMAN1 EXEC PGM=ICEMAN // SRC: //SORTLIB DD DSN=SYS1.SORTLIB, // SRC: // DISP=SHR // SRC: //SYSOUT DD SYSOUT=* // SRC: //SORTIN DD DSN=QBFDTA.BAT.GDGBLZ.GESAMT.SEQ(0), // SRC: // DISP=SHR // SRC: //SORTOUT DD DSN=QBFDTA.BAT.GDGBLZ.GESAMT.SEQ(0), // SRC: // DISP=SHR // SRC: //SORTWK01 DD UNIT=WORK,SPACE=(CYL,(10,10)) // SRC: [warning]: (30) DD senza DSN su step 'ICEMAN1' SORTWK01 [] // SRC: //SORTWK02 DD UNIT=WORK,SPACE=(CYL,(10,10)) // SRC: [warning]: (31) DD senza DSN su step 'ICEMAN1' SORTWK02 [] // SRC: //SORTWK03 DD UNIT=WORK,SPACE=(CYL,(10,10)) // SRC: [warning]: (32) DD senza DSN su step 'ICEMAN1' SORTWK03 [] // SRC: //SYSIN DD * // SRC: SORT FIELDS=(183,5,A),FORMAT=BI // SRC: / *
step("ICEMAN1"); dd("SORTIN1", "QBFDTA.BAT.GDGBLZ.GESAMT.SEQ,cat=FLATCAT,disp=SHR,type=flat,gdg=0"); dd("SORTOUT", "QBFDTA.BAT.GDGBLZ.GESAMT.SEQ,cat=FLATCAT,disp=SHR,type=flat,gdg=0"); dd("SORTLIB", "SYS1.SORTLIB,cat=FLATCAT,disp=SHR,type=flat"); shell("xsort lrecl=187", " SORT FIELDS=(183,5,A),FORMAT=BI"); if (flushJob()) { log("step "+getCurrentStepName()+" flushing with RC "+getLastRC()); exitJob(); }
// SRC: //ICEMAN2 EXEC PGM=ICEMAN // SRC: //SORTLIB DD DSN=SYS1.SORTLIB, // SRC: // DISP=SHR // SRC: //SYSOUT DD SYSOUT=* // SRC: //SORTIN DD DSN=QBFDTA.BAT.GDGBLZ.GESAMT.SEQ(-1), // SRC: // DISP=SHR // SRC: //SORTOUT DD DSN=QBFDTA.BAT.GDGBLZ.GESAMT.SEQ(-1), // SRC: // DISP=SHR // SRC: //SORTWK01 DD UNIT=WORK,SPACE=(CYL,(10,10)) // SRC: [warning]: (44) DD senza DSN su step 'ICEMAN2' SORTWK01 [] // SRC: //SORTWK02 DD UNIT=WORK,SPACE=(CYL,(10,10)) // SRC: [warning]: (45) DD senza DSN su step 'ICEMAN2' SORTWK02 [] // SRC: //SORTWK03 DD UNIT=WORK,SPACE=(CYL,(10,10)) // SRC: [warning]: (46) DD senza DSN su step 'ICEMAN2' SORTWK03 [] // SRC: //SYSIN DD * // SRC: SORT FIELDS=(183,5,A),FORMAT=BI // SRC: / *
step("ICEMAN2"); dd("SORTIN1", "QBFDTA.BAT.GDGBLZ.GESAMT.SEQ,cat=FLATCAT,disp=SHR,type=flat,gdg=-1"); dd("SORTOUT", "QBFDTA.BAT.GDGBLZ.GESAMT.SEQ,cat=FLATCAT,disp=SHR,type=flat,gdg=-1"); dd("SORTLIB", "SYS1.SORTLIB,cat=FLATCAT,disp=SHR,type=flat"); shell("xsort lrecl=187", " SORT FIELDS=(183,5,A),FORMAT=BI"); if (flushJob()) { log("step "+getCurrentStepName()+" flushing with RC "+getLastRC()); exitJob(); }
// SRC: //DTAB520A EXEC PGM=IKJEFT01,DYNAMNBR=20 // SRC: //SYSTSPRT DD SYSOUT=* // SRC: //SYSPRINT DD SYSOUT=* // SRC: //SYSUDUMP DD SYSOUT=* // SRC: //SYSDBOUT DD SYSOUT=* // SRC: //SYSOUT DD SYSOUT=* // SRC: // ***----------------------------------------------------------------*** // SRC: //DATUMD DD * // SRC: 20030901 // SRC: / * // SRC: //BUBASON DD DSN=QBFDTA.BAT.GDGBLZ.SONDER.SEQ(0), // SRC: // DISP=SHR // SRC: //DTAP20 DD SYSOUT=(C,LDTAP20,DTA) // SRC: //SYSTSIN DD * // SRC: DSN SYSTEM(DSN) // SRC: RUN PROGRAM(DTAB5202) PLAN(DTAB501Q) PARM('N') // SRC: END // SRC: // ***----------------------------------------------------------------***
step("DTAB520A"); dd("SYSPRINT", JOBNAME+"."+PID+".DTAB520A.SYSPRINT.txt,cat=SYSLST,disp=(NEW,KEEP),type=flat"); dd("DATUMD", inStream( "20030901")); dd("BUBASON", "QBFDTA.BAT.GDGBLZ.SONDER.SEQ,cat=FLATCAT,disp=SHR,type=flat,gdg=0"); dd("DTAP20", JOBNAME+"."+PID+".DTAB520A.DTAP20.C.LDTAP20.DTA,cat=SYSLST,disp=(NEW,KEEP),type=flat"); exec("DTAB5202"); spool(getDdPath("SYSPRINT")); spool(getDdPath("DTAP20"), "-s C"); if (flushJob()) { log("step "+getCurrentStepName()+" flushing with RC "+getLastRC()); exitJob(); }
// SRC: //DTAB5012 EXEC PGM=IKJEFT01,DYNAMNBR=20 // SRC: //SYSTSPRT DD SYSOUT=* // SRC: //SYSPRINT DD SYSOUT=* // SRC: //SYSUDUMP DD SYSOUT=* // SRC: //SYSABOUT DD SYSOUT=* // SRC: //SYSDBOUT DD SYSOUT=* // SRC: //SYSOUT DD SYSOUT=* // SRC: // ***----------------------------------------------------------------*** // SRC: //DATUMD DD * // SRC: 20030901 // SRC: / * // SRC: //BLZHELP DD DSN=QBFDTA.BAT.GDGBLZ.GESAMT.SEQ(-1), // SRC: // DISP=SHR // SRC: //BUBAGES DD DSN=QBFDTA.BAT.GDGBLZ.GESAMT.SEQ(0), // SRC: // DISP=SHR // SRC: //WORK DD DSN=QBFDTA.BAT.BLZWORK.SEQ, // SRC: // DISP=(,CATLG,DELETE), // SRC: // SPACE=(CYL,(5,5),RLSE) // SRC: //DTAP01 DD DSN=QBFDTA.BAT.DTAP01.FBM.SEQ, // SRC: // DISP=OLD // SRC: //SYSTSIN DD * // SRC: DSN SYSTEM(DSN) // SRC: RUN PROGRAM(DTAB5012) PLAN(DTAB501Q) PARM('3') // SRC: END // SRC: / *
step("DTAB5012"); dd("SYSPRINT", JOBNAME+"."+PID+".DTAB5012.SYSPRINT.txt,cat=SYSLST,disp=(NEW,KEEP),type=flat"); dd("DTAP01", "QBFDTA.BAT.DTAP01.FBM.SEQ,cat=FLATCAT,disp=OLD,type=flat"); dd("BUBAGES", "QBFDTA.BAT.GDGBLZ.GESAMT.SEQ,cat=FLATCAT,disp=SHR,type=flat,gdg=0"); dd("BLZHELP", "QBFDTA.BAT.GDGBLZ.GESAMT.SEQ,cat=FLATCAT,disp=SHR,type=flat,gdg=-1"); dd("DATUMD", inStream( "20030901")); dd("WORK", "QBFDTA.BAT.BLZWORK.SEQ,cat=FLATCAT,disp=(,CATLG,DELETE),type=flat"); exec("DTAB5012"); spool(getDdPath("SYSPRINT")); if (flushJob()) { log("step "+getCurrentStepName()+" flushing with RC "+getLastRC()); exitJob(); }
// SRC: //ICEMAN3 EXEC PGM=ICEMAN // SRC: //SORTLIB DD DSN=SYS1.SORTLIB, // SRC: // DISP=SHR // SRC: //SYSOUT DD SYSOUT=* // SRC: //SORTIN DD DSN=QBFDTA.BAT.GDGBLZ.SONDER.SEQ(-0), // SRC: // DISP=SHR // SRC: //SORTOUT DD DSN=QBFDTA.BAT.GDGBLZ.SONDER.SEQ(-0), // SRC: // DISP=SHR // SRC: //SORTWK01 DD UNIT=WORK,SPACE=(CYL,(10,10)) // SRC: [warning]: (113) DD senza DSN su step 'ICEMAN3' SORTWK01 [] // SRC: //SORTWK02 DD UNIT=WORK,SPACE=(CYL,(10,10)) // SRC: [warning]: (114) DD senza DSN su step 'ICEMAN3' SORTWK02 [] // SRC: //SORTWK03 DD UNIT=WORK,SPACE=(CYL,(10,10)) // SRC: [warning]: (115) DD senza DSN su step 'ICEMAN3' SORTWK03 [] // SRC: //SYSIN DD * // SRC: SORT FIELDS=(183,5,A),FORMAT=BI // SRC: / * // SRC: // ***----------------------------------------------------------------***
step("ICEMAN3"); dd("SORTIN1", "QBFDTA.BAT.GDGBLZ.SONDER.SEQ,cat=FLATCAT,disp=SHR,type=flat,gdg=-0"); dd("SORTOUT", "QBFDTA.BAT.GDGBLZ.SONDER.SEQ,cat=FLATCAT,disp=SHR,type=flat,gdg=-0"); dd("SORTLIB", "SYS1.SORTLIB,cat=FLATCAT,disp=SHR,type=flat"); shell("xsort lrecl=187", " SORT FIELDS=(183,5,A),FORMAT=BI"); if (flushJob()) { log("step "+getCurrentStepName()+" flushing with RC "+getLastRC()); exitJob(); }
// SRC: //DTAB520B EXEC PGM=IKJEFT01,DYNAMNBR=20 // SRC: //SYSTSPRT DD SYSOUT=* // SRC: //SYSPRINT DD SYSOUT=* // SRC: //SYSUDUMP DD SYSOUT=* // SRC: //SYSDBOUT DD SYSOUT=* // SRC: //SYSOUT DD SYSOUT=* // SRC: // ***----------------------------------------------------------------*** // SRC: //DATUMD DD * // SRC: 20030901 // SRC: / * // SRC: //BUBASON DD DSN=QBFDTA.BAT.GDGBLZ.SONDER.SEQ(0), // SRC: // DISP=SHR // SRC: //DTAP20 DD SYSOUT=(C,LDTAP20,QDTA) // SRC: //SYSTSIN DD * // SRC: DSN SYSTEM(DSN) // SRC: RUN PROGRAM(DTAB5202) PLAN(DTAB501Q) PARM('J') // SRC: END // SRC: // ***----------------------------------------------------------------***
step("DTAB520B"); dd("SYSPRINT", JOBNAME+"."+PID+".DTAB520B.SYSPRINT.txt,cat=SYSLST,disp=(NEW,KEEP),type=flat"); dd("DTAP20", JOBNAME+"."+PID+".DTAB520B.DTAP20.C.LDTAP20.QDTA,cat=SYSLST,disp=(NEW,KEEP),type=flat"); dd("DATUMD", inStream( "20030901")); dd("BUBASON", "QBFDTA.BAT.GDGBLZ.SONDER.SEQ,cat=FLATCAT,disp=SHR,type=flat,gdg=0"); exec("DTAB5202"); spool(getDdPath("SYSPRINT")); spool(getDdPath("DTAP20"), "-s C"); if (flushJob()) { log("step "+getCurrentStepName()+" flushing with RC "+getLastRC()); exitJob(); }
// SRC: //IEBGENER EXEC PGM=IEBGENER // SRC: //SYSPRINT DD SYSOUT=* // SRC: //SYSUT1 DD DSN=QBFDTA.BAT.DTAP01.FBM.SEQ, // SRC: // DISP=SHR // SRC: //SYSUT2 DD SYSOUT=(C,LDTAP01,QDTA) // SRC: //SYSIN DD DUMMY
step("IEBGENER"); dd("SYSPRINT", JOBNAME+"."+PID+".IEBGENER.SYSPRINT.txt,cat=SYSLST,disp=(NEW,KEEP),type=flat"); dd("SYSUT1", "QBFDTA.BAT.DTAP01.FBM.SEQ,cat=FLATCAT,disp=SHR,type=flat"); dd("SYSUT2", JOBNAME+"."+PID+".IEBGENER.SYSUT2.C.LDTAP01.QDTA,cat=SYSLST,disp=(NEW,KEEP),type=flat"); shell("xvsam --repro --dd-in=SYSUT1 --dd-out=SYSUT2"); spool(getDdPath("SYSPRINT")); spool(getDdPath("SYSUT2"), "-s C"); if (flushJob()) { log("step "+getCurrentStepName()+" flushing with RC "+getLastRC()); exitJob(); }
exitJob();
function exitJob() { // job trailer jobObj.exit(); } ]]></script> </job> </package> |