Problème rencontré lors de la mise à jour de doc. [Résolu]

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

Problème rencontré lors de la mise à jour de doc. [Résolu]

Bonjour,

Dans notre process qualité, les documents doivent suivre un workflow de validation sur lequel je continue de travailler depuis un bon moment. A ce jour je suis à 85 pour ne pas dire 90% de sa réalisation.

Avant tout, voici une petite explication.

Le document est soumis par workflow a validation :

etape 1: Le document est soumis à une liste de relecteurs qui doivent approuver la relecture
etape 2: Le document est soumis à une liste d'approbateur qui doivent approuver le document
etape 3: Le document est soumis au service qualité pour pouvoir être publié définitivement dans le référentiel

Le passage d'une étape à l'autre n'est possible que par approbation de la précédente.

A ce jour les étapes 1 et 2 ainsi que les rejets fonctionnent à merveille.

Dans l'étape 3, le workflow génère une copie du document original pour le service qualité. Ce dernier peut alors récupérer la copie pour pouvoir y ajouter un agrémént qualité en bas de page du document pour le rendre authentique. Ce document est alors convertit en PDF par le service qualité, puis réinjécté par dessus la copie (document PDF écrasant le document Word).

Lors de la mise à jour de la copie (document Word par exemple), par le document PDF, l'extension reste inchangée dans les propriétés du document, par contre le Mime Type change bien en application/pdf. Pour palier à ce problème, j'ai dû dévélopper un analyseur d'extension. Ce dernier à pour but de modifier l'extension dans le nom du document pour le rendre cohérent avec le Mime Type.

Le code généré est le suivant:

// Get Document Name
String documentName = (String)nodeService.getProperty(actionedUponNodeRef, ContentModel.PROP_NAME);
System.out.println("Get Extension for document: " + documentName);

// Check Document Extension
// Get Mime Type
String contentMimeType = this.contentService.getWriter(actionedUponNodeRef, ContentModel.PROP_CONTENT, true).getMimetype().toString();
System.out.println("Content Mime Type: " + contentMimeType);
                  
String contentExtension = documentName.substring(documentName.lastIndexOf('.')+1, documentName.length());
System.out.println("L'extension est: " + contentExtension);

if (contentMimeType.equals(PDF_MIME_TYPE) && !contentExtension.equals(PDF_EXTENSION)) {
   System.out.println("L'extension courrante ne correspond pas au Mime Type courrant");
   documentName = documentName.replace(contentExtension, PDF_EXTENSION);
   System.out.println("Le nouveau nom est: " + documentName);
   nodeService.setProperty(actionedUponNodeRef, ContentModel.PROP_NAME,documentName);
}
Le code fonctionne très bien et me remplace correctement l'extension .doc en .pdf.

Là où cela ce complique, c'est quand je demande à nouveau le path du document, il semble que ce dernier ne soit pas contruit à partir du nom du document et obtient toujours un path avec le nom du document avec l'ancienne extension, ce qui est fort génant.

System.out.println("Node Path:        " + nodeService.getPath(actionedUponNodeRef).toString());
ce qui donne comme résultat suivant :

/{http://www.alfresco.org/model/application/1.0}company_home/{http://www.alfresco.org/model/content/1....

Comment puis-je faire pour mettre à jour également le path ou le forcer à se reconstruire correctement ?

Merci pour votre aide
5 Replies
rivarola
Active Member

Re: Problème rencontré lors de la mise à jour de doc. [Résolu]

Bonjour,

J'ai lu en diagonale mais en ce qui concerne le Path, il n'est effectivement pas construit à partir du nom du document (et des espaces parents) mais à partir du nom des instances de ChildAssociation traversées pour aller de la racine au document. Or certains services créent des noms de child association baroques (genre cm:move pour l'action de déplacement).
Je ne sais pas s'il est possible de renommer la child association a posteriori, mais on peut par contre parfois remédier à ce problème en gérant soi-même la création d'un noeud (et donc de la child association qui le relie à son parent) au lieu de passer par des services de haut niveau.
Je ne sais pas si ça répond à ta question, mais cette petite précision + un passage par le NodeBrowser pour constater les noms mis par défaut par Alfresco peuvent éclairer ta lanterne.
huberd
Member II

Re: Problème rencontré lors de la mise à jour de doc. [Résolu]

Bonjour,

J'ai lu en diagonale mais en ce qui concerne le Path, il n'est effectivement pas construit à partir du nom du document (et des espaces parents) mais à partir du nom des instances de ChildAssociation traversées pour aller de la racine au document. Or certains services créent des noms de child association baroques (genre cm:move pour l'action de déplacement).
Je ne sais pas s'il est possible de renommer la child association a posteriori, mais on peut par contre parfois remédier à ce problème en gérant soi-même la création d'un noeud (et donc de la child association qui le relie à son parent) au lieu de passer par des services de haut niveau.
Je ne sais pas si ça répond à ta question, mais cette petite précision + un passage par le NodeBrowser pour constater les noms mis par défaut par Alfresco peuvent éclairer ta lanterne.
euhhhhhhhhh… en clair cela donne quoi ? car je suis un peu largué…
huberd
Member II

Re: Problème rencontré lors de la mise à jour de doc. [Résolu]

Quel classe Java est utilisée lorsque l'on met à jour les informations d'un document tel que le nom, le titre ou l'auteur par exemple à partir de l'interface Web ?
rivarola
Active Member

Re: Problème rencontré lors de la mise à jour de doc. [Résolu]

Je ne sais pas si je pourrai formuler de manière limpide… Smiley Indifferent
Regarde cette méthode du NodeService pour créer un noeud :
public ChildAssociationRef createNode(
            NodeRef parentRef,
            QName assocTypeQName,
            QName assocQName,
            QName nodeTypeQName,
            Map<QName, Serializable> properties)
Dans cette méthode le paramètre assocQName est le nom de la child association qui relie le père au fils.
Dans le paramètre properties tu peux spécifier les propriétés du noeud fils, et en particulier son nom (cm:name).

Pour construire le Path c'est le paramètre assocQName qui est utilisé, par le name du fils.
La plupart des services mettent la même valeur pour les deux. Mais malheureusement certains services mettent un assocQName différent du cm:name du fils, et c'est là que tes ennuis commencent…

Utilise cette méthode pour tester et va vérifier dans le Node Browser d'Alfresco, tu verras dans les tableaux les cases où se retrouvent ces différents paramètres, et lesquels sont utilisés pour générer le Path.
huberd
Member II

Re: Problème rencontré lors de la mise à jour de doc. [Résolu]

Bon en creusant un petit peu, j'ai fini par trouver la solution adéquate à mon problème.

En faite, j'ai fini par utiliser FileFolderService pour renommer mon document, et cela marche à merveille. Plus besoin donc de créer un nouveau node. Je fini par m'hépater moi même Smiley Wink

Voici le code utilisé :

// Get Document Name
String documentName = (String)this.nodeService.getProperty(actionedUponNodeRef, ContentModel.PROP_NAME);
System.out.println("Get Extension for document: " + documentName);

// Check Document Extension
// Get Mime Type
String contentMimeType = this.contentService.getWriter(actionedUponNodeRef, ContentModel.PROP_CONTENT, true).getMimetype().toString();
System.out.println("Content Mime Type: " + contentMimeType);

String contentExtension = documentName.substring(documentName.lastIndexOf('.')+1, documentName.length());
System.out.println("L'extension est: " + contentExtension);
          
if (contentMimeType.equals(PDF_MIME_TYPE) && !contentExtension.equals(PDF_EXTENSION)) {
   System.out.println("L'extension courrante ne correspond pas au Mime Type courrant");
   documentName = documentName.replace(contentExtension, PDF_EXTENSION);
   System.out.println("Le nouveau nom est: " + documentName);
   try {
      this.fileFolderService.rename(actionedUponNodeRef, documentName);
      this.nodeService.setProperty(actionedUponNodeRef, ontentModel.PROP_NAME,documentName);
   }
   catch (Exception e){
      logger.error(e.getMessage());
   }