cancel
Showing results for 
Search instead for 
Did you mean: 

root objects in email template not available

nikes
Champ on-the-rise
Champ on-the-rise
Hi all,

I am trying to utilize "url" root object in freemarker template for email, but getting following error

Expression url is undefined on line 8, column 13 in workspace://SpacesStore/8da5d9eb-06af-4637-8bb3-ff2b35245458.
The problematic instruction:
———-
==> ${url.context} [on line 8, column 11 in workspace://SpacesStore/8da5d9eb-06af-4637-8bb3-ff2b35245458]
———-

Java backtrace for programmers:
———-
freemarker.core.InvalidReferenceException: Expression url is undefined on line 8, column 13 in workspace://SpacesStore/8da5d9eb-06af-4637-8bb3-ff2b35245458.
   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.Expression.getStringValue(Expression.java:93)
   at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
   at freemarker.core.Environment.visit(Environment.java:208)
   at freemarker.core.MixedContent.accept(MixedContent.java:92)
   at freemarker.core.Environment.visit(Environment.java:208)
   at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179)
   at freemarker.core.Environment.visit(Environment.java:415)
   at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
   at freemarker.core.Environment.visit(Environment.java:208)
   at freemarker.core.MixedContent.accept(MixedContent.java:92)
   at freemarker.core.Environment.visit(Environment.java:208)
   at freemarker.core.Environment.process(Environment.java:188)
   at freemarker.template.Template.process(Template.java:237)
   at org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:202)
   at org.alfresco.repo.processor.TemplateServiceImpl.processTemplate(TemplateServiceImpl.java:181)
   at org.alfresco.repo.processor.TemplateServiceImpl.processTemplate(TemplateServiceImpl.java:200)
   at com.saintgobain.packaging.actions.DocumentExpiryNotificationJob.sendNotification(DocumentExpiryNotificationJob.java:301)
   at com.saintgobain.packaging.actions.DocumentExpiryNotificationJob.execJob(DocumentExpiryNotificationJob.java:210)
   at com.saintgobain.packaging.actions.DocumentExpiryNotificationJob$1.execute(DocumentExpiryNotificationJob.java:85)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:327)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:234)
   at com.saintgobain.packaging.actions.DocumentExpiryNotificationJob.execute(DocumentExpiryNotificationJob.java:91)
   at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
   at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529)
15:05:00,159 ERROR [org.quartz.core.JobRunShell] Job DEFAULT.ToBeExpiredDocumentJobDetail threw an unhandled Exception:
org.alfresco.service.cmr.repository.TemplateException: 06080013 Error during processing of the template 'Expression url is undefined on line 8, column 13 in workspace://SpacesStore/8da5d9eb-06af-4637-8bb3-ff2b35245458.'. Please contact your system administrator.
   at org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:206)
   at org.alfresco.repo.processor.TemplateServiceImpl.processTemplate(TemplateServiceImpl.java:181)
   at org.alfresco.repo.processor.TemplateServiceImpl.processTemplate(TemplateServiceImpl.java:200)
   at com.saintgobain.packaging.actions.DocumentExpiryNotificationJob.sendNotification(DocumentExpiryNotificationJob.java:301)
   at com.saintgobain.packaging.actions.DocumentExpiryNotificationJob.execJob(DocumentExpiryNotificationJob.java:210)
   at com.saintgobain.packaging.actions.DocumentExpiryNotificationJob$1.execute(DocumentExpiryNotificationJob.java:85)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:327)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:234)
   at com.saintgobain.packaging.actions.DocumentExpiryNotificationJob.execute(DocumentExpiryNotificationJob.java:91)
   at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
   at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529)
Caused by: freemarker.core.InvalidReferenceException: Expression url is undefined on line 8, column 13 in workspace://SpacesStore/8da5d9eb-06af-4637-8bb3-ff2b35245458.
   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.Expression.getStringValue(Expression.java:93)
   at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
   at freemarker.core.Environment.visit(Environment.java:208)
   at freemarker.core.MixedContent.accept(MixedContent.java:92)
   at freemarker.core.Environment.visit(Environment.java:208)
   at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179)
   at freemarker.core.Environment.visit(Environment.java:415)
   at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
   at freemarker.core.Environment.visit(Environment.java:208)
   at freemarker.core.MixedContent.accept(MixedContent.java:92)
   at freemarker.core.Environment.visit(Environment.java:208)
   at freemarker.core.Environment.process(Environment.java:188)
   at freemarker.template.Template.process(Template.java:237)
   at org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:202)
   … 10 more
15:05:00,159 ERROR [org.quartz.core.ErrorLogger] Job (DEFAULT.ToBeExpiredDocumentJobDetail threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: org.alfresco.service.cmr.repository.TemplateException: 06080013 Error during processing of the template 'Expression url is undefined on line 8, column 13 in workspace://SpacesStore/8da5d9eb-06af-4637-8bb3-ff2b35245458.'. Please contact your system administrator.]
   at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
   at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529)
Caused by: org.alfresco.service.cmr.repository.TemplateException: 06080013 Error during processing of the template 'Expression url is undefined on line 8, column 13 in workspace://SpacesStore/8da5d9eb-06af-4637-8bb3-ff2b35245458.'. Please contact your system administrator.
   at org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:206)
   at org.alfresco.repo.processor.TemplateServiceImpl.processTemplate(TemplateServiceImpl.java:181)
   at org.alfresco.repo.processor.TemplateServiceImpl.processTemplate(TemplateServiceImpl.java:200)
   at com.saintgobain.packaging.actions.DocumentExpiryNotificationJob.sendNotification(DocumentExpiryNotificationJob.java:301)
   at com.saintgobain.packaging.actions.DocumentExpiryNotificationJob.execJob(DocumentExpiryNotificationJob.java:210)
   at com.saintgobain.packaging.actions.DocumentExpiryNotificationJob$1.execute(DocumentExpiryNotificationJob.java:85)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:327)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:234)
   at com.saintgobain.packaging.actions.DocumentExpiryNotificationJob.execute(DocumentExpiryNotificationJob.java:91)
   at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
   … 1 more
Caused by: freemarker.core.InvalidReferenceException: Expression url is undefined on line 8, column 13 in workspace://SpacesStore/8da5d9eb-06af-4637-8bb3-ff2b35245458.
   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.Expression.getStringValue(Expression.java:93)
   at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
   at freemarker.core.Environment.visit(Environment.java:208)
   at freemarker.core.MixedContent.accept(MixedContent.java:92)
   at freemarker.core.Environment.visit(Environment.java:208)
   at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179)
   at freemarker.core.Environment.visit(Environment.java:415)
   at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
   at freemarker.core.Environment.visit(Environment.java:208)
   at freemarker.core.MixedContent.accept(MixedContent.java:92)
   at freemarker.core.Environment.visit(Environment.java:208)
   at freemarker.core.Environment.process(Environment.java:188)
   at freemarker.template.Template.process(Template.java:237)
   at org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:202)
   … 10 more

Which alfresco root  objects  are available in independent freemarker template (means not related to webscript)?

Requirement is to construct document download path which requires full path containing server path to be prefixed followed by document url.

Thanks,
Nikesh
3 REPLIES 3

mrogers
Star Contributor
Star Contributor
I don't think (I may however be wrong here) that any "root" objects are available.    What happens is that various properties are added into the "model" which are then formatted by the template.

However depending upon which template (for example the imap ones) already have a download URL on them.

nikes
Champ on-the-rise
Champ on-the-rise
Thanks for the response mrogers,

I don't think (I may however be wrong here) that any "root" objects are available. What happens is that various properties are added into the "model" which are then formatted by the template.

Yes. that is what happening. If I prepare a parameters map from java and call processTemplate(…) method of templateService, I could access parameter object in template.

I wonder if there is any way of including other template in this case.
Lets say I define a generic template with <#assign X="somevalue"> directive, include this template with <#include path> in the template and utilize variable "X".
So that generic template could be utlized if there are more templates.

Issue with this is how to specify path of the FTL file in <#include> ? since we can not use any of the "root" objects, say "companyhome".
I tried following but no luck

<#include ${companyhome.path} + "/Data Dictionary/Email Templates/my_generic_template.ftl">

May be there couls be other ways to specify path which I am not aware about.

Appreciate any thoughts on this.

-Nikesh

mrogers
Star Contributor
Star Contributor
I don't think even if you #include a template that that will work since the model is still the same.

I think the trick will be to add the root objects you want to the model.   Something is doing it for freemarker templates run by webscripts.

For example are you using the EmailActionExecutor?   There's a createEmailTemplateModel that may need "improving"

And I note that there is a "url" property that may just be what you are looking for.