Cómo navegar por un procedimiento

En esta sección:

Puede navegar por los procedimientos de las siguientes formas:


Principio de página

x
Cómo establecer bifurcaciones no condicionales

Cómo:

Puede establecer bifurcaciones no condicionales, que transfieren el control a una etiqueta con el comando -GOTO.

La primera vez que pasa por un procedimiento, Dialogue Manager anota las direcciones de todas las etiquetas que aparezcan, para poder encontrarlas fácilmente si las vuelve a necesitar. Sin embargo, si se encuentra con un comando -GOTO que ignora ciertas etiquetas, éstas no aparecerán en la lista. Al procesar un comando -GOTO, lo primero que hace Dialogue Manager es comprobar su lista de etiquetas. Si la etiqueta de destino ya está en la lista, el control pasa a dicha etiqueta. Si la etiqueta de destino no está en la lista, Dialogue Manager avanza en su búsqueda por el procedimiento. Si llega al final sin encontrar la etiqueta, vuelve a empezar desde el principio. Dialogue Manager no lleva a cabo ninguna acción con las etiquetas que no presenten el -GOTO correspondiente.

Si el -GOTO no tiene la etiqueta correspondiente, la ejecución se detiene y aparece un mensaje de error.

Nota: Le recomendamos que no use los comandos de Dialogue Manager como etiquetas.



x
Sintaxis: Cómo Establecer bifurcaciones no condicionales
-GOTO label 
  .
  .
  .
-label [TYPE text]

donde:

-label

Es un nombre definido por el usuario, de hasta 64 caracteres. No use espacios en blanco insertados ni el nombre de otro comando de Dialogue Manager, excepto -QUIT o -EXIT. No utilice operaciones aritméticas ni lógicas, palabras que puedan confundirse con operaciones ni palabras reservadas, como CONTINUE.

El texto de label puede estar situado antes o después del comando -GOTO, en el procedimiento.

Nota: Cuando label está situado a continuación del comando -GOTO, no viene precedido por un guión.

TYPE text

Envía un mensaje a una aplicación cliente.



Ejemplo: Cómo establecer bifurcaciones no condicionales

El siguiente ejemplo comenta la totalidad del código FOCUS, a través de una bifurcación no condicional, en lugar de utilizar -* delante de cada línea:

-GOTO DONE
TABLE FILE SALES
PRINT UNIT_SOLD RETURNS
BY PROD_CODE,CITY
END 
-RUN 
-DONE

Principio de página

x
Cómo establecer bifurcaciones condicionales

En esta sección:

Cómo:

La bifurcación condicional realiza una prueba de los valores de las variables y, en función de ella, transfiere el control a una etiqueta del procedimiento, con el comando -IF ... GOTO. Esto ayuda a controlar la ejecución de solicitudes y a construir un procedimiento dinámico, ejecutando o no ejecutando partes de un procedimiento.

Por ejemplo, puede comprobar si se ha creado un archivo de extracción a partir de un origen de datos de producción. Si el archivo de extracción existe, el programa ejecuta un conjunto de informes basados en la extracción. Si no existe, el programa se bifurca en torno a los informes y envía un mensaje a un archivo de registro.

Nota: No es necesario especificar una etiqueta de destino para cada prueba -IF.



x
Sintaxis: Cómo Realizar la bifurcación condicional
-IF expression [THEN] {GOTO label1|CONTINUE} [ELSE IF...;] [ELSE {GOTO label2|CONTINUE}];

donde:

expression

Es una expresión válida. Los valores literales no necesitan estar entre comillas simples a menos que contengan espacios en blanco o comas insertados.

THEN

Es un comando opcional que mejora la legibilidad del comando.

label1

Es un nombre de hasta 64 caracteres, definido por el usuario, que recibe el control cuando la prueba -IF es verdadera. No use espacios en blanco insertados ni el nombre de otro comando de Dialogue Manager, excepto -QUIT o -EXIT. No utilice operaciones aritméticas, lógicas, palabras que puedan confundirse con operaciones ni palabras reservadas como CONTINUE.

El texto de label puede estar situado antes o después de los criterios -IF, en el procedimiento.

CONTINUE

Continúa el comando posterior al punto y coma del comando -IF.

Nota: No se puede utilizar CONTINUE como etiqueta en una declaración -IF.

ELSE IF

Especifica una prueba -IF compuesta. El comando -IF debe termina con un punto y coma para indicar que la lógica se ha especificado. Para más información, consulte Cómo efectuar una prueba -IF compuesta.

ELSE GOTO

Pasa el control a label2 cuando falla la prueba -IF.

Si un comando ocupa más de una línea, las líneas de continuación deben empezar por un guión y uno o varios espacios.



Ejemplo: Cómo establecer bifurcaciones condicionales

En el siguiente ejemplo el control pasa a la etiqueta -PRODSALES si &OPTION es igual a S. De lo contrario, el control pasa a la etiqueta -PRODRETURNS, que es la próxima línea del procedimiento.

-IF &OPTION EQ 'S' GOTO PRODSALES;
-PRODRETURNS
TABLE FILE SALES
PRINT PROD_CODE UNIT_SOLD
BY STORE_CODE
END
-EXIT
-PRODSALES
TABLE FILE SALES
SUM UNIT_SOLD
BY PROD_CODE
END
-EXIT

El siguiente comando especifica ambas transferencias de forma explícita:

-IF &OPTION EQ 'S' GOTO PRODSALES ELSE
                 - GOTO PRODRETURNS;

Observe que la línea de continuación comienza con un guión seguido de un espacio.



Ejemplo: Cómo probar las variables estadísticas y del sistema

En el siguiente ejemplo, si los datos (&LINES) se recuperan con la solicitud, el procedimiento se bifurca en la etiqueta -PRODSALES. De lo contrario, finaliza.

TABLE FILE SALES
SUM UNIT_SOLD
BY PROD_CODE BY CITY
WHERE TOTAL UNIT_SOLD GE 50
ON TABLE HOLD
END 
-IF &LINES NE 0 GOTO PRODSALES;
-EXIT
-PRODSALES
TABLE FILE SALES
SUM UNIT_SOLD
BY PROD_CODE ACROSS CITY
END


Ejemplo: Cómo ejecutar comandos apilados y salir del procedimiento

En el siguiente ejemplo, se ejecuta la primera o la segunda solicitud de informe, pero no ambas. Suponga que el informe ha sido abierto por un formulario HTML que emplea una variable de entrada de texto llamada &PROC, para indicar al usuario que proporcione el procedimiento que quiere ejecutar. El usuario puede introducir SALES o EMPLOYEE.

1. -IF &PROC EQ 'EMPLOYEE' GOTO EMPLOYEE; 
2. -SALES
   TABLE FILE SALES
   SUM UNIT_SOLD
    BY PROD_CODE
   END 
3. -EXIT
   -EMPLOYEE
   TABLE FILE EMPLOYEE
   PRINT LAST_NAME
    BY DEPARTMENT
   END

El procedimiento se procesa del siguiente modo:

  1. Dialogue Manager pasa SALES a &PROC. Se realiza una prueba de -IF, que falla, ya que el valor de &PROC no es EMPLOYEE, y el control pasa a la próxima línea, -SALES.

    Si el valor de &PROC fuese EMPLOYEE, el control pasaría a -EMPLOYEE.

  2. Se procesa el código FOCUS, que se apila para ser procesado más adelante.
  3. -EXIT ejecuta los comandos apilados. La salida se envía a la aplicación Cliente WebFOCUS y el procedimiento finaliza.

    No se ejecuta la solicitud bajo la etiqueta -EMPLOYEE.

Este ejemplo también presenta una salida o cierre explícito. Si el valor de &PROC fuese EMPLOYEE, el control pasaría a la etiqueta -EMPLOYEE, después de la prueba -IF, y el procedimiento nunca recibiría un -EXIT. Se ejecutaría la solicitud TABLE FILE EMPLOYEE y el procedimiento terminaría automáticamente.



Ejemplo: Cómo cancelar la ejecución de un procedimiento con la bifurcación condicional

El siguiente ejemplo explica el uso de -QUIT para cancelar la ejecución, en base a los resultados de una prueba -IF. Suponga que el informe ha sido abierto por un formulario HTML que emplea una variable de entrada de texto llamada &SELECT, para indicar al usuario que proporcione el procedimiento que quiere ejecutar.

-IF &SELECT EQ 'DONE' GOTO QUIT;
-REPORT
   TABLE FILE SALES
   SUM UNIT_SOLD
   BY PROD_CODE
   WHERE AREA EQ '&SELECT';
   END
-RUN
-QUIT

El usuario ejecuta los informes secuenciales pulsando el botón Anterior del navegador, introduciendo un nuevo valor para SELECT y reenviando el formulario. Si se ha seleccionado un código de producto, el procedimiento continúa por la próxima línea y la solicitud se ejecuta antes de que aparezca -QUIT. Cuando el usuario introduce DONE, el control pasa a -QUIT. Se cierra el procedimiento.



x
Cómo efectuar una prueba -IF compuesta

La prueba -IF compuesta consta de una serie de pruebas -IF anidadas unas dentro de otras. Puede usar una prueba -IF compuesta cuando cada prueba especifica una etiqueta de destino.



Ejemplo: Cómo usar una prueba -IF compuesta

En el siguiente ejemplo, si el valor de &OPTION no es R ni tampoco S, el procedimiento finaliza (-GOTO QUIT). -QUIT sirve como etiqueta de destino para GOTO y como comando ejecutable. Suponga que el informe ha sido abierto por un formulario HTML que emplea una variable de entrada de texto llamada &OPTION, para indicar al usuario que proporcione el procedimiento que quiere ejecutar.

-IF &OPTION EQ 'R' THEN GOTO PRODRETURNS ELSE IF
- &OPTION EQ 'S' THEN GOTO PRODSALES ELSE
- GOTO QUIT;
-PRODRETURNS
TABLE FILE SALES
PRINT PROD_CODE UNIT_CODE
BY STORE_CODE
END
-EXIT
-PRODSALES
TABLE FILE SALES
SUM UNIT_SOLD
BY PROD_CODE
END
-QUIT

Principio de página

x
Cómo usar un procedimiento en bucle

Cómo:

Puede realizar una función repetidamente utilizando un bucle en el procedimiento con el comando -REPEAT. El bucle puede utilizarse con muchas tareas diferentes. Por ejemplo, puede nombrar y cambiar el nombre de los archivos insertando llamadas del sistema operativo en un bucle de Dialogue Manager. También sirve para rellenar variables indexadas o utilizar la salida de una solicitud en otra solicitud.

Puede ejecutar un bucle de procesos un número determinado de veces o hasta que se cumpla una condición. El bucle finaliza cuando ocurre lo siguiente:

Además, puede limitar la repetición de un bucle incrementando una variable con el comando -SET.



x
Sintaxis: Cómo Especificar un bucle
-REPEAT label n TIMES

o

-REPEAT label WHILE condition;

o

-REPEAT label FOR &variable [FROM fromval] [TO toval] [STEP s]

donde:

label

Identifica el código que se va a repetir (el bucle). Si el nombre de las etiquetas del primer y segundo bucle no es el mismo, puede incluir otro bucle.

n TIMES

Especifica el número de veces en que se va a repetir el bucle. El valor de n puede tratarse de una variable local o global, o de una constante. Si es una variable, sólo se evalúa una vez; no puede cambiar el número de veces en que se va a ejecutar el bucle. Para finalizar el bucle antes de tiempo, emplee -QUIT o -EXIT.

WHILE condition

Especifica la condición de ejecución del bucle. La condición puede ser cualquier expresión lógica verdadera o falsa. El bucle se ejecuta cuando es verdadera.

&variable

Es una variable que se prueba al principio de cada ejecución del bucle. Se compara con el valor de fromval y de toval, si se han proporcionado. El bucle se ejecuta sólo cuando &variable es inferior o igual a toval y s es positivo, o superior o igual a toval y s es negativo.

fromval

Es el valor mínimo de &variable para ejecutar un bucle. 1 es el valor predeterminado.

toval

Es el valor máximo de &variable para ejecutar un bucle. 1,000,000 es el valor predeterminado.

STEP s

Incrementa el valor de &variable mediante una constante, s. Puede ser positivo o negativo. El incremento por defecto es de 1.

Nota: Los parámetros FROM, TO y STEP pueden aparecer en cualquier orden.



Ejemplo: Cómo repetir un bucle

Estos ejemplos explican cada elemento sintáctico de -REPEAT.

-REPEAT label n TIMES

Por ejemplo:

-REPEAT LAB1 2 TIMES
-TYPE INSIDE
-LAB1 TYPE OUTSIDE

La salida es:

INSIDE
INSIDE
OUTSIDE
-REPEAT label WHILE condition

Por ejemplo:

-SET &A = 1;
-REPEAT LABEL WHILE &A LE 2;
-TYPE &A
-SET &A = &A + 1;
-LABEL TYPE END: &A

La salida es:

1
2
END: 3
-REPEAT label FOR &variable FROM fromval TO toval STEP s

Por ejemplo:

-REPEAT LABEL FOR &A STEP 2 TO 4
-TYPE INSIDE &A
-LABEL TYPE OUTSIDE &A

La salida es:

INSIDE 1
INSIDE 3
OUTSIDE 5


Ejemplo: Cómo controlar los bucles

El siguiente ejemplo muestra el uso de -SET para controlar un bucle:

1. -DEFAULT &N=0 
2. -START 
3. -SET &N=&N+1; 
4.   EX SLRPT
   -RUN 
5. -IF &N GT 5 GOTO NOMORE; 
6. -GOTO START 
5. -NOMORE TYPE EXCEEDING REPETITION LIMIT
   -EXIT

El procedimiento se ejecuta del modo siguiente:

  1. El comando -DEFAULT asigna a &N un valor inicial de 0.
  2. -START inicia el bucle. También se trata del destino de un -GOTO no condicional.
  3. El comando -SET incrementa en una unidad el valor de &N cada vez que se ejecuta el bucle.
  4. El comando EX SLRPT de FOCUS está apilado. A continuación, -RUN ejecuta el comando apilado.
  5. El comando -IF prueba el valor actual de la variable &N. Si el valor es superior a 5, el control pasa a la etiqueta -NOMORE, que muestra un mensaje dirigido al usuario final y fuerza el cierre. Si el valor es inferior o igual a 5, el control pasa al próximo comando de Dialogue Manager.
  6. -GOTO pasa el control a la etiqueta -START y el bucle continúa.

Principio de página

x
Cómo llamar a otro procedimiento con -INCLUDE

Cómo:

Referencia:

Puede incluir un procedimiento perteneciente a otro con el comando -INCLUDE, capaz de incorporar todo o parte del procedimiento. El procedimiento parcial puede estar compuesto por un texto de encabezado o un código que debe incluirse a la hora de ejecutarse, de acorde a una prueba en el procedimiento que está efectuando la llamada. Cuando aparece, se ejecuta inmediatamente.

No se puede bifurcar el procedimiento que está efectuando la llamada en una etiqueta perteneciente a un procedimiento invocado, ni viceversa. Cuando un procedimiento ha sido incluido con el comando -INCLUDE, el procedimiento incluido (invocado) dispone de un acceso completo a las variables definidas en el procedimiento que está efectuando la llamada.

Los procedimientos llamados con el comando -INCLUDE deben encontrarse en la ruta de búsqueda del Servidor de informes WebFOCUS. Para más información sobre la ruta de búsqueda, consulte Cómo almacenar y buscar archivos de aplicaciones.

En Developer Studio, el comando -INCLUDE puede insertarse con el componente Include. Para información acerca del componente Include, consulte Cómo llamar a un procedimiento desde el actual en el manual Cómo crear aplicaciones de informes con Developer Studio



x
Referencia: Usos de -INCLUDE

Puede emplear el comando -INCLUDE para lo siguiente:



x
Sintaxis: Cómo Llamar a otro procedimiento con -INCLUDE
-INCLUDE filename

donde:

filename

Es el nombre del procedimiento llamado:

  • En las plataformas UNIX y Windows, el procedimiento debe tener la extensión .fex.
  • En UNIX, filename debe especificar la ruta absoluta y el nombre del archivo del procedimiento llamado. Por ejemplo, F:\\ibi\apps\sales\headings.fex.
  • En z/OS, el archivo incluido debe residir en la librería EDAPRC.


Ejemplo: Cómo llamar a otro procedimiento con -INCLUDE

En el siguiente ejemplo, Dialogue Manager busca un procedimiento denominado DATERPT, como se especifica en el comando -INCLUDE.

-IF &OPTION EQ 'S' GOTO PRODSALES
-ELSE GOTO PRODRETURNS;
   .
   .
   .
-PRODRETURNS
-INCLUDE DATERPT
-RUN
   .
   .
   .

Suponga que DATERPT contiene el siguiente código, incorporado por Dialogue Manager al procedimiento original. En cuanto aparece -INCLUDE, Dialogue Manager sustituye la variable &PRODUCT por un valor. -RUN ejecuta la solicitud.

TABLE FILE SALES
PRINT PROD_CODE UNIT_SOLD
WHERE PROD_CODE = '&PRODUCT';
END


Ejemplo: Cómo llamar a un procedimiento con un encabezado

En el ejemplo siguiente se ha incorporado un encabezado, que se almacena como procedimiento:

TABLE FILE SALES
-INCLUDE SALEHEAD
SUM UNIT_SOLD AND RETURNS AND COMPUTE
   .
   .
   .

El archivo SALESHEAD contiene:

HEADING
"THE ABC CORPORATION"
"RETAIL SALES DIVISION"
"MONTHLY SALES REPORT"

Este encabezado queda incluido en la solicitud de informe.



Ejemplo: Cómo llamar a un procedimiento desde un campo virtual

En el ejemplo siguiente se ha incorporado un campo virtual desde un procedimiento:

-INCLUDE DEFRATIO
   TABLE FILE SALES
-INCLUDE SALEHEAD
   SUM UNIT_SOLD AND RETURNS AND RATIO
   BY CITY
   .
   .
   .

El archivo DEFRATIO crea un campo virtual:

DEFINE FILE SALES
RATIO/D5.2=(RETURNS/UNIT_SOLD);
END

Este campo virtual quedará incluido de forma dinámica antes de que se ejecute la solicitud de informe.



x
Sintaxis: Cómo Llamar a otro procedimiento en una aplicación distinta

Si el procedimiento (FOCEXEC) incluido en otro procedimiento está en una aplicación distinta, emita el comando:

-INCLUDE APPNAME/FOCEXEC

Principio de página

x
Cómo usar nombres completamente cualificados con el comando -Include

En esta sección:

Cómo:

El comando -INCLUDE de Dialogue Manager admite los nombres completamente cualificados y, por tanto, permite insertar en procedimientos los archivos situados fuera de la ruta de búsqueda estándar. Esta técnica reduce la cantidad de tiempo necesaria para buscar un procedimiento específico, lo que se traduce en una mejora de rendimiento.

Las rutas relativas no son compatibles con el comando -INCLUDE; emplee el nombre de archivo completamente cualificado, correspondiente a la plataforma. El límite para un nombre de archivo completamente cualificado, específico a una plataforma, está definido por el sistema operativo (siempre que no supere la longitud máxima de 32K para una línea FOCEXEC).

El nombre completamente cualificado sólo se aplica al comando -INCLUDE en que se ha especificado. Los otros comandos -INCLUDE no lo heredan.



x
Sintaxis: Cómo Usar un nombre de archivo completamente cualificado en UNIX
-INCLUDE /path/filename.ext

donde:

path

Es la ruta completamente cualificada del archivo que contiene el FOCEXEC.

filename

Es el nombre del archivo que contiene el FOCEXEC.

ext

Es la extensión del archivo que contiene el FOCEXEC.



x
Sintaxis: Cómo Usar un nombre de archivo completamente cualificado en Microsoft Windows
-INCLUDE drive:\path\filename.ext

donde:

drive

Es la unidad que contiene la ruta del FOCEXEC.

path

Es la ruta completamente cualificada del archivo que contiene el FOCEXEC.

filename

Es el nombre del archivo que contiene el FOCEXEC.

ext

Es la extensión del archivo que contiene el FOCEXEC.



Ejemplo: Cómo usar un nombre completamente cualificado en un comando -INCLUDE

Suponga que el FOCEXEC llamado HEADINGS contiene el siguiente texto de encabezado para la solicitud:

HEADING
"THIS IS THE INCLUDED HEADING FILE"
" "

Ejemplo en Microsoft Windows:

TABLE FILE EMPLOYEE
-INCLUDE c:\ibi\srv55\mydataarea\headings.fex
PRINT CURR_SAL BY LAST_NAME BY FIRST_NAME
WHERE DEPARTMENT EQ 'MIS'
END

Ejemplo en UNIX:

TABLE FILE EMPLOYEE
-INCLUDE /u2/prog/headings.data
PRINT CURR_SAL BY LAST_NAME BY FIRST_NAME
WHERE DEPARTMENT EQ 'MIS'
END

La salida es:



x
Cómo anidar procedimientos con -INCLUDE

Puede invocar un número ilimitado de procedimientos diferentes desde un solo procedimiento de llamada. Además, puede anidar los comandos -INCLUDE unos dentro de otros como se explica aquí. No existe un existe un límite para el número de comandos -INCLUDE que se pueden anidar.

Los archivos 1 a 4 se incorporan al procedimiento original. Los archivos incluidos se consideran como parte del procedimiento original.


Principio de página

x
Cómo llamar a otro procedimiento con EXEC

Cómo:

Puede llamar a un procedimiento desde otro procedimiento con el comando EXEC. El procedimiento llamado debe ser completamente ejecutable. Se comporta como un procedimiento completamente independiente, con su propio contenido. No puede usar ninguna variable local (&variables) definida por el procedimiento 'llamante' (a menos que haya sido pasada al procedimiento llamado en la línea de comandos). Sin embargo, el procedimiento ejecutado (llamado) puede utilizar cualquier variable global (&&variables) que haya sido definida en el procedimiento llamante.

Cuando aparece un componente EXEC, éste queda apilado y se ejecuta en el momento en que aparezca el comando de Dialogue Manager correspondiente. El procedimiento llamado debe ser completamente ejecutable.

Los procedimientos llamados con el comando -INCLUDE deben encontrarse en la ruta de búsqueda del Servidor de informes WebFOCUS. Para más información sobre la ruta de búsqueda, consulte Cómo almacenar y buscar archivos de aplicaciones.

En Developer Studio, puede instalar el comando EXEC con el componente Execute. Para más detalles sobre el componente Execute, consulte Cómo llamar a un procedimiento desde el actual en el manual Cómo crear aplicaciones de informes con Developer Studio



x
Sintaxis: Cómo Llamar a un procedimiento con el comando EXEC
EX[EC] procedure

donde:

procedure

Es el nombre del procedimiento.

Nota: Cuando EXEC se utiliza en Managed Reporting, es importante recordar que EX y EXEC son distintos. Las declaraciones EX, codificadas en un procedimiento, son procesadas por el Cliente WebFOCUS, que busca el procedimiento en el repositorio de Managed Reporting. Los procedimientos que aparezcan citados en una declaración EXEC, no son procesados por el Cliente WebFOCUS, sino por el Servidor de informes WebFOCUS. Esto explica que no se les busque en el repositorio de Managed Reporting.



Ejemplo: Llamar a un procedimiento con EXEC

En el siguiente ejemplo, un procedimiento llama a DATERPT:

-IF &OPTION EQ 'S' GOTO PRODSALES ELSE GOTO PRODRETURNS;
    .
    .
    .
-PRODRETURNS
    EX DATERPT
    .
    .
    .
-RUN

WebFOCUS