Déplacement et changement de status de document ... [Résolu]

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

Déplacement et changement de status de document ... [Résolu]

Bonjour,

Je souhaite écrire une fonction qui me permette de changer le status d'un document et qui le déplacerait dans un autre dossier. Cette fonction utilise les droits dc compte admin. A ce jour j'arrive à changer le status du document, mais ne sais pas comment faire pour déplacer le document du dossier courrant Draf vers le dossier ..Review

Voici le code utilisé. Ce code est utilisé par un Workflow avancé.

        Repository repository = (Repository)this.factory.getBean("JCR.Repository"); 
        Session session = null;
        try {
           session = repository.login(new SimpleCredentials("admin","admin".toCharArray()));
           Node root = session.getRootNode();
           Node companyHome = root.getNode(path);
                     
           // Changement de status du document en "For Approval"
           companyHome.setProperty("lpr:DocumentStatus", "For Approval");
           companyHome.save();

           // Ici code manquant de déplacement vers le dossier ..Review

           …

           // Affichage des propriétés du document pour Debug uniquement
           PropertyIterator iterator = companyHome.getProperties();
           while(iterator.hasNext()) {
             Property prop = iterator.nextProperty();
             if (!prop.getDefinition().isMultiple()) {
                String property = prop.getName();
                System.out.println("JCR - property :         " + property);
                if (!property.equals("cm:content")) {
                   System.out.println("JCR - Property - " + property + " = " + prop.getString());
                }
                if (property.equals("lpr:DocumentStatus")) {
                   System.out.println("JCR - Status: " + property + " = " + prop.getString());
                }
             }
           }
        }
       
        finally {
           session.save();
           session.logout();
        }
Si quelqu'un peut m'aider, car je pêche complètement Smiley Sad
8 Replies
rivarola
Active Member

Re: Déplacement et changement de status de document ... [Résolu]

Bonjour,

Pourquoi utilise-tu l'API JCR pour accéder au repository ? Tu ne peux pas le faire en WebService ou API native Alfresco ?
huberd
Member II

Re: Déplacement et changement de status de document ... [Résolu]

Bonjour,

Pourquoi utilise-tu l'API JCR pour accéder au repository ? Tu ne peux pas le faire en WebService ou API native Alfresco ?
Je pense également que les Webservices seraient beaucoup plus adaptés, mais vois-tu, je débute dans la programmation Java, alors si tu peux m'aider, je t'en remercie d'avance. L'API JCR semble assez restreinte, et c'est le seul exemple que j'ai pu trouver à ce jour et je comptais également m'orienter vers les Webservices.

Tu as des liens d'exemples sur les WebServices ou API Native Alfresco ?
huberd
Member II

Re: Déplacement et changement de status de document ... [Résolu]

Bon, je pense avoir touver, je vous donne la solution dès que je l'aurais correctement testée.
huberd
Member II

Re: Déplacement et changement de status de document ... [Résolu]

Voici le code utilisant JCR pour l'authentification et les API Alfresco pour accéder et modifier les informations de document dans la repository Alfresco.

        Repository repository = (Repository)this.factory.getBean("JCR.Repository"); 
        Session session = null;
        try {
           session = repository.login(new SimpleCredentials("workflow","password".toCharArray()));
           // access the page via JCR
           Node rootNode = session.getRootNode();
           Node curentNodeRef = rootNode.getNode(path);
          
           // Convert the JCR Node to an Alfresco Node Reference
           NodeRef AdminNodeRef = JCRNodeRef.getNodeRef(curentNodeRef);

           // Update status in Document
           nodeService.setProperty(AdminNodeRef,PROP_DOCUMENT_STATUS,status);
           session.save();

           // Ici code manquant de déplacement vers le dossier ..Review

           …
           session.save();
        }
       
        finally {
           session.logout();
        }
pour le moment je ne sais toujours pas comment faire pour déplacer mon document, mais je pense que ce n'est plus qu'une question de temps, à moins que…
rivarola
Active Member

Re: Déplacement et changement de status de document ... [Résolu]

Bonjour,

Il y a des exemples dans le SDK Alfresco pour utiliser les WebService (projet FirstWebServiceClient) et l'API native (projet FirstFoundationClient). En fait quasiment personne n'utilise l'API JCR, donc tu trouveras peu de monde pour t'aider Smiley Sad
huberd
Member II

Re: Déplacement et changement de status de document ... [Résolu]

Bonjour,

Il y a des exemples dans le SDK Alfresco pour utiliser les WebService (projet FirstWebServiceClient) et l'API native (projet FirstFoundationClient). En fait quasiment personne n'utilise l'API JCR, donc tu trouveras peu de monde pour t'aider Smiley Sad
Ok, c'est bien dommage, mais bon le hic, c'est que j'arrive à faire fonctionner mon bout de code en utilisant une authentification JCR et récupère ainsi un Node JCR que je convertis en Node de référence Alfresco.

cf: http://wiki.alfresco.com/wiki/Introducing_the_Alfresco_Java_Content_Repository_API#Mixing_JCR_and_Al... (Mixing JCR and Alfresco APIs)

Comment puis-je me connecter à mon repository et effectuer des actions sur mes attributs en utilisant le code ci-dessous par exemple :

AuthenticationService authenticationService = serviceRegistry.getAuthenticationService();
authenticationService.authenticate("WORKFLOW_USER", "WORKFLOW_PASSWORD".toCharArray());
NodeRef AdminNodeRef = …
Comment à partir de cet authentification, je peux récupérer le NodeService, alors que j'y arrive en JCR (cf ci-dessous)

session = repository.login(new SimpleCredentials("WORKFLOW_USER","WORKFLOW_PASSWORD".toCharArray()));
Node curentNodeRef = rootNode.getNode(path);
et que j'arrive à convertir ensuite de la sorte

// Convert the JCR Node to an Alfresco Node Reference
NodeRef AdminNodeRef = JCRNodeRef.getNodeRef(curentNodeRef);

// A partir d'ici je peux faire tous ce que je veux sur les élémnets de mon repository, même déplacer un Node.


session.logout();
rivarola
Active Member

Re: Déplacement et changement de status de document ... [Résolu]

Je ne connaissais pas cette page du Wiki expliquant comment mélanger du code JCR et de l'API Alfresco mais ça a l'air sympa.
Si je reviens à ton post du 23/10/07 à 10h59, tu as donc réussi à ouvrir une session via la JCR, puis récupérer le NodeRef et le NodeService Alfresco. Ensuite tu peux appeler la méthode moveNode du NodeService pour déplacer ton noeud vers le dossier Review, pour peu que tu aies son NodeRef…
huberd
Member II

Re: Déplacement et changement de status de document ... [Résolu]

Je ne connaissais pas cette page du Wiki expliquant comment mélanger du code JCR et de l'API Alfresco mais ça a l'air sympa.
Si je reviens à ton post du 23/10/07 à 10h59, tu as donc réussi à ouvrir une session via la JCR, puis récupérer le NodeRef et le NodeService Alfresco. Ensuite tu peux appeler la méthode moveNode du NodeService pour déplacer ton noeud vers le dossier Review, pour peu que tu aies son NodeRef…
Oui, c'est ce que j'ai fait, et ça marche, mais mon code ressemble plus à une bidouille amateur que du grand professionalisme. Je le mets à disposition très bientôt. Avis aux amateurs Smiley Very Happy