In questo post analizzeremo come sia possibile configurare un flusso automatico di azioni o gruppo di azioni, e come eventualmente schedulare queste stesse funzioni come lavori batch attraverso l’utilizzo dei costruttori LOA11 e LOA27.

Per visualizzare i due costruttori è possibile accedere all’oggetto V2 LOCOS AXX.

LOA11

Il costruttore LOA11 è stato creato per consentire la gestione di flussi di funzioni siano esse funzioni di emulazione o siano esse funzioni grafiche. L’utilizzo di questo costruttore permette di creare in catena una serie di funzioni che vengono lanciate automaticamente in sequenza ordinata.

Ad esempio tramite il LOA11 è possibile:

  • generare una matrice di valori e successivamente produrre un documento PDF o Excel;
  • determinare una serie di oggetti derivati da una query SQL e per ogni oggetto trovato eseguire le funzioni definite;
  • eseguire alcune funzioni in base ad alcuni parametri impostati in precedenza

Accedendo direttamente alla scheda del costruttore LOA11 posso verificare tutti i costruttori presenti e per ogni costruttore verificare in catena tutte le singole funzioni che verranno eseguite.

Quindi in ogni scheda sarà possibile creare un flusso di funzioni automatiche richiamando il servizio LOA11_SE, metodo FLU.ESE e lo script che contiene l’elenco delle azioni.

Come creare un LOA11

La parametrizzazione di questi flussi avviene tramite uno script SCP_SET.

questo script andrà salvato con la nomenclatura di lOA11_XX

La sintassi utilizzata per la creazione dello script prevede l’utilizzo dei seguenti TAG:

  • SEZ: definire una sezione all’interno della quale posso inserire un gruppo di flussi
  • SUB: definire una sub-sezione all’interno della quale inserire un flusso all’interno del gruppo
  • FLU: definire la singola azione di un flusso
  • DO e ENDDO: definire un ciclo DO di azioni FLU
  • IF/ELSE/ENDIF: definire eventuali condizioni all’esecuzioni delle azioni FLU

“tag SEZ e SUB” 

definire per prima cosa la sezione di un flusso singolo o gruppo di flussi

Ad esempio per lo script LOA11_XX definisco la sezione SEZ.A01 e due sottosezioni SUB.B01 e SUB.B02

In questo modo ogni singolo flusso verrà  identificato in maniera univoca dal codice dello script, dalla sezione e subsezione.

Nell’esempio quindi identificherò due flussi:

  • LOA11_SE.A01.B01
  • LOA11_SE..A01.B02

Questa nomenclatura permette di avere un riferimento preciso al flusso richiamabile nella scheda LOA11 ed esternamente in una nostra scheda.

Inoltre in ogni SUB sezione utilizzando l’attributo CCfg sarà possibile caricare all’avvio del flusso il suo relativo setup.

Ad esempio se CCfg=”LOA11/A” verrà caricata la sezione A dello script G30 chiamato LOA11 presente nel file SCP_CFG.

tag FLU

il tag FLU permette di definire i parametri per l’esecuzione di un singolo flusso. per ogni singolo tag FLU sarà necessario per prima cosa definire il relativo setup

alcuni parametri del tag FLU verranno assunti di default mentre sarà possibile definire se il flusso sia “statico” o “dinamico”.

  • un flusso statico carica inizialmente tutti i passi e sostituisce tutte le variabili al caricamento del flusso.
  • un flusso dinamico richiede il passo successivo dopo l’esecuzione di ogni passo.

successivamente al tag FLU.SET relativo al setup si dovrà impostare la singola funzione o più funzioni con il tag FLU.FUN.

tag FLU.OVS

questo tag permette di sovrascrivere il setup di un particolare componente, prevede di indicare il tipo di setup (es. SET.MAT, FRM.SET, FRM.REP), il nome di un modello che è possibile utilizzare per l’override.

I modelli sono contenuti nello script SCP_SCH J3_SET_STD standard o SCP_SCH J3_SET_USR specifici per installazione.

tag FLU.VAR

Tramite questo tag sarà possibile istanziare delle variabili nel flusso. Le modalità  possibili sono due:

  • PAR – per istanziare delle variabili nello script. Nell’attributo del tag Par  vanno inserite delle variabili del tipo X1(AX) X2(A1), richiamabili nello script tramite &CO.X1 &CO.X2.

Esempio:

FLU.VAR Mod="VAR.PAR" Par="X1(AX) X2(A1)"
  • PGM – per istanziare delle variabili richiamando un programma di exit. Nel programma richiamato tramite la /copy G91 vengono create le variabili da utilizzare successivamente. I nomi delle variabili devono essere sempre nella forma &CO.XXXX.

Esempio:

FLU.VAR Mod="VAR.PGM" Par="Pgm(LOA11_X1) Fun(SCE) Met(AGE)"

dove il programma LOA11_X1 verrà  richiamato con 3 parametri (funzione(SCE)/metodo(AGE)/contesto (passato implicitamente LOA11)).

tag DO-ENDDO

permettono di definire una zona di flusso ripetitiva per un certo oggetto (un ciclo su una lista di oggetti). La zona ripetitiva inizia con DO e finisce con un’istruzione ENDDO.

Tutte le istruzioni incluse verranno ripetute per tutti gli oggetti ritornati dal programma o dalla lista indicata nel tag.  All’interno delle istruzioni si potrà utilizzare il codice &CO.Cod per indicare dove sostituire il codice del singolo oggetto ottenuto dal loop.

Nel caso sia definito un programma esterno di caricamento, gli attributi saranno richiamati tramite:

  • pgm: programma che si occupa di ritornare gli oggetti per i quali le istruzioni incluse nel loop dovranno essere eseguite. Esempio vedi il programma LOA11_01 .
  • mod: passo funzione/metodo del programma stesso.
  • par: posso passare un serie di parametri al programma specifico.

tag IF/ELSE/ENDIFDO 

Tramite questi tag sarà possibile condizionare l’esecuzione dei passi di flusso. La sintassi è quella prevista dalla /COPY G91.

 

Come utilizzare un LOA_27

Vediamo adesso come sottomettere in batch una funzione. Supponiamo di avere una funzione che prevede l’esecuzione di un flusso di azioni abbastanza complesso, che porta alla produzione di un report cartaceo spedito per email:

 F(FLU;LOA11_SE;FLU.ESE) 1(;;53.01 .03) P(For(NSho))

è quindi una tipica funzione che ben si adatta ad una sottomissione in batch, visto che non richiede interazione con l’utente, è asincrona e lunga da eseguire ed ha un output di tipo non grafico. La sottomissione di una richiesta batch verso un server fa uso del programma “LOA27_BT” .

La sintassi del programma è del tipo:

CALL PGM(LOA27_BT) PARM('COD_SCRIPT')

dove COD_SCRIPT è il codice univoco che identifica la funzione da eseguire all’interno dello script di setup (SCP_SET) della funzione LOA27.

Vediamo lo script 01 salvato nel membro LOA27_01 del parametro SCP_SET:

::SEZ Cod="A01" Txt="Flussi"   
::SUB Cod="B01" Txt="Esempio Flusso 1"  
::A27.BTC CdSrv="SRVSVI" CdUsr="USER" CdPwd="PWD" CdIu=""  Fun="F(FLU;LOA11_SE;FLU.ESE)  1(;;53.01.03)"

questo script prevede quindi il lancio in batch della funzione

 F(FLU;LOA11_SE;FLU.ESE) 1(;;53.01.03)

sul server SRVSVI con utente USER e password PWD.

In particolare, una singola funzione batch è identificata dai seguenti parametri:

  • codice: codice univoco che identifica nello sctipr SCP_SET/LOA27_nn la funzione batch (ad esempio, 01.A01.B01)
  • CdSrv: codice del server che dovrà  eseguire la funzione batch
  • CdUsr: utente di esecuzione della funzione batch
  • CdPwd: password utente esecutore della funzione batch (in chiaro)
  • CdIu: ambiente (oggetto IU) di esecuzione della funzione batch
  • fun: funzione da eseguire in batch.