Monitor recursion (JRECURS)

Where allowed to run:
  • Batch program (*BPGM)
  • Interactive program (*IPGM)
  • Batch ILE CL module (*BMOD)
  • Interactive ILE CL module (*IMOD)
Threadsafe: No
Parameters
Examples
Error messages

Cmd JRECURS Monitor recursion > Controlla recursione

http://www.neroni.it/NERONI2/JRECURS.NERONI2.HTML

Il comando JRECURS esamina la chiamabilita' di un dato programma subito prima della chiamata effettiva valutando che il programma non sia gia' in lista di chiamata e sia pero' presente in lista librerie.

Cmd JRECURSI Monitor recursion NoVar > Controlla recursione NoVar

http://www.neroni.it/NERONI2/JRECURSI.NERONI2.HTML

Il comando JRECURSI valuta estemporaneamente le risposte del command processing program in comune col comando JRECURS.

Quando riceve un nome di programma che si trova gia' in lista di chiamata o che e' inesistente in lista librerie:

1) il comando JRECURS restituisce una variabile logica accesa e, a richiesta, visualizza eventuali messaggi di esito negativo;

2) il comando JRECURSI non restituisce variabili ma visualizza soltanto eventuali messaggi di esito negativo.

Il recupero delle informazioni necessarie avviene spedendo un messaggio al programma cercato per valutarne la presenza in lista di chiamata. Se il programma non e' in lista di chiamata, se ne accorge intercettando l'errore. Se il programma e' in lista di chiamata, se ne accorge perche' non si verificano errori. Il messaggio viene poi rimosso per non inquinare il log.

Per completare l'esame di chiamabilita' quando il programma non e' in lista, considera errore di chiamabilita' anche la mancanza del programma in lista librerie.

Se richiesti, i messaggi di errore vengono spediti alla coda esterna che, nei lavori interattivi, viene visualizzata immediatamente con il nuovo messaggio in bella vista. Nessun disturbo si verifica se il chiamante e' un lavoro batch.

Top

Parameters

Keyword Description Choices Notes
PGM Program name Name Required, Positional 1
RECURS Recursion (I=Dsp O=Recur) *LGL Logical value Required, Positional 2
Top

Program name (PGM) > Nome del programma

Nome del programma da cercare in lista di chiamata e, se non presente, da ricercare in lista librerie.

Il valore e' obbligatorio.

Valori permessi:

nome-programma
Nome del programma da indagare.
Top

Recursion (I=Dsp O=Recur) *LGL (RECURS) > Recursione (I=Visualizza O=Recursione) *LGL

Variabile logica di ritorno obbligatoria adatta a contenere sia una richiesta di comportamento che la risposta del comando.

Valori permessi:

variabile-logica-di-programma
Da dichiarare nel pgm chiamante.

Valori ricevuti:

*off
Non e' richiesta la visualizzazione dei messaggi di errore.
*on
E' richiesta la visualizzazione dei messaggi di errore.

Valori restituiti:

*off
Programma non presente in lista di chiamata e presente in lista librerie.
*on
Programma presente in lista di chiamata oppure non presente in lista di chiamata ma inesistente in lista librerie.
Top

Esempi d'uso del comando JRECURS Monitor recursion

Esempio 1: Testa recursione con il comando JRECURS

Cerca risposte chiamando un programma di test dal video comandi.

Il programma JRECURST e' un programma di test dimostrativo dell'uso di JRECURS, eseguibile interattivamente e presente tra i sorgenti del tool nella sua forma completa.

Il programma contiene un esempio di chiamata del comando JRECURS e genera un messaggio estemporaneo di evidenziazione del risultato.

/* Claudio Neroni 15-01-2019 Creato.                      */
/*    JRECURST                                            */
/*    Monitor recursion. Test                             */
/*    Controlla recursione. Test                          */
/*                                                        */
PGM        PARM(&PGM &RECURS)
/* Riceve Nome del programma da cercare                   */
/* in invocation stack e library list.                    */
DCL        VAR(&PGM) TYPE(*CHAR) LEN(10)
/* Riceve Richiesta di segnalazione errore (1).           */
DCL        VAR(&RECURS) TYPE(*LGL)
/* Decodifica della variabile logica ante manipolazione.  */
DCL        VAR(&ANTE) TYPE(*CHAR) LEN(4) VALUE(*OFF)
/* Decodifica della variabile logica post manipolazione.  */
DCL        VAR(&POST) TYPE(*CHAR) LEN(4) VALUE(*OFF)
/* Decodifica la richiesta di visualizzazione messaggi.   */
IF         COND(&RECURS) THEN(CHGVAR VAR(&ANTE) +
             VALUE(*ON))
/* Valuta la chiamabilita' del programma.                 */
JRECURS    PGM(&PGM) RECURS(&RECURS)
/* Decodifica la risposta di chiamabilita'.               */
IF         COND(&RECURS) THEN(CHGVAR VAR(&POST) +
             VALUE(*ON))
/* Documenta l'avvenimento.                               */
SNDPGMMSG  MSG('Pgm:' *CAT &PGM *CAT ' Ante:' *CAT +
             &ANTE *CAT ' Post:' *CAT &POST)
ENDPGM

Si riportano le call di chiamata del test e le log di esecuzione e, quando presenti, le visualizzazioni della coda messaggi di programma del job.

1) Programma QCMD in lista di chiamata, no messaggio.
Call e log
> CALL PGM(JRECURST) PARM(QCMD '0')
  Pgm:QCMD       Ante:*OFF Post:*ON
Messaggi programma
nessuno

2) Programma QCMD in lista di chiamata, messaggio.
Call e log
> CALL PGM(JRECURST) PARM(QCMD '1')
  Pgm:QCMD       Ante:*ON  Post:*ON
Messaggi programma
          Visualizzazione messaggi del programma
 Lavoro 887050/NERONI/N2NERO avviato il 15/01/19
   alle 11:47:36 nel sottosistema QINTER
 Il programma QCMD non puo' essere chiamato di nuovo
 Premere Invio per continuare.
 F3=Fine   F12=Annullamento

3) Programma ESISTE in lista di chiamata, no messaggio.
Call e log
> CALL PGM(JRECURST) PARM(ESISTE '0')
  Pgm:ESISTE     Ante:*OFF Post:*OFF
Messaggi programma
nessuno

4) Programma ESISTE in lista di chiamata, messaggio.
Call e log
> CALL PGM(JRECURST) PARM(ESISTE '1')
  Pgm:ESISTE     Ante:*ON  Post:*OFF
Messaggi programma
nessuno

5) Programma MANCA in lista di chiamata, no messaggio.
Call e log
> CALL PGM(JRECURST) PARM(MANCA '0')
  Pgm:MANCA      Ante:*OFF Post:*ON
Messaggi programma
nessuno

6) Programma MANCA in lista di chiamata, messaggio.
Call e log
> CALL PGM(JRECURST) PARM(MANCA '1')
  Pgm:MANCA      Ante:*ON  Post:*ON
Messaggi programma
          Visualizzazione messaggi del programma
 Lavoro 887050/NERONI/N2NERO avviato il 15/01/19
   alle 11:47:36 nel sottosistema QINTER
 Il programma QCMD non puo' essere chiamato di nuovo
 Il programma da chiamare MANCA non esiste
 Premere Invio per continuare.
 F3=Fine   F12=Annullamento

Esempi d'uso del comando JRECURSI Monitor recursion NoVar

Esempio 2: Testa recursione con il comando JRECURSI

Cerca risposte per gli stessi programmi e presuppone di farlo dallo stesso video comandi dell'esempio 1.

> JRECURSI PGM(QCMD)
  Il programma QCMD non puo' essere chiamato di nuovo
> JRECURSI PGM(ESISTE)
> JRECURSI PGM(MANCA)
  Il programma da chiamare MANCA non esiste

La prima e la terza call visualizzano anche i seguenti due messaggi nella coda messaggi del lavoro.

          Visualizzazione messaggi del programma
 Lavoro 887050/NERONI/N2NERO avviato il 15/01/19
   alle 11:47:36 nel sottosistema QINTER
 Il programma QCMD non puo' essere chiamato di nuovo
 Il programma da chiamare MANCA non esiste
 Il programma QCMD non puo' essere chiamato di nuovo
 Il programma da chiamare MANCA non esiste
 Premere Invio per continuare.
 F3=Fine   F12=Annullamento

Top

Messaggi informativi

JRE0007
JRECURS cerca programma &1 in lista di chiamata
JRE0008
Non riesco a valutare se &1 e' nella lista dei programmi attivi
JRE0009
Il programma &1 non puo' essere chiamato di nuovo
JRE0010
Il programma da chiamare &1 non esiste
Top