Sauvegarde d'un nodeRef [Résolu]

cancel
Showing results for 
Search instead for 
Did you mean: 
huberd
Member II

Sauvegarde d'un nodeRef [Résolu]

Bonjour,

Je recherche a sauvegarder un nodeRef afin de pouvoir l'exploiter ulterieurement.
Pour cela, je recupère le nodeRef et le sauvegarde dans un aspect de mon document comme ceci

      <aspect name="lpr:ASPECT_BASE_CONTENT">
         <title>ASPECT_BASE_CONTENT</title>
         <properties>
            <property name="lpr:ASPECT_BASE_CONTENT">
               <type>d:text</type>
            </property>
         </properties>
      </aspect>

nodeService.setProperty(sessionNodeRef, LprContentModel.ASPECT_BASE_CONTENT, NodeBase);

Jusque là, tous fonctionne.

Là où cela se gate, c'est lorsque je cherche à réutiliser ce nodeRef mémorisé de la sorte.

NodeBase = (NodeRef)nodeService.getProperty(sessionNodeRef, LprContentModel.ASPECT_BASE_CONTENT);

A priori, je ne peux pas récuperer mon nodeRef comme cela. Quel est la bonne méthode à utiliser.
De plus mon nodeRef sauvegardé est de la forme suivante

workspace://SpacesStore/14f53fc4-0620-11dd-882d-2f9ed3253cba

comment faire pour obtenir plutôt le format court

14f53fc4-0620-11dd-882d-2f9ed3253cba

et pouvoir le restaurer dans une variable nodeRef afin de pouvoir le réutiliser.

Merci pour votre aide précieuse, car là je bloque.
3 Replies
rivarola
Active Member

Re: Sauvegarde d'un nodeRef [Résolu]

Bonjour,

Trois solutions :
- sauvegarder le NodeRef sous forme de chaîne (nodeRef.toString()) ; le récupérer aussi sous forme de chaîne, puis reconstruire le NodeRef à partir de cette chaîne (new NodeRef(valeur))
- sauvegarder juste l'UUID du doc (propriété ContentModel.PROP_NODE_UUID) comme tu le suggères et reconstruire le NodeRef à partir de l'UUID sauvegardé (new NodeRef("workspace", "SpacesStore", uuid)
- utiliser directement une propriété de type d:noderef et pas d:text dans le modèle :
      <aspect name="lpr:ASPECT_BASE_CONTENT">
         <title>ASPECT_BASE_CONTENT</title>
         <properties>
            <property name="lpr:ASPECT_BASE_CONTENT">
               <type>d:noderef</type>
            </property>
         </properties>
      </aspect>
Comme ça tu peux manipuler directement des NodeRef dans la propriété.
huberd
Member II

Re: Sauvegarde d'un nodeRef [Résolu]

Bonjour,

Trois solutions :
- sauvegarder le NodeRef sous forme de chaîne (nodeRef.toString()) ; le récupérer aussi sous forme de chaîne, puis reconstruire le NodeRef à partir de cette chaîne (new NodeRef(valeur))
- sauvegarder juste l'UUID du doc (propriété ContentModel.PROP_NODE_UUID) comme tu le suggères et reconstruire le NodeRef à partir de l'UUID sauvegardé (new NodeRef("workspace", "SpacesStore", uuid)
- utiliser directement une propriété de type d:noderef et pas d:text dans le modèle :
      <aspect name="lpr:ASPECT_BASE_CONTENT">
         <title>ASPECT_BASE_CONTENT</title>
         <properties>
            <property name="lpr:ASPECT_BASE_CONTENT">
               <type>d:noderef</type>
            </property>
         </properties>
      </aspect>
Comme ça tu peux manipuler directement des NodeRef dans la propriété.

Merci pour ton aide précieuse, j'avais trouvé la 1ère solution, et le faisait de la manière suivante (un peu bricolée).

Code de sauvegarde
if (nodeService.hasAspect(sessionNodeRef, LprContentModel.ASPECT_BASE_CONTENT) == false) {
    nodeService.addAspect(sessionNodeRef, LprContentModel.ASPECT_BASE_CONTENT, null);
   nodeService.setProperty(sessionNodeRef, LprContentModel.ASPECT_BASE_CONTENT, NodeBase.getId());
}


Code de restauration
NodeBase = new NodeRef((String)(BASE_WORKSPACE + "/" + nodeService.getProperty(sessionNodeRef, LprContentModel.ASPECT_BASE_CONTENT)));

Si j'utilise la solution 3 qui est de créer un Aspect de type node, quel type d'information dois-je sauvegarder ?, l'uuid du node je suppose. Comment dois-je proceder pour la restauration ?

Par affectation comme comme ceci ?

NodeBase = new NodeRef("workspace", "SpacesStore", nodeService.getProperty(sessionNodeRef, LprContentModel.ASPECT_BASE_CONTENT)));

ou comme ceci

NodeBase = nodeService.getProperty(sessionNodeRef, LprContentModel.ASPECT_BASE_CONTENT);
rivarola
Active Member

Re: Sauvegarde d'un nodeRef [Résolu]

Dans la solution 3 tu traites directement avec les NodeRef, donc ta dernière hypothèse est la bonne.