Job con parametri dinamici

In Sage X3 le schedulazioni di esecuzione di un comando si possono impostare utilizzando il job SYSTEME.
Come parametro si passa il comando da eseguire, per esempio “C:\temp\comando.bat par1 par2″, e il gioco è fatto.

Se per caso abbiamo la necessità di spostare la schedulazione da un dossier ad un altro,
può tornare utile passare il nome del dossier come parametro dinamico,
in modo da non dover modificare il parametro del job SYSTEME ogni volta.

Per far questo basta creare un wrapper del job SYSTEME.

Il job SYSTEME è collegato all’omonima funzione SYSTEME, che richiama l’azione EXESYS.
EXESYS ha come unico parametro il comando da eseguire;
per arrivare al nostro obiettivo creremo quindi un job YSYSTEME, una funzione YSYSTEME e un’azione YEXESYS.

Ma cosa fa di preciso quest’azione EXESYS? Richiama un sottoprogramma di ORDSYS.
Eccone un esempio: la seguente riga di codice fa eseguire il batch Comando.bat
presente nella cartella c:\CARTELLA\SUB\

Call SYSTEME ("","C:\CARTELLA\SUB\Comando.bat","b",YSTAT) From ORDSYS

Duplichiamo quindi l’azione EXESYS nominandola YEXESYS,
lasciamo tutto così come è, solo scriviamo nella casella programma YEXESYS
(
al posto di YXEXESYS: questo sorgente non esiste, se infatti controllate non esiste il corrispondente file adx).

Duplichiamo poi la funzione SYSTEME nominandola YSYSTEME; possiamo togliere il valore del menù Admin (così non comparirà a menù)
e come azione impostiamo YEXESYS.

Bene, ora duplichiamo anche il job SYSTEME chiamando il nuovo job YSYSTEME, e avente come funzione YSYSTEME.

A questo punto non ci resta che scrivere il sorgente YEXESYS,
dando la possibilità di passare un parametro da valutare runtime racchiuso tra due “%”:

 

###############################################################
$ACTION
Case ACTION
 When "CONTROLE" : Gosub CONTROLE
 When Default
Endcase
Return
###############################################################

###############################################################
#NB: [M:EXS]ORDSYS è il campo che contiene il comando
###############################################################
$CONTROLE
Local Integer I1,I2
Local Char YPARAM(30)
Local Char YVALUE(30)
 I1=0
 I2=0
 I1=instr(1,[M:EXS]ORDSYS,"%")
 If I1
   I2=instr(I1+1,[M:EXS]ORDSYS,"%")
   If I2
   YPARAM = seg$([M:EXS]ORDSYS,I1+1,I2-1)
   YVALUE = evalue (YPARAM)
   [M:EXS]ORDSYS = func YSAGEDEV.REPLACE([M:EXS]ORDSYS, "%"+YPARAM+"%", YVALUE)
   Endif
 Endif
End
###############################################################

Bene, ora nella schedulazione come parametro del job potremo passare per esempio

c:\Sage\folders\%nomap(0)%\YIMPORT\nomefile.txt %nomap(0)%

che verrà trasformato (se il dossier si chiama TEST) in

c:\Sage\folders\TEST\YIMPORT\nomefile.txt TEST

Così facendo come parametri dinamici possiamo passare qualunque cosa possa essere interpretata da evalue.
Va notato che con il codice scritto possiamo inserire due volte nomap(0), ma non possiamo inserire nomap(0) e anche nomap(1).

Attenzione, il programma non va usato così com’è in ambiente di produzione.
Nel caso ci sia un errore di sintassi il comando viene eseguito lo stesso, con conseguenze non prevedibili.

Spero vi sia d’aiuto,
e se ne fate degli utilizzi originali vi chiedo gentilmente di segnalarlo nei commenti.

 

Se volete una versione completa del programma, con

  1. controllo della sintassi e gestione di eventuali errori
  2. gestione eventuali errori della funzione evalue
  3. gestione di parametri multipli anche diversi tra loro
  4. file batch che gestisce il parametro DOSSIER senza doversi preoccupare dei parametri già presenti

iscrivetevi e la riceverete gratuitamente assieme a tutte le risorse aggiuntive!

Potrebbero interessarti anche...

Lascia un commento

Scopri di più da SageDev

Abbonati ora per continuare a leggere e avere accesso all'archivio completo.

Continue reading