ID objets symboliques et mode de génération d'ID

Dans certains cas, vous pouvez avoir besoin d'utiliser des attributs d'ID objet pour exprimer des références entre ressources dans votre script XML, mais vous ne souhaitez pas que ces informations soient lues sur la base de données du portail ou inscrites dans cette dernière. Dans ce cas, l'ID objet serait simplement une référence symbolique à l'intérieur du script XML.

Vous pouvez par exemple souhaitez créer un nouveau thème et une nouvelle page, puis référencer le thème dans la page. En revanche, vous souhaitez laisser le portail choisir un ID objet parce que vous ne souhaitez pas remplacer par accident une ressource existante.

Deux méthodes permettent d'y parvenir :

  • Vous pouvez commuter le traitement XML en mode de génération d'ID en définissant l'indicateur create-oids sur la balise de requête principale :
    
              <request . . . create-oids="true" . . . >
    

    Dans ce mode, tous les ID objet ne sont pas écrits ni lus dans la base de données du portail. Leur seul objectif est d'exprimer le lien entre les ressources dans le XML. Lorsque le traitement XML crée de nouvelles ressources, celles-ci sont créées avec un nouvel ID objet généré par le système, pas avec l'ID objet spécifié dans le XML.

  • Lorsque vous utilisez une valeur pour un attribut objectid qui ne peut pas être décodé en tant qu'ID objet, par exemple un nom de chaîne simple, le traitement XML le traite comme symbolique et ne tente pas de l'utiliser pour rechercher l'objet ni de l'inscrire dans la base de données. Cela permet de traiter de manière sélective les ID objet individuels comme symboliques.

Notez que même dans les ID objet symboliques, tout ce qui suit le premier espace n'est pas significatif pour le traitement. Vous pouvez par exemple utiliser l'extrait suivant pour créer un portlet et le placer dans une page à l'aide d'un ID objet symbolique :


   <portlet action="update" . . . objectid="Welcome_Portlet" . . . >
       . . .
   <portletinstance action="update" . . . portletref="Welcome_Portlet" . . . >

Dans la mesure où les valeurs de l'ID objet sont purement symboliques, vous ne pouvez pas les utiliser dans une référence sans les "définir" au préalable dans le même script XML. Avant d'utiliser la spécification de l'attribut portletref="Welcome_Portlet" dans une mise à jour XML, vous devez également disposer d'un portlet où objectid="Welcome_Portlet" est défini dans le même XML ; si tel n'est pas le cas, une erreur de syntaxe est signalée.

Naturellement, les ID objet dans le XML ne sont pas utilisés non plus pour rechercher une ressource. Si vous souhaitez faire référence à une ressource existante, il suffit d'utiliser un nom unique. Pour plus de détails, voir les informations plus loin dans cette section et la rubrique Recherche des ressources de portail. En mode de génération d'ID, l'extrait suivant localise un portlet existant par son nom, "définit" un ID objet symbolique correspondant et place le portlet dans une page :


   <portlet action="locate" name="Welcome Portlet" objectid="Welcome_Portlet">
        . . .
   <portletinstance action="update" . . . portletref="Welcome_Portlet" . . . >

Dans la mesure où les ID objet ne sont pas utilisés pour identifier des ressources existantes en mode de génération d'ID, il est recommandé de définir des noms uniques pour toutes les ressources créées dans des scripts de ce type. Ainsi, si le script est exécuté deux fois, la seconde exécution peut rechercher et mettre à jour la ressource par son nom unique, au lieu de créer deux ressources identiques

Lorsque vous créez des ressources à l'aide d'ID objet symboliques, il peut être utile de connaître l'ID objet réel des nouvelles ressources. Vous pouvez définir l'indicateur de mappage d'exportation de l'attribut de requête principal pour obtenir ces informations :


     <request . . .export-mapping="true" . . . >  

Lorsque vous définissez cet indicateur, une section de mappage est annexée à la réponse XML. Pour chaque ID objet symbolique donné dans l'entrée, ce mappage présente l'ID objet réel dans le magasin de données du portail.

Le mode de génération d'ID est utile si vous souhaitez créer un script XML qui installe un groupe de nouvelles ressources et est exécuté sur de nombreuses installations de portail différentes. Il peut s'agir, par exemple, d'une partie de la procédure d'installation d'un module complémentaire de portail que vous fournissez à des tiers. Dans ce cas, vous n'avez pas de contrôle sur les systèmes sur lesquels le script XML est exécuté, et il n'est pas important pour vous de savoir quel ID objet les ressources obtiennent en réalité.

Remarque : Utilisez le mode de génération d'ID pour tous les exemples de la rubrique Utilisation de l'interface de configuration XML car ceux-ci devraient fonctionner sur une installation de portail quelconque.

L'identité des objets configurés dans le script XML est exprimée dans leur ID objet. Par conséquent, vous devriez utiliser des ID objet "réels" dans vos scripts, lorsque vous souhaitez que les objets de votre XML conservent leur identité. Par exemple, lorsque vous utilisez une requête d'exportation XML et le fichier de réponse résultant pour copier une ressource d'un système d'essai vers un système de production, la ressource est créée sur le système de production avec le même ID objet que sur le système d'essai. Vous pouvez ainsi établir une correspondance entre les deux ressources. Par la suite, lorsque vous transférez de nouveau la même ressource, le traitement XML recherche la ressource par son ID objet, constate qu'elle existe déjà et met à jour la ressource existante au lieu d'en créer une nouvelle.

Lorsque vous configurez le système cible dans de tels scénarios, vous devriez utiliser uniquement l'interface de configuration XML pour copier les ressources à partir du système source. Si vous déployez des portlets dans le système source au cours de l'installation du portail ou si vous déployez ces portlets à l'aide des portlets d'administration, ils n'auront pas les mêmes ID objet que sur le système source, de sorte que vous risquez de rencontrer des problèmes ultérieurement lorsque vous copierez d'autres ressources leur faisant référence.