Net.Data: Guida alla gestione e alla programmazione per OS/400

Logica condizionale

Utilizzare il blocco IF per l'elaborazione condizionale in una macro di Net.Data. Il blocco IF è simile alle istruzioni IF nella maggior parte dei linguaggi ad alto livello poichè fornisce la possibilità di verificare una o più condizioni e quindi di eseguire un blocco di istruzioni in base al risultato di una prova di condizione.

E' possibile specificare i blocchi IF quasi ovunque in una macro e concatenarli. La sintassi di un blocco IF viene riportata nel capitolo sulle strutture del linguaggio in Riferimenti di Net.Data.

Le regole per la sintassi del blocco IF vengono stabilite dalla posizione del blocco nel file di macro. Gli elementi consentiti nel blocco eseguibile di istruzioni di un blocco IF dipendono dall'ubicazione dello stesso blocco IF. Qualsiasi elemento valido contenuto nel blocco in cui è inserito il blocco IF è valido all'interno di quel blocco IF. Ad esempio, se viene specificato un blocco IF all'interno di un blocco HTML, qualsiasi elemento consentito nel blocco HTML è consentito nel blocco IF, come le istruzioni INCLUDE e i blocchi WHILE.

  %HTML block
... 
     %IF block
...   
    %INCLUDE
...
    %WHILE
 

Allo stesso modo, se il blocco IF viene specificato esternamente a qualsiasi altro blocco nella parte di dichiarazione della macro di Net.Data, solo quegli elementi consentiti all'esterno di qualsiasi altro blocco (come un blocco DEFINE o un blocco FUNCTION) sono consentiti nel blocco IF.

%IF 
...
  %DEFINE
...
  %FUNCTION
 

Se un blocco IF è inserito all'interno di un blocco IF esterno a qualsiasi altro blocco nella parte di dichiarazione, esso può utilizzare qualsiasi elemento che il blocco esterno utilizza. Se un blocco IF è inserito all'interno di un altro blocco a sua volta inserito in un blocco IF, esso prende le regole di sintassi per il blocco che è all'interno.

Nell'esempio che segue, il blocco IF concatenato deve seguire le regole utilizzate quando si ritrova all'interno di un blocco HTML.

%IF 
...
  %HTML block
...
     %IF block

Eccezione: non specificare un blocco ROW in un blocco IF quando il blocco IF è all'interno di un blocco REPORT.

Net.Data elabora l'elenco delle condizioni del blocco IF in uno dei due modi basati sul contenuto dei termini che costituiscono le condizioni. L'azione predefinita è di trattare tutti i termini come stringhe e di eseguire i confronti tra stringhe come specificato nelle condizioni. Tuttavia, se vengono soddisfatte le due seguenti condizioni, Net.Data esegue un confronto numerico:

Net.Data valuta il blocco IF al momento in cui lo esegue e quindi può presentarsi in modo diverso da come era in origine quando è stato letto da Net.Data. Ad esempio, se viene specificato un blocco IF e un blocco REPORT, Net.Data non valuta l'elenco delle condizioni associate al blocco IF quando legge la definizione del blocco FUNCTION contenente il blocco REPORT, ma piuttosto quando chiama la funzione e la esegue. Ciò è valido per la parte dell'elenco di condizioni del blocco IF e per la parte di blocco di istruzioni da eseguire.

Esempio: Un file della macro contenente blocchi all'interno di altri blocchi

%{ This macro is called from another macro, passing the operating system
   and version variables in the form data.
%}
 
%IF (platform == "AS400")
  %IF (version == "V3R2")
     %INCLUDE "as400v3r2_def.hti"
  %ELIF (version == "V3R7")
     %INCLUDE "as400v3r7_def.hti"
  %ELIF (version == "V4R1")
     %INCLUDE "as400v4r1_def.hti"
%ENDIF
%ELSE
     %INCLUDE "default_def.hti"
%ENDIF
 
%MACRO_FUNCTION numericCompare(IN term1, term2, OUT result) {
%IF (term1 < term2)
  @dtw_assign(result, "-1")
%ELIF (term1 > term2)
  @dtw_assign(result, "1")
%ELSE
  @dtw_assign(result, "0")
%ENDIF
%}
  
%HTML (report){
  %WHILE (a < "10") {
    outer while loop #$(a)<BR>
    %IF (@dtw_rdivrem(a,"2") == "0")
      this is an even number loop<BR>
%ENDIF
    @DTW_ADD(a, "1", a)
  %}
%}

Limite: Net.Data non supporta il confronto numerico tra numeri non interi.


[ Inizio pagina | Pagina precedente | Pagina successiva | Indice | Indice analitico ]