Nodeservice et nouveaux types

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

Nodeservice et nouveaux types

Bonjour,

J'ai un nouveau type de données (TD1) qui possède une child-association dont la cible est du type TD2.
TD1 hérite de cm:content et TD2 de sys:base

Est-ce que quelqu'un aurait la bienveillance de m'indiquer la marche à suivre avec NodeService.createNode, j'ai multiplié les essais sans résultat.

Merci
4 Replies
rguinot
Customer
jbaton
Member II

Re: Nodeservice et nouveaux types

Merci de votre aide,

Je regarde aussi  BaseNodeServiceTest   mais mon adaptation à mon cas ne marche pas.

Je n'ai pas trouvé de page avec les principes de manipulations de noeuds.
par exemple, je vois dans l'explorateur de noeuds  que les associations et les children sont vides.

Je pars dans l'idée qu'il n'est pas nécessaire de créer un noeud qui serait la structure de ma child association mais … je n'en sais rien.

Dans la page  http://wiki.alfresco.com/wiki/Node_Service_API_Design , la méthode addChild pourrait remplir mon besoin
mais comment créer un noeud (correspondant au parametre childRef) sans passer par createNode ?

Bref, je suis à la recherche de code au plus proche de mon modèle.


Mon contexte est un customisation du client web aussi, je trouverais dommage d'utiliser les web services auxquels je suis plus habitué.
rivarola
Active Member

Re: Nodeservice et nouveaux types

Bonjour,

En supposant que tu as déjà défini dans ton model custom une child association portée par ton type héritier de cm:content (ou un aspect que tu colles dessus) :

        // parent est le NodeRef du noeud parent
        // assocQName est le QName de ta child association
        // filename est le nom que tu peux donner à l'instance d'association que tu crées
        // (tu peux mettre un nom bidon si tu as un seul fils et que ce nom n'est pas significatif)
        // childProps est optionnel (Map<QName, Serializable) contenant les propriétés du noeud fils
        ChildAssociationRef assoc = nodeService.createNode(parent, assocQName, QName.createQName(assocQName
            .getNamespaceURI(), filename), ContentModel.TYPE_BASE, childProps);
        NodeRef child = assoc.getChildRef();
jbaton
Member II

Re: Nodeservice et nouveaux types

Merci beaucoup de votre aide.

Suite à votre conseil, j'ai adapté le code ci-dessus à mon modèle (en donnant le QName de mon TD2 en tant que 4e argument).  
Cela ne marchait pas.
J'ai obtenu une erreur  java.util.regex.PatternSyntaxException: Illegal repetition

Une recherche sur les forums français et anglais me donne cette page http://forums.alfresco.com/viewtopic.php?f=4&t=5053&p=15870&hilit=Illegal+repetition#p15870
dont la conclusion est que la vérification de la valeur de l'élément role (de target) est buggée.
Il faut mettre un QName en argument mais les accolades ne correspondent pas à une expression régulière utilisée.

Un truc sympathique et bien caché à faire perdre des jours, en fait.

Donc, j'ai enlevé cet élément role de mon modele et le code fonctionne.

Voici donc un nouveau commandement sous forme d'homophonie  PAS DE ROLE  !   :lol:

Merci encore de votre aide.