cancel
Showing results for 
Search instead for 
Did you mean: 

problème aspect

hlander10
Champ in-the-making
Champ in-the-making
Bonjour,

Je tente de créer des propriétés différentes en fonction de répertoire de destinations et donc de règles de classement.

J'ai modifié le fichier web-client-config-custon.xml, et le fichier custonModel.xml et custom-model-context.xml.

Tout fonctionne parfaitement….. déjà premier succès et c'est vraiment bien..

Je pousse donc un peu plus loin je vais devoir créer 20 type de propriété il là mes fichier web-client-config-custom.xml et customModel.xml vont devenir énorme et vite illisible.

J'ai donc voulu créer un fichier (type1 = contrat) contratModel.xml
<?xml version="1.0" encoding="UTF-8"?>

<!– Custom Model –>

<!– Note: This model is pre-configured to load at startup of the Repository.  So, all custom –>
<!–       types and aspects added here will automatically be registered –>

<model name="custom:contratModel" xmlns="http://www.alfresco.org/model/dictionary/1.0">

   <!– Optional meta-data about the model –>  
   <description>Contrat Model</description>
   <author></author>
   <version>1.0</version>

   <imports>
        <!– Import Alfresco Dictionary Definitions –>
      <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
      <!– Import Alfresco Content Domain Model Definitions –>
      <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
   </imports>

   <!– Introduction of new namespaces defined by this model –>
   <!– NOTE: The following namespace custom.model should be changed to reflect your own namespace –>
   <namespaces>
      <namespace uri="contrat.model" prefix="custom"/>
   </namespaces>
     
    <aspects>
      <!– Definition of new Content Aspect: Individu Details –>
     
      <aspect name="custom:ContractuelDetails">
         <title>Contrat Details</title>
         <properties>
            <property name="custom:ContractuelMatricule">
                       <title>Matricule</title>
                       <type>d:text</type>
                  </property>
                  <property name="custom:ContractuelSociete">
                       <title>Societe</title>
                       <type>d:text</type>
                  </property>             </properties>
      </aspect>
         </aspects>
</model>


Le fichier contrat-context.xml

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

<beans>

    <!– Registration of new models –>   
    <bean id="extension.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
        <property name="models">
            <list>
                <value>alfresco/extension/contratModel.xml</value>
            </list>
        </property>
    </bean>
         
</beans>

Et enfin web-client-config-custom.xml

<alfresco-config>

   <!– Example of overriding the from email address –>
   <!–
   <config>
      <client>
         <from-email-address>someone@your-domain.com</from-email-address>
         <search-max-results>100</search-max-results>
      </client>
   </config>
   –>

   <!– Example of adding languages to the list in the login page –>
   <config evaluator="string-compare" condition="Languages">
      <languages>
         <language locale="ca_ES">Catalan</language>
         <language locale="hr_HR">Croatian</language>
         <language locale="cs_CZ">Czech</language>
         <language locale="da_DK">Danish</language>
         <language locale="de_DE">German</language>
         <language locale="es_ES">Spanish</language>
         <language locale="el_GR">Greek</language>
         <language locale="fi_FI">Finnish</language>
         <language locale="fr_FR">French</language>
         <language locale="it_IT">Italian</language>
         <language locale="ja_JP">Japanese</language>
         <language locale="du_NL">Dutch</language>
         <language locale="pl_PL">Polish</language>
         <language locale="pt_PT">Portuguese</language>
         <language locale="pt_BR">Portuguese (Brazilian)</language>
         <language locale="ru_RU">Russian</language>
         <language locale="sv_SV">Swedish</language>
         <language locale="tr_TR">Turkish</language>
         <language locale="zh_CN">Simplified Chinese</language>
      </languages>
   </config>

   <!– Example of configuring advanced search –>
   <!–
   <config evaluator="string-compare" condition="Advanced Search">
      <advanced-search>
         <content-types>
         </content-types>
         <custom-properties>
            <meta-data aspect="app:simpleworkflow" property="app:approveStep" />
         </custom-properties>
      </advanced-search>
   </config>
   –>

   <!– Example of changing the sort direction for a view in the client –>
   <!–
   <config evaluator="string-compare" condition="Views">
      <views>
         <view-defaults>
            <topic>
               <sort-direction>ascending</sort-direction>
            </topic>
         </view-defaults>
      </views>
   </config>
   –>

   <!– Example of adding a custom icon to the Create Space dialog –>
   <!–
   <config evaluator="string-compare" condition="cm:folder icons">
      <icons>
         <icon name="space-icon-custom" path="/images/icons/space-icon-custom.gif" />
      </icons>
   </config>
   –>

   <!– The config below shows how to incorporate the example model–>
   <!– into the web client, for this to work you will need to –>
   <!– rename example-model-context.xml.sample to example-model-context.xml –>
   <!–
   <config evaluator="string-compare" condition="Content Wizards">
      <content-types>
         <type name="my:sop" />
      </content-types>
   </config>

   <config evaluator="node-type" condition="my:sop">
      <property-sheet>
         <show-property name="mimetype" display-label-id="content_type"
                        component-generator="MimeTypeSelectorGenerator" />
         <show-property name="size" display-label-id="size"
                        converter="org.alfresco.faces.ByteSizeConverter"
                        show-in-edit-mode="false" />              
         <show-property name="mySmiley TongueublishedDate" />
         <show-association name="my:signOff" />
         <show-property name="my:authorisedBy" />
         <show-child-association name="mySmiley TonguerocessSteps" />
      </property-sheet>
   </config>

   <config evaluator="aspect-name" condition="my:imageClassification">
      <property-sheet>
         <show-property name="my:width"/>
         <show-property name="my:height"/>
         <show-property name="my:resolution"/>
      </property-sheet>
   </config>

   <config evaluator="string-compare" condition="Action Wizards">
      <aspects>
         <aspect name="my:imageClassification"/>
      </aspects>
   </config>

   <config evaluator="string-compare" condition="Advanced Search">
      <advanced-search>
         <content-types>
            <type name="my:sop" />
         </content-types>
         <custom-properties>
            <meta-data type="my:sop" property="my:authorisedBy" />
            <meta-data aspect="my:imageClassification" property="my:resolution" />
         </custom-properties>
      </advanced-search>
   </config>
   –>

   <config evaluator="string-compare" condition="Action Wizards">
      <aspects>
         <aspect name="custom:IndividuDetails"/>
      </aspects>
   </config>

   <config evaluator="aspect-name" condition="custom:IndividuDetails">
      <property-sheet>
      <separator name="sepCust1" display-label="Individu Details" component-generator="HeaderSeparatorGenerator" />
         <show-property name="custom:IndividuNom"/>
         <show-property name="custom:IndividuPrenom"/>
      </property-sheet>
   </config>  
  
    <config evaluator="string-compare" condition="Action Wizards">
      <aspects>
         <aspect name="custom:ContractuelDetails"/>
      </aspects>
   </config>

   <config evaluator="aspect-name" condition="custom:ContractuelDetails">
         <property-sheet>
      <separator name="sepCust1" display-label="Contractuels Details" component-generator="HeaderSeparatorGenerator" />
         <show-property name="custom:ContractuelMatricule"/>
         <show-property name="custom:ContractuelSociete"/>
         <show-property name="custom:ContractuelCompsal"/>
         <show-property name="custom:ContractuelNom"/>
         <show-property name="custom:ContractuelPrenom"/>
         <show-property name="custom:ContractuelEtab"/>
         <show-property name="custom:ContractuelService"/>
         <show-property name="custom:ContractuelNature"/>
         <show-property name="custom:ContractuelRubrique"/>
         <show-property name="custom:ContractuelSignature"/>
         <show-property name="custom:ContractuelTypepaie"/>
         <show-property name="custom:ContractuelDebutPeriode"/>
         <show-property name="custom:ContractuelFinPeriode"/>
         <show-property name="custom:ContractuelMoisPaie"/>
         <show-property name="custom:ContractuelDateEvenement"/>
         <show-property name="custom:ContractuelCodeBarre"/>
         <show-property name="custom:ContractuelCategorie"/>
         <show-property name="custom:ContractuelDebutValidite"/>
         <show-property name="custom:ContractuelFinValidite"/>
         <show-property name="custom:ContractuelDateNum"/>
       </property-sheet>
   </config>  
  
</alfresco-config>



et j'ai une erreur dans les logs :

Caused by: org.alfresco.service.cmr.dictionary.InvalidAspectException: The aspect is invalid: {custom.model}ContractuelDetails

Est ce vraiment possible, et si oui j'ai du louper une truc.

Merci pour votre aide
28 REPLIES 28

hlander10
Champ in-the-making
Champ in-the-making
oui mais c'est quoi uri="contrat.model" un fichier ?

et prefix="custom"

c'est un truc que j'ai du louper, je sais pas ce que c'est

alexist
Champ in-the-making
Champ in-the-making
Le namespace est composé d'une uri et d'un prefix, et permet de garantir l'unicité d'une definition de modele. Il faut s'assurer que ce couple est unique dans ton alfresco.

uri et prefix sont libre et ne correspondent techniquement à rien (pas de fichier, l'uri peut etre n'importe quel chaine genre "contrat.model". Après inspire toi des modèles definies par alfresco :
contentModel.xml
<namespace uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>

thomasb
Champ in-the-making
Champ in-the-making
Le namespace est composé d'une uri et d'un prefix, et permet de garantir l'unicité d'une definition de modele. Il faut s'assurer que ce couple est unique dans ton alfresco.

uri et prefix sont libre et ne correspondent techniquement à rien (pas de fichier, l'uri peut etre n'importe quel chaine genre "contrat.model".

libre oui, mais pas n'importe quoi !

Lorsqu'on exporte un espace ou son repository complet, sous forme de fichier ACP, les associations, types, aspects et propriétés sont décrits dans un fichier XML, dans lequel les noms des éléments et attributs sont directement ceux du modèle. Or dans XML, un "namespace uri" doit être un… URI (Uniform Ressource Identifier). La plupart du temps on utilisera un URL HTTP (qui peut mais ne doit pas nécessairement référencer une ressource existante), sur un nom de domaine que l'on "contrôle". C'est ce fonctionnement (utilisation d'un URI) qui permet d'obtenir l'unicité globale des "namespace URIs".
Mais ceci dit, aucun parser XML n'est requis de vérifier la syntaxe d'un namespace URI, qu'il considère comme une valeur "opaque".

Alfresco ajoute à cela une contrainte d'unicité locale du préfixe associé (parce que ça simplifie la vie des développeurs et que cette contrainte n'est pas très lourde au final).
Le préfixe, toujours dû à son "origine XML", ne peut pas non plus être n'importe quoi, il doit être un préfixe XML valide (ne pas commencer par un chiffre, ne pas contenir d'espaces ou de caractère ":", etc.)

Ne pas oublier non plus que ces préfixes et URIs sont utilisés dans les requêtes XPath (donc également Lucene).


Tout ça pour dire que "custom.model" n'est vraiment pas une "bonne pratique", et qu'il faut en plus bien "penser" son préfixe.
Mieux vaut effectivement s'inspirer des modèles "noyaux":

Après inspire toi des modèles definies par alfresco :
contentModel.xml
<namespace uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>

Voilà, c'était la minute "remise dans le contexte" du jour 😉

Rien de transcendant mais ça peut aider à mieux comprendre le pourquoi du comment…

hlander10
Champ in-the-making
Champ in-the-making
ThomasB, excuse moi de te contre dire mais "
Rien de transcendant mais ça peut aider à mieux comprendre le pourquoi du comment…" je suis pas d'accord je comprends encore moins.

Je pensais simplement faire dans mon cas :
dans web-client-config-custom.xml –>  <aspect name="contrat:ContractuelDetails"/>

Puis dans contratModel –> <namespace uri="contrat.model" prefix="contrat"/>

mais lorsque je veux faire ma règle, je ne vois pas Caontractuel details dans les paramètre de l'action.
Et j'ai Failed to resolve aspect 'contrat:ContractuelDetails'

Donc il me manque encore un truc

hlander10
Champ in-the-making
Champ in-the-making
peut être une piste j'ai lu dans un message "déclarer dans le contexte spring"

Alors ça j'ai pas vu encore c'est quoi un fichier

bch
Champ in-the-making
Champ in-the-making
Pour résumer, vous avez deux fichiers de définition de modèles. Dans ce cas, il faut les citer dans un fichier comme cité ici :
http://wiki.alfresco.com/wiki/Data_Dictionary_Guide#Step_4:_Register_the_Model_with_the_Repository

Par exemple, on aura :


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

<beans>
    <!– Registration of new models –>
    <bean id="extension.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
        <property name="models">
            <list>
                <value>alfresco/extension/model.xml</value>
                <value>alfresco/extension/model2.xml</value>
            </list>
        </property>
      <property name="labels">
            <list>
                <value>alfresco/extension/model</value>
            </list>
        </property>
    </bean>
</beans>

Ce fichier doit terminer par …context.xml

hlander10
Champ in-the-making
Champ in-the-making
Alors là je suis perdu :

POur reprendre j'ai :
- web-client-config-custom.xml
- contratModel.xml
- customModel.xml
- custom-model-context.xml
<property name="models">
            <list>
                <value>alfresco/extension/customModel.xml</value>
            </list>
        </property>
- contrat-model-context.xml
<property name="models">
            <list>
                <value>alfresco/extension/contratModel.xml</value>
            </list>
        </property>

Donc si j'ai compris il faut qu'un seul XXXX-context.xml, c'est ça

bch
Champ in-the-making
Champ in-the-making
Il faut seulement citer le second modèle dans le contexte :

<property name="models">
<list>
<value>alfresco/extension/customModel.xml</value>
<value>alfresco/extension/contratModel.xml</value>
</list>
</property>
- contrat-model-context.xml
<property name="models">
<list>
<value>alfresco/extension/contratModel.xml</value>
</list>
</property>

hlander10
Champ in-the-making
Champ in-the-making
Merci beaucoup a tous pour votre aide, tout est ok…..

La solution est celle expliqué par bch .

Encore merci a tous