Associer des catégories à un document

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

Associer des catégories à un document

Bonjour,

Je travail avec une version alfresco community 3.0 installée sur un serveur linux mandriva 10 avec une JVM - v1.6.0_06-b02.
J'ai cherché à crééer un modèle de document dans alfresco qui me permette d'associer des catégories à un document associé à ce modèle.
En cherchant dans le forum j'ai trouvé que l'aspect "cm:generalclassifiable" me permettait de rendre la document catégorisable. Je l'ai ajouté en tant que "mandatory-aspect".
Ensuite, j'ai chercher à ce que le créateur du document rajoute dès son importation dans la base les catégories associées à ce document comme ceci :

<aspect name="qse:categories">
         <title>categories qse du document</title>   
         <parent>cm:generalclassifiable</parent>
         <properties>
            <property name="qse:TypeDocument">
               <title>Type de document</title>
               <type>d:category</type>
               <mandatory>true</mandatory>
               <index enabled="true">
                      <atomic>true</atomic>
                      <stored>true</stored>
                        <tokenised>true</tokenised>
                     </index>
            </property>
            <property name="qse:Processus">
               <title>Processus rattaché</title>
               <type>d:category</type>
               <mandatory>true</mandatory>
               <index enabled="true">
                      <atomic>true</atomic>
                      <stored>true</stored>
                        <tokenised>true</tokenised>
                     </index>
            </property>
            <property name="qse:ChapitreNorme">
               <title>Chapitre de la norme</title>
               <type>d:category</type>
               <mandatory>true</mandatory>
               <index enabled="true">
                      <atomic>true</atomic>
                      <stored>true</stored>
                        <tokenised>true</tokenised>
                     </index>
            </property>
         </properties>
      </aspect>
   

Le web-clien-config-cutsom prend en compte ces aspects pour qu'ils soit implémentés dans le clientweb.

Cependant une fois le document importé et la catégories ajoutées, on voie bien que le document est catégorisable et on retrouve bien les catégorie dans les propriétés mais AUCUNE catégorie n'est associée au document. Par exemple on ne peut retrouver les documents via le navigateur de catégories.

Comment faire le lien entre les propriétés "catégories" du document ajoutées dans les aspects modèle et les catégories implémentées dans alfresco pour être utilisables dans le navigateur de catégories ?
4 Replies
rivarola
Active Member

Re: Associer des catégories à un document

pierrem
Member II

Re: Associer des catégories à un document

Bonjour rivarola,

Merci beaucoup pour ta réponse.

En parcourant le forum j'étais effectivement tombé sur le tread que tu m'indiques mais je ne suis pas arrivé à l'utiliser.

En fait je ne comprends vraiment pas cette partie là en gras :
une propriété de type d:category n'est indexée que si elle est portée par un aspect
cet aspect doit hériter de cm:classifiable
le nom de cet aspect doit correspondre au nom du category_root racine de la classification

Cela signifie t'il, comme l'indique Romain, qu'il faut simplement surcharger les catégories par défaut d'Alfresco grâce à un custom-categories.xml comme ceci :

<view:view xmlns:view="http://www.alfresco.org/view/repository/1.0"
           xmlns:sys="http://www.alfresco.org/model/system/1.0"
           xmlns:cm="http://www.alfresco.org/model/content/1.0">

   <cm:category_root view:childName="cm:categoryRoot">
        <view:acl>
            <view:ace view:access="ALLOWED">
                <view:authority>guest</view:authority>
                <view:permission>Read</view:permission>
            </view:ace>
        </view:acl>
      <cm:name>categories</cm:name>
      <cm:categories>

         <cm:category view:childName="cm:generalclassifiable">
                        <cm:name>General</cm:name>
            <cm:subcategories>
                                    <cm:category>
                  <cm:name>Categorie 1</cm:name>
               </cm:category>
               <cm:category>
                  <cm:name>Categorie 2</cm:name>
                                                <cm:subcategories>
                          <cm:category>
                                 <cm:name>Sous catégorie A</cm:name>
                                                         </cm:category>
                                                         <cm:category>
                                 <cm:name>Sous catégorie B</cm:name>
                                                         </cm:category>
                  </cm:subcategories>
               </cm:category>
            </cm:subcategories>
                   </cm:category>
      </cm:categories>
   </cm:category_root>

</view:view>
ça, c'est de l'ajout de fichier xml je comprends.

Par contre je ne voie pas très bien la manière d'utiliser cela : http://wiki.alfresco.com/wiki/Classification_And_Categories
Je voie bien qu'il faut ajouter un code pour créer les catégories
// To create a root category:
NodeRef newRootCat = categoryService.createRootCategory(
      spacesStore,
      ContentModel.ASPECT_GEN_CLASSIFIABLE,
      "newRootCat");
// To create a category
NodeRef newCategory = categoryService.createCategory(newRootCat, "newCategory");

Ou pour pour manipuler un node
NodeRef targetNode;
NodeRef categoryNode;

targetNode = …

categoryNode = …

// Replace any existing aspects
ArrayList<NodeRef> categories = new ArrayList<NodeRef>(1);
categories.add(categoryNode);
if(!nodeService.hasAspect(targetNode, ContentModel.ASPECT_GEN_CLASSIFIABLE)
{
    HashMap<QName, Serializable> props = new HashMap<QName, Serializable>();
    props.put(ContentModel.PROP_CATEGORIES, categories);
    nodeService.addAspect(targetNode, ContentModel.ASPECT_GEN_CLASSIFIABLE, props);
}
else
{
    nodeService.setProperty(targetNode, ContentModel.PROP_CATEGORIES, categories);
}

Mais étant novice dans Alfresco ou en java je ne voie pas comment ajouter ce code dans mon module alfresco. Est-ce par une balise [script] [/script] ?

En résumé j'ai trois questions :
1. Est-ce que la méthode qui consite à compléter le bootstrap par un custom-categories.xml suffit elle pour pouvoir associer toutes ces catégories à un fichier et les retrouver via le navigateur de catégories ?
2.Si non -> Comment compléter mon modèle fait de fichier xml pour ajouter un code qui manipule les nodes directement et pouvoir ainsi utiliser les indications données ici http://wiki.alfresco.com/wiki/Classification_And_Categories ?
3. Le bootstap est il executé lorsque on a redéploie le war d'alfresco ? Par exemple après l'ajout d'un module par amps ?

Merci d'avance
rivarola
Active Member

Re: Associer des catégories à un document

Bonjour,


1/ oui
Pour faire vite, oui il suffit d'importer de nouvelles branches de catégories sous l'unique categoryRoot existant à ce jour, à savoir cm:generalclassifiable pour pouvoir les utiliser sur des documents, mais ces nouvelles catégories ne seront exploitables (indexées en particulier) que si elles sont affectées à la propriété cm:categories de l'aspect cm:generalclassifiable. Le fichier XML importé au bootstrap est le moyen le plus simple. Tu ne dois alors pas définir d'aspect à toi pour les exploiter mais rester dans cm:categories.

2/
Une seconde solution un peu plus complexe consiste à importer via ce fichier XML non pas des catégories sous cm:generalclassifiable mais un nouveau categoryRoot à toi (un cran plus haut, donc). Pour que ces nouvelles catégories soient exploitables il faudra qu'elles soient affectées à une propriété définie dans un aspect qui a le même nom que la categoryRoot nouvellement créée (le dernier point en gras). Sinon elles seront ignorées par Alfresco lors de l'indexation. En outre elles ne seront pas visibles dans l'interface d'administration des catégories ! Cette seconde solution est donc déconseillée à moins de vraiment savoir où l'on va.

3/ La mécanique de bootstrap d'Alfresco permet d'importer un fichier custom-categories.xml à n'importe quel redémarrage de la plateforme, qu'il y ait eu redéploiement de WAR ou non. Il faut bien penser à enlever le fichier pour le redémarrage suivant.

L'utilisation de catégories custom est vraiment un sujet complexe et il faut avoir lu le code Alfresco pour bien comprendre ce qui se passe. Il est dommage qu'on ne puisse pas simplement par configuration définir ses propres propriétés et les associer à des catégorisations spécifiques, mais ça évoluera peut-être dans le furut…
pierrem
Member II

Re: Associer des catégories à un document

Merci beaucoup pour le réponse.
J'essaye de mettre ces conseil en application. Si j'y arrive je posterais le code si ça peut être utile…