Chiamata di una funzione dal comando Dialogue Manager

In questa sezione:

È possibile chiamare una funzione con Dialogue Manager nei seguenti modi:

Dialogue Manager converte un argomento numerico in formato doppia-precisione. Questo avviene quando il valore dell'argomento è numerico; non è influenzato dal formato previsto dalla funzione. Questo significa che è necessario prestare attenzione quando si forniscono argomenti per una funzione in Dialogue Manager.

Se la funzione prevede una stringa alfanumerica e l'immissione è una stringa numerica, si verificheranno risultati scorretti a causa della conversione in precisione-doppia pnto-mobile. Per risolvere questo problema, accodare un carattere non-numerico alla fine della stringa, ma non contare questo carattere extra nella lunghezza dell'argomento.

Variabili data Dialogue Manager come &YYMD restiutiscono date legacy alfanumeriche, non un formato data (un offset da una data base). Se una funzione richiede un offset data, piuttosto che una data legacy, è necessario convertire qualsiasi variabile data in un offset data (usando la funzione DATECVT) prima di usarla come argomento. È quindi possibile riconvertire il risultato in una data legacy, di nuovo con la funzione DATECVT. Per esempio:

-SET &TODAY_OFFSET=DATECVT(&YYMD , 'I8YYMD' , 'YYMD');
-SET &BEG_CUR_YR=DATEMOV(&TODAY_OFFSET.EVAL , 'BOY');
-SET &CLOSE_DTBOY=DATECVT(&BEG_CUR_YR.EVAL , 'YYMD' , 'I8YYMD')';

Inizio pagina

x
Assegnazione del risultato di una funzione ad una variabile

Come:

È possibile memorizzare il risultato di una funzione in una variabile con il comando -SET.

Una variabile Dialogue Manager contiene solo dati alfanumerici. Se una funzione restituisce un valore numerico in una variabile Dialogue Manager, il valore viene troncato in un valore intero e convertito in formato alfanumerico, prima di essere memorizzato nella variabile.



x
Sintassi: Come assegnare il risultato di una funzione ad una variabile
-SET &variable = function(arg1, arg2[.LENGTH],..., 'format');

dove:

variabile

La variabile a cui verrà asssegnato il risultato.

Funzione

La funzione.

arg1, arg2

Gli argomenti della funzione.

.LENGTH

Restituisce la lunghezza della variabile. Se una funzione richiede la lunghezza di una stringa di caratteri come argomento di immissione, è possibile richiedere la stringa di caratteri e determinare la lunghezza del suffisso .LENGTH.

formato

Formato del risultato racchiuso tra virgolette singole. Non è possibile specificare una variabile Dialogue Manager per l'argomento di emissione, a meno che non si usi il suffisso .EVAL; tuttavia, è possibile specificare na variabile per l'argomento di immissione.



Esempio: Chiamata di una funzione dal comando -SET

AYMD aggiunge 14 giorni al valore di &INDATE. La variabile &INDATE è impostata in precedenza nella procedura, nel formato anno-mese-giorno di sei cifre.

-SET &OUTDATE = AYMD(&INDATE, 14, 'I6');

Il formato della data di emissione è un valore intero di sei cifre (I6). Sebbene il formato indica che l'emissione è un valore intero, questa si memorizza nella variabile &OUTDATE come stringa di caratteri. Per questo motivo, se si visualizza il valore di &OUTDATE, non sarà possibile visualizzare le sbarre che separano l'anno, il mese ed il giorno.


Inizio pagina

x
Branching a seconda del risultato di una funzione

Come:

È possibile eseguira una diramazione a seconda del risultato di una funzione, chiamando una funzione dal comando Dialogue Manager -IF.

Se un comando in diramazione occupa più di una riga, continuare sulla prossima riga posizionando un trattino (-) nella prima colonna.



x
Sintassi: Come diramare a seconda del risultato di una funzione
-IF function(args) relation expression GOTO label1 [ELSE GOTO label2];

dove:

Funzione

La funzione.

ags

Gli argomenti.

relazione

Un operatore che determina la relazione tra la funzione e l'espressione, per esempio, EQ o LE.

expression

Un valore, espressione logica o funzione. No racchiudere un valore letterale in virgolette singole, a meno che non ci sia una virgola o uno spazio incorporato.

label1, label2

I nomi definiti dagli utenti lunghi fino a 12 caratteri. Non usare spazi incorporati o il nome di qualsiasi altro comando Dialogue Manager, tranne -QUIT o -EXIT. Non usare una parola da poter confondere con una funzione, o una operazione logica o aritmetica.

Il testo label è in grado di precedere o seguire i criteri -IF nella procedura.

ELSE GOTO

Inoltra il controllo a label2 quando si presenta un errore nel tes -IF.



Esempio: Diramazione a seconda del risultato della funzione

Il risultato della funzione AYMD fornisce una condizione per una verifica -IF. Si esegue una di queste due richieste, a seconda del risultato della funzione:

   -LOOP 
1. -IF &INDATE EQ 0 GOTO EXIT; 
2. -SET &WEEKDAY = DOWK(&INDATE, 'A4'); 
3. -TYPE START DATE IS &WEEKDAY &INDATE 
4. -IF AYMD(&INDATE, &DAYS, 'I6YMD') LT 960101 GOTO EARLY; 
5. -TYPE LONG PROJECT
   -*EX LONGPROJ
   -RUN
   -GOTO EXIT 
6. -EARLY
   -TYPE SHORT PROJECT
   -*EX SHRTPROJ
   -RUN
   -EXIT

La procedura elabora come segue:

  1. Se si immette uno 0, si trasferisce il controllo a -EXIT che termina l'esecuzione.
  2. La funzione DOWK ottiene il giorno della settimana per la data di inizio.
  3. Il comando -TYPE visualizza il giorno della settimana e la data di inizio del progetto.
  4. La funzione AYMD calcola la data in cui progetto verrà terminato. Se questa data è prima del 1 Gennaio 1996, il comando -IF si dirama all'etichetta EARLY.
  5. Se il progetto finirà dopo il 1 Gennaio 1996, il comando TYPE visualizza le parole LONG PROJECT ed esce.
  6. Se la procedura si dirama all'etichetta EARLY, il comando TYPE visualizza le parole SHORT PROJECT ed esce.

Inizio pagina

x
Chiamata di una funzione dal comando RUN del sistema operativo

Come:

È possibile chiamare uan funzione che contiene solo argomenti alfanumerici da un comando Dialogue Manager -TSO RUN o -MVS RUN. Questo tipo di funzione esegue una attività specifica, ma di solito non restituisce un valore.

Se una funzione richiede un argomento in formato numerico, è necessario prima convertirlo in formato precisione-doppia punto-mobile, usando la funzione ATODBL, poiché, a differenza del comando -SET, il comando RUN di un sistema operativo non converte automaticamente un argomento numerico in precisione-doppia.



x
Sintassi: Come chiamare una funzione dal comando -RUN del sistema operativo
{-TSO|-MVS} RUN function, input1, input2, ... [,&output]

dove:

-TSO|-MVS

Il sistema operativo.

Funzione

Nome della funzione.

input1, input2,...

Gli argomenti. Separare il nome della funzione e ogni argomento con una virgola. Non racchiudere un valore letterale alfanumerico in virgolette singole. Se una funzione richiede la lunghezza di una stringa di caratteri come argomento, è possibile richiedere la stringa di caratteri, quindi usare il suffisso .LENGTH per verificare la lunghezza.

&emissione

Una variabile di Dialogue Manager. Includere questo argomento se la funzione restituisce un valore; altrimenti, ometterlo. Se si specifica una variabile di emissione, è necessario definirne la lunghezza usando il comando -SET.

Per esempio, se la funzione restituisce un valore lungo otto byte, definire la variabile con otto caratteri racchiusi tra virgolette singole prima di chiamare la funzione:

-SET &output = '12345678';


Esempio: Chiamata di una funzione dal comando -RUN del sistema operativo

Il seguente esempio chiama la funzione CHGDAT da un comando -MVS RUN.

-SET &RESULT = '12345678901234567';
-MVS RUN CHGDAT, YYMD., MXDYY, &YYMD, &RESULT
-TYPE &RESULT

WebFOCUS