cancel
Showing results for 
Search instead for 
Did you mean: 

ftl et companyhome

kevin-56
Champ in-the-making
Champ in-the-making
Bonjour,

j'ai un petit souci, voila mon script :

<#assign folderName="/Biblio-Veto/Articles"/>

<#if companyhome.childByNamePath[folderName]?exists>
   <#assign folderObj=companyhome.childByNamePath[folderName]>
</#if>

Et il m'indique l'erreur "Expression companyhome is undefined"

Cela viendrait-il pas du fait que j'ai modifié le nom du companyhome qui était "Alfresco" ? normalement non
Est-il suffisant de placer  e flt depuis le web client dans le dictionnaire de données ou faut-il le mettre manuellement dans le répertoire "…/templates
/email" dans tomcat pour que le companyhome soit pris en compte ?

voila le log correspondant :

14:51:04,410 ERROR [org.alfresco.repo.action.executer.MailActionExecuter] Failed to send email to [user]
org.springframework.mail.MailPreparationException: Could not prepare mail; nested exception is org.alfresco.service.cmr.repository.TemplateException: Une er
Caused by: org.alfresco.service.cmr.repository.TemplateException: Une erreur est survenue lors de la g�n�ration du mod�le 'Expression companyhome is undefin
        at org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:205)
        at org.alfresco.repo.processor.TemplateServiceImpl.processTemplate(TemplateServiceImpl.java:181)
        at org.alfresco.repo.processor.TemplateServiceImpl.processTemplate(TemplateServiceImpl.java:200)
        at org.alfresco.repo.action.executer.MailActionExecuter$1.prepare(MailActionExecuter.java:310)
        at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:347)  
        at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:339)
        at org.alfresco.repo.action.executer.MailActionExecuter.executeImpl(MailActionExecuter.java:336)
        at org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(ActionExecuterAbstractBase.java:120)
        at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(ActionServiceImpl.java:537)
        at org.alfresco.repo.action.executer.CompositeActionExecuter.executeImpl(CompositeActionExecuter.java:72)
        at org.alfresco.repo.action.executer.ActionExecuterAbstractBase.execute(ActionExecuterAbstractBase.java:120)
        at org.alfresco.repo.action.ActionServiceImpl.directActionExecution(ActionServiceImpl.java:537)
        at org.alfresco.repo.action.ActionServiceImpl.executeActionImpl(ActionServiceImpl.java:472)
        at org.alfresco.repo.action.ActionServiceImpl.executeAction(ActionServiceImpl.java:399)
        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:597)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:281)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:187)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:154)
        at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:40)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
        at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
        at org.alfresco.repo.audit.AuditComponentImpl.audit(AuditComponentImpl.java:241)
        at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:69)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:210)
        at $Proxy18.executeAction(Unknown Source)
        at org.alfresco.repo.rule.RuleServiceImpl.executeRule(RuleServiceImpl.java:922)
        at org.alfresco.repo.rule.RuleServiceImpl.executePendingRule(RuleServiceImpl.java:890)
        at org.alfresco.repo.rule.RuleServiceImpl.executePendingRulesImpl(RuleServiceImpl.java:861)
at org.alfresco.repo.rule.RuleServiceImpl.executePendingRules(RuleServiceImpl.java:834)
        at org.alfresco.repo.rule.RuleTransactionListener.beforeCommit(RuleTransactionListener.java:69)
        at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.doBeforeCommit(AlfrescoTransactionSupport.java:638)
        at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.doBeforeCommit(AlfrescoTransactionSupport.java:620)
        at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.beforeCommit(AlfrescoTransactionSupport.java:592)
        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)
        at org.alfresco.web.bean.clipboard.WorkspaceClipboardItem.paste(WorkspaceClipboardItem.java:311)
        at org.alfresco.web.bean.clipboard.ClipboardBean.performClipboardOperation(ClipboardBean.java:229)
        at org.alfresco.web.bean.clipboard.ClipboardBean.performPasteItems(ClipboardBean.java:158)
        at org.alfresco.web.bean.clipboard.ClipboardBean.pasteAll(ClipboardBean.java:121)
        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:597)
        at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
at javax.faces.component.UICommand.broadcast(UICommand.java:89)
        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.AuthenticationFilter.doFilter(AuthenticationFilter.java:81)
        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.Http11Processor.process(Http11Processor.java:870)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
        at java.lang.Thread.run(Thread.java:619)
Caused by: freemarker.core.InvalidReferenceException: Expression companyhome is undefined on line 20, column 23 in workspace://SpacesStore/322df418-3795-11d
        at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)
        at freemarker.core.TemplateObject.invalidTypeException(TemplateObject.java:134)
        at freemarker.core.Dot._getAsTemplateModel(Dot.java:78)
        at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
        at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:74)
        at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
        at freemarker.core.Assignment.accept(Assignment.java:90)
        at freemarker.core.Environment.visit(Environment.java:196)
        at freemarker.core.MixedContent.accept(MixedContent.java:92)
        at freemarker.core.Environment.visit(Environment.java:196)
        at freemarker.core.Environment.process(Environment.java:176)
        at freemarker.template.Template.process(Template.java:232)
        at org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:201)
8 REPLIES 8

rivarola
Champ on-the-rise
Champ on-the-rise
Bonjour,

Apparamment le "companyhome" ne fait pas partie des variables injectées dans le modèle FreeMarker lors de l'envoi d'un mail. Voici la méthode qui crée le modèle dans MailActionExecuter :
   private Map<String, Object> createEmailTemplateModel(NodeRef ref)
   {
      Map<String, Object> model = new HashMap<String, Object>(8, 1.0f);
     
      NodeRef person = personService.getPerson(authService.getCurrentUserName());
      model.put("person", new TemplateNode(person, serviceRegistry, null));
      model.put("document", new TemplateNode(ref, serviceRegistry, null));
      NodeRef parent = serviceRegistry.getNodeService().getPrimaryParent(ref).getParentRef();
      model.put("space", new TemplateNode(parent, serviceRegistry, null));
     
      // current date/time is useful to have and isn't supplied by FreeMarker by default
      model.put("date", new Date());
     
      // add custom method objects
      model.put("hasAspect", new HasAspectMethod());
      model.put("message", new I18NMessageMethod());
      model.put("dateCompare", new DateCompareMethod());
     
      return model;
   }

kevin-56
Champ in-the-making
Champ in-the-making
Il n'y a pas d' autres façons de faire pour que  "companyhome" fasse partie des variables injectées dans le modèle FreeMarker lors de l'envoi d'un mail ?
car je ne veux pas toucher au code java c'est pas bon but, et normalement sa devrait être faisable par défaut si c'est indiqué dans le wiki ??

rivarola
Champ on-the-rise
Champ on-the-rise
Tu peux facilement faire une recherche Lucene qui rend le "Company Home".

share
Champ in-the-making
Champ in-the-making
bonjour,
ce sujet date un peu mais je suis confrontée en version 3.1 au même problème insoluble pour moi ….

vous avez dit :
Tu peux facilement faire une recherche Lucene qui rend le "Company Home".

et je suis preneuse de la solution, mais ce (encore nouveau) language est très compliqué.
un peu d'aide sur la requête serait la bienvenue.

merci

rivarola
Champ on-the-rise
Champ on-the-rise
Bonjour,

Tu peux essayer quelque chose comme !

<#assign res=space.childrenByLuceneSearch['PATH:"/app:company_home"'] />
<#assign ch=res[0] />

share
Champ in-the-making
Champ in-the-making
OUPS!
le probleme est remonté d'un cran

freemarker.core.InvalidReferenceException - Expression space is undefined on line 19, column 14 in forge/portlets/doclist.get.html.ftl.

rivarola
Champ on-the-rise
Champ on-the-rise
C'est que tu n'es pas dans un contexte de génération du corps d'un mail à partir d'un FTL comme dans le post initial.
Tu es dans quel contexte d'exécution ? (pour savoir à quelles variables tu as accès)

share
Champ in-the-making
Champ in-the-making
Tout d'abord merci a toi de prendre un peu de temps pour répondre.
J'utilise le ftl via un webscript dans une portlet Alfresco integrée a Liferay. Grace a tes conseils je pourrai ne plus être embétée par companyhome puisque je passe par un parametre query search lucene du webscript (ce qui passe dans une partie de code ou companyhome n'est pas utilisé). Mais bon j'aimerai mieu passer par le parametre Path (plus simple et du coup je recupere query) d'où l'idée de fixer companyhome des le début de mon webscript.
En plus je suis en authentification=none. J'ai bien compris que si je passe en authentification=user les variables sont positionnées mais ce n'est pas mon cas d'usage.

/alfresco/service/ui/doclist?q=PATH:%22app:company_home/*%22
   fonctionne
/alfresco/service/ui/doclist?p=%22app:company_home/%22
ko
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.