Cómo: Referencia: |
Los campos temporales creados con los comandos DEFINE y COMPUTE están ligados a un archivo máster específico y, en el caso de los valores calculados con el comando COMPUTE, a una solicitud específica. Sin embargo puede crear campos temporales que sean independientes de un archivo Máster o de una solicitud usando el comando DEFINE FUNCTION.
Una función DEFINE es un grupo nombrado de cálculos que utilizan cualquier número de valores de entrada y producen un valor de retorno. Al llamar una función DEFINE primero debe definir la función.
Una función DEFINE se puede llamar en la mayoría de las mismas situaciones que son válidas para funciones aportadas por Information Builders. Los tipos de datos se definen con cada argumento. Cuando sustituye valores de estos argumentos, el formato debe coincidir con el formato definido. Los argumentos alfanuméricos más cortos que el formato especificado se acomodan entre espacios en blanco, en tanto que los argumentos alfanuméricos se truncan.
Todos los cálculos dentro de la función se realizan con doble precisión. La conversión de datos sólo ocurre con signos de igualdad (=), en las asignaciones que definen campos temporales.
DEFINE FUNCTION name (argument1/format1,..., argumentn/formatn) [tempvariablea/formata [TITLE 'line1[,line2 ...'] [DESCRiption 'description'] = expressiona;] . . . [tempvariablex/formatx = expressionx;] name/format = [result_expression]; END
donde:
Es el nombre de la función, de hasta 64 caracteres. Este debe ser el último campo calculado en la función y se utiliza para devolver el valor de la función al procedimiento de llamada.
Son los nombres de los argumentos. Pueden ser cualquier campo, siempre que sean compatibles con las reglas de nomenclatura de campos WebFOCUS.
Son los formatos de los argumentos de las funciones.
Si el formato de un argumento es alfanumérico, el valor del argumento debe ser también alfanumérico. Los argumentos más cortos se rellenan a la derecha con espacios en blanco, y los más largos resultan truncados.
Si el formato de un argumento es numérico, el valor del argumento debe ser también numérico. Para evitar que ocurran resultados inesperados debe ser consistente al usar los tipos de datos.
Son campos temporales. Los campos temporales contienen valores intermediarios usados en la función. Puede definir la cantidad de campos temporales que necesite.
Son los formatos de los campos temporales.
Son las líneas del título común predeterminado que aparecen para el campo virtual, a menos que se anulen mediante una frase AS.
Es la descripción que se va asociar al campo virtual. La descripción aparece en las herramientas encargadas de examinar los archivos máster.
Son las expresiones que calculan el valor de los campos temporales. Las expresiones pueden usar parámetros, constantes y otros campos temporales definidos en la misma función.
Es el formato del valor que devuelve la función.
Es la expresión que calcula el valor obtenido por la función. Las expresiones pueden usar parámetros, constantes y campos temporales definidos en la misma función.
Todos los nombres definidos en la sección principal de la función son locales para la función. El último campo definido antes del comando END en la definición de función, debe tener el mismo nombre que la función y representa el valor de devolución para la función.
(FOC03665) Error loading external function '%1'
El siguiente ejemplo crea y llama a la función SUBTRACT. SUBTRACT realiza un cálculo con los argumentos VAL1 y VAL2.
DEFINE FUNCTION SUBTRACT (VAL1/D8, VAL2/D8) SUBTRACT/D8.2 = VAL1 - VAL2; END
TABLE FILE MOVIES PRINT TITLE LISTPR IN 35 WHOLESALEPR AND COMPUTE PROFIT/D8.2 = SUBTRACT(LISTPR,WHOLESALEPR); BY CATEGORY WHERE CATEGORY EQ 'MYSTERY' OR 'ACTION' END
La salida es:
CATEGORY | TITLE | LISTPR | WHOLESALEPR | PROFIT |
ACTION | JAWS | 19.95 | 10.99 | 8.96 |
ROBOCOP | 19.98 | 11.50 | 8.48 | |
TOTAL RECALL | 19.99 | 11.99 | 8.00 | |
TOP GUN | 14.95 | 9.99 | 4.96 | |
RAMBO III | 19.95 | 10.99 | 8.96 | |
MYSTERY | REAR WINDOW | 19.98 | 9.00 | 10.98 |
VERTIGO | 19.98 | 9.00 | 10.98 | |
FATAL ATTRACTION | 29.98 | 15.99 | 13.99 | |
NORTH BY NORTHWEST | 19.98 | 9.00 | 10.98 | |
DEAD RINGERS | 25.99 | 15.99 | 10.00 | |
MORNING AFTER, THE | 19.95 | 9.99 | 9.96 | |
PSYCHO | 19.98 | 9.00 | 10.98 | |
BIRDS, THE | 19.98 | 9.00 | 10.98 | |
SEA OF LOVE | 59.99 | 30.00 | 29.99 |
Emita el siguiente comando desde la consola de comandos:
? FUNCTION
Al emitir el comando
? FUNCTION
aparece información similar a ésta:
FUNCTIONS | CURRENTLY | ACTIVE | |
NAME | FORMAT | PARAMETER | FORMAT |
---------- | --------- | --------- | ------- |
SUBTRACT | D8.2 | VAL1 | D8 |
VAL2 | D8 |
Si emite el comando ? FUNCTION cuando no hay funciones definidas, aparece lo siguiente:
NO FUNCTIONS CURRENTLY IN EFFECT
DEFINE FUNCTION {name|*} CLEAR
donde:
WebFOCUS |