Execute jobstream (JEXECJS)

Where allowed to run: All environments (*ALL)
Threadsafe: No
Parameters
Examples
Error messages

Cmd JEXECJS (alias: II) > > Execute jobstream > Esegue stringa lavoro

https://www.neroni.it/NERONI2/JEXECJS.NERONI2.HTML

Esegue la stringa lavoro contenuta in un membro sorgente.

Il comando permette di eseguire i comandi CL presenti all'interno di un membro sorgente scritti con il controllo di sintassi CL del SEU.

I comandi contenuti nel sorgente vengono inviati come messaggi di richiesta alla coda esterna del lavoro esecutore. Se il lavoro e' interattivo, viene accodata anche la chiamata al programma esecutore dei comandi QCMD/QCL. Se il lavoro e' batch, i comandi vengono eseguiti dal QCMD/QCL gia' attivo dopo lo smaltimento delle richieste gia' pendenti. Se richiesto dal parametro RETURN, il QCMD/QCL interattivo richiamato viene chiuso da un RETURN accodato per ultimo alle richieste.

Se in una riga e' presente la parola JEXECJSEND, l'esecuzione dei comandi viene immediatamente abbandonata. Il comando si presta quindi ad eseguire dei comandi CL in testa ad un sorgente e ad abbandonare l'esecuzione alla riga desiderata. I comandi vengono eseguiti uno dopo l'altro senza riguardo all'esito ottenuto. In particolare il cattivo esito di un comando non impedisce l'esecuzione dei successivi.

Nei sorgenti di tipo CL sono spesso presenti comandi su piu' righe e ogni riga del comando spezzato, salvo l'ultima, termina con "+". La corrente utility per ogni riga del sorgente accoda un messaggio di richiesta che termina quindi con "+". La circostanza non da' problemi perche' QCMD/QCL risolvono per proprio conto tale inciampo.

Top

Parameters

Keyword Description Choices Notes
SRCMBR Source member Name, *CRT, *PDM, *LIST Required, Positional 1
SRCFILE Source file Qualified object name Optional, Positional 2
Qualifier 1: Source file Name, QCLSRC
Qualifier 2: library Name, *LIBL, *USER
EXCPGM Interact or batch-orphan exec QCMD, QCL Optional, Positional 3
RETURN Return if interactive *YES, *NO Optional, Positional 4
Top

SRCMBR > Source member > Membro sorgente

Nome del membro sorgente che contiene la stringa da eseguire immediatamente e non tramite sottomissione batch.

Valori permessi:

nome-membro-sorgente €
Il valore e' obbligatorio.

Valori speciali:

*CRT
Tenta la creazione del file sorgente individuato dal parametro SRCFILE e poi si chiude senza eseguire altro.
*PDM
Per facilitare l'uso del file sorgente, chiama un WRKMBRPDM (Work member pdm) sul file individuato dal parametro SRCFILE e poi si chiude senza eseguire altro.
*LIST
Per facilitare l'uso del file sorgente, emette in joblog la lista dei membri del file individuato dal parametro SRCFILE e poi si chiude senza eseguire altro.
Top

SRCFILE > Source file - file > File sorgente - file

Nome del file sorgente in cui risiede il membro che contiene la stringa da eseguire immediatamente e non tramite sottomissione batch.

Valori permessi:

nome-file-sorgente €
Il file ha il nome richiesto.

Valori speciali:

QCLSRC
Default in comando JEXECJS

Il nome e' quello del contenitore standard di Control Language.

II
Default in comando II

Nome del file predisposto per contenere i comandi di inizializzazione ambienti.

SRCFILE > Source file - library > File sorgente - libreria

Nome della libreria in cui risiede il file.

Valori permessi:

nome-libreria
Il file sorgente viene cercato nella libreria richiesta.

Valori speciali:

*LIBL
Default in comando JEXECJS

Il file sorgente viene cercato in lista librerie.

*USER
Default in comando II

Il file sorgente viene cercato nella libreria omonima dell'utente corrente.

Top

EXCPGM > Interactive or batch-orphan executor > Esecutore interattivo o di batch orfano

Programma esecutore dei comandi CL contenuti nel membro sorgente. Serve se il lavoro e' interattivo oppure batch ma senza esecutore comandi QCMD o QCL in lista di chiamata ("orfano").

Valori permessi:

QCMD
L'esecutore e' il programma QCMD, gestore delle richieste nella sintassi AS400.
QCL
L'esecutore e' il programma QCL, gestore delle richieste nella sintassi S38 (Sistema/38).
Top

RETURN > Return if interactive > Ritorna se interattivo

Al termine dell'esecuzione dei comandi della stringa, ritorna al chiamante oppure no. Il parametro ha significato solo se il lavoro e' eseguito interattivamente.

Valori permessi:

*YES
Ritorna al chiamante.
*NO
Non ritorna al chiamante ma accoda in joblog un messaggio di invito a premere F3 o F12.
Top

Esempi d'uso del comando JEXECJS Execute jobstream

Esempio 1: Esegue il contenuto di una stringa lavoro con visualizzazione ritardata del log

Si abbia il seguente sorgente TESTA nel file JEXECJS, con tipo seu CL, contenente le istruzioni per l'esecuzione di un lavoro batch:

//BCHJOB   JOB(TESTA) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) +
             ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) +
             CCSID(280)
/* Imposta la lista librerie. */
CHGLIBL    LIBL(QTEMP NERONI2 QGPL)
/* Cancella l'area dati. */
DLTDTAARA  DTAARA(QTEMP/NN)
/* Crea l'area dati. */
CRTDTAARA  DTAARA(QTEMP/NN) TYPE(*CHAR) VALUE('Ciccio +
             Formaggio') TEXT('Zaza''')
/* Stampa l'area dati. */
DSPDTAARA  DTAARA(QTEMP/NN)
//ENDBCHJOB

Eseguendo il seguente comando si ottiene la sottomissione del lavoro contenuto nel sorgente:

> SBMDBJOB FILE(NERONI2/JEXECJS) MBR(TESTA) JOBQ(QGPL/NERONI)
  Il lavoro 545932/NERONI/TESTA e' stato sottomesso alla coda
    lavori NERONI nella libreria QGPL.
  Sono stati immessi 1 lavori. Non ne sono stati immessi 0.

Il comando JEXECJS permette invece l'esecuzione immediata e interattiva dei comandi contenuti nella stringa. Si esegue il comando seguente che genera il relativo log:

> JEXECJS SRCMBR(TESTA) SRCFILE(NERONI2/JEXECJS)
  Visualizza la joblog per valutare l'esito dell'esecuzione.

Per vedere la parte nascosta, si digita F10 e si osserva il seguente log:

  > JEXECJS SRCMBR(TESTA) SRCFILE(NERONI2/JEXECJS)
    La lunghezza del buffer e' maggiore di quella del record
      del membro TESTA.
    Visualizza la joblog per valutare l'esito dell'esecuzione.
2 > /* Inizio Execute jobstream */
2 > //BCHJOB   JOB(TESTA) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) +
2 >              ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) +
2 >              CCSID(280)
    Comando BCHJOB non consentito in questo ambiente.
    Nel comando BCHJOB e' stato trovato un errore.
2 > /* Imposta la lista librerie. */
2 > CHGLIBL    LIBL(QTEMP NERONI2 QGPL)
    E' stato modificato l'elenco librerie.
2 > /* Cancella l'area dati. */
2 > DLTDTAARA  DTAARA(QTEMP/NN)
    Non trovato oggetto NN in QTEMP tipo *DTAARA.
2 > /* Crea l'area dati. */
2 > CRTDTAARA  DTAARA(QTEMP/NN) TYPE(*CHAR) VALUE('Ciccio +
2 >              Formaggio') TEXT('Zaza''')
    Area dati NN creata nella libreria QTEMP.
2 > /* Stampa l'area dati. */
2 > DSPDTAARA  DTAARA(QTEMP/NN)
2 > //ENDBCHJOB
    Comando ENDBCHJOB non consentito in questo ambiente.
    Nel comando ENDBCHJOB e' stato trovato un errore.
2 > RETURN
    Fine delle richieste.

Si osservino i comandi rifiutati e quelli eseguiti.

Esempio 2: Esegue la stringa come nell'esempio 1 ma con visualizzazione immediata del log

Il comando JEXECJS permette una seconda modalita' di esecuzione relativamente alla visualizzazione del log. Se su video comandi si immette il seguente:

> JEXECJS SRCMBR(TESTA) SRCFILE(NERONI2/JEXECJS) RETURN(*NO)

Si ottiene il log su un video comandi a valle del chiamante:

> /* Inizio Execute jobstream */
> //BCHJOB   JOB(TESTA) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) +
>              ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) +
>              CCSID(280)
  Comando BCHJOB non consentito in questo ambiente.
  Nel comando BCHJOB e' stato trovato un errore.
> /* Imposta la lista librerie. */
> CHGLIBL    LIBL(QTEMP NERONI2 QGPL)
  E' stato modificato l'elenco librerie.
> /* Cancella l'area dati. */
> DLTDTAARA  DTAARA(QTEMP/NN)
  E' stato cancellato l'oggetto NN in QTEMP di tipo *DTAARA.
> /* Crea l'area dati. */
> CRTDTAARA  DTAARA(QTEMP/NN) TYPE(*CHAR) VALUE('Ciccio +
>              Formaggio') TEXT('Zaza''')
  Area dati NN creata nella libreria QTEMP.
> /* Stampa l'area dati. */
> DSPDTAARA  DTAARA(QTEMP/NN)
> //ENDBCHJOB
  Comando ENDBCHJOB non consentito in questo ambiente.
  Nel comando ENDBCHJOB e' stato trovato un errore.
> /* Ritorna con F12 o F3 */

Si osservino i comandi rifiutati e quelli eseguiti. Si osservi inoltre che, per tornare al video che ha chiamato il comando JEXECJS, occorre digitare F3 o F12.

Esempio 3: Esegue la compilazione di un sorgente RPGLE che porta in testa un gruppo di comandi CL travestiti da commenti e atti a compilare

Si abbia il seguente sorgente TESTB nel file JEXECJS, composto da un primo gruppo di specifiche contenente dei comandi CL vari e da un secondo gruppo contenente un intero sorgente RPGLE.

     /* Esempio di CL in testa ad RPGLE per compilazione. */
     /* Digita queste specifiche con controllo SEU CL ma  */
     /* poi assicurati che la colonna 6 sia sempre "*".   */
     /**/DLTPGM     PGM(QTEMP/TESTB)
     /**/CRTBNDRPG  PGM(QTEMP/TESTB) +
     /**/           SRCFILE(NERONI2/JEXECJS) DBGVIEW(*ALL)
     /**/SNDMSG     MSG(TESTB) TOUSR(NERONI)
     /* La specifica seguente interrompe l'esecuzione del */
     /* comando JEXECJS scrivendo la parola qui compresa  */
     /* tra asterischi ovunque nella specifica.           */
     /*JEXECJSEND*/
     /* Digitare le specifiche successive con SEU RPGLE.  */
     H DECEDIT('0,') DATEDIT(*DMY.)
     H Option(*showcpy : *expdds : *srcstmt : *nodebugio)
     H Debug(*YES)
     H FixNbr(*Zoned : *InputPacked)
     H Dftactgrp(*no) actgrp(*CALLER)
CN01 D psds           sds
CN01 D psdsusr               358    367
CN01 D psdspgm           *proc
     D PSDSUSRxx             254    263
     D PSDSPGMxx             334    343
CN01 D sysdat          s               d
CN01 D systim          s               t
out  D varp            s             10
out  D varu            s             10
out  D vard            s              8  0
out  D varh            s              6  0
     D date8           s              8  0
     D date6           s              6  0
     C                   move      *date         date8
     C                   move      udate         date6
CN01 C                   eval      varp=psdspgm
CN01 C                   eval      varu=psdsusr
CN01 C                   eval      sysdat=%date()
CN01 C                   move      sysdat        vard
CN01 C                   eval      systim=%time()
CN01 C                   move      systim        varh
     C                   eval      *inlr=*on

Il comando JEXECJS permette la esecuzione immediata e interattiva dei comandi contenuti nella stringa fino alla riga contenente la costante di interruzione JEXECJSEND. Si esegue il comando seguente che genera il relativo log:

> JEXECJS SRCMBR(TESTB) SRCFILE(NERONI2/JEXECJS)
  Visualizza la joblog per valutare l'esito dell'esecuzione.

Per vedere la parte nascosta, si digita F10 e si osserva il seguente log:

  > JEXECJS SRCMBR(TESTB) SRCFILE(NERONI2/JEXECJS)
    La lunghezza del buffer e' maggiore di quella del record
      del membro TESTB.
    Visualizza la joblog per valutare l'esito dell'esecuzione.
2 > /* Inizio Execute jobstream */
2 >      /* Esempio di CL in testa ad RPGLE per compilazione. */
2 >      /* Digita queste specifiche con controllo SEU CL ma  */
2 >      /* poi assicurati che la colonna 6 sia sempre "*".   */
2 >      /**/DLTPGM     PGM(QTEMP/TESTB)
    Non trovato oggetto TESTB in QTEMP tipo *PGM.
2 >      /**/CRTBNDRPG  PGM(QTEMP/TESTB) +
2 >      /**/           SRCFILE(NERONI2/JEXECJS) DBGVIEW(*ALL)
       - RETURN /* RETURN causato dalla fine del programma CL */
    Il programma TESTB e' stato posto nella libreria QTEMP.
      00 e' l'errore con il livello di gravita' massima.
      Creato il 30/03/17 alle 16:54:32.
2 >      /**/SNDMSG     MSG(TESTB) TOUSR(NERONI)
2 >      /* La specifica seguente interrompe l'esecuzione del */
2 >      /* comando JEXECJS scrivendo la parola qui compresa  */
2 >      /* tra asterischi ovunque nella specifica.           */
2 > RETURN
    Fine delle richieste.

Si osservino i comandi rifiutati e quelli eseguiti.

Esempio 4: Esegue la compilazione come nell'esempio 3 ma con visualizzazione immediata del log

Se su video comandi si immette il seguente:

> JEXECJS SRCMBR(TESTB) SRCFILE(NERONI2/JEXECJS) RETURN(*NO)

Si ottiene il log su un video comandi a valle del chiamante:

> /* Inizio Execute jobstream */
>      /* Esempio di CL in testa ad RPGLE per compilazione. */
>      /* Digita queste specifiche con controllo SEU CL ma  */
>      /* poi assicurati che la colonna 6 sia sempre "*".   */
>      /**/DLTPGM     PGM(QTEMP/TESTB)
  E' stato cancellato l'oggetto TESTB in QTEMP di tipo *PGM.
>      /**/CRTBNDRPG  PGM(QTEMP/TESTB) +
>      /**/           SRCFILE(NERONI2/JEXECJS) DBGVIEW(*ALL)
  Il programma TESTB e' stato posto nella libreria QTEMP.
    00 e' l'errore con il livello di gravita' massima.
    Creato il 30/03/17 alle 17:03:40.
>      /**/SNDMSG     MSG(TESTB) TOUSR(NERONI)
>      /* La specifica seguente interrompe l'esecuzione del */
>      /* comando JEXECJS scrivendo la parola qui compresa  */
>      /* tra asterischi ovunque nella specifica.           */
> /* Ritorna con F12 o F3 */

Si osservino i comandi rifiutati e quelli eseguiti. Si osservi inoltre che, per tornare al video che ha chiamato il comando JEXECJS, occorre digitare F3 o F12.

Naturalmente, se il sorgente da compilare viene pulito dai commenti CL, la log si semplifica:

> JEXECJS SRCMBR(TESTc) SRCFILE(NERONI2/JEXECJS) RETURN(*NO)
> /* Inizio Execute jobstream */
>      /**/DLTPGM     PGM(QTEMP/TESTc)
  Non trovato oggetto TESTC in QTEMP tipo *PGM.
>      /**/CRTBNDRPG  PGM(QTEMP/TESTc) +
>      /**/           SRCFILE(NERONI2/JEXECJS) DBGVIEW(*ALL)
  Il programma TESTC e' stato posto nella libreria QTEMP.
    00 e' l'errore con il livello di gravita' massima.
    Creato il 30/03/17 alle 17:16:29.
>      /**/SNDMSG     MSG(TESTc) TOUSR(NERONI)
> /* Ritorna con F12 o F3 */

Esempio 5: Uso della versione "II" del comando JEXECJS

Il comando II ha i default diversi dal comando originale JEXECJS congegnati per favorire l'uso del tool come strumento di inizializzazione di ambienti di sviluppo.

Si abbia il file sorgente II in lista librerie contenente i membri seguenti:

NN   CL   Sviluppo nella libreria NERONI2
TR   CL   Sviluppo Trasporti lato cliente

Nel membro NN:

JRQT2   CMD('.') CMT('++Sviluppo nella libreria NERONI2++') +
          REFPGM(*PRV)
CHGLIBL LIBL(QTEMP NERONI1 NERONI2 QGPL)
JDBG
JRQT2   CMD('JJJ NERONI2 JXXXXXX*') REFPGM(*PRV)

Nel membro TR:

JRQT2   CMD('.') CMT('++Sviluppo Trasporti lato cliente++') +
          REFPGM(*PRV)
CHGLIBL LIBL(QTEMP TRK TRO TRS NERONI2 QGPL)
JDBG
JRQT    CMD(JJJ LIB(TRS) OBJATR(*SRC)) REFPGM(*PRV)

Il comando seguente chiama il PDM sul file sorgente II permettendone l'editazione e quant'altro necessario.

> ii *pdm

Il comando seguente elenca nel log i membri contenuti nel file II.

> ii *list
  NN         CL         Sviluppo nella libreria NERONI2
  TR         CL         Sviluppo Trasporti lato cliente

Il comando seguente esegue le istruzioni contenute nel membro NN.

> ii nn
  Visualizza la joblog per valutare l'esito dell'esecuzione.
> /*++Sviluppo nella libreria NERONI2++*/.
> /**/JJJ NERONI2 JXXXXXX*

Non si dettagliano le alternative gia' esposte per il comando nella sua forma originale JEXECJS

Top

Messaggi del comando JEXECJS Execute jobstream

Messaggi di rilascio nel comando

Messaggi di rilascio

Messaggi informativi

JEX0128
Visualizza la joblog per valutare l'esito dell'esecuzione.

Messaggi di completamento

Messaggi di stato

Messaggi diagnostici seguiti da rilascio

JEX0101
Il supervisore batch non e' QCMD ne' QCL.
JEX0102
Il file &1/&2 non e' di tipo sorgente.
JEX0103
File sorgente &1/&2 ha campo dati superiore a 132 caratteri

Messaggi diagnostici NON seguiti da rilascio

Messaggi di richiesta

JEX0121
/* Inizio Execute jobstream */
JEX0129
/* Ritorna con F12 o F3 */
Top