<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Assignee NodeRef in Workflow Email Template? in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/assignee-noderef-in-workflow-email-template/m-p/273156#M226286</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello all,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm attempting to update the workflow assignment notification email so that the assignee's name is in the greeting. To do this, I will modify the "wf-email.html.ftl" template in "/Company Home/Data Dictionary/Email Templates/Workflow Notification". &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I see that there is a "person" argument available that is set up by org.alfresco.repo.action.executer.MailActionExecuter.createEmailTemplateModel() (line 673). I can use this argument in the FreeMarker template to reference the assigner NodeRef properties like so:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;${person.properties["cm:firstName"]} ${person.properties["cm:lastName"]}&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt;I'd like to do the same thing using the assignee user NodeRef, but this doesn't appear to be available in the template. Looking at the code, it seems I'll have to extend MailActionExecuter and override the createEmailTemplateModel method so that I can inject this argument for the template, and then override the Spring bean to wire it in.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is this the correct approach? It seems like there should be a simpler way to do this?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chris&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 02 Aug 2012 19:54:48 GMT</pubDate>
    <dc:creator>cpaul</dc:creator>
    <dc:date>2012-08-02T19:54:48Z</dc:date>
    <item>
      <title>Assignee NodeRef in Workflow Email Template?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/assignee-noderef-in-workflow-email-template/m-p/273156#M226286</link>
      <description>Hello all,I'm attempting to update the workflow assignment notification email so that the assignee's name is in the greeting. To do this, I will modify the "wf-email.html.ftl" template in "/Company Home/Data Dictionary/Email Templates/Workflow Notification". I see that there is a "person" argument a</description>
      <pubDate>Thu, 02 Aug 2012 19:54:48 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/assignee-noderef-in-workflow-email-template/m-p/273156#M226286</guid>
      <dc:creator>cpaul</dc:creator>
      <dc:date>2012-08-02T19:54:48Z</dc:date>
    </item>
    <item>
      <title>Re: Assignee NodeRef in Workflow Email Template?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/assignee-noderef-in-workflow-email-template/m-p/273157#M226287</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Ok, I figured out an approach that works, but am still open to anything simpler!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I extended org.alfresco.repo.notification.EMailNotificationProvider and overrode the following method:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;@Override&lt;BR /&gt;public void sendNotification(NotificationContext notificationContext)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;String&amp;gt; to = notificationContext.getTo();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (to != null &amp;amp;&amp;amp; to.size() == 1) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String assignee = to.get(0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Map&amp;lt;String, Serializable&amp;gt; args = notificationContext.getTemplateArgs();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NodeRef personRef = serviceRegistry.getPersonService().getPerson(assignee, false);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args.put("assignee", new TemplateNode(personRef, serviceRegistry, null));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;notificationContext.setTemplateArgs(args);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch (NoSuchPersonException ex) {&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.warn("Could not find a person with the name " + assignee);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;super.sendNotification(notificationContext);&lt;BR /&gt;}&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt;Then I overrode the "emailNotificationProvider" in my custom context file, using this new class. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Finally, at the top of the wf_email.html.ftl file, I added:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;lt;#assign assignee=args["assignee"]/&amp;gt;&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt;Now I'm able to use the assignee user as follows:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;&amp;lt;#if assignee?exists&amp;gt;&lt;BR /&gt;${assignee.properties["cm:firstName"]} ${assignee.properties["cm:lastName"]}&lt;BR /&gt;&amp;lt;/#if&amp;gt;&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 03 Aug 2012 05:25:41 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/assignee-noderef-in-workflow-email-template/m-p/273157#M226287</guid>
      <dc:creator>cpaul</dc:creator>
      <dc:date>2012-08-03T05:25:41Z</dc:date>
    </item>
    <item>
      <title>Re: Assignee NodeRef in Workflow Email Template?</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/assignee-noderef-in-workflow-email-template/m-p/273158#M226288</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Missing code how was implemented serviceRegistry&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;package PACKAGE_NAME; // replace with own package name.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;import java.io.Serializable;&lt;BR /&gt;import java.util.List;&lt;BR /&gt;import java.util.Map;&lt;BR /&gt;import org.alfresco.repo.template.TemplateNode;&lt;BR /&gt;import org.alfresco.service.ServiceRegistry;&lt;BR /&gt;import org.alfresco.service.cmr.notification.NotificationContext;&lt;BR /&gt;import org.alfresco.service.cmr.repository.NodeRef;&lt;BR /&gt;import org.alfresco.service.cmr.security.NoSuchPersonException;&lt;BR /&gt;import org.apache.commons.logging.Log;&lt;BR /&gt;import org.apache.commons.logging.LogFactory;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;public class EMailNotificationProvider extends org.alfresco.repo.notification.EMailNotificationProvider {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private static Log logger = LogFactory.getLog(EMailNotificationProvider.class);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;STRONG&gt;private ServiceRegistry serviceRegistry;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public void sendNotification(NotificationContext notificationContext) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;List&amp;lt;String&amp;gt; to = notificationContext.getTo();&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (to != null &amp;amp;&amp;amp; to.size() == 1) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;String assignee = to.get(0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Map&amp;lt;String, Serializable&amp;gt; args = notificationContext.getTemplateArgs();&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;NodeRef personRef = this.serviceRegistry.getPersonService().getPerson(assignee, false);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;args.put("assignee", new TemplateNode(personRef, this.serviceRegistry, null));&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;notificationContext.setTemplateArgs(args);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} catch (NoSuchPersonException ex) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;logger.error("Could not find a person with the name " + assignee);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} catch (Exception ex){&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;logger.error("Exception: " + ex.getMessage());&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;super.sendNotification(notificationContext);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /**&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param serviceRegistry provides access to the service APIs&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setServiceRegistry(ServiceRegistry serviceRegistry)&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.serviceRegistry = serviceRegistry;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/STRONG&gt;&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Missing example of bean definition in file module-context.xml&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;&amp;nbsp;&amp;lt;!--&amp;nbsp; EMail notification provider, source https://github.com/Alfresco/alfresco-repository/blob/master/src/main/resources/alfresco/notification-services-context.xml --&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bean id="emailNotificationProvider" class="PACKAGE_NAME.EMailNotificationProvider" init-method="init"&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="notificationService" ref="notificationService"/&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="nodeService" ref="NodeService"/&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="actionService" ref="ActionService"/&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="personService" ref="PersonService"/&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="repository" ref="repositoryHelper"/&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="fileFolderService" ref="FileFolderService"/&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="repoAdminService" ref="RepoAdminService"/&amp;gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&amp;lt;property name="serviceRegistry" ref="ServiceRegistry" /&amp;gt;&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/bean&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Feb 2019 14:40:31 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/assignee-noderef-in-workflow-email-template/m-p/273158#M226288</guid>
      <dc:creator>kachaj7</dc:creator>
      <dc:date>2019-02-26T14:40:31Z</dc:date>
    </item>
  </channel>
</rss>

