Where allowed to run: All environments (*ALL) Threadsafe: No |
Parameters Examples Error messages |
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 |
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 |
Nome del membro sorgente che contiene la stringa da eseguire immediatamente e non tramite sottomissione batch.
Valori permessi:
Valori speciali:
Top |
Nome del file sorgente in cui risiede il membro che contiene la stringa da eseguire immediatamente e non tramite sottomissione batch.
Valori permessi:
Valori speciali:
Il nome e' quello del contenitore standard di Control Language.
Nome del file predisposto per contenere i comandi di inizializzazione ambienti.
Nome della libreria in cui risiede il file.
Valori permessi:
Valori speciali:
Il file sorgente viene cercato in lista librerie.
Il file sorgente viene cercato nella libreria omonima dell'utente corrente.
Top |
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:
Top |
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:
Top |
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 |
Top |