Adobe Campaign / Paramétrer Campaign Classic / Exemples

Exemples

Extension d'une table


Pour étendre la table des destinataires de schéma nms:recipient, la procédure est la suivante :

  1. Créez le schéma d'extension (cus:extension) avec les données suivantes :

    <srcSchema mappingType="sql" name="extension" namespace="cus" xtkschema="xtk:srcSchema" extendedSchema="nms:recipient">  
      <enumeration basetype="string" default="area1" name="area">    
        <value label="Zone 1" name="area1"/>    
        <value label="Zone 2" name="area2"/>  
      </enumeration>  
    
      <element name="extension">    
        <dbindex name="area">      
          <keyfield xpath="location/@area"/>    
        </dbindex>      
    
        <attribute label="Code fidélité" name="fidelity" type="long"/>    
        <element name="location">      
          <attribute name="area" label="Zone d'achat" type="string" length="50" enum="area"/>    
        </element>  </element>  
    </srcSchema>

    Dans cet exemple, on ajoute un champ indexé (fidelity) et on complète l'élément location (déjà existant dans le schéma nms:recipient) avec un champ énuméré (area).

    N'oubliez pas d'ajouter l'attribut extendedSchema pour référencer le schéma d'extension.

  2. Vérifiez que le schéma étendu est bien le schéma nms:recipient et que les données ajoutées sont bien présentes :

    <schema dependingSchemas="cus:extension" mappingType="sql" name="recipient" namespace="nms" xtkschema="xtk:schema">
      ...
      <enumeration basetype="string" default="area1" name="area">    
        <value label="Zone 1" name="area1"/>    
        <value label="Zone 2" name="area2"/>  
      </enumeration>
      ...
    		<element autopk="true" name="recipient" sqltable="NmsRecipient"> 
        <dbindex name="area">      
    				  <keyfield xpath="location/@area"/>    
        </dbindex>
    
    				...
    				<attribute belongsTo="cus:extension" label="Code fidélité" name="fidelity" sqlname="iFidelity" type="long"/>
    				<element name="location">
          ...
    				  <attribute enum="area" label="Zone d'achat" length="50" name="area" sqlname="sArea" type="string"/>
        </element>
    				...
    		</element>
    </schema>

    Le script SQL généré à partir de l'assistant de mise à jour de la base est le suivant :

    ALTER TABLE NmsRecipient ADD iFidelity INTEGER;
    UPDATE NmsRecipient SET iFidelity = 0;
    ALTER TABLE NmsRecipient ALTER COLUMN iFidelity SET NOT NULL;ALTER TABLE NmsRecipient ALTER COLUMN iFidelity SET Default 0;
    ALTER TABLE NmsRecipient ADD sArea VARCHAR(50); 
    CREATE INDEX NmsRecipient_area ON NmsRecipient(sArea);

Table liée de collection


Cette section présente le mode de création d'une table des commandes liée à la table des destinataires avec une cardinalité 1-N.

Schéma source de la table des commandes :

<srcSchema label="Commande" name="order" namespace="cus" xtkschema="xtk:srcSchema">  
  <element autopk="true" name="order">    
    <compute-string expr="@number" + '(' + ToString(@date) + ')'/>    
    
    <attribute label="Numéro" length="128" name="number" type="string"/>    
    <attribute desc="Date de commande" label="Date" name="date" type="datetime" default="GetDate()"/>    
    <attribute desc="total de la commande" label="Total" name="total" type="double"/>    
    <element label="Destinataire" name="recipient" revDesc="Commandes associées à ce destinataire" revIntegrity="own" revLabel="Commandes" target="nms:recipient" type="link"/>  
	 </element>
</srcSchema>

La table est de type autopk afin de créer automatiquement une clé primaire auto-générée qui sera utilisée par défaut par la jointure du lien sur la table des destinataires.

Schéma généré :

<schema label="Commande" mappingType="sql" name="order" namespace="cus" xtkschema="xtk:schema">  
  <element autopk="true" label="Commande" name="order" sqltable="CusOrder">    
    <compute-string expr="ToString(@date) + ' - ' + @number"/>    

    <dbindex name="id" unique="true">      
      <keyfield xpath="@id"/>    
    </dbindex>    

    <key internal="true" name="id">      
      <keyfield xpath="@id"/>    
    </key>    

    <dbindex name="recipientId">      
      <keyfield xpath="@recipient-id"/>    
    </dbindex>    

    <attribute desc="Clé primaire interne" label="Clé primaire" name="id" sqlname="iOrderId" type="long"/>    
    <attribute label="Numéro" length="128" name="number" sqlname="sNumber" type="string"/>    
    <attribute desc="Date de commande" label="Date" name="date" sqlname="tsDate" type="datetime"/>    
    <attribute desc="total de la commande" label="Total" name="total" sqlname="Total" type="double"/>    
    <element label="Destinataire" name="recipient" revLink="order" target="nms:recipient" type="link">      
      <join xpath-dst="@id" xpath-src="@recipient-id"/>    
    </element>    
    <attribute advanced="true" label="Clé étrangère du lien 'Destinataire' (champ 'id')" name="recipient-id" sqlname="iRecipientId" type="long"/>  
   </element>
</schema>

Le script SQL de création de la table est le suivant :

CREATE TABLE CusOrder(dTotal DOUBLE PRECISION NOT NULL Default 0, iOrderId INTEGER NOT NULL Default 0, iRecipientId INTEGER NOT NULL Default 0, sNumber VARCHAR(128), tsDate TIMESTAMP Default NULL);
CREATE UNIQUE INDEX CusOrder_id ON CusOrder(iOrderId);
CREATE INDEX CusOrder_recipientId ON CusOrder(iRecipientId);  
INSERT INTO CusOrder (iOrderId) VALUES (0); 

L'ordre SQL INSERT INTO en fin de script permet d'insérer un enregistrement d'identifiant à 0 afin de simuler les jointures externes.

Table d'extension


Une table d'extension permet d'étendre le contenu d'une table existante dans une table liée de cardinalité 1-1.

Le principe de la table d'extension est d'éviter les limitations du nombre de champs supportés dans une table ou encore d'optimiser la place occupée par les données car celles-ci sont consommées à la demande.

Créer le schéma de la table d'extension (cus:feature) :

<srcSchema mappingType="sql" name="feature" namespace="cus" xtkschema="xtk:srcSchema">  
  <element autopk="true" name="feature">    
    <attribute label="Enfants" name="children" type="byte"/>    
    <attribute label="Célibataire" name="single" type="boolean"/>    
    <attribute label="Prénom du conjoint" length="100" name="spouseFirstName" type="string"/>  
  </element>
</srcSchema>

Créer un schéma d'extension sur la table des destinataires pour ajouter le lien de cardinalité 1-1 :

<srcSchema extendedSchema="nms:recipient" label="Destinataire" mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:srcSchema">  
  <element name="recipient">    
    <element desc="Features" integrity="own" label="Propriétés" name="feature" revCardinality="single" revLink="recipient" target="cus:feature" type="link"/> 
  </element>
</srcSchema>

La définition du lien entre la table des destinataires et la table d'extension doit être renseignée à partir du schéma qui possède la clé étrangère.

Le script SQL de création de la table d'extension est le suivant :

CREATE TABLE CusFeature(  iChildren NUMERIC(3) NOT NULL Default 0, iFeatureId INTEGER NOT NULL Default 0, iSingle NUMERIC(3) NOT NULL Default 0, sSpouseFirstName VARCHAR(100));
CREATE UNIQUE INDEX CusFeature_id ON CusFeature(iFeatureId);  
INSERT INTO CusFeature (iFeatureId) VALUES (0); 

Le script SQL de mise à jour de la table des destinataires est le suivant :

ALTER TABLE NmsRecipient ADD iFeatureId INTEGER;
UPDATE NmsRecipient SET iFeatureId = 0;
ALTER TABLE NmsRecipient ALTER COLUMN iFeatureId SET NOT NULL;
ALTER TABLE NmsRecipient ALTER COLUMN iFeatureId SET Default 0;
CREATE INDEX NmsRecipient_featureId ON NmsRecipient(iFeatureId);

Table d'Overflow


Une table d'Overflow est une table d'extension (cardinalité 1-1), mais la déclaration du lien vers la table à étendre est renseignée dans le schéma de la table d'Overflow.

C'est la table d'Overflow qui possède la clé étrangère vers la table à étendre : on ne modifie donc pas la table à étendre. La relation entre les deux tables est la valeur de la clé primaire de la table à étendre.

Créer le schéma de la table d'Overflow (cus:overflow) :

<srcSchema label="Overflow" name="overflow" namespace="cus" xtkschema="xtk:srcSchema">  
  <element name="overflow">    
    <key internal="true" name="id">      
      <keyfield xlink="recipient"/>    
    </key>    

    <attribute label="Enfants" name="children" type="byte"/>    
    <attribute label="Célibataire" name="single" type="boolean"/>    
    <attribute label="Prénom du conjoint" length="100" name="spouseFirstName" type="string"/>  
			 <element label="Client" name="recipient" revCardinality="single" revIntegrity="own" revExternalJoin="true" target="nms:recipient" type="link"/>  
  </element>  
</srcSchema>

La clé primaire de la table d'Overflow est le lien vers la table à étendre (schéma "nms:recipient" dans notre exemple).

Le script SQL de création de la table est le suivant :

CREATE TABLE CusOverflow(iChildren NUMERIC(3) NOT NULL Default 0, iRecipientId INTEGER NOT NULL Default 0, iSingle NUMERIC(3) NOT NULL Default 0, sSpouseFirstName VARCHAR(100));
CREATE UNIQUE INDEX CusOverflow2_id ON CusOverflow2(iRecipientId);  

Table de relation


Une table de relation permet de lier deux tables avec une cardinalité N-N. Cette table ne contient que les clés étrangères des tables à lier.

Exemple d'une table de relation entre les groupes (nms:group) et les destinataires (nms:recipient).

Schéma source de la table de relation :

<srcSchema name="rcpGrpRel" namespace="cus">
  <element name="rcpGrpRel">
    <key internal="true" name="id">      
      <keyfield xlink="rcpGroup"/>      
      <keyfield xlink="recipient"/>    
    </key>

		  <element integrity="neutral" label="Destinataire" name="recipient" revDesc="Groupes dont fait partie ce destinataire" revIntegrity="own" revLabel="Groupes" target="nms:recipient" type="link"/>    
    <element integrity="neutral" label="Groupe" name="rcpGroup" revDesc="Destinataires du groupe" revIntegrity="own" revLabel="Destinataires" revLink="rcpGrpRel" target="nms:group" type="link"/>
		</element>
</srcSchema>

Le schéma généré est le suivant :

<schema mappingType="sql" name="rcpGrpRel" namespace="cus" xtkschema="xtk:schema">  
  <element name="rcpGrpRel" sqltable="CusRcpGrpRel">    
    <compute-string expr="ToString([@rcpGroup-id]) + ',' + ToString([@recipient-id])"/>    
    <dbindex name="id" unique="true">      
      <keyfield xpath="@rcpGroup-id"/>      
      <keyfield xpath="@recipient-id"/>    
    </dbindex>    

    <key internal="true" name="id">      
      <keyfield xpath="@rcpGroup-id"/>      
      <keyfield xpath="@recipient-id"/>    
    </key>    

    <dbindex name="rcpGroupId">      
      <keyfield xpath="@rcpGroup-id"/>    
    </dbindex>    
    <dbindex name="recipientId">      
      <keyfield xpath="@recipient-id"/>    
    </dbindex>    

    <element integrity="neutral" label="Destinataire" name="recipient" revLink="rcpGrpRel" target="nms:recipient" type="link">      
      <join xpath-dst="@id" xpath-src="@recipient-id"/>    
    </element>    
    <attribute advanced="true" label="Clé étrangère du lien 'Destinataire' (champ 'id')" name="recipient-id" sqlname="iRecipientId" type="long"/>    

    <element integrity="neutral" label="Groupe" name="rcpGroup" revLink="rcpGrpRel" target="nms:group" type="link">      
      <join xpath-dst="@id" xpath-src="@rcpGroup-id"/>    
    </element>    
    <attribute advanced="true" label="Clé étrangère du lien 'Groupe' (champ 'id')" name="rcpGroup-id" sqlname="iRcpGroupId" type="long"/>  
  </element>
</schema>

Le script SQL de création de la table est le suivant :

CREATE TABLE CusRcpGrpRel( iRcpGroupId INTEGER NOT NULL Default 0, iRecipientId INTEGER NOT NULL Default 0);
CREATE UNIQUE INDEX CusRcpGrpRel_id ON CusRcpGrpRel(iRcpGroupId, iRecipientId);
CREATE INDEX CusRcpGrpRel_recipientId ON CusRcpGrpRel(iRecipientId);