Manual de consulta

Bloque IF

Finalidad

Efectúa el proceso de serie condicional. El bloque IF proporciona la capacidad de probar una o más condiciones y efectuar a continuación un bloque de sentencias basadas en el resultado de la prueba de las condiciones. Puede utilizar el bloque IF de la parte de declaración de una macro de Net.Data, el bloque HTML, el bloque MACRO_FUNCTION, el bloque REPORT, el bloque WHILE y el bloque ROW, así como anidarlo dentro de otro bloque IF.

Los valores de serie de la lista de condiciones se tratan como numéricos a efectos de comparación si son series que representan números enteros y no tienen ningún espacio en blanco inicial o de cola. Pueden tener un único signo más (+) o menos (-) inicial.

Restricción: Net.Data no da soporte a la comparación numérica de los números no enteros; por ejemplo, los números de coma flotante.

Bloques IF anidados: Las normas para la sintaxis del bloque IF las determina la posición del bloque en la macro. Si se anida un bloque IF dentro de un bloque IF que esté fuera de cualquier otro bloque de la parte de declaración, puede utilizar cualquier elemento que pueda utilizar el bloque externo. Si se anida un bloque IF dentro de otro bloque que esté en un bloque IF, adopta las normas de sintaxis del bloque en el que está.

En el ejemplo siguiente, el bloque IF anidado debe seguir las normas utilizadas cuando está dentro de un bloque HTML.

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

Puede anidar un máximo de 1024 bloques IF.

Sintaxis

>>-%IF--| lista de condiciones |-------------------------------->
 
>-----| bloque_sentencia |--| espec else_if |--%ENDIF----------><
 
lista de condiciones
 
|---(--+-(--lista de condiciones--)----------------------+---)--|
       +-lista de condiciones--&&--lista de condiciones--+
       +-lista de condiciones--||--lista de condiciones--+
       +-!--lista de condiciones-------------------------+
       +-| condición |-----------------------------------+
       '-| término |-------------------------------------'
 
bloque_sentencia
 
    .--------------------------------------.
    V                                      |
|------+--------------------------------+--+--------------------|
       |               (1)              |
       +-bloque define------------------+
       |                  (1)  (2)      |
       +-sentencia define---------------+
       |                 (1)            |
       +-bloque function----------------+
       +-llamada de función-------------+
       |             (1)                |
       +-bloque HTML--------------------+
       |           (1)                  |
       +-bloqueXML----------------------+
       |                           (2)  |
       +-sentencia de presentación------+
       +-bloque if----------------------+
       +-sentencia include--------------+
       |                       (1)      |
       +-bloque macro_function----------+
       |                (1)             |
       +-bloque message-----------------+
       |       (2)                      |
       +-serie--------------------------+
       |                        (2)     |
       +-referencia de variable---------+
       |              (2)               |
       '-bloque while-------------------'
 
condición
 
|---término--+-<--+---término-----------------------------------|
             +->--+
             +-<=-+
             +->=-+
             +-!=-+
             '-==-'
 
término
 
|---+-nombre_variable-------------------------+-----------------|
    +-referencia de variable------------------+
    +-llamada de función----------------------+
    |    .-----------------------------.      |
    |    V                             |      |
    '-"----+-serie------------------+--+---"--'
           +-referencia de variable-+
           '-llamada de función-----'
 
espec else_if
 
|---+-------------------------------------------------------------------+->
    |     .--------------------------------------------------------.    |
    |     V                                                        |    |
    '--+----%ELIF--(--lista_condiciones--)--| bloque_sentencia |---+-+--'
       '-%ELSE--| bloque_sentencia |---------------------------------'
 
>---------------------------------------------------------------|
 

Notas:

  1. Esta construcción de lenguaje es válida cuando el bloque IF está ubicado fuera de cualquier otro bloque de la parte de declaración de la macro.

  2. Esta construcción de lenguaje es válida cuando el bloque IF está ubicado en un bloque HTML, bloque MACRO_FUNCTION, bloque REPORT, bloque ROW o bloque WHILE.

Valores

%IF
La palabra clave que especifica el proceso de serie condicional.

lista de condiciones
Compara los valores de condiciones y términos. Las listas de condiciones pueden conectarse utilizando operadores Booleanos. Una lista de condiciones puede anidarse dentro de otra lista de condiciones.

bloque_sentencia
Está formado por las construcciones de macro de Net.Data válidas siguientes. Por favor, consulte las notas de diagrama y las restricciones siguientes para determinar el contexto en el que son válidas las construcciones de macros.

sentencia define
La sentencia o bloque DEFINE. Define las variables y establece variables de configuración. Los nombres de variable deben comenzar por una letra o subrayado (_) y deben contener caracteres alfanuméricos o subrayados. Consulte la sintaxis y ejemplos en el apartado Bloque o sentencia DEFINE.

bloque function
Una palabra clave que especifica una subrutina que puede invocarse desde la macro de Net.Data. Las sentencias ejecutables de un bloque FUNCTION pueden contener sentencias de lenguaje que un entorno de lenguaje interpreta directamente, o bien pueden indicar una llamada a un programa externo. Consulte la sintaxis y ejemplos en el apartado Bloque FUNCTION.

llamada de función
Invoca uno o más bloques FUNCTION o MACRO_FUNCTION, o una función incorporada de Net.Data con argumentos específicos. Consulte la sintaxis y ejemplos en el apartado Llamada de función (@).

bloque HTML
Incluye cualquier carácter alfabético o numérico, así como códigos HTML que han de formatearse para el navegador del cliente.

Bloque XML
Incluye cualquier carácter alfabético o numérico, así como códigos XML que han de formatearse para la aplicación del cliente.

sentencia de presentación
Incluye cualquier carácter alfabético o numérico, así como códigos HTML o XML que han de formatearse para el navegador del cliente.

bloque if
El bloque IF. Efectúa el proceso de serie condicional. Los valores de serie de la lista de condiciones se tratan como numéricos a efectos de comparación si son series que representan números enteros y no tienen ningún espacio en blanco inicial o de cola. Pueden tener un único signo más (+) o menos (-) inicial.

sentencia include
La sentencia INCLUDE. Lee e incorpora un archivo en la macro de Net.Data. Consulte la sintaxis y ejemplos en el apartado Sentencia INCLUDE.

bloque macro_function
Una palabra clave que especifica una subrutina que puede invocarse desde la macro de Net.Data. Las sentencias ejecutables de un bloque MACRO_FUNCTION pueden contener sentencias fuente de lenguaje de macros de Net.Data. Consulte la sintaxis y ejemplos en el apartado Bloque MACRO_FUNCTION.

bloque message
El bloque MESSAGE. Un conjunto de códigos de retorno, los mensajes asociados y las acciones que adopta Net.Data cuando se devuelve una llamada de función. Consulte la sintaxis y ejemplos en el apartado Bloque MESSAGE.

serie
Cualquier secuencia de caracteres alfabéticos y numéricos y de puntuación. Si la serie está en el término de la lista de condiciones, puede contener cualquier carácter, excepto el carácter de nueva línea. Si la serie está en el bloque de código ejecutable, puede contener cualquier carácter, incluyendo el carácter de nueva línea.

referencia de variable
Devuelve el valor de una variable y se especifica con $ y (). Por ejemplo: si VAR='abc', entonces $(VAR) devuelve el valor 'abc'. Consulte el apartado Referencia de variables para obtener información de sintaxis.

bloque while
El bloque WHILE. Efectúa la repetición en bucle con el proceso de serie condicional. Consulte la sintaxis y ejemplos en el apartado Bloque WHILE

condición
Comparación entre dos términos utilizando operadores de comparación. Una condición IF se trata como comparación numérica si se cumplen las siguientes condiciones:

Si no se cumple una de las dos condiciones, se efectúa una comparación de serie normal.

término
Un nombre de variable, serie, referencia de variables o llamada de función.

%ELIF
Palabra clave que inicia la vía de acceso de proceso alternativa y que puede contener listas de condiciones y la mayoría de las sentencias de macro de Net.Data.

%ENDIF
Palabra clave que cierra el bloque %IF.

%ELSE
Palabra clave que ejecuta sentencias asociadas si no se cumple ninguna de las demás listas de condiciones.

Contexto

El bloque IF puede encontrarse en estos contextos:

Restricciones

El bloque IF puede contener estos elementos cuando están ubicados fuera de cualquier otro bloque de la parte de declaración de la macro de Net.Data:

El bloque IF puede contener estos elementos cuando están ubicados en el bloque HTML, bloque MACRO_FUNCTION, bloque REPORT, bloque ROW o bloque WHILE de la macro de Net.Data:

Puede anidar un máximo de 1024 bloques IF.

Ejemplos

Ejemplo 1: Un bloque IF de la parte de declaración de una macro de Net.Data.

%DEFINE a = "1"
%DEFINE b = "2"
...
%IF (OUT_FORMAT = "HTML")
   %define DTW_HTML_TABLE = "YES"
%ELSE
   %define DTW_HTML_TABLE = "NO"
%ENDIF
 
%HTML(REPORT) {
 ...
%}
 

Ejemplo 2: Un bloque IF dentro de un bloque HTML

%HTML(REPORT) {
@myFunctionCall()
%IF (RETURN_CODE == failure_rc)
   <p> The function call failed with failure code $(RETURN_CODE).
%ELIF (RETURN_CODE == warning_rc)
   <p> The function call succeeded with warning code $(RETURN_CODE).
%ELIF (RETURN_CODE == success_rc)
   <p>The function call was successful.
%ELSE
   <P>The function call returned with unknown return code $(RETURN_CODE).
%ENDIF
%}
 

Ejemplo 3: Una comparación numérica

%IF (ROW_NUM < "100")
    <p>The table is not full yet...</p>
%ELIF (ROW_NUM == "100")
    <p>The table is now full...</p>
%ELSE
    <p>The table has overflowed...</p>
%ENDIF
 

Se efectúa una comparación numérica debido a que la variable de tabla implícita ROW_NUM siempre devuelve un valor de entero y el valor que se compara es asimismo un entero.

Ejemplo 4: Bloques IF anidados

%IF (MONTH == "January")
  %IF (DATE = "1")
    HAPPY NEW YEAR!
  %ELSE
    Ho hum, just another day.
  %ENDIF
%ENDIF
 


[ Principio de página | Página anterior | Página siguiente | Contenido | Índice ]