Configuration du fichier de configuration d'objet métier pour l'utilitaire d'extraction de données

Créez un fichier de configuration d'objet métier dont l'utilitaire d'extraction de données se servira pour identifier les données d'objet métier à extraire. Dans ce fichier, vous devez spécifier les classes d'implémentation pour vos composants lecteur de données, générateur d'objet métier et médiateur d'objet métier.

Le fichier de configuration d'objet métier définit le mode d'extraction des données depuis la base de données. Lorsque vous configurez les composants dans ce fichier, indiquez comment l'utilitaire doit gérer les données à convertir. Par exemple, configurez la façon dont l'utilitaire doit convertir les valeurs d'ID unique en valeurs d'identificateur externe. Si vous chargez des données extraites qui incluent des valeurs d'ID unique dans une autre instance, l'opération de chargement échoue si les valeurs d'ID existent pour un objet différent.

Procédure

  1. Accédez au répertoire suivant, qui contient les exemples de fichier de configuration pour l'extraction de données :
    • WCDE_installdir\samples\DataExtract
  2. Créez une sauvegarde des fichiers de configuration wc-dataextract-business-object.xml dans le répertoire et les sous-répertoires pour l'objet à extraire, où business-object est le nom du type d'objet.
  3. Ouvrez le fichier de configuration d'objet métier (wc-extract-business-object.xml) de l'objet à extraire.
    Vous devez mettre à jour ce fichier afin d'ajouter ou de changer les paramètres de configuration pour l'extraction des données.
    Par exemple, pour configurer l'utilitaire afin d'utiliser le processus d'extraction de données reposant sur SQL, vous devez configurer la façon dont l'utilitaire doit extraire, transformer et afficher les données.
  4. Sélectionnez la classe com.ibm.commerce.foundation.dataload.datareader.UniqueIdReader pour le lecteur de données. Si vous ne spécifiez pas cette classe de lecteur de données, vous devez inclure une configuration ColumnMapping ou ValueHandler dans la configuration de médiateur d'objet métier, dont l'utilitaire se servira pour extraire les données.

    Cette classe de lecteur de données permet à l'utilitaire de se servir d'instructions SQL afin d'extraire uniquement les valeurs d'ID unique pour un objet métier. La classe UniqueIdReader renvoie une valeur d'ID pour un objet à la fois au générateur d'objet métier. Ces valeurs d'ID sont ensuite transmises sous forme d'objet de mappe au médiateur d'objet métier. Puis, le médiateur extrait les données restantes pour l'objet. La clé de la mappe est le nom de colonne qui est inclus dans l'instruction SQL de sélection et la valeur est la valeur extraite de la base de données pour la colonne. Le lecteur de données UniqueIdReader peut envoyer plusieurs objets de mappe au générateur d'objet métier.

    Si vous devez extraire des données personnalisées ou des données qui ne sont pas prises en charge pour l'utilitaire par défaut, vous pouvez inclure un élément de requête afin d'indiquer la façon dont l'utilitaire doit extraire les données. Si vous incluez un élément de requête dans la configuration de votre lecteur de données, votre instruction SQL doit renvoyer une liste de valeurs d'ID. Une valeur d'ID peut inclure plusieurs colonnes, mais la valeur ne peut pas être nulle. Alors que vous pouvez configurer plusieurs requêtes dans votre définition de schéma XSD, l'utilitaire ne se sert que de la première. Si vous ne configurez pas de requête dans vos définitions de schéma XSD, l'utilitaire n'extrait aucune donnée.

    Remarque : UniqueIdReader n'utilise pas de configuration ColumnMapping ou ValueHandler.
    Le code ci-après est un exemple de configuration de lecteur de données. Cette configuration définit la classe UniqueIdReader comme lecteur de données et peut inclure un élément de requête.
    
    <_config:DataReader className="com.ibm.commerce.foundation.dataload.datareader.UniqueIdReader" >
      <_config:Query>
        <_config:SQL>
          <![CDATA[
            SELECT CATGROUP.CATGROUP_ID
            FROM CATGROUP
            JOIN STORECGRP ON (CATGROUP.CATGROUP_ID = STORECGRP.CATGROUP_ID AND STORECGRP.STOREENT_ID = ?)
            LEFT OUTER JOIN CATGRPDESC ON (CATGRPDESC.CATGROUP_ID = CATGROUP.CATGROUP_ID AND CATGRPDESC.LANGUAGE_ID = ?)
            WHERE CATGRPDESC.PUBLISHED = 1 AND CATGROUP.MARKFORDELETE = 0
            ORDER BY CATGROUP.CATGROUP_ID
          ]]>
        </_config:SQL>
        <_config:Param name="storeId" valueFrom="BusinessContext" />
        <_config:Param name="langId" valueFrom="BusinessContext" />
      </_config:Query>
    </_config:DataReader>
    L'élément de requête <_config:Query> inclut une instruction SQL et des paramètres configurables. Si vous incluez des paramètres configurables, le nombre de paramètres doit correspondre au nombre de variables de type point d'interrogation dans votre instruction SQL. Si les nombres ne correspondent pas, une exception est émise.
  5. Configurez la classe de médiateur d'objet métier.
    • Si vous extrayez des données de promotions, choisissez la classe com.ibm.commerce.promotion.dataload.mediator.PromotionToDomTransformMediator. L'utilitaire se sert du médiateur PromotionToDomTransformMediator pour extraire les données de promotion depuis la base de données et générer un objet DOM pour les promotions. L'objet DOM est ensuite transmis à l'éditeur de données, qui génère le fichier de sortie XML incluant les données extraites. Pour générer l'objet DOM, le médiateur peut remplacer certaines valeurs de clé primaire (par exemple pour les catégories, les entrées de catalogue, les segments de clientèle) par la valeur d'identificateur unique correspondante. L'utilitaire affiche la valeur d'identificateur à la place de l'ID unique car l'ID unique peut être différent selon l'environnement. Lorsque vous chargez le code XML dans un magasin avec l'utilitaire de chargement de données, l'utilitaire résout l'ID unique pour les promotions à partir de la valeur d'identificateur.
    • Si vous extrayez des données marketing ou Commerce Composer, utilisew la classe com.ibm.commerce.foundation.dataload.businessobjectmediator.AssociatedObjectMediator. Le médiateur d'objet métier AssociatedObjectMediator permet à l'utilitaire de se servir d'instructions SQL afin d'extraire les informations d'objet métier détaillées pour l'objet de mappe. Le médiateur peut ensuite envoyer un objet de mappe mis à jour qui contient les informations d'objet métier détaillées à la classe de l'éditeur de classe configurée. La clé de cet objet de mappe correspond aux mappages de nom de colonne configurés. La valeur est la valeur qui est extraite pour la colonne de base de données correspondante.
    Afin d'extraire les informations d'objet métier détaillées pour un objet, le médiateur AssociatedObjectMediator utilise un ou plusieurs éléments de requête. Chaque élément de requête inclut une instruction SQL afin d'extraire des données. Ces instructions utilisent les valeurs d'ID provenant de l'objet de mappe que le générateur d'objet métier a transmis au médiateur. Les valeurs d'ID sont utilisées comme valeurs de paramètre dans l'instruction SQL afin d'extraire les informations détaillées pour un objet de mappe. Si vous incluez des paramètres configurables dans votre instruction SQL, le nombre de paramètres doit correspondre au nombre de variables de type point d'interrogation dans votre instruction SQL. Si les nombres ne correspondent pas, une exception est émise. Lorsque le médiateur utilise la requête, il ne renvoie que le premier enregistrement qui est trouvé avec les instructions SQL configurées. Ensuite, cet enregistrement est inclus dans l'objet de mappe qui est envoyé à la classe d'éditeur de données.
    Remarque : si votre instruction SQL renvoie plusieurs enregistrements, il peut être nécessaire de l'affiner pour garantir que le médiateur extrait l'enregistrement approprié.

    Lorsque vous configurez le médiateur AssociatedObjectMediator, vous pouvez aussi inclure un mappage de colonne pour chaque colonne dans l'instruction SQL. Vous pouvez utiliser le mappage afin de convertir le nom de colonne de base de données en nom plus lisible qui correspond au nom de colonne ou d'élément dans le fichier de sortie. Si vous n'incluez pas de mappage de colonne, le nom de colonne de base de données est utilisé dans la clé de l'objet de mappe qui est envoyé à l'éditeur de données. Le nom de colonne de base de données est toujours en majuscules.

    Remarque : Si vous sélectionnez des données de plusieurs tables, certaines colonnes peuvent avoir le même nom de colonne de base de données. Vous devez utiliser l'instruction SQL afin de renommer les noms de colonne en double pour le processus d'extraction, Par exemple, SELECT IDENTIFIER AS PARENT_IDENTIFIER. Ensuite, vous pouvez définir le mappage de colonne pour la colonne PARENT_IDENTIFIER.

    Si vous avez défini plusieurs éléments de requête, le médiateur crée un objet de mappe pour chaque requête, puis fusionne les objets de mappe. S'il rencontre des noms de colonne en double dans les requêtes, la valeur de colonne de la dernière requête ajoutée à l'objet de mappe remplace la valeur de colonne de la requête ajoutée précédemment à l'objet de mappe.

    Par exemple, le code ci-dessous est un exemple de configuration de médiateur d'objet métier qui inclut des mappages de colonne et une instruction SQL avec des paramètres de remplacement.
    
    <_config:Query>
      <_config:SQL>
        <![CDATA[
          SELECT IDENTIFIER,NAME,SHORTDESCRIPTION,LONGDESCRIPTION,THUMBNAIL,FULLIMAGE,KEYWORD
          FROM CATGROUP LEFT OUTER JOIN CATGRPDESC ON (CATGROUP.CATGROUP_ID = CATGRPDESC.CATGROUP_ID AND LANGUAGE_ID = ?)
          WHERE CATGROUP.CATGROUP_ID in (?)
        ]]>
      </_config:SQL>
      <_config:Param name="langId" valueFrom="BusinessContext" />
      <_config:Param name="CATGROUP_ID" />
      <_config:ColumnMapping name="IDENTIFIER" value="GroupIdentifier" />
      <_config:ColumnMapping name="NAME" value="Name" />
      <_config:ColumnMapping name="SHORTDESCRIPTION" value="ShortDescription" />
      <_config:ColumnMapping name="LONGDESCRIPTION" value="LongDescription" />
      <_config:ColumnMapping name="THUMBNAIL" value="Thumbnail" />
      <_config:ColumnMapping name="FULLIMAGE" value="FullImage" />
      <_config:ColumnMapping name="KEYWORD" value="Keyword" />
    </_config:Query>
  6. Configurez l'éditeur de données pour l'utilitaire afin de spécifier si l'utilitaire doit afficher les données dans un fichier au format CSV ou XML.
    Définissez l'une des classes d'éditeur de données suivantes :
    com.ibm.commerce.foundation.dataload.datawriter.CSVWriter
    Lorsque vous configurez l'utilitaire d'extraction de données en vue de l'utilisation de l'éditeur de données CSVWriter, l'utilitaire affiche les données extraites dans des fichiers de sortie au format CSV. Avec cet éditeur de données, l'utilitaire prend un objet de mappe du médiateur d'objet métier et écrit l'objet sur une seule ligne dans le fichier de sortie généré. Vous pouvez configurer l'utilitaire pour qu'il se serve de cet éditeur de données en éditant la propriété configurable <_config:DataWriter> dans le fichier de configuration d'objet métier. Par exemple, le code ci-dessous est un exemple de configuration qui configure l'utilitaire en vue de l'utilisation de l'éditeur de données CSVWriter.
     <_config:DataWriter className="com.ibm.commerce.foundation.dataload.datawriter.CSVWriter">
             <_config:Data>
               <_config:column number="1" name="GroupIdentifier" />
               <_config:column number="2" name="TopGroup" />
               <_config:column number="3" name="ParentGroupIdentifier" />
               <_config:column number="4" name="Sequence" />
               <_config:column number="5" name="Name" />
               <_config:column number="6" name="ShortDescription" />
               <_config:column number="7" name="LongDescription" />
               <_config:column number="8" name="Thumbnail" />
               <_config:column number="9" name="FullImage" />
               <_config:column number="10" name="Keyword" />
             </_config:Data>
            </_config:DataWriter>
    Lorsque vous configurez l'utilitaire en vue de l'utilisation de cet éditeur de données, l'utilitaire inclut le nom de chaque propriété configurable <_config:column> sous forme d'en-tête de colonne dans le fichier de sortie CSV. Pour chaque propriété <_config:column>, vous pouvez inclure les attributs facultatifs configurables ci-après afin de configurer une valeur de colonne pour chaque objet de mappe qui est écrit dans le fichier de sortie.
    value
    Définit une valeur de colonne spécifique pour chaque objet de mappe qui est écrit dans le fichier de sortie.
    valueFrom
    Indique l'emplacement depuis lequel l'utilitaire doit extraire la valeur de colonne. Vous pouvez définir l'une des valeurs suivantes pour l'attribut :
    Fixed
    La valeur qui est spécifiée pour l'attribut value est utilisée comme valeur de colonne pour chaque objet de mappe qui est écrit dans le fichier de sortie.
    CurrentTimestamp
    La valeur de colonne est l'horodatage en cours, qui est écrit au format chaîne java.sql.Timestamp.
    Si les attributs value et valueFrom ne sont pas inclus, l'utilitaire affiche la valeur d'une colonne depuis l'objet de mappe qui est transmis à l'éditeur de données à partir du médiateur d'objet métier.
    Lorsque l'utilitaire génère un fichier de sortie CSV, les propriétés du fichier sont les suivantes :
    • Codage du fichier : UTF-8.
    • Le caractère de fin de ligne est le caractère de fin de ligne de style UNIX '\n'.
    • Le séparateur de jeton est la virgule ','.
    • Le délimiteur de valeur de jeton est le guillemet ". Utilisez ce délimiteur lorsque le jeton inclut des caractères spéciaux, comme une virgule, un caractère de retour à la ligne ou des guillemets.
    Lorsque vous configurez l'utilitaire en vue de l'utilisation de l'éditeur de données CSVWrite, vous pouvez configurer une ou plusieurs des propriétés facultatives pour l'éditeur de données, en plus des attributs configurables propres aux valeurs de colonne :
    firstTwoLinesAreHeader
    Configure les fichiers de sortie CSV générés pour qu'ils incluent deux lignes d'informations d'en-tête. La première ligne contient le mot-clé pour le type d'objet métier inclus dans le fichier. La deuxième ligne inclut les en-têtes de colonne. Vous pouvez inclure les valeurs suivantes pour cette propriété :
    true
    Les fichiers CSV affichent deux lignes d'informations d'en-tête.
    false
    Les fichiers CSV n'affichent pas deux lignes d'informations d'en-tête. Il s'agit de la valeur par défaut.
    firstLineIsHeader
    Configure les fichiers de sortie CSV générés pour qu'ils affichent l'en-tête de colonne sur une ligne unique d'informations d'en-tête. Vous pouvez inclure les valeurs suivantes pour cette propriété :
    true
    Les fichiers CSV affichent les en-têtes de colonne sur une ligne d'en-tête.
    false
    Les fichiers CSV n'affichent pas de ligne d'informations d'en-tête. Il s'agit de la valeur par défaut.
    Si vous n'incluez pas ces propriétés ou si vous associez les deux propriétés à la valeur false, le fichier de sortie CSV généré ne contient pas d'informations d'en-tête. Les fichiers contiennent uniquement les enregistrements de données. Si vous incluez les deux propriétés en les associant à la valeur true, les fichiers de sortie CSV générés incluent deux lignes d'informations d'en-tête.
    trimColumns
    Supprime les blancs de fin pour les valeurs de la liste configurée de noms de colonne CSV. Séparez les noms de colonne dans la liste par une virgule. Pour chaque colonne dans la liste, l'espace de fin de la valeur de colonne est supprimé. Envisagez d'inclure cette propriété pour les colonnes dont le type est CHAR. Lorsque la valeur de colonne pour ce type de colonne comporte un blanc, le blanc est inclus dans le fichier de sortie. Les blancs des colonnes qui ne figurent pas dans cette liste configurée ne sont pas affectés.
    replaceLineTerminator
    Configure l'utilitaire pour remplacer les caractères de fin de ligne, comme les caractères de retour à la ligne "\n" ou "\r\n", par un espace. Vous pouvez inclure les valeurs suivantes pour cette propriété :
    true
    L'utilitaire remplace les caractères de fin de ligne. Il s'agit de la valeur par défaut.
    false
    Les caractères de fin de ligne ne sont pas remplacés.
    timestampPattern
    Définit le format d'horodatage à utiliser. Si vous utilisez la propriété configurable timestampColumns, il est nécessaire d'utiliser cette propriété. Par défaut, le format "yyyy-mm-dd hh:mm:ss" est utilisé.
    timestampColumns
    Configure la liste des colonnes qui doivent inclure une valeur d'horodatage spécifique. Cette valeur est au format défini pour la propriété timestampPattern. Séparez les noms de colonne dans la liste par une virgule. Si une colonne possède l'attribut configurable valueFrom="CurrentTimestamp", il n'est pas nécessaire de l'ajouter à cette liste. Le médiateur suppose qu'il s'agit d'un horodatage et applique systématiquement l'attribut timestampPattern configuré.
    com.ibm.commerce.foundation.dataload.datawriter.XmlWriter
    Lorsque vous configurez l'utilitaire d'extraction de données en vue de l'utilisation de l'éditeur de données XmlWriter, l'utilitaire affiche les données extraites dans des fichiers de sortie au format XML. Avec cet éditeur de données, l'utilitaire prend un objet de mappe du médiateur d'objet métier et écrit l'objet dans un seul élément XML dans le fichier de sortie généré. Vous pouvez configurer l'utilitaire pour qu'il se serve de cet éditeur de données en éditant la propriété configurable <_config:DataWriter> dans le fichier de configuration d'objet métier. Par exemple, le code ci-dessous est un exemple de configuration qui configure l'utilitaire en vue de l'utilisation de l'éditeur de données XmlWriter.
    <_config:DataWriter className="com.ibm.commerce.foundation.dataload.datawriter.XmlWriter">
          <_config:property name="rootElementName" value="CataloagGroups" />
          <_config:property name="elementName" value="CataloagGroup" />
          <_config:property name="indent" value="true" />
          <_config:property name="indentAmount" value="2" />
      </_config:DataWriter>
    Lorsque vous configurez l'utilitaire en vue de l'utilisation de l'éditeur de données XmlWriter, vous pouvez configurer une ou plusieurs des propriétés facultatives suivantes pour l'éditeur de données :
    rootElementName
    Nom de l'élément XML racine dans le fichier de sortie XML. Le nom d'élément par défaut est "root".
    elementName
    Nom de l'élément pour chaque objet métier que l'utilitaire extrait. Le nom par défaut est "elementName".
    indent
    Indique si le code XML dans le fichier de sortie généré doit être formaté. Vous pouvez définir les valeurs suivantes pour cette propriété :
    true
    Le code XML est formaté dans le fichier de sortie.
    false
    Le code XML n'est pas formaté. Il s'agit de la valeur par défaut.
    indentAmount
    Indique le nombre d'espaces de mise en retrait de chaque élément à partir de l'élément parent.
    nvpToAttribute
    Indique si chaque paire nom-valeur dans un objet de mappe est écrit dans le fichier de sortie sous forme de sous-élément ou sous forme d'attribut pour l'élément objet. Vous pouvez définir les valeurs suivantes pour cette propriété :
    true
    Chaque paire nom-valeur est incluse sous forme d'attribut de l'élément.
    false
    Chaque paire nom-valeur est incluse sous forme de sous-élément de l'élément dans le fichier de sortie. Il s'agit de la valeur par défaut.
    Remarque : Pour générer des fichiers de sortie XML, vous devez aussi configurer le fichier de configuration de l'ordre d'extraction afin de spécifier une extension de nom de fichier XML pour chaque fichier de sortie à générer.
    com.ibm.commerce.foundation.dataload.datawriter.DomXmlWriter
    Utilisez cette classe lorsque vous procédez à l'extraction de données de promotion. L'utilitaire s'en sert pour générer le code XML de promotion dans un fichier de sortie s'appuyant sur l'objet DOM qui est transmis depuis le médiateur d'objet métier. Le format XML de promotion généré est différent du code XML d'exécution de la promotion. Il est similaire au code XML de création de promotion. Le fichier de sortie XML généré diffère du code XML de création car au cours du processus d'extraction, l'utilitaire d'extraction de données remplace certaines valeurs de clé primaire (par exemple pour des catégories, des entrées de catalogue, des segments de clientèle) par la valeur d'identificateur unique correspondante. L'utilitaire affiche la valeur d'identificateur à la place de l'ID unique car l'ID unique peut être différent selon l'environnement. Lorsque vous chargez le code XML dans un magasin avec l'utilitaire de chargement de données, l'utilitaire résout l'ID unique pour les promotions à partir de la valeur d'identificateur.
  7. Définissez les configurations de gestionnaire de valeurs pour les colonnes de base de données dont vous procédez à l'extraction. Définissez la classe pour que la configuration du gestionnaire de valeur soit la classe com.ibm.commerce.foundation.dataload.config.ResolveValueBasedOnSQLHandler.
    Cette classe fournit un point de personnalisation dont vous pouvez vous servir lorsque l'utilitaire ne peut pas extraire les données directement depuis la base de données ou lorsque vous devez modifier des données avant que la classe d'éditeur de données ne les écrive dans le fichier de sortie.
    Par exemple, c'est le cas si vous prévoyez de charger les données dans une autre instance HCL Commerce. Lorsque vous procédez à l'extraction de données depuis ces colonnes afin de les charger dans une autre instance HCL Commerce, vous avez besoin de la valeur d'identificateur (clé externe) et non des valeurs d'ID unique. La configuration du gestionnaire de valeurs indique comment le médiateur peut extraire la valeur d'identificateur afin de remplacer les valeurs d'ID unique qui ont été transmises au médiateur dans l'objet de mappe depuis le générateur d'objet métier.

    Chaque mappage de colonne que vous incluez dans la configuration du médiateur d'objet métier peut comporter la propriété configurable <_config:ValueHandler. Incluez une configuration de gestionnaire de valeurs si vous devez modifier la valeur que le médiateur extrait de la base de données. Vous pouvez aussi inclure une propriété configurable de gestionnaire de valeurs pour une configuration d'élément de paramètre dans l'instruction SQL qui est utilisée par le médiateur d'objet métier.

    Pour inclure une configuration de gestionnaire de valeurs, vous devez également identifier l'emplacement depuis lequel la valeur est extraite en incluant les attributs configurables ci-dessous.
    value
    Spécifie la valeur à utiliser pour la colonne. Il peut s'agir d'une valeur spécifique ou de l'instruction SQL permettant d'extraire la valeur de colonne.
    valueFrom
    Indique l'emplacement depuis lequel l'utilitaire doit extraire la valeur de colonne. Vous pouvez définir l'une des valeurs suivantes pour l'attribut :
    Fixed
    La valeur qui est spécifiée pour l'attribut value est utilisée comme valeur de colonne.
    CurrentTimestamp
    La valeur de colonne est l'horodatage en cours, qui est écrit au format chaîne java.sql.Timestamp.
    Par exemple, le code ci-dessous est un exemple de configuration de médiateur d'objet métier qui inclut une configuration de gestionnaire de valeurs pour la colonne CONTENT.
    <_config:ColumnMapping name="CONTENTTYPE" value="contentType" />
     <_config:ColumnMapping name="CONTENT" value="content" >
       <_config:ValueHandler className="com.ibm.commerce.foundation.dataload.config.ResolveValueBasedOnSQLHandler" >
          <_config:Parameter name="sqlBasedOnKey" value="contentType" valueFrom="Fixed" />
          <_config:Parameter name="CatalogEntry" value="SELECT PARTNUMBER FROM CATENTRY WHERE CATENTRY.CATENTRY_ID = ?" valueFrom="Fixed" />
          <_config:Parameter name="CatalogGroup" value="SELECT IDENTIFIER FROM CATGROUP WHERE CATGROUP_ID = ?" valueFrom="Fixed" />
          <_config:Parameter name="MarketingContent" value="SELECT NAME FROM COLLATERAL WHERE COLLATERAL_ID = ?" valueFrom="Fixed" />
       </_config:ValueHandler>
     </_config:ColumnMapping>

Que faire ensuite

  1. Configurez l'ordre d'extraction des données.
  2. Exécutez la commande de l'utilitaire d'extraction de données.