cancel
Showing results for 
Search instead for 
Did you mean: 

Création d'un aspect à contenu multiple

huberd
Champ in-the-making
Champ in-the-making
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 3

huberd
Champ in-the-making
Champ in-the-making
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
Confirmed Champ
Confirmed Champ
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
Champ in-the-making
Champ in-the-making
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