Traitement de requête par la couche service de données

La couche service de données utilise les différentes sections du fichier de modèle de requête afin de contrôler comment la requête est exécutée.

Les sections d'instructions XPath to SQL et d'instructions SQL d'association définissent chacune une liste d'instructions SQL du modèle. Chaque modèle SQL dispose d'un nom unique et d'un nom de table de base. La table de base fait référence à la table principale dans la requête, généralement la table représentant votre nom. Chaque modèle XPath to SQL, lorsqu'il est utilisé en conjonction avec les instructions SQL d'association dans une requête à deux étapes, renvoie une liste des clés primaires répondant aux critères de recherche (par exemple, sélection d'une liste d'ID de produits en fonction d'un nom de catégorie donné).

La section PROFILE définit les Profils d'accès utilisant des instructions SQL d'association. Au sein d'un profil, une ou plusieurs instructions SQL sont référencées pour chaque objet de base défini. Chaque instruction SQL d'association définit les données à renvoyer en fonction de la liste des clés primaires (provenant de l'instruction XPath to SQL). Par exemple, une instruction SQL d'association SQL sous un profil peut extraire toutes les propriétés et descriptions de produit en fonction d'une liste d'ID de produits, tandis qu'une autre instruction sous un profil différent extrait toutes les informations de vente croisée et de vente incitative, ainsi que les propriétés et descriptions de base.

La couche de service de données prend en charge deux types de requêtes : requêtes en une seule étape et requête en deux étapes.

Requêtes à une seule étape

Dans le cas de requêtes à une seule étape, le nom de profil d'accès de pair avec la clé XPath est utilisé pour sélectionner une requête XPath to SQL unique pour l'extraction de toutes les informations requises. Plusieurs requêtes peuvent extraire des niveaux de détail différents pour la même expression XPath et des profils d'accès distincts.

L'exemple suivant définit une requête à une seule étape pour la clé XPath /Catalog[CatalogIdentifier[(UniqueID=))] et le profil d'accès IBM_Admin_Details.
BEGIN_SYMBOL_DEFINITIONS
	COLS:CATALOG=CATALOG:*
	COLS:CATALOGDSC=CATALOGDSC:*	
COLS:STORECAT=STORECAT:*

END_SYMBOL_DEFINITIONS
			
BEGIN_XPATH_TO_SQL_STATEMENT
	name=/Catalog[CatalogIdentifier[(UniqueID=)]]+IBM_Admin_Details
	base_table=CATALOG
	sql=
		SELECT 
			CATALOG.$COLS:CATALOG$,
			CATALOGDSC.$COLS:CATALOGDSC$,
			STORECAT.$COLS:STORECAT$
		FROM
			CATALOG
				JOIN STORECAT ON STORECAT.CATALOG_ID=CATALOG.CATALOG_ID 
					AND STORECAT.STOREENT_ID IN ($STOREPATH:catalog$)
				LEFT OUTER JOIN CATALOGDSC ON CATALOGDSC.CATALOG_ID = 	CATALOG.CATALOG_ID 
					AND CATALOGDSC.LANGUAGE_ID IN ($CONTROL:LANGUAGES$)
     WHERE
        CATALOG.CATALOG_ID IN (?UniqueID?)

END_XPATH_TO_SQL_STATEMENT

Dans l'exemple précédent, l'expression XPath recherche les catalogues dotés des identificateurs uniques spécifiés et le profil d'accès IBM_Admin_Details sélectionne toutes les colonnes des tables CATALOG, CATALOGDSC et STORECAT de ces catalogues.

Requêtes à deux étapes

Les requêtes à deux étapes utilisent les instructions XPath to SQL et les instructions SQL d'association. Les instructions XPath to SQL extraient les clés primaires des objets de base correspondant aux critères de recherche spécifiés par la requête XPath. Les instructions SQL d'association, départagées par nom de profil, extraient les informations sur ces objets. Le code SQL associé doit posséder une relation de clé externe avec la table de base XPathSQL. En outre, l'instruction SQL d'association doit renvoyer la colonne de clé externe. Voir : Balises dans le fichier de modèle de requête.

L'exemple suivant définit une requête à deux étapes pour la clé XPath /CatalogEntry[CatalogEntryIdentifier[(UniqueID=)]] et le profil d'accès IBM_Admin_CatalogEntryDescription :
Remarque : Les instructions SQL individuelles ne peuvent pas être appelées indépendamment les unes des autres. Elles doivent être utilisées de façon conjointe.
BEGIN_SYMBOL_DEFINITIONS
	COLS:CATENTRY=CATENTRY:*
	COLS:CATENTRY_ID=CATENTRY:CATENTRY_ID
	COLS:CATENTDESC=CATENTDESC:*
END_SYMBOL_DEFINITIONS

BEGIN_XPATH_TO_SQL_STATEMENT
	name=/CatalogEntry[CatalogEntryIdentifier[(UniqueID=)]]
	base_table=CATENTRY
	sql=
		SELECT 
			CATENTRY.$COLS:CATENTRY_ID$
		FROM
			CATENTRY
			  JOIN STORECENT ON (CATENTRY.CATENTRY_ID = STORECENT.CATENTRY_ID 
				AND STORECENT.STOREENT_ID = $CTX:STORE_ID$)
		WHERE
         CATENTRY.CATENTRY_ID IN (?UniqueID?) AND
         CATENTRY.MARKFORDELETE = 0
END_XPATH_TO_SQL_STATEMENT

BEGIN_ASSOCIATION_SQL_STATEMENT
	name=IBM_RootCatalogEntryWithDescription
	base_table=CATENTRY
	additional_entity_objects=true
	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 IN ($CONTROL:LANGUAGES$)
		WHERE
       CATENTRY.CATENTRY_ID IN ($ENTITY_PKS$)
END_ASSOCIATION_SQL_STATEMENT

BEGIN_PROFILE 
	name=IBM_Admin_CatalogEntryDescription
	BEGIN_ENTITY 
		base_table=CATENTRY 	  
		associated_sql_statement=IBM_RootCatalogEntryWithDescription
	END_ENTITY
END_PROFILE

Dans l'exemple précédent, l'instruction XPath to SQL est utilisée pour extraire les clés primaires depuis la table de base CATENTRY. La table de base pour l'instruction SQL XPath to SQL doit être la même que celle de l'instruction SQL d'association. La section PROFILE répertorie les instructions SQL associées à exécuter pour le profil d'accès IBM_Admin_CatalogEntryDescription. Cet exemple liste une seule instruction SQL associée, IBM_RootCatalogEntryWithDescription, qui est exécutée en substituant à la balise $ENTITY_PKS$ les clés primaires afin d'extraire toutes les données requises par la requête originale.

Dans le cas de requêtes à deux étapes, chaque profil d'accès peut recenser plusieurs instructions SQL, chacune sélectionnant des données différentes. Par exemple, une instruction SQL d'association SQL peut extraire toutes les propriétés et descriptions de produit en fonction d'une liste d'ID de produits, tandis qu'une autre instruction sous un profil différent peut extraire toutes les informations de vente croisée et de vente incitative en plus des propriétés et descriptions de base.

Remarque : Pour éviter des problèmes potentiels lors du passage à la prochaine version de HCL Commerce, créez vos propres profils d'accès personnalisés sans jamais modifier directement les profils d'accès par défaut de HCL Commerce. Vous pouvez ajouter de nouvelles requêtes, ou étendre celles fournies avec le produit de base en plaçant vos fichiers de modèle de requête sous le répertoire de configuration étendue de votre module de service (par exemple, pour le catalogue, sous xml\config\com.ibm.commerce.catalog-ext).

Il existe un niveau de tri par défaut lorsque vous avez créé une requête renvoyant les clés primaires dans un ordre prédéfini dans le modèle de requête. L'ordre des objets données représentant la table de base dans le graphique de données est cohérent avec l'ordre des clés primaires renvoyé par la requête XPath to SQL pour les requêtes en deux étapes. La liste des objets du conteneur PhysicalDataContainer doit apparaître dans le même ordre que celui des clés primaires renvoyé par la requête XPath to SQL.

Recommandations pour l'utilisation des requêtes

Dans la mesure du possible, vous devriez utiliser ce type de requête. Cependant, dans certains cas, il n'est pas possible d'extraire toutes les données en une requête unique. Ou bien, votre requête peut effectuer une jointure sur un grand nombre de tables et ne pas répondre à vos critères de performances.

Utilisez une requête à deux étapes dans les circonstances suivantes :
  • Requêtes devant paginer des données. La pagination d'une requête à une seule étape n'est pas possible si celle-ci renvoie plusieurs enregistrements pour chaque enregistrement de table de base. Une requête à deux étapes permet la pagination de l'ensemble de résultats renvoyé par la première instruction (les clés primaires) au lieu d'une pagination de l'ensemble de résultats renvoyé par la seconde instruction.
  • Requêtes de recherche paramétrique.
  • Requêtes complexes aux performances insatisfaisantes en raison d'une jointure d'un trop grand nombre de tables. La décomposition de ces requêtes en une instruction XPath SQL avec plusieurs instructions SQL associées est susceptible d'améliorer les performances.