LOOKUP: Cómo recuperar un valor de un origen de datos de referencia cruzada

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:

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:


Principio de página

x
Sintaxis: Cómo Cómo recuperar un valor de un origen de datos de referencia cruzada
LOOKUP(field);

donde:

field

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.



Ejemplo: Cómo usar un valor en un segmento host para buscar en un origen de datos

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:

  1. La solicitud indica que introduzca el id. de empleado y la fecha del aumento de salario. Introduzca el id. de empleado 071382660 y la fecha 820101 (Enero 1, 1982).
  2. La solicitud localiza la copia que contiene el id. 071382660 y a continuación, la copia secundaria que presenta la fecha del aumento, 820101.
  3. Esta copia secundaria contiene el código de puesto A07. El comando ACTIVATE hace que este valor esté disponible para LOOKUP.
  4. LOOKUP localiza el código de puesto A07 en el segmento de referencia cruzada. Devuelve un 1 a la variable RTN y recupera la descripción de puesto correspondiente, SECRETARY.
  5. El comando TYPE presenta los valores:
    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


Ejemplo: Cómo usar la función LOOKUP con un comando VALIDATE

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.


Principio de página

x
Cómo usar la función LOOKUP ampliada

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.



x
Sintaxis: Cómo Usar la función LOOKUP ampliada
COMPUTE
LOOKUP(field action);

donde:

field

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í.

action

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