En esta sección:
Cómo: Referencia: |
DEFINE es un atributo opcional, usado para crear campos virtuales para los informes. Puede derivar el valor del campo virtual a partir de la información que ya se encuentra en el origen de datos (es decir, de los campos permanentes). Algunos de los usos más frecuentes de los campos de datos virtuales incluyen:
Los campos virtuales están disponibles siempre que el origen de datos se use para crear informes.
DEFINE fieldname/format [REDEFINES field2] = expression; [, attribute2, ... ] $
donde:
Es el nombre del campo virtual. Puede asignar cualquier nombre, con un máximo de 66 caracteres. El nombre está sujeto a las mismas convenciones que los nombres asignados mediante el atributo FIELDNAME. FIELDNAME aparece descrito en El nombre del campo: FIELDNAME.
Es el formato de campo. Está especificado del mismo modo que los formatos asignados mediante el atributo USAGE, descrito en El tipo de datos mostrado: USAGE. Si no especifica un formato, se emplea el predeterminado, D12.2.
Le permite redefinir o recalcular un campo cuyo nombre existe en más de un segmento.
Es una expresión válida. Las expresiones aparecen descritas detalladamente en el manual Cómo crear informes con el lenguaje WebFOCUS . La expresión debe terminar en punto y coma (;).
Tenga en cuenta que, cuando se utiliza una frasae IF-THEN en la expresión de un campo virtual, debe incluir la frase ELSE.
La declaración de un campo virtual puede incluir atributos opcionales, adicionales, como TITLE o DESCRIPTION.
Coloque cada atributo DEFINE después de todas las descripciones de campo de ese segmento.
El ejemplo siguiente indica cómo definir un campo llamado PROFIT, en el segmento CARS:
SEGMENT = CARS ,SEGTYPE = S1 ,PARENT = CARREC, $ FIELDNAME = DEALER_COST ,ALIAS = DCOST ,USAGE = D7, $ FIELDNAME = RETAIL_COST ,ALIAS = RCOST ,USAGE = D7, $ DEFINE PROFIT/D7 = RETAIL_COST - DEALER_COST; $
Tenga en cuenta estas reglas al usar DEFINE:
Un atributo DEFINE no puede contener nombres de campo cualificados en el lado izquierdo de la expresión. Use la frase WITH del lado izquierdo, para colocar el campo definido en el mismo segmento que cualquier otro campo real que escoja. Esto determinará el momento en que se va a evaluar la expresión DEFINE.
Las expresiones del lado derecho del DEFINE pueden hacer referencia a cualquier segmento en la misma ruta. La expresión del lado derecho de la declaración DEFINE de un archivo máster, puede contener nombres de campos cualificados.
El atributo DEFINE de un archivo máster solo puede hacer referencia a los campos situados en su propia ruta. Si desea crear un campo virtual, que derive su valor a partir de los campos en varias rutas diferentes, debe crearlo con un comando DEFINE FILE, utilizando una vista alternativa anterior a la solicitud de informe, como se indica en el manual Cómo crear informes con el lenguaje WebFOCUS . El comando DEFINE FILE también resulta útil a la hora de crear un campo virtual que solo vaya a utilizarse una vez, y no desee añadir una declaración para el mismo, en el archivo máster.
Los campos virtuales definidos en el archivo máster están disponibles siempre que se usa el origen de datos, y son tratados como cualquier otro campo almacenado. Por tanto, no puede eliminar un campo de su solicitud de informe, que haya sido definido en el archivo máster.
Los campos virtuales no pueden usarse para referencias cruzadas en un join. Sin embargo, sí puede utilizarse como campo host de un join.
Nota: Maintain no admite los atributos DEFINE con un valor constante. Si emplea un campo de este tipo en un procedimiento Maintain, se genera el mensaje siguiente:
(FOC03605) name is not recognized.
Referencia: |
Los campos DEFINE de archivo máster pueden usar las variables de fecha de sistema de Dialogue Manager, para capturar la fecha del sistema, cada vez que se analice el archivo máster para su uso en una solicitud.
El formato del valor devuelto por cada variable de fecha, es el valor indicado en el nombre de la variable. Por ejemplo, &DATEYYMD devuelve un valor de fecha en formato YYMD. Las excepciones son &DATE y &TOD, que devuelven valores alfanuméricos y deben volver a asignarse al campo con un formato alfanumérico. Los nombres de las variables &DATE y &TOD también deben estar entre comillas simples, en la expresión DEFINE.
Las variables admitidas en DEFINEs de archivo máster son:
Tenga en cuenta que el resto de las variables ampersand reservadas, no se admite en archivos máster.
La siguiente versión del archivo máster EMPLOYEE cuenta con un campo DEFINE, llamado TDATE, añadido a ella. TDATE tiene un formato de A12 y recupera el valor de &DATE, que devuelve un valor alfanumérico y debe estar entre comillas simples:
FILENAME=EMPLOYEE, SUFFIX=FOC SEGNAME=EMPINFO, SEGTYPE=S1 FIELDNAME=EMP_ID, ALIAS=EID, FORMAT=A9, $ FIELDNAME=LAST_NAME, ALIAS=LN, FORMAT=A15, $ FIELDNAME=FIRST_NAME, ALIAS=FN, FORMAT=A10, $ FIELDNAME=HIRE_DATE, ALIAS=HDT, FORMAT=I6YMD, $ FIELDNAME=DEPARTMENT, ALIAS=DPT, FORMAT=A10, $ FIELDNAME=CURR_SAL, ALIAS=CSAL, FORMAT=D12.2M, $ FIELDNAME=CURR_JOBCODE, ALIAS=CJC, FORMAT=A3, $ FIELDNAME=ED_HRS, ALIAS=OJT, FORMAT=F6.2, $ DEFINE TDATE/A12 ='&DATE';, $ . . .
La siguiente solicitud muestra el valor de TDATE:
TABLE FILE EMPLOYEE PRINT LAST_NAME FIRST_NAME HIRE_DATE TDATE AS 'TODAY''S,DATE' WHERE LAST_NAME EQ 'BANNING' END
La salida es:
La siguiente versión del archivo máster EMPLOYEE cuenta con un campo DEFINE, llamado TDATE, añadido a ella. TDATE tiene un formato YYMD y recupera el valor de &YYMD:
FILENAME=EMPLOYEE, SUFFIX=FOC SEGNAME=EMPINFO, SEGTYPE=S1 FIELDNAME=EMP_ID, ALIAS=EID, FORMAT=A9, $ FIELDNAME=LAST_NAME, ALIAS=LN, FORMAT=A15, $ FIELDNAME=FIRST_NAME, ALIAS=FN, FORMAT=A10, $ FIELDNAME=HIRE_DATE, ALIAS=HDT, FORMAT=I6YMD, $ FIELDNAME=DEPARTMENT, ALIAS=DPT, FORMAT=A10, $ FIELDNAME=CURR_SAL, ALIAS=CSAL, FORMAT=D12.2M, $ FIELDNAME=CURR_JOBCODE, ALIAS=CJC, FORMAT=A3, $ FIELDNAME=ED_HRS, ALIAS=OJT, FORMAT=F6.2, $ DEFINE TDATE/YYMD = &YYMD ;, $ . . .
La siguiente solicitud muestra el valor de TDATE:
TABLE FILE EMPLOYEE PRINT LAST_NAME FIRST_NAME HIRE_DATE TDATE AS 'TODAY''S,DATE' WHERE LAST_NAME EQ 'BANNING' END
La salida es:
WebFOCUS |