Script structure

Top  Previous  Next

WSH scripts generated by the XFRAME job converter (xmvsconv) have the following structure:

package header
job definition
XFRAME libraries inclusions
script inclusions of invoked PROCs
javascript body of the script
job footer

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:

file definition
program execution
flush condition check

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>