bonjour,j'ai ecrit ce module qui crée dynamiquement...

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

bonjour,j'ai ecrit ce module qui crée dynamiquement...

bonjour,

j'ai ecrit ce module qui crée dynamiquement une regle. Avec ce qui suis, elle est bien créée mais quant je cherche a l'editer je recoit une erreur
                  CreateRuleWizard createRuleWizard = (CreateRuleWizard)variableResolver.resolveVariable(facesContext, "CreateRuleWizard");                  

                  createRuleWizard.init(null);
                 
                  createRuleWizard.setTitle("toto");  
                  createRuleWizard.setDescription("aze");
                  createRuleWizard.setApplyToSubSpaces(true);
                  createRuleWizard.setRunInBackground(true);
                  createRuleWizard.setRuleDisabled(false);
                 
                  createRuleWizard.setAction("mail");
                  Map<String,Serializable> actionMap = createRuleWizard.getActionProperties();
                  for(Entry<String,Serializable> entry : action.getParameterValues().entrySet()){
                     actionMap.put(entry.getKey(), entry.getValue());
                  }
                  createRuleWizard.addAction();
                 
                  createRuleWizard.finish();
l'erreur lors de l'edition
java.lang.IllegalArgumentException: Name must not be null
at org.springframework.util.Assert.notNull(Assert.java:90)
at org.springframework.beans.factory.BeanFactoryUtils.transformedBeanName(BeanFactoryUtils.java:57)
at org.springframework.beans.factory.support.AbstractBeanFactory.transformedBeanName(AbstractBeanFactory.java:582)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:176)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:555)
at org.alfresco.repo.action.ActionServiceImpl.getActionDefinition(ActionServiceImpl.java:234)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:335)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:116)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:40)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.alfresco.repo.audit.AuditComponentImpl.auditImpl(AuditComponentImpl.java:219)
at org.alfresco.repo.audit.AuditComponentImpl.audit(AuditComponentImpl.java:165)
at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:69)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy16.getActionDefinition(Unknown Source)
at org.alfresco.web.bean.rules.EditRuleWizard.init(EditRuleWizard.java:141)
at org.alfresco.web.bean.wizard.WizardManager.setCurrentWizard(WizardManager.java:117)
at org.alfresco.web.app.AlfrescoNavigationHandler.handleWizardOpen(AlfrescoNavigationHandler.java:575)
at org.alfresco.web.app.AlfrescoNavigationHandler.handleNavigation(AlfrescoNavigationHandler.java:115)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:84)
at javax.faces.component.UICommand.broadcast(UICommand.java:106)
at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:164)
at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:316)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:105)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:245)
at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:177)
at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:156)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:152)
at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:217)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:197)
at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:177)
at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:156)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:152)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
je me demande si il ne faut pas indiquer quelque chose pour les conditions, car j'essaie de mettre no-condition, cela ne marche pas … que faire

merci de tout conseil ou remarque
8 Replies
rivarola
Member II

Re: bonjour,j'ai ecrit ce module qui crée dynamiquement...

Je n'ai jamais essayé de créer complètement une règle par le code mais ce que je peux te conseiller, c'est de créer la même par l'interface graphique, puis dans un espace à côté créer sa jumelle par le code que tu as publié.
Ensuite tu navigues dans les règles (conteneur appelé "ruleFolder") de tes deux espaces à l'aide du node browser qui est disponible dans la console d'admin et tu cherches les différences (noms des relations, présence d'attributs, modélisation des conditions, etc.) entre les deux branches.
zeth_4310
Member II

Re: bonjour,j'ai ecrit ce module qui crée dynamiquement...

fiouu j'ai enfin reussie a comprendre se qui se passai.

tout d'abord merci rivarola, il est vrai que sa ma énormement aider de pouvoir voir en detail les attributs des regles.

dans mon code
                  createRuleWizard.setAction("mail");
                  Map<String,Serializable> actionMap = createRuleWizard.getActionProperties();
                  for(Entry<String,Serializable> entry : action.getParameterValues().entrySet()){
                     actionMap.put(entry.getKey(), entry.getValue());
                  }
                  createRuleWizard.addAction();

tout cela ne fait absoluement rien, mais si il n'y est pas il y a une erreur : Transaction didn't commit: Integrity failure
lorsque je consulte l'etat de l'action, rien n'est fait … nom de l'action : null et les parametres ne sont pas présent
donc la je repasse par deriere puis je remet un condition et une Action avec l'actionService. Et la plus de probleme … -_-'

je dois surement pas faire correctement les choses et j'aurais aimé savoir comment utiliser le createRuleWizard
car la se que je fait n'est pas propre je trouve.
thomasb
Member II

Re: bonjour,j'ai ecrit ce module qui crée dynamiquement...

Euh, je dis peut-être une bêtise mais… y a pas de conditions pour la règle ?

Du genre:
createRuleWizard.setCondition("no-condition");
createRuleWizard.addCondition();
et/ou peut-être qu'il faut ajouter des appels à promptForConditionValues() et/ou promptForActionValues()

My 2 c€nts…
michaelh
Active Member

Re: bonjour,j'ai ecrit ce module qui crée dynamiquement...

Thomas Strikes Back !!!

(Scusez moi, c'est très personnel et ça n'apporte rien à la question, m'enfin voilà quoi Smiley Tongue)
zeth_4310
Member II

Re: bonjour,j'ai ecrit ce module qui crée dynamiquement...

      createRuleWizard.setTitle(ruleType.getValue());   
      createRuleWizard.setDescription("");
      createRuleWizard.setApplyToSubSpaces(true);
      createRuleWizard.setRunInBackground(true);
      createRuleWizard.setRuleDisabled(false);

      createRuleWizard.setAction("mail");
      createRuleWizard.addAction();

      createRuleWizard.finish();

      for(Rule rule : ruleService.getRules(nodeRef, false, null)){
         if(rule.getTitle().equals(ruleType.getValue())){
            CompositeAction compositeAction = (CompositeAction)rule.getAction();

            compositeAction.removeAllActions();

            Action rootAction = getRootAction(ruleType);

            Map<String,Serializable> actionMap = new HashMap<String, Serializable>();
            actionMap.put(MailActionExecuter.PARAM_FROM, rootAction.getParameterValue(MailActionExecuter.PARAM_FROM));
            actionMap.put(MailActionExecuter.PARAM_TEXT, rootAction.getParameterValue(MailActionExecuter.PARAM_TEXT));
            actionMap.put(MailActionExecuter.PARAM_SUBJECT, rootAction.getParameterValue(MailActionExecuter.PARAM_SUBJECT));

            NodeRef templateNodeRef = (NodeRef)rootAction.getParameterValue(MailHandler.PROP_TEMPLATE);
            if(templateNodeRef!=null)
               actionMap.put(MailActionExecuter.PARAM_TEMPLATE, new NodeRef(templateNodeRef.getStoreRef(),templateNodeRef.getId()));

            actionMap.put(MailActionExecuter.PARAM_TO_MANY, new ArrayList<String>());

            compositeAction.addAction(actionService.createAction("mail",actionMap));
            compositeAction.addActionCondition(actionService.createActionCondition("no-condition"));

            ruleService.saveRule(nodeRef, rule);
         }
      }
voila se que je fait pour le moment.

J'ai essayer les promptFor…Values() sans grand succes, avec des levés de null exeption si avant le set…()

Sinon le setCondition("no-condition") ne marche pas de se que je comprend, il ne trouve pas le validateur
dans la tache de hachage String->Validateur pour la string "no-condition" il me semble avoir vu ou cette table
était configurer, et je n'ai pas vu le no-condition … pourtant il me semble que lors d'une création de regle par
l'interface web le CreateRuleWizard est utilisé.
thomasb
Member II

Re: bonjour,j'ai ecrit ce module qui crée dynamiquement...

pourtant il me semble que lors d'une création de regle par l'interface web le CreateRuleWizard est utilisé.
plutôt oui, puisque c'est sa seule raison d'être !!! (d'ailleurs, la classe est dans un sub-package de org.alfresco.web, dans le JAR web-client).

… mais justement, le wizard de création de règle va utiliser les promptFor…Values pour intercaler les écrans de saisie de paramètres des conditions et actions, ce dont ici on n'a pas besoin (et avec un fonctionnement assez obscure).

À mon avis, ça irait aussi vite (voire plus) de jouer directement avec les RuleService et ActionService que de tenter de se servir d'un bean pour ce à quoi il n'est pas destiné…
…et au moins on utilise des APIs relativement stables, contrairement au CreateRuleWizard qui peut être "cassé" du jour au lendemain.

Yapluka lire le code et faire des gros copier/coller Smiley Wink
zeth_4310
Member II

Re: bonjour,j'ai ecrit ce module qui crée dynamiquement...

merci thomas, je m'etait borné a essayer d'utiliser le CreateRuleWizard, je ne sais pas prouquoi, des fois dans la vie il ne faut pas chercher.

J'avais deja vu le code de CreateRuleWizard, et je me suis dit que lorsqu'il y avait juste un Rule rule = new Rule(); il devait falloir etre dans
un context particulier.

hors sa marche tres bien -_-' voila se que ca donne, nettement plus propre et stable

      Rule rule = new Rule();
      rule.setRuleType("inbound");

      // setup the rule and add it to the space
      rule.setTitle(ruleType.getValue());
      rule.setDescription("");
      rule.applyToChildren(true);
      rule.setExecuteAsynchronously(true);
      rule.setRuleDisabled(false);

      CompositeAction compositeAction = actionService.createCompositeAction();
      rule.setAction(compositeAction);

      Action rootAction = getRootAction(ruleType);

      Map<String,Serializable> actionMap = new HashMap<String, Serializable>();
      actionMap.put(MailActionExecuter.PARAM_FROM, rootAction.getParameterValue(MailActionExecuter.PARAM_FROM));
      actionMap.put(MailActionExecuter.PARAM_TEXT, rootAction.getParameterValue(MailActionExecuter.PARAM_TEXT));
      actionMap.put(MailActionExecuter.PARAM_SUBJECT, rootAction.getParameterValue(MailActionExecuter.PARAM_SUBJECT));

      NodeRef templateNodeRef = (NodeRef)rootAction.getParameterValue(MailHandler.PROP_TEMPLATE);
      if(templateNodeRef!=null)
         actionMap.put(MailActionExecuter.PARAM_TEMPLATE, new NodeRef(templateNodeRef.getStoreRef(),templateNodeRef.getId()));

      actionMap.put(MailActionExecuter.PARAM_TO_MANY, new ArrayList<String>());

      compositeAction.addAction(actionService.createAction("mail",actionMap));
      compositeAction.addActionCondition(actionService.createActionCondition("no-condition"));
      
      ruleService.saveRule(nodeRef, rule);
michaelh
Active Member

Re: bonjour,j'ai ecrit ce module qui crée dynamiquement...

Il va falloir qu'on pense à se faire une petite compilation de bouts de code, parce que cette portion de forum devient définitivement très intéressante !
Miam Smiley Happy