Pattern de traitement de la commande BOD Get

Le pattern de traitement de la commande BOD (Business Object Document) Get décrit le pattern de conception utilisé pour la recherche et l'extraction de données.

Le traitement d'une requête Get implique l'intervention d'un contrôleur Get déléguant aux commandes de tâches :
  1. Une commande Fetch (Extraire) qui acquiert les données des objets métier requis depuis la couche service de données et les transforme pour les adapter à la structure logique OAGIS.
  2. Une commande de tâche InsertMoreData facultative servant à augmenter les objets extraits par la commande Fetch, par exemple pour ajouter des valeurs calculées ou pour les cumuler avec un contenu provenant d'une source de données alternative.
Remarque : Plusieurs commandes de tâche InsertMoreData sont prises en charge par requête Get.

La commande GetNoun est une commande de contrôleur qui analyse l'expression dans la requête Get, effectue une validation commune telle que de contrôle d'accès, puis délègue à la commande Fetch la tâche d'extraction de la liste de noms qui correspondent à l'expression. La commande Fetch renvoie la liste des noms correspondant à l'expression de recherche et le verbe Show représentant la liste de noms renvoyés. La commande GetNoun utilise un sélecteur XPath pour choisir l'implémentation de commande Fetch enregistrée appropriée pour l'extraction des données. Bien que l'implémentation par défaut de la commande GetNoun soit utilisée dans la majorité des cas, l'extension autorise l'ajout d'une logique métier supplémentaire à des expressions de recherche spécifiques.

Lorsque vous enregistrez une commande dans la table CMDREG, vous pouvez adjoindre une chaîne supplémentaire au nom de l'interface afin d'aider WebSphere Commerce à sélectionner l'implémentation Fetch ou la commande InsertMoreData appropriée. Cette chaîne supplémentaire est définie comme le sélecteur XPath lors de l'enregistrement d'une commande Fetch et comme le nom d'un profil d'accès en cas d'enregistrement de l'implémentation InsertMoreData.

Un exemple de requête Get figure ci-dessous. Le profil d'accès concerné est IBM_Admin_Details. Le sélecteur XPath est /CatalogEntry[CatalogEntryIdentifier[]]. De la sorte, l'implémentation Fetch enregistrée pour ce XPath serait alors : "+/CatalogEntry[CatalogEntryIdentifier[]]" annexée à la valeur de la colonne INTERFACENAME dans la table CMDREG. La commande InsertMoreData serait enregistrée avec "+IBM_Admin_Details" annexé à INTERFACENAME.
<_cat:GetCatalogEntry xmlns:_cat="http://www.ibm.com/xmlns/prod/commerce/9/catalog" xmlns:_wcf="http://www.ibm.com/xmlns/prod/commerce/9/foundation" xmlns:oa="http://www.openapplications.org/oagis/9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <oa:ApplicationArea xsi:type="_wcf:ApplicationAreaType">
    <oa:CreationDateTime>2007-01-25T16:44:16.004Z</oa:CreationDateTime>
    <oa:BODID>341d6660-acbd-11db-a3a8-832d45b924b0</oa:BODID>
    <_wcf:BusinessContext>
      <_wcf:ContextData name="storeId">511</_wcf:ContextData>
    </_wcf:BusinessContext>
  </oa:ApplicationArea>
  <_cat:DataArea>
    <oa:Get>
      <oa:Expression expressionLanguage="_wcf:XPath">{wcf.ap=IBM_Admin_Details}/CatalogEntry[CatalogEntryIdentifier[UniqueID='51100000117']]</oa:Expression>
    </oa:Get>
  </_cat:DataArea>
</_cat:GetCatalogEntry>

Dans le cas de profils d'accès pour lesquels vous désirez des informations complémentaires provenant de la logique métier ou d'un système externe, le contrôleur GetNoun peut instancier une instance d'une commande de tâche InsertMoreData afin d'insérer des données supplémentaires pour le profil d'accès concerné. La commande InsertMoreData est facultative et destinée aux situations où ces informations ne peuvent être extraites depuis la couche service de données.

Etant donné que plusieurs commandes InsertMore peuvent être enregistrées pour un même profil d'accès, la notation .index permet l'exécution de plus d'une commande InsertMore dans l'ordre spécifié par l'index enregistré. Dans l'exemple ci-dessous, une commande InsertMore est enregistrée avec l'index 0, ajouté au profil d'accès en tant que IBM_Admin_Details.0 :
insert into cmdreg (storeent_id, interfacename, classname, target)  values (0, 'com.ibm.commerce.catalog.facade.server.commands.InsertMoreCatalogEntryDataCmd+IBM_Admin_Details.0',  'com.ibm.commerce.foundation.server.command.bod.bom.InsertMoreNounChangeControlMetaDataCmdImpl', 'Local');

La classe AbstractFetchNounFromBusinessObjectMediatorCmdImpl utilisera le médiateur d'objet métier (BOM) pour traiter la requête. Pour simplifier l'implémentation d'un service Get, il est recommandé que les implémentations de commande Fetch étendent cette classe. Les expressions XPath prises en charge peuvent être configurées à l'aide de la configuration du service de données au lieu d'utiliser du code. L'implémentation Fetch transmet l'expression de recherche extraite du verbe Get au médiateur BOM. Cette expression de recherche inclut l'élément XPath, le profil d'accès et les informations de pagination. La configuration BOM utilise à son tour le médiateur d'objet métier et la couche service de données pour extraire les données et les convertir en leur représentation logique. La configuration BOM débouche sur les informations de pagination et les objets SDO logiques correspondant à cette expression. Cette information est retransmise par la commande Fetch qui sera encapsulée dans la réponse ShowNoun par la commande GetNoun.


Pattern de traitement de la commande Get

Le flux détaillé du pattern de traitement de la commande Get illustré dans le diagramme ci-dessus est décrit ci-après :

  1. Le contrôleur Get Noun s'exécute et analyse le verbe Get dans une expression de recherche.
  2. Une vérification de contrôle d'accès est effectuée pour s'assurer que l'utilisateur actuel est habilité à utiliser le profil d'accès spécifié.
  3. La commande Fetch renvoie l'expression de recherche.
    1. La commande Fetch délègue au médiateur d'objet métier l'exécution de l'expression de recherche et renvoie la liste des noms correspondant à l'expression.
  4. Une étape facultative de filtrage de contrôle d'accès aux données intervient. La liste des noms renvoyée par la commande Fetch est filtrée afin de garantir que l'utilisateur actuel ne visualise que les noms qu'il est habilité à voir. Pour passer outre à cette contrainte, vous pouvez remplacer la méthode filterNouns() par une implémentation vide.
    Remarque : Le contrôleur Get peut déroger à ce comportement par défaut s'il n'est pas requis (pour des considérations de performances, par exemple). L'inconvénient de cette pratique est qu'alors le filtrage de contrôle d'accès ne sera pas réalisé, mais en contrepartie les performances du service seront meilleures. Si la tâche Fetch de recherche de nom qui obtient les données inclut déjà ce type de filtre, le filtrage de lecture filterNouns() n'est pas requis.
  5. La commande InsertMoreData s'exécute pour extraire des données supplémentaires (pouvant provenir de sources de données alternatives) pertinentes au nom.
    1. La commande InsertMoreData délègue au médiateur d'objet métier l'exécution de l'expression de recherche et renvoie la liste des noms correspondant à l'expression.
    Remarque : Plusieurs commandes InsertMoreData peuvent être définies pour un même profil d'accès.
  6. Les noms et le verbe Show sont intégrés dans la réponse ShowNoun et renvoyés.