Mapping de la base de données database-mapping
Le mapping SQL de notre schéma d'exemple donne le document XML suivant :
<schema mappingType="sql" name="recipient" namespace="cus" xtkschema="xtk:schema">
<enumeration basetype="byte" name="gender">
<value label="Not specified" name="unknown" value="0"/>
<value label="Male" name="male" value="1"/>
<value label="Female" name="female" value="2"/>
</enumeration>
<element name="recipient" sqltable="CusRecipient">
<attribute desc="Recipient e-mail address" label="Email" length="80" name="email" sqlname="sEmail" type="string"/>
<attribute default="GetDate()" label="Date of creation" name="created" sqlname="tsCreated" type="datetime"/>
<attribute enum="gender" label="Gender" name="gender" sqlname="iGender" type="byte"/>
<element label="Location" name="location">
<attribute label="City" length="50" name="city" sqlname="sCity" type="string" userEnum="city"/>
</element>
</element>
</schema>
Description description
L'élément racine du schéma n'est plus <srcschema>
, mais <schema>
.
Nous sommes sur un autre type de document qui est généré automatiquement à partir du schéma source, on parle alors simplement de schéma. C'est ce schéma qui sera utilisé par l'application Adobe Campaign.
Les noms SQL sont déduits automatiquement en fonction du nom et du type de l'élément.
Les règles de nommage des noms SQL sont les suivantes :
-
table : concaténation de l'espace de noms et du nom du schéma
Dans notre exemple le nom de la table est renseigné à partir de l'élément principal du schéma dans l'attribut sqltable :
code language-sql <element name="recipient" sqltable="CusRecipient">
-
champ : nom de l'élément précédé d'un préfixe défini en fonction de son type ('i' pour entier, 'd' pour double, 's' pour chaîne, 'ts' pour les dates, etc.)
Le nom du champ est renseigné à partir de l'attribut sqlname pour chaque
<attribute>
et<element>
typé :code language-sql <attribute desc="E-mail address of recipient" label="Email" length="80" name="email" sqlname="sEmail" type="string"/>
Le script SQL de création de la table généré à partir du schéma étendu est le suivant :
CREATE TABLE CusRecipient(
iGender NUMERIC(3) NOT NULL Default 0,
sCity VARCHAR(50),
sEmail VARCHAR(80),
tsCreated TIMESTAMP Default NULL);
Les contraintes des champs SQL sont les suivantes :
- pas de valeurs nulles sur les champs numériques et de dates
- les champs numériques sont initialisés à 0
Champs XML xml-fields
Par défaut, tout élément <attribute>
et <element>
typé est mappé sur un champ SQL de la table du schéma de données. Vous pouvez toutefois référencer ce champ au format XML plutôt que SQL, ce qui signifie que les données sont stockées dans un champ mémo ("mData") de la table contenant les valeurs de tous les champs XML. Le stockage de ces données est un document XML qui respecte la structure du schéma.
Pour renseigner un champ en XML, il faut ajouter l'attribut xml avec la valeur "true" sur l'élément concerné.
Exemples
-
Champ commentaire multi-lignes :
code language-sql <element name="comment" xml="true" type="memo" label="Comment"/>
-
Description de données au format HTML :
code language-sql <element name="description" xml="true" type="html" label="Description"/>
Le type "html" permet de stocker le contenu HTML dans une balise CDATA et d'afficher un contrôle spécifique d'édition HTML dans l'interface cliente Adobe Campaign.
L'utilisation de champs XML permet d'ajouter des champs sans avoir à modifier la structure physique de la base. Un autre avantage est d'utiliser moins de ressources (taille alouée des champs SQL, limite sur le nombre de champs par table, etc.).