S’applique également à la v8.
Enrichir le contenu
- Rubriques :
- Gestion des données
Créé pour :
- Utilisateur ou utilisatrice
- Développeur
Les agrégateurs permettent d'enrichir le contenu avec des données externes. Ces données proviennent de requêtes génériques ou de tables liées.
Requêtes génériques
Les requêtes sont paramétrées à partir du modèle de publication dans l'onglet Agrégateur.
Les données récupérées vont enrichir le document XML en sortie à partir de son élément principal.
Exemple de retour d'une requête sur le schéma des destinataires (nms:recipient) :
<book name="Content Management">
...
<collection-recipient>
<recipient lastName="Doe" firstName="John" email="john.doe@aolf.com">
...
</collection-recipient>
</book>
L’élément <collection-recipient>
représente l’élément d’entrée du document obtenu à partir d’une requête. Les données récupérées sont renvoyées sous cet élément ; dans notre exemple, une liste de destinataires.
Ajouter une requête
Un assistant permet de modifier les paramètres de la requête.
-
La première page permet de spécifier le libellé et le schéma contenant les données à récupérer.
NOTE
Le champ d'édition Chemin permet de renommer l'élément de sortie de la requête. -
La page suivante permet de sélectionner les données à récupérer.
-
La page suivante définit la condition de filtrage.
-
La dernière page lance une prévisualisation des données retournées par la requête.
Tables liées
Les liens permettent de récupérer des données externes liées au contenu.
Il existe deux types de données liées :
- Liens de contenu : c'est le mode natif de la gestion de contenu. Le contenu du lien est automatiquement intégré dans le document XML de sortie.
- Liens vers des tables externes : ils permettent l'accès à toutes les autres tables de la base avec la contrainte de récupérer les données du lien sélectionné avec un agrégateur.
Liens vers un schéma contenu
Un lien de contenu est déclaré dans le schéma de données de la façon suivante :
<element expandSchemaTarget="cus:chapter" label="Main chapter" name="mainChapter" type="string"/>
La définition du lien est renseignée sur un <element>
de type string. L’attribut expandSchemaTarget référence le schéma cible ("cus:chapter" dans notre exemple). Le schéma référencé doit être un schéma de contenu.
Le contenu de l’élément ciblé vient enrichir l’élément lien, soit l’élément <chapter>
dans notre exemple de schéma :
<mainChapter computeString="Introduction" id="7011" title="Introduction" xtkschema="cus:chapter">
<page>Introduction to input <STRONG>forms</STRONG>.</page>
</mainChapter>
Dans le formulaire de saisie, le contrôle d'édition du lien est déclaré de la façon suivante :
<input type="articleEdit" xpath="mainChapter"/>
L'icône Loupe permet de lancer le formulaire d'édition de l'élément lié.
Collection de liens
Pour renseigner une collection de liens, vous devez ajouter l'attribut unbound="true" à la définition de l'élément lien dans le schéma de données :
<element expandSchemaTarget="cus:chapter" label="List of chapters" name="chapter" ordered="true" unbound="true"/>
Le contenu de l'élément ciblé vient enrichir chaque élément de collection :
<chapter computeString="Introduction" id="7011" title="Introduction" xtkschema="cus:chapter">
<page>Introduction to input <STRONG>forms</STRONG>.</page>
</chapter>
Dans le formulaire de saisie, le contrôle liste est déclaré de la façon suivante :
<input editable="false" nolabel="true" toolbarCaption="List of chapters" type="articleList" xpath="chapter" zoom="true"/>
Une colonne par défaut est affichée afin de visualiser la Compute string des éléments ciblés.
Liens vers de tables externes
Un lien sur une table externe est déclaré dans le schéma de données de la façon suivante :
<element label="Main contact" name="mainContact" target="nms:recipient" type="link"/>
La définition du lien est renseignée sur un <element>
de type link. L’attribut target référence le schéma cible ("nms:recipient" dans notre exemple).
Par convention, les liens doivent être déclarés à partir de l'élément principal du schéma de données.
La Compute string et la clé de l’élément ciblé vont enrichir les attributs <name>-id
et <name>-cs
de l’élément principal.
Dans notre exemple, le lien est renseigné dans le schéma "cus:livre", le contenu des données du lien est présent dans les attributs "mainContact-id" et "mainContact-cs" :
<book computeString="Content management" date="2006/06/08" id="6106" language="en" mainContact-cs="John Doe (john.doe@adobe.com)" mainContact-id="3012" name="Content management" xtkschema="cus:book">
Le contrôle d'édition du lien est déclaré de la façon suivante :
<input xpath="mainContact"/>
Il est possible de restreindre le choix des éléments de la cible en ajoutant l’élément <sysfilter>
à partir de la définition du lien dans le formulaire de saisie :
<input xpath="mainContact">
<!-- Filter the selection of the link on the Adobe domain -->
<sysFilter>
<condition expr="@domain = 'adobe.com '"/>
</sysFilter>
</input>
Collection de liens
La définition de la collection est identique à celle d'une liste sur des éléments de collection :
<element label="List of contacts" name="contact" unbound="true">
<element label="Recipient" name="recipient" target="nms:recipient" type="link"/>
</element>
Dans le formulaire de saisie, le contrôle liste est déclaré de la façon suivante :
<input nolabel="true" toolbarCaption="List of contacts" type="list" xpath="contact">
<input xpath="recipient"/>
</input>
Le contenu de l'élément ciblé vient enrichir chaque élément de collection dans le document de sortie :
<contact id="11504978621" recipient-cs="Doe John (john.doe@adobe.com)" recipient-id="3012"/>
<contact id="11504982510" recipient-cs="Martinez Peter (peter.martinez@adobe.com)" recipient-id="3013"/>
Agrégation des liens
Le contenu de chaque lien référencé est limité à la clé interne et à la Compute string de l'élément ciblé.
Un script JavaScript est utilisé pour enrichir le contenu des liens à partir de requêtes SOAP.
Exemple : Ajouter le nom du destinataire sur le lien "mainContact" et les liens de collection "contact" :
// Update <mainContact> link
var mainContactId = content.@['mainContact-id']
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="get">
<select>
<node expr="@lastName"/>
</select>
<where>
<condition expr={"@id="+mainContactId}/>
</where>
</queryDef>)
var recipient = query.ExecuteQuery()
content.mainContact.@lastName = recipient.@lastName
// Update <contact> link collection
for each(var contact in content.contact)
{
var contactId = contact.@['recipient-id']
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="get">
<select>
<node expr="@lastName"/>
</select>
<where>
<condition expr={"@id="+contactId}/>
</where>
</queryDef>
)
var recipient = query.ExecuteQuery()
contact.@lastName = recipient.@lastName
}
Le résultat obtenu après exécution du script :
<mainContact lastName="Doe"/>
<contact id="11504978621" lastName="Doe" recipient-cs="Doe John (john.doe@adobe.com)" recipient-id="3012"/>
<contact id="11504982510" lastName="Martinez" recipient-cs="Martinez Peter (peter.martinez@adobe.com)" recipient-id="3013"/>
Le contenu du code JavaScript est ajouté à partir du dossier Administration > Paramétrage > Gestion de contenu > Codes JavaScript et doit être renseigné dans le modèle de publication pour chaque transformation.