Création d'un aspect à contenu multiple

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

Création d'un aspect à contenu multiple

Bonjour,

Je souhaiterais créer un aspect me permettant de mémoriser une liste de relecteurs et d'approbateurs au sein des propriétés d'un document.

Comment faire pour créer cet aspect et faire en sorte de l'alimenter et également en lire son contenu

La méthode de lecture pour un aspect à valeur simple est la suivante:

String myproperty = (String)nodeService.getProperty(sessionNodeRef, PROP_MYPROPERTY);

La méthode pour mettre à jour un apect à valeur simple est la suivante:

nodeService.setProperty(sessionNodeRef, PROP_MYPROPERTY, mynewvalue);

Quel méthode dois-je utiliser pour mettre à jour et lire les valeurs d'un aspect à contenu multiples

Merci pour votre aide.
3 Replies
huberd
Member II

Re: Création d'un aspect à contenu multiple

J'ai créé l'aspect suivant :

      <aspect name="lpr:ApprobatorsList">
         <associations>
            <association name="lpr:ApprovedBy">
               <source>
                  <mandatory>false</mandatory>
                  <many>true</many>
               </source>
               <target>
                  <class>cm:person</class>
                  <mandatory>true</mandatory>
                  <many>true</many>
               </target>
            </association>
         </associations>
      </aspect>

Lorsque j'essaye d'appliquer cet aspect sur les propriétés d'un document comme ceci:

public static final QName ASPECT_APPROBATORS_LIST  = QName.createQName("lpr.model","ApprobatorsList");

MyLogger.debugln("Add Aspect Approbators List", 3);
if(nodeService.hasAspect(copyNodeRef, LprContentModel.ASPECT_APPROBATORS_LIST) == false) {
   MyLogger.debugln("Aspect Approbators List", 3);
   nodeService.addAspect(copyNodeRef, LprContentModel.ASPECT_APPROBATORS_LIST, null);
}

J'obtiens le message d'erreur suivant:

22:44:38,912 ERROR [node.integrity.IntegrityChecker] Found 1 integrity violations:
The association target multiplicity has been violated:
   Source Node: workspace://SpacesStore/a650d163-0fe3-11dd-99e4-cdc3de6ab0b6
   Association: Association[ class=ClassDef[name={lpr.model}ApprobatorsList], name={lpr.model}ApprovedBy, target class={http://www.alfresco.org/model/content/1.0}person, source role=null, target role=null]
   Required target Multiplicity: 1..*
   Actual target Multiplicity: 0
22:44:39,631 ERROR [ui.common.Utils] Une erreur système s'est produite pendant l'opération : Transaction didn't commit: Integrity failure
javax.transaction.RollbackException: Transaction didn't commit: Integrity failure
   at org.alfresco.util.transaction.SpringAwareUserTransaction.commit(SpringAwareUserTransaction.java:430)
   at org.alfresco.web.bean.workflow.ManageTaskDialog.transition(ManageTaskDialog.java:393)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
   at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
   at javax.faces.component.UICommand.broadcast(UICommand.java:109)
   at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
   at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
   at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
   at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
   at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
   at javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
   at org.alfresco.web.app.servlet.NTLMAuthenticationFilter.doFilter(NTLMAuthenticationFilter.java:329)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
   at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:834)
   at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
   at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
   at java.lang.Thread.run(Unknown Source)
Caused by: org.alfresco.repo.node.integrity.IntegrityException: Integrity failure
   at org.alfresco.repo.node.integrity.IntegrityChecker.checkIntegrity(IntegrityChecker.java:626)
   at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.flush(AlfrescoTransactionSupport.java:559)
   at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.beforeCommit(AlfrescoTransactionSupport.java:630)
   at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:48)
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:821)
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:637)
   at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:624)
   at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:307)
   at org.alfresco.util.transaction.SpringAwareUserTransaction.commit(SpringAwareUserTransaction.java:420)
   … 29 more

Si quelqu'un peut m'aider, car là je pèche complètement.

Merci pour votre aide.
rguinot
Customer

Re: Création d'un aspect à contenu multiple

L'incohérence est indiquée dans la trace :

<target>
                  <class>cm:person</class>
                  <mandatory>true</mandatory>
                  <many>true</many>
</target>

  Required target Multiplicity: 1..*
   Actual target Multiplicity: 0

Vous avez déclaré le target comme mandatory, or en ajoutant l'aspect vous ne valuez pas cette extrémité de l'association.
Ce n'est qu'une suggestion sans garantie, mais que se passe-t-il si vous enlevez la contrainte mandatory sur le target ?

D'autre part, pour plus de lisibilité, vous devriez "typer" vos liens en définissant des rôles pour chaque sens du lien, exemple :

<source>
   <role>lpr:isApprovedBy</role>
   <mandatory>false</mandatory>
   <many>true</many>
</source>

<target>
   <role>lpr:approves</role>
   <mandatory>false</mandatory>
   <many>true</many>
</target>

….
huberd
Member II

Re: Création d'un aspect à contenu multiple

Je regarde cela dès que possible.
Merci pour le tuyau qui m'a également servi ailleurs et qui a éclairer une fois de plus ma lanterne sur l'utilisation du mandatory  Smiley Very Happy