ID Resolver le permite utilizar un archivo de propiedades Java alternativo para describir qué columnas de una entrada primaria deben utilizarse como búsquedas para tablas que requieren el identificador de una fila primaria.
El archivo de propiedades por omisión es IdResolveKeys.properties pero, si lo desea, puede modificarlo o especificar su propio archivo cuando invoque el mandato ID Resolve.
![]()
![]()
![]()
![]()
IdResolveKeys.properties está en el directorio desde el que se invoca ID Resolver.
Para cambiar IdResolveKeys.properties, cópielo desde el directorio /QIBM/ProdData/WebCommerce/properties, guárdelo en el directorio /raízinst/xml y luego efectúe los cambios que sean necesarios en el archivo nuevo.
Nota: El directorio anterior está en la vía de acceso de clases utilizada por el mandato RESWCSID.
Utilización de un archivo de propiedades para generar identificadores
En el ejemplo siguiente, tiene que resolver los identificadores ADDRBOOK_ID y ADDRESS_ID para los registros ADDRBOOK y ADDRESS, respectivamente. Los identificadores para los registros MEMBER ya se conocen. Cada registro requiere un identificador válido para la base de datos WebSphere Commerce. Además, el ADDRBOOK_ID del registro ADDRESS requiere que el identificador de la tabla primaria cumpla su restricción de clave externa.
<MEMBER MEMBER_ID="100" TYPE="U" STATE="1" /> <MEMBER MEMBER_ID="101" TYPE="U" STATE="1" /> <ADDRBOOK MEMBER_ID="100" DISPLAYNAME="Amigos" Valor real de la columna DISPLAYNAME DESCRIPTION="Todos mis amigos" TYPE="P" /> <ADDRESS ADDRBOOK_ID="@Amigos" Hace referencia a ADDRBOOK utilizando el valor de DISPLAYNAME como búsqueda MEMBER_ID="101" NICKNAME="Bob" ADDRESS1="15 Brave Developers St." CITY="Toronto" ZIPCODE="A0A0A0" COUNTRY="Canadá" STATUS="P" />
Necesita un archivo de propiedades para identificar qué columnas de la fila primaria serán utilizadas por las filas de relación para determinar el identificador de la columna de claves externas. El procedimiento siguiente asegura que el análisis del archivo anterior se realiza correctamente.
En IdResolveKeys.properties, especifique lo siguiente:
NAMEDELIMITER=@ SELECTDELIMITER=: ADDRBOOK=@DISPLAYNAME:DISPLAYNAME ADDRESS=@NICKNAME:NICKNAME
NAMEDELIMITER y SELECTDELIMITER establecen los delimitadores utilizados en el archivo de propiedades y deben utilizarse de manera coherente.
ADDRBOOK=@DISPLAYNAME:DISPLAYNAME indica que cuando se recibe un registro de listín, se crea el identificador de la fila de listín. El campo DISPLAYNAME se extrae del registro de entrada y se utiliza para formar una asociación con el nuevo identificador. La serie DISPLAYNAME se utiliza para compararla con la fila de listín DISPLAYNAME y resolver el identificador que la clave externa necesita.
Utilizando el ejemplo de entrada anterior, en el que DISPLAYNAME es Amigos, suponga que el identificador creado para este registro es 12951. DISPLAYNAME se utiliza como una consulta anexa de clave para 12951. El proceso continúa con el registro siguiente, ADDRESS, donde ADDRBOOK_ID tiene el formato "@..." (que indica que lo que va a continuación del delimitador se ha de utilizar para buscar el identificador de listín). Como la serie coincide con DISPLAYNAME, se devuelve 12951 y se coloca en el atributo ADDRBOOK_ID.
<MEMBER MEMBER_ID="100" TYPE="U" STATE="1" /> <MEMBER MEMBER_ID="101" TYPE="U" STATE="1" /> <ADDRBOOK ADDRBOOK_ID="12951" Clave primaria generada MEMBER_ID="100" DISPLAYNAME="Amigos" Valor no modificado de ADDRBOOK DISPLAYNAME DESCRIPTION="Todos mis amigos" TYPE="P" /> <ADDRESS ADDRESS_ID="13051" Clave primaria generada ADDRBOOK_ID="12951" ADDRESS hace referencia al ADDRBOOK correcto MEMBER_ID="101" NICKNAME="Bob" ADDRESS1="15 Brave Developers St." CITY="Toronto" ZIPCODE="A0A0A0" COUNTRY="Canadá" STATUS="P" />
Utilización de un archivo de propiedades con claves compuestas
Una clave integrada por más de dos columnas es una clave compuesta. Puede definir una búsqueda de claves compuestas en el archivo de propiedades especificando NAMEDELIMITER y SELECTDELIMITER seguidos de los nombres de campo. Por ejemplo, para que los criterios de búsqueda de los registros de ADDRBOOK se compongan del nombre de visualización (DISPLAYNAME) y el ID de miembro (MEMBERID), si especificase lo siguiente en el archivo de propiedades:
ADDRBOOK=@DISPLAYNAME@MEMBER_ID:DISPLAYNAME MEMBER_ID
y luego el siguiente fragmento de archivo XML de entrada:
<ADDRBOOK MEMBER_ID="100" DISPLAYNAME="Amigos" ADDRBOOK "Amigos" de MEMBER 100 DESCRIPTION="Todos mis amigos" TYPE="P" /> <ADDRBOOK MEMBER_ID="101" DISPLAYNAME="Amigos" ADDRBOOK "Amigos" de MEMBER 101 DESCRIPTION="Todos mis amigos" TYPE="P" /> <ADDRESS ADDRBOOK_ID="@Amigos@100" Buscar la clave primaria para ADDRBOOK "Amigos" de MEMBER 100 MEMBER_ID="101" NICKNAME="Bob" ADDRESS1="15 Brave Developers St." CITY="Toronto" ZIPCODE="A0A0A0" COUNTRY="Canadá" STATUS="P" />
daría como resultado lo siguiente después de la resolución:
<MEMBER MEMBER_ID="100" TYPE="U" STATE="1" /> <MEMBER MEMBER_ID="101" TYPE="U" STATE="1" /> <ADDRBOOK ADDRBOOK_ID="12951" ADDRBOOK de interés MEMBER_ID="100" DISPLAYNAME="Amigos" DESCRIPTION="Todos mis amigos" TYPE="P" /> <ADDRBOOK ADDRBOOK_ID="12952" MEMBER_ID="101" DISPLAYNAME="Amigos" DESCRIPTION="Todos mis amigos" TYPE="P" /> <ADDRESS ADDRESS_ID="13051" ADDRBOOK_ID="12951" ADDRESS hace referencia al ADDRBOOK correcto MEMBER_ID="101" NICKNAME="Bob" ADDRESS1="15 Brave Developers St." CITY="Toronto" ZIPCODE="A0A0A0" COUNTRY="Canadá" STATUS="P" />
Utilización de un archivo de propiedades con claves primarias en cascada
La tabla primaria STOREENT define una clave primaria STOREENT_ID. STORE, una tabla externa que hace referencia a STOREENT, define una clave primaria STORE_ID, que es una clave externa para la tabla primaria STOREENT. Esto significa que el valor de STORE_ID debe ser uno de los valores de STOREENT_ID. Por lo tanto, STORE_ID, la clave primaria de la tabla externa STORE, tiene un doble rol: clave primaria y clave externa.
Supongamos que otra tabla, CONTRACT, es una tabla externa en STORE y que la clave externa para CONTRACT, STORE_ID, hace referencia a la clave primaria STORE_ID de STORE. Por lo tanto, la tabla STORE es una tabla primaria para la tabla CONTRACT.
Dado que en STOREENT_ID se hace referencia al STORE_ID de la tabla STORE y no desde donde se ha creado, ID Resolver no crea una asociación de alias interno y valor de ID para la tabla STORE. Cuando la tabla CONTRACT intenta resolver el STORE_ID de la tabla STORE, recibe un valor vacío.
Debido a esta condición especial, deberá especificar explícitamente la creación del alias interno creando una entrada en el archivo de propiedades. En IdResolveKeys.properties, especifique lo siguiente:
"STORE=@STORE_ID:STORE_ID"
Esto obliga a ID Resolver a realizar lo siguiente:
Utilizando la entrada STORE=@STORE_ID:STORE_ID en el archivo de propiedades y el fragmento de archivo de entrada XML siguiente:
<STOREENT IDENTIFIER="Última moda" MEMBER_ID="-2000" STOREENT_ID="@id_storeent_1" TYPE="G" /> <STORE STORE_ID="@id_storeent_1" STOREGRP_ID="1" STORELEVEL="nivel_tienda" /> <CONTRACT CONTRACT_ID="@id_contrato_1" STATE="0" STORE_ID="@id_storeent_1" />
daría como resultado lo siguiente después de la resolución:
<STOREENT IDENTIFIER="Última moda" MEMBER_ID="-2000" STOREENT_ID="10501" TYPE="G" /> <STORE STORE_ID="10501" STOREGRP_ID="1" STORELEVEL="nivel_tienda" /> <CONTRACT CONTRACT_ID="@id_contrato_1" STATE="0" STORE_ID="10501" />
![]() |