[Résolu]Mettre un type aux documents

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

[Résolu]Mettre un type aux documents

Bonjour,

Dans mon application, j'ai besoin de spécifier un type de document (rapport, présentation, notes de réunions, note techniques etc…) pour chaque document que je rentre dans alfresco.
J'ai remarqué qu'il pouvait exister 3 solutions possibles:
- utiliser les catégories
- utiliser les règles, à travers un Custom Aspect
- utiliser Custom Content Type qui crée une liste déroulante.

De plus, je ne comprends pas très bien ce qu'apportent les categories.

Quelqu'un aurait-il des éclaircissement?
En vous remerciant.
19 Replies
michaelh
Active Member

Re: [Résolu]Mettre un type aux documents

Bonjour, et bienvenue ici Smiley Happy

Un début de réponse tiré du message juste au dessus
http://forum.alfresco-fr.org/viewtopic.php?p=2067#p2067

Dans un premier temps, voyez les catégories comme une méta donnée supplémentaire, tout en gardant à l'esprit que celles-ci sont organisées de manière hiérarchiques, et permettent donc des classements plus précis.
rguinot
Customer

Re: [Résolu]Mettre un type aux documents

Bonjour,

Vous pouvez définir effectivement des nouveaux types de documents, auxquels vous pouvez associer de nouvelles métadonnées communes ou non, des associations (liens entre documents)…

Le typage peut se faire à l'ajout du contenu par exemple. Il peut aussi être mis en oeuvre par une règle qui éxecutera une action de type "Specialize type".
Les possibilités sont nombreuses.

Je vous invite à lire cette page du wiki pour avoir une vision plus complète du sujet et des exemples détaillés : http://wiki.alfresco.com/wiki/Data_Dictionary_Guide
Notamment le chapitre 4.

Vous pourriez aussi bien utiliser les catégories, qui permettent d'attacher des labels à un document. Un des intérêts est la multifiliation :  un contenu peut être associée à plusieurs catégories. Les catégories peuvent également être hierarchisée. D'autre part, la version 2.2 disponible dans quelques semaines devrait apporter la possibilité de naviguer au sein du repository via les catégories en plus de la navigation par espace.
vivi
Member II

Re: [Résolu]Mettre un type aux documents

Bonjour,

Merci pour vos réponses.

Si je comprends bien, il serait plus judicieux de définir une catégorie pour chacun des types de documents que je souhaite distinguer.
Puis ajouter des champs (aspect) en plus pour les méta données que je souhaite entrer comme l'auteur du document, sa référence etc..

Comme j'ai une cinquantaine de type, est-il possible de les définir à partir des fichiers de configuration xml?

Merci bien.
rguinot
Customer

Re: [Résolu]Mettre un type aux documents

Premièrement les métadonnées "classiques" que vous mentionnez (auteur, référence…) sont déjà gérées par Alfresco (certaines peuvent nécessiter l'ajout d'un aspect).
Autre point, certaines métadonnées comme le nom, l'auteur,…, peuvent être extraites automatiquement du document original. Voir cette page pour plus d'informations : http://wiki.alfresco.com/wiki/Metadata_Extraction

Pour le reste, tout dépend de votre besoin et les deux solutions se complètent.
En ce qui concerne les catégories, il est possible de surcharger celles définies par défaut, au boot, et lors du premier démarrage uniquement (appelé bootstrap).

Pour cela, il faut déclarer deux fichiers (exemple):
custom-bootstrap-context.xml, à placer directement dans le répertoire d'extension :



 <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>

    <bean id="spacesBootstrap" parent="spacesStoreImporter">
       <property name="bootstrapViews">
          <list>
             <props>
                <prop key="path">/</prop>
                <prop key="location">alfresco/bootstrap/spaces.xml</prop>
                <prop key="messages">alfresco/messages/bootstrap-spaces</prop>
             </props>
             <props>
                <prop key="path">/</prop>
                <prop key="location">alfresco/bootstrap/system.xml</prop>
             </props>
             <props>
                <prop key="path">/</prop>
                <!–prop key="location">alfresco/bootstrap/categories.xml</prop–>
                <prop key="location">alfresco/extension/bootstrap/custom-categories.xml</prop>
             </props>
             <props>
                <prop key="path">/</prop>
                <prop key="location">alfresco/bootstrap/multilingualRoot.xml</prop>
             </props>
             <props>
                <prop key="path">/${spaces.company_home.childname}/${spaces.guest_home.childname}</prop>
                <prop key="location">alfresco/bootstrap/tutorial.xml</prop>
                <prop key="messages">alfresco/messages/bootstrap-tutorial</prop>
             </props>
             <props>
                <prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.templates.childname}</prop>
                <prop key="location">alfresco/templates/software_engineering_project.xml</prop>
                <prop key="messages">alfresco/messages/bootstrap-templates</prop>
             </props>
             <props>
                <prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.templates.content.childname}</prop>
                <prop key="location">alfresco/templates/content_template_examples.xml</prop>
             </props>
             <props>
                <prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.templates.content.childname}</prop>
                <prop key="location">alfresco/templates/readme_template.xml</prop>
             </props>
             <props>
                <prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.templates.email.childname}</prop>
                <prop key="location">alfresco/templates/email_templates.acp</prop>
             </props>
             <props>
                <prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.templates.rss.childname}</prop>
                <prop key="location">alfresco/templates/rss_templates.acp</prop>
             </props>
             <props>
                <prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.scripts.childname}</prop>
                <prop key="location">alfresco/bootstrap/example_javascripts.acp</prop>
             </props>
             <props>
                <prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}</prop>
                <prop key="location">alfresco/bootstrap/webScripts.xml</prop>
             </props>
             <props>
                <prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}</prop>
                <prop key="location">alfresco/bootstrap/webScriptsExtensions.xml</prop>
             </props>
             <props>
                <prop key="path">/${spaces.company_home.childname}/${spaces.dictionary.childname}</prop>
                <prop key="location">alfresco/bootstrap/webScriptsReadme.xml</prop>
             </props>
          </list>
       </property>
    </bean>

</beans>


Ceci surchargera la définition du fichier de description des catégories à charger au bootstrap (custom-categories.xml).

Deuxièment, il faut définir custom-categories.xml , à placer dans extension/bootstrap/custom-categories.xml :

<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>


Au bootstrap, Alfresco chargera les catégories ci-dessus au lieu de celles par défaut.
Pour l'administration ultérieure de celles-ci , il faudra passer par la console d'administration.


SI vous choisissez de définir des types dans un modèle, je vous renvoie au lien précédemment envoyé.
michaelh
Active Member

Re: [Résolu]Mettre un type aux documents

Catégories + Aspects est sans doute le mode d'enrichissement le plus souple en effet.
(Je déconseille souvent les types dans un premier temps car ils sont plus contraignants).

Et oui, tout est possible … voir obligatoire par l'intermédiaire de fichiers de configuration XML (de 1 à 50, selon la modularité que vous souhaitez).

Pour découvrir tout cela, on a toujours pas fait mieux que le tutoriel de Jeff Potts … (il va finir par s'inquiéter du fait qu'on le cite aussi souvent ici  :wink: ).
En Anglais mais incontournable, "“Working with Custom Content Types”.


Hum … mon post est moins poussé techniquement que celui de Romain … j'ai un peu honte de ma fainéantise Smiley Happy
vivi
Member II

Re: [Résolu]Mettre un type aux documents

Bonjour,

Il est très intéressant le tutoriel de Jeff Potts, merci de me l'avoir indiqué!

C'est vrai que certain champs sont déjà défini, mais j'en aurais besoin d'autre qui ne sont pas définis par défaut.
Le tutoriel donne un très bon exemple de comment peuvent être ajouter des champs pour des types de document que l'on crée, mais comme certains champs sont communs à tous les documents qui seront dans Alfresco, je me demande comment il est possible d'implémenter ceci…



Quelque soit la méthode que je choisi pour définir les type de mes documents, j'aimerai que celui-ci soit défini de façon automatique. Pour cela, je devrais certainement créer une règle qui en fonction du nom du document, les noms étant standardisés, déduira le type du document. Est-il donc possible d'utiliser les expressions régulières au travers de l'interface web pour realiser cela, ou dois-je encore passer par les fichiers de configurations?
rguinot
Customer

Re: [Résolu]Mettre un type aux documents

Si tu as des métadonnées communes à plusieurs types, tu peux définir ces métadonnées au sein d'un ou plusieurs aspects, puis référencer ses aspects en tant que mandatory-aspects, exemple :



<type name="monNamespace:monType1">
…..
          <mandatory-aspects>
            <aspect>monNamespace:monAspect</aspect>
                 …
          </mandatory-aspects>
</type>

<type name="monNamespace:monType2">
…..
          <mandatory-aspects>
            <aspect>monNamespace:monAspect</aspect>
                 …
          </mandatory-aspects>
</type>

<aspect name="monNamespace:monAspect">
      …..
</aspect>



Concernant ton second point, tu peux effectivement créer une règle dont la condition serait "le contenu contient le texte précisé" , et l'action "specialize-type".
vivi
Member II

Re: [Résolu]Mettre un type aux documents

Ok, mais dans quel fichier faut-il écrire cela, customModel.xml et web-client-config-custom.xml?

Pour la recherche avec des expressions régulières, j'entends une recherche avec des patterns.
Les noms de mes documents sont normalisés avec des points séparant chaque partie du nom: champ1.champ2.champ3.champ4. … .extension

Pour la règle, j'ai donc besoins de regarder ce qui se trouve dans le champ2 par exemple qui défini le type de document. Mais dans ce type de document, il y aussi une autre information qui n'est pas toujours présente (ex. champ2 ou Ichamp2, …) et qui empêche de faire une simple recherche avec *.champ2.* .
Est-il donc possible d'utiliser les expressions régulières, d'une façon similaire à Perl?

Merci!
rguinot
Customer

Re: [Résolu]Mettre un type aux documents

En fait non Smiley Happy
Regarde le wizard de création de règle.
Tu peux avoir une action dont la condition est "contient le texte précisé" qui permet des caractères joker "simples".
Ex: *.txt pour obtenir la liste des fichiers textes ;  *zz* pour obtenir la liste des fichiers dont leur nom contient zz.

Si tu souhaites plus, il te faudra ss doute mais je peux me tromper développer une condition custom et la lecture de org/alfresco/repo/action/evaluator/ComparePropertyValueEvaluator.java devrait t'aider.

Tu pourras également utiliser des contraintes pour forcer tes fichiers a respecter une norme, et la tu pourras utiliser des regex sans développement supplémentaires.