En esta sección: |
Puede navegar por los procedimientos de las siguientes formas:
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.
-GOTO label . . . -label [TYPE text]
donde:
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.
Envía un mensaje a una aplicación cliente.
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
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.
-IF expression [THEN] {GOTO label1|CONTINUE} [ELSE IF...;] [ELSE {GOTO label2|CONTINUE}];
donde:
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.
Es un comando opcional que mejora la legibilidad del comando.
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.
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.
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.
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.
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.
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
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:
Si el valor de &PROC fuese EMPLOYEE, el control pasaría a -EMPLOYEE.
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.
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.
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.
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
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:
Nota: Si emite otro -GOTO más adelante en el proceso para volver al bucle, éste continúa por donde lo dejó.
Además, puede limitar la repetición de un bucle incrementando una variable con el comando -SET.
-REPEAT label n TIMES
o
-REPEAT label WHILE condition;
o
-REPEAT label FOR &variable [FROM fromval] [TO toval] [STEP s]
donde:
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.
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.
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.
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.
Es el valor mínimo de &variable para ejecutar un bucle. 1 es el valor predeterminado.
Es el valor máximo de &variable para ejecutar un bucle. 1,000,000 es el valor predeterminado.
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.
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
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:
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
Puede emplear el comando -INCLUDE para lo siguiente:
-INCLUDE filename
donde:
Es el nombre del procedimiento llamado:
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
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.
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.
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.
-INCLUDE /path/filename.ext
donde:
Es la ruta completamente cualificada del archivo que contiene el FOCEXEC.
Es el nombre del archivo que contiene el FOCEXEC.
Es la extensión del archivo que contiene el FOCEXEC.
-INCLUDE drive:\path\filename.ext
donde:
Es la unidad que contiene la ruta del FOCEXEC.
Es la ruta completamente cualificada del archivo que contiene el FOCEXEC.
Es el nombre del archivo que contiene el FOCEXEC.
Es la extensión del archivo que contiene el FOCEXEC.
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:
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.
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
EX[EC] procedure
donde:
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.
En el siguiente ejemplo, un procedimiento llama a DATERPT:
-IF &OPTION EQ 'S' GOTO PRODSALES ELSE GOTO PRODRETURNS; . . . -PRODRETURNS EX DATERPT . . . -RUN
WebFOCUS |