Códigos del archivo de plantilla de consulta

El archivo de plantilla de consulta utiliza los siguientes códigos.

$CTX:KEY$ - Etiquetas de contexto de negocio

El contexto de negocio proporciona módulos de servicio con información común a través de varias transacciones. Varios contextos pueden gobernar las transacciones. Por ejemplo, el contexto de autorización puede especificar qué usuarios pueden ver determinados productos o están autorizados a beneficiarse de precios especiales. El contexto de globalización influye en el idioma y la moneda de la información visualizada basándose en el entorno nacional del usuario.

La capa de servicios de datos ayuda a extraer de la base de datos información sensible al contexto permitiendo que el desarrollador especifique una etiqueta especial, $CTX:KEYKEY$, en la plantilla SQL. Durante la ejecución, la etiqueta se sustituye por el valor de la propiedad de contexto, como, por ejemplo, el ID de idioma o el ID de tienda, que corresponda a la 'KEY'. El nombre de la propiedad de contexto debe corresponder con el método getter correspondiente en el contexto. Por ejemplo, para obtener el valor de BaseContext.getRunAsId(), el nombre de la propiedad debe ser runAsId.

Cada módulo de servicio define claves de contexto y la correlación con la propiedad de contexto, en su archivo wc-component.xml a fin de utilizar el código CTX:KEY en las plantillas de consulta.

La información de contexto se utiliza también al generar fragmentos de SQL para consultar tablas que almacenen atributos, si dichas tablas contienen información sensible al contexto. Se agregan más predicados a la cláusula 'where'. Contienen las columnas que hacen referencia a la información de contexto y que se han definido mediante la configuración de correlaciones de atributo en el archivo de configuración de componentes.

El valor de la propiedad de contexto puede ser de tipo numérico o de tipo serie. El código $CTX:KEY$ debe ha de estar entre comillas simples en la plantilla SQL para propiedades de contexto basadas en series de caracteres.

Si la propiedad del contexto tiene varios valores, la condición de contexto de la plantilla de SQL utiliza el predicado 'IN' en vez de un operador '='. En ese caso, la etiqueta $CTX:KEY$ se sustituye por los valores separados por comas listados entre paréntesis. Para fragmentos de SQL generados, se genera el predicado 'IN'.

La siguiente plantilla de sentencia SQL consulta todos los grupos de categorías y ejecuta sus descripciones en el idioma definido en el contexto en el tiempo de ejecución. El código de contexto con la clave LANG_ID se sustituye por el valor del ID de idioma.

Plantilla SQL:
SELECT 
CATENTRY.$COLS:CATENTRY$,
CATENTDESC.$COLS:CATENTDESC$
FROM
CATENTRY
LEFT OUTER JOIN CATENTDESC ON 
(CATENTDESC.CATENTRY_ID = CATENTRY.CATENTRY_ID AND 
CATENTDESC.LANGUAGE_ID = ($CTX:LANG_ID$)) 
Sentencia SQL tras la sustitución:
SELECT 
CATENTRY.CATENTRY_ID,
CATENTRY.PARTNUMBER,
CATENTDESC.CATENTRY_ID,
CATENTDESC.SHORTDESCRIPTION
FROM
CATENTRY
LEFT OUTER JOIN CATENTDESC ON 
(CATENTDESC.CATENTRY_ID = CATENTRY.CATENTRY_ID AND 
CATENTDESC.LANGUAGE_ID = (-1)) 
Abajo puede ver una lista de correlaciones entre las claves y las propiedades de contexto para el módulo de servicio Catalog (tomada de wc-component.xml):
<_config:context key="LANG_ID" name="com.ibm.commerce.context.globalization.GlobalizationContext" propertyName="languageId" defaultValue="-1"/>
<_config:context key="CATALOG_ID" name="com.ibm.commerce.catalog.businesscontext.CatalogContext" propertyName="catalogID" defaultValue="-1"/>
<_config:context key="OWNER_ID" name="com.ibm.commerce.catalog.businesscontext.CatalogContext" propertyName="ownerID" defaultValue="-1"/>
<_config:context key="STORE_ID" name="com.ibm.commerce.context.base.BaseContext" propertyName="storeId" defaultValue="-1"/>
Abajo puede ver una lista de correlaciones entre las claves y las propiedades de contexto para el módulo de servicio Marketing (tomada de wc-component.xml):
<_config:context key="STORE_ID" name="com.ibm.commerce.context.base.BaseContext" propertyName="storeId" defaultValue="0"/>
<_config:context key="LANG_ID" name="com.ibm.commerce.context.globalization.GlobalizationContext" propertyName="languageId" defaultValue="-1"/> 
Nota:
  1. El módulo de servicio de marketing no puede utilizar los códigos CATALOG_ID y OWNER_ID en sus consultas. Los códigos LANG_ID y STORE_ID los comparten los dos componentes.
  2. Cada propiedad debe tener un valor predeterminado. Dicho valor se utiliza en la consulta si no se ha establecido la propiedad de contexto.

$ATTR_TBLS$ y $ATTR_CNDS$ - Códigos de búsqueda paramétrica

Las etiquetas $ATTR_TBLS$ y $ATTR_CNDS$ se utilizan para la búsqueda paramétrica. Indican dónde debe insertarse una lista de tablas de atributos ($ATTR_TBLS$) y de condiciones de búsqueda de atributos ($ATTR_CNDS$) en una plantilla SQL.

La tabla de listas de atributos está formada por las tablas en las que están definidos los atributos de búsqueda de entrada. Las condiciones de búsqueda de atributos incluyen las condiciones de unión entre las tablas de atributos y la tabla base así como los predicados donde los valores de las columnas de atributos coinciden con los valores de los atributos de búsqueda de entrada.

Nota: El código $ATTR_TBLS$ debe especificarse después de las últimas tablas de la cláusula FROM. El código $ATTR_CNDS$ debe especificarse después de la última condición de búsqueda de la cláusula WHERE.

En el siguiente ejemplo, una expresión XPath de búsqueda paramétrica consulta productos que tengan una descripción corta con la serie de caracteres '˜Polo shirt' y números de pieza con el prefijo 'FU01'.

/CatalogEntry[search(contains(Description/ShortDescription, "Polo shirt") and starts-with(CatalogEntryIdentifier/ExternalIdentifier/PartNumber, "FU01"))]

La plantilla XPath a SQL con una función search() era como se indica a continuación antes de la generación del código de búsqueda:

BEGIN_XPATH_TO_SQL_STATEMENT
name=/CatalogEntry[search()]
base_table=CATENTRY
sql=
SELECT CATENTRY.$COLS:CATENTRY_ID$
FROM
CATENTRY, $ATTR_TBLS$
WHERE 
CATENTRY.MARKFORDELETE = 0 AND 
( $ATTR_CNDS$ ) 
ORDER BY
CATENTRY.CATENTRY_ID 
END_XPATH_TO_SQL_STATEMENT

En la siguiente sentencia SQL generada, la variable $ATTR_TBLS$ se sustituye por la tabla asociada que contiene la columna correspondiente a la propiedad ‘Description/ShortDescription'. La variable $ATTR_CNDS$ se sustituye por la condición de unión entre esta tabla y la tabla base y la condición para comparar la columna ‘SHORTDESCRIPTION’ (descripción breve) con el valor de descripción breve proporcionado como entrada. También se incluye la condición para la propiedad ‘CatalogEntryIdentifier/ExternalIdentifier’ que corresponde a la columna PARTNUMBER en la tabla base CATENTRY.

SELECT 
	CATENTRY.CATENTRY_ID
FROM
	CATENTRY, CATENTDESC IBM1
WHERE 
	CATENTRY.MARKFORDELETE = 0 AND CATENTRY.PARTNUMBER LIKE 'FU01%'
	AND (CATENTRY.CATENTRY_ID= IBM1.CATENTRY_ID AND 
	IBM1.SHORTDESCRIPTION LIKE '%Polo shirt%')
ORDER BY
	CATENTRY.CATENTRY_ID 

El código $ATTR_CNDS$ se sustituye por una condición de unión y condiciones de búsqueda. El nombre de la tabla base (o su nombre de correlación) concatenado con el separador '.' puede prefijar la etiqueta $ATTR_CNDS$. Este prefijo define el nombre de correlación que debe usarse cuando se hace referencia la columna de la clave primaria de la tabla base en la condición de unión. La segunda condición corresponde a la condición de búsqueda especificada en la petición XPath de entrada.

$ENTITY_PKS$

El código $ENTITY_PKS$ se utiliza con consultas de dos pasos, en las sentencias SQL asociadas. Indica dónde insertar los valores de clave primaria que devuelve la sentencia XPath a SQL.

La sentencia SQL de asociación y las sentencias Xpath a SQL funcionan juntas para obtener los datos de la tabla base y de las tablas relacionadas con ella. XPath SQL selecciona claves primarias de la tabla base. La sentencia SQL asociada selecciona datos de las tablas relacionadas con la tabla base a través de las relaciones de la clave foránea.

El comportamiento predeterminado es recuperar los valores de clave primaria e incluirlos en la sentencia SQL de asociación que sustituye el código $ENTITY_PKS$. No obstante, se puede configurar la generación de la consulta para formar una sola consulta introduciendo la sentencia Xpath a SQL en la sentencia SQL de asociación como subselección.

Esta configuración la controla el distintivo 'usePrimaryKeyValues' que se especifica en la sección entity de la definición de perfil de acceso. Si el distintivo se ha establecido en 'true', los valores de la clave primaria recuperados por la sentencia XPath a SQL se introducen en las sentencias SQL de asociación que sustituyen el código $ENTITY_PKS$. Esto se hace para todas las sentencias SQL de asociación a las que hace referencia ese perfil. Éste es el comportamiento predeterminado. Si el distintivo se establece en 'false', la subselección de la clave primaria se introduce en las sentencias SQL asociadas a las que hace referencia el perfil de acceso.

Nota: Si se utiliza la paginación, siempre se da por supuesto que el valor de 'usePrimaryKeyValues' es 'true'.

La plantilla Xpath a SQL que recupera las claves primarias de todos los registros CATENTRY especificando su grupo de catálogo padre se define tal como se muestra en el siguiente ejemplo:

SELECT CATENTRY.$COLS:CATENTRY_ID$
FROM CATENTRY INNER JOIN CECGREL ON CATENTRY.CATENTRY_ID = CECGREL.CATENTRY_ID
WHERE CATENTRY.MARKFORDELETE = 0 
	AND CECGREL.CATGROUP_ID = ?catGroupId? 
	AND CECGREL.USAGECODE = ?relationshipType?

La sentencia SQL asociada recupera descripciones de los registros CATENTRY especificados:

SELECT CATENTRY.$COLS:CATENTRY$, CEDESC.$COLS:CEDESC$
FROM CATENTRY, CEDESC
WHERE CATENTRY.CATENTRY_ID = CEDESC.CATENTRY_ID 
	AND CATENTRY.MARKFORDELETE = 0
	AND CEDESC.LANGUAGE_ID = $CTX:LANG_ID$ 
	AND CATENTRY.CATENTRY_ID IN ( $ENTITY_PKS$ )

Después de introducir la subselección de clave primaria (sentencia XPath a SQL) en la sentencia SQL asociada, la consulta resultante es como se indica a continuación:

SELECT CATENTRY.$COLS:CATENTRY$, CEDESC.$COLS:CEDESC$
FROM CATENTRY, CEDESC
WHERE CATENTRY.CATENTRY_ID = CEDESC.CATENTRY_ID 
	AND CATENTRY.MARKFORDELETE = 0 
	AND CEDESC.LANGUAGE_ID = $CTX:LANG_ID$
	AND CATENTRY.CATENTRY_ID IN 
		(SELECT CATENTRY.CATENTRY_ID 
			FROM CATENTRY INNER JOIN CECGREL ON CATENTRY.CATENTRY_ID = CECGREL.CATENTRY_ID
			WHERE CATENTRY.MARKFORDELETE = 0 
				AND CECGREL.CATGROUP_ID = ?catGroupId?
				AND CECGREL.USAGECODE = ?relationshipType?)

Si el distintivo se establece para utilizar la subselección, la subselección de la clave primaria se introduce en la sentencia SQL asociada. De lo contrario, se sustituye $ENTITY_PKS$ por los valores de clave primaria. El nombre del distintivo booleano es 'usePrimaryKeyValues'.

Si se establece en true, los valores de clave primaria recuperados por la sentencia XPath a SQL se introducirán en las sentencias SQL de asociación que sustituyen el código $ENTITY_PKS$. Esto se hace para todas las sentencias SQL de asociación a las que hace referencia ese perfil. Es el valor predeterminado.

Si se establece en false, la sentencia XPath a SQL se inserta como subselección en las sentencias SQL de asociación que sustituyen el código $ENTITY_PKS$.

Por ejemplo:
BEGIN_PROFILE
name=IBM_DefaultProfile

BEGIN_ENTITY 
base_table=CATENTRY 
usePrimaryKeyValues = false
associated_sql_statement=IBM_CatEntrySummary 
END_ENTITY

END_PROFILE 

$CONTROL:LANGUAGES$

Este código se utiliza para recuperar información sensible al idioma en varios idiomas. La lista de idiomas procederá del parámetro de control _wcs.dataLanguageIds de la petición. El valor del parámetro es una lista de identificadores de idiomas que se introducen en la plantilla de la consulta para sustituir el código $CONTROL:LANGUAGES$. Si _wcs.dataLanguageIds no se pasa cuando se solicita, el valor de ID de idioma se obtiene del contexto de globalización.

Por ejemplo, en una expresión XPath se podría utilizar tal como puede verse en el siguiente ejemplo:
{_wcf.ap=IBM_CEDescriptionProfile_LANGIDS;_wcf.dataLanguageIds='-1,-2'}/CatEntry[@catEntryId<200]
También se puede utilizar el código de idioma como se muestra en el siguiente ejemplo de bloque ASSOCIATED_SQL_STATEMENT:
BEGIN_ASSOCIATION_SQL_STATEMENT
       name= IBM_CEDescriptionProfile_LANGIDS
       base_table=CATENTRY
       sql=
              SELECT 
                            CATENTRY.$COLS:CATENTRY$,
                            CEDESC.$COLS:CEDESC$ 
              FROM
                            CATENTRY, CEDESC
              WHERE                            
                            CATENTRY.CATENTRY_ID = CEDESC.CATENTRY_ID AND
                            CEDESC.LANGUAGE_ID in ($CONTROL:LANGUAGES$)        AND
                            CATENTRY.CATENTRY_ID in ( $ENTITY_PKS$ )                            

END_ASSOCIATION_SQL_STATEMENT

$STOREPATH:STRELTYPE$

WebSphere Commerce soporta varios tipos de relaciones entre las tiendas de un sitio. Por ejemplo, una tienda puede utilizar el catálogo proporcionado por otra tienda.

La capa de servicios de datos ayuda a extraer información de relación de la tienda permitiendo que el usuario especifique una etiqueta especial, $STOREPATH:STRELTYPE$, en la plantilla SQL. Esta etiqueta se sustituye durante la ejecución por el valor del tipo de relación de la tienda, por ejemplo, catálogo, campañas, que correspondan al STRELTYPE. Se puede definir opcionalmente una correlación entre STRELTYPE y el nombre del tipo de relación de tienda en el archivo de configuración de componente. Si no se define esta correlación, el valor predeterminado de la serie de relación entre tiendas tendrá el prefijo "com.ibm.commerce".

Por ejemplo, si STRELTYPE es catalog, el valor predeterminado para el tipo de relación será "com.ibm.commerce.catalog'.Este valor coincide con el valor de la columna name en la tabla streltyp de la relación de tienda de catálogo.

Por lo tanto, si añade un nuevo tipo de relación de tienda, deberá definir el STRELTYPE en el archivo wc-component.xml para asegurar una correlación correcta entre STRELTYPE y el nombre del tipo de relación de la tienda:

<_config:store-relationship key="xxxxx" value="com.mycompany.commerce.xxxxx"/>

$CM:BASE$, $CM:WRITE$, $CM:READ$

La consulta de plantilla utiliza las variables de sustitución $CM:BASE$, $CM:WRITE$ y $CM:READ$ para representar los nombres de los esquemas BASE, WRITE y READ. Estas variables se sustituirán con los nombres de esquema reales en el momento de la ejecución de la consulta.

En el entorno de espacios de trabajo, puede que necesite definir consultas que hagan referencia explícitamente los esquemas BASE, WRITE y READ. Consulte Modelo de datos de espacios de trabajo y Técnicas para mejorar el rendimiento de las consultas SQL en espacios de trabajo de la capa de servicios de datos para obtener más información.