En esta sección: Cómo: |
Lenguajes disponibles: MODIFY
La función LOOKUP recupera un valor de datos de un origen de datos FOCUS de referencia cruzada, en una solicitud de MODIFY. Puede recuperar los datos de un origen de datos al que se hace referencia cruzada de forma estática, en un archivo máster o en un origen de datos unido dinámicamente a otro por el comando JOIN. LOOKUP recupera un valor, pero no activa el campo. LOOKUP es obligatorio ya que las solicitudes de MODIFY, a diferencia de las de TABLE, no pueden leer los orígenes de datos de referencia cruzada, libremente.
LOOKUP permite que las solicitudes empleen los datos recuperados en un cálculo o mensaje, aunque no le permiten modificar los orígenes de datos de referencia cruzada.
Para modificar más de un origen de datos en una solicitud, use el comando COMBINE o el recurso Maintain.
LOOKUP puede leer un segmento de referencia cruzada que se encuentre vinculado directamente con un segmento en el origen de datos de host (el segmento host). Esto significa que el segmento de referencia cruzada debe ser de tipo KU, KM, DKU o DKM (no KL o KLU) o incluir el campo de referencia cruzada especificado por el comando JOIN. Puesto que LOOKUP recupera un solo valor de referencia cruzada, se recomienda utilizarlo con segmentos de referencia cruzada únicos.
El segmento de referencia cruzada contiene dos campos utilizados por LOOKUP:
Por ejemplo, LOOKUP recupera todos los campos del segmento
RTN = LOOKUP(SEG.DATE_ATTEND);
Al usar LOOKUP, la solicitud de MODIFY lee un valor de transacción para el campo host. A continuación, examina el segmento de referencia cruzada en busca de una copia que contenga su valor en el campo de referencia cruzada:
LOOKUP(field);
donde:
Es el nombre del campo que se va a recuperar en el archivo de referencia cruzada. Si el nombre de campo también existe en el origen de datos de host, debe cualificarlo aquí. No incluya un espacio entre LOOKUP y el paréntesis izquierdo.
Nota: LOOKUP no utiliza un argumento output.
Puede usar un valor de campo en una copia de un segmento host, para buscar un segmento de referencia cruzada. Haga lo siguiente:
Esta solicitud muestra el id. de empleado, fecha de aumento salarial, nombre de empleado y puesto posterior a la aprobación del aumento:
La solicitud es:
MODIFY FILE EMPLOYEE
PROMPT EMP_ID DAT_INC
MATCH EMP_ID
ON NOMATCH REJECT
ON MATCH CONTINUE
MATCH DAT_INC
ON NOMATCH REJECT
ON MATCH ACTIVATE JOBCODE
ON MATCH COMPUTE
RTN = LOOKUP(JOB_DESC);
ON MATCH TYPE
"EMPLOYEE ID: <EMP_ID"
"DATE INCREASE: <DAT_INC"
"NAME: <D.FIRST_NAME <D.LAST_NAME"
"POSITION: <JOB_DESC"
DATA
Por ejemplo:
EMPLOYEE ID: 071382660 DATE INCREASE: 82/01/01 NAME: ALFRED STEVENS POSITION: SECRETARY
Los campos recuperados por LOOKUP no requieren el prefijo D. FOCUS trata los valores de campo como valores de transacción.
Además, puede que tenga que activar el campo host si está usando LOOKUP dentro de un comando NEXT. Esta solicitud muestra el último puesto ocupado por un empleado:
MODIFY FILE EMPLOYEE
PROMPT EMP_ID
MATCH EMP_ID
ON NOMATCH REJECT
ON MATCH CONTINUE
NEXT DAT_INC
ON NONEXT REJECT
ON NEXT ACTIVATE JOBCODE
ON NEXT COMPUTE
RTN = LOOKUP(JOB_DESC);
ON MATCH TYPE
"EMPLOYEE ID: <EMP_ID"
"DATE OF POSITION: <DAT_INC"
"NAME: <D.FIRST_NAME <D.LAST_NAME"
"POSITION: <JOB_DESC"
DATA
Cuando use LOOKUP, rechace las transacciones que contengan valores para los que no existe una copia correspondiente en el segmento de referencia cruzada. Para efectuar esto, coloque la función en un comando VALIDATE. Si la función no es capaz de localizar la copia en el segmento de referencia cruzada, el valor de la variable devuelta se establece en 0 y la solicitud rechaza la transacción.
La siguiente solicitud actualiza las horas de clase de un empleado (ED_HRS). Si el empleado se matriculó en o después de Enero 1, 1982, la solicitud aumenta el número de horas de clase en un 10%. Las fechas de matriculación están almacenadas en un segmento de referencia cruzada (campo DATE_ATTEND). El campo compartido es Id. de empleado.
Ésta es la solicitud:
MODIFY FILE EMPLOYEE
PROMPT EMP_ID ED_HRS
VALIDATE
TEST_DATE = LOOKUP(DATE_ENROLL);
COMPUTE
ED_HRS = IF DATE_ENROLL GE 820101 THEN ED_HRS * 1.1
ELSE ED_HRS;
MATCH EMP_ID
ON MATCH UPDATE ED_HRS
ON NOMATCH REJECT
DATA
Si no se puede encontrar un registro de empleado en el segmento de referencia cruzada, indica que el empleado nunca se ha matriculado. La transacción se rechaza como error.
Cómo: |
Si la función LOOKUP no puede localizar el valor de un campo host en el segmento de referencia cruzada, utilice la sintaxis para localizar el próximo valor más alto o más bajo del campo de referencia cruzada, en el segmento de referencia cruzada.
Para usar esta característica, cree el índice con el parámetro INDEX establecido en NEW (esquema de árbol binario). Para determinar el tipo de índice utilizado por un origen de datos, introduzca el comando FDT.
COMPUTE
LOOKUP(field action);
donde:
Es el nombre del campo en el origen de datos de referencia cruzada, utilizado en un cálculo de MODIFY. Si el nombre de campo también existe en el origen de datos de host, debe cualificarlo aquí.
Especifica la acción realizada por la solicitud. Los valores válidos son:
EQ hace que LOOKUP no realice ninguna acción si no se ha encontrado una coincidencia exacta. Si se ha encontrado una coincidencia, el valor de rcode se establece en 1; de lo contrario, en 0. Esta es la opción predeterminada.
GE hace que LOOKUP localice la copia con el próximo valor más alto del campo de referencia cruzada. El valor de rcode se establece en 2.
LE hace que LOOKUP localice la copia con el próximo valor más bajo del campo de referencia cruzada. El valor de rcode se establece en -2.
No incluya un espacio entre LOOKUP y el paréntesis izquierdo.
La siguiente tabla muestra el valor de rcode, dependiendo de la copia localizada por LOOKUP:
Valor | Acción |
---|---|
1 | Se ha localizado el valor de referencia cruzada exacto. |
2 | Se ha localizado el próximo valor más alto de referencia cruzada. |
-2 | Se ha localizado el próximo valor más bajo de referencia cruzada. |
0 | No se ha localizado el valor de referencia cruzada. |
WebFOCUS |