Alfresco datalist отправляет электронное письмо о создании очень нового элемента - PullRequest
0 голосов
/ 11 октября 2019

Я применил правило к папке со списком данных, как и при создании каждого элемента, он должен отправить электронное письмо соответствующему лицу.

Ниже приведен сценарий для того же самого:

function main()
{
    var site = siteService.getSite("hardik-test");
    var dataListsContainer = site.getContainer("datalists");
    var dataLists = dataListsContainer.getChildren();

    var fullName, manager,joiningDate;

    for(var x=0;x<dataLists.length;x++)
    {
         var dataList = dataLists[x]; 
          var props = dataList.getProperties(); 
         var title = props["cm:title"]; 

        if(title.equals("Employee")) 
        {
            var dataListItems = dataList.getChildren(); 

            for (var y = 0; y < dataListItems.length; y++) 
            {
                var dataListItem = dataListItems[dataListItems.length-1];
                var dataListItemProps = dataListItem.getProperties(); 
                fullName = dataListItemProps["emp:fullName"];
                manager = dataListItemProps["emp:manager"];
                joiningDate = dataListItemProps["emp:joiningDate"];
            }   
        }
    }
    // create mail action
    var mail = actions.create("mail");
    mail.parameters.to = "xyz@xyz.com"; //manager email id should be there
    mail.parameters.subject = "Task assigned to you.";
    mail.parameters.from = "xyz@xyz.com";
    //mail.parameters.template = companyhome.childByNamePath("Data Dictionary/Email Templates/Notify Email Templates/notify_user_email.html.ftl");
    mail.parameters.text = "Hi "+manager +"," + "\n A new employee " +fullName +" will be joining our team on "+ joiningDate + "." +
     "\n For details, Please click here. \n  Regards, \n Administrator" ;
    mail.execute(document); 
}

сценарийзапускается каждый раз, когда мы создаем новый элемент, но в электронном письме он не извлекает последние введенные нами данные.

Если мы хотим использовать шаблон электронной почты, то как мы можем передать параметр (пользовательские значения) в шаблон электронной почты?

Хотите создать ссылку, которая будет перенаправлять на список данных.

1 Ответ

1 голос
/ 11 октября 2019

Это один из многих случаев, когда источник Alfresco может быть поучительным. Если вы посмотрите на класс MailActionExecuter, то увидите, что для него определено несколько параметров:

public static final String NAME = "mail";
public static final String PARAM_LOCALE = "locale";
public static final String PARAM_TO = "to";
public static final String PARAM_CC = "cc";
public static final String PARAM_BCC = "bcc";
public static final String PARAM_TO_MANY = "to_many";
public static final String PARAM_SUBJECT = "subject";
public static final String PARAM_SUBJECT_PARAMS = "subjectParams";
public static final String PARAM_TEXT = "text";
public static final String PARAM_HTML = "html";
public static final String PARAM_FROM = "from";
public static final String PARAM_FROM_PERSONAL_NAME = "fromPersonalName";
public static final String PARAM_TEMPLATE = "template";
public static final String PARAM_TEMPLATE_MODEL = "template_model";
public static final String PARAM_IGNORE_SEND_FAILURE = "ignore_send_failure";
public static final String PARAM_SEND_AFTER_COMMIT = "send_after_commit";

Одним из них является PARAM_TEMPLATE_MODEL, который вы задали бы с помощью «template_model». «Модель» в этом параметре - это то, что должно бросаться в глаза. Это означает, что вы можете передать набор ключей и значений с помощью этого параметра.

Позже, в источнике для этого класса мы увидим, где параметр считывается, а затем используется для построения полной модели, которая затем передаетсяв шаблоне Freemarker:

Map<String, Object> suppliedModel = null;
if(ruleAction.getParameterValue(PARAM_TEMPLATE_MODEL) != null)
{
    Object m = ruleAction.getParameterValue(PARAM_TEMPLATE_MODEL);
    if(m instanceof Map)
    {
        suppliedModel = (Map<String, Object>)m;
    }
    else
    {
        logger.warn("Skipping unsupported email template model parameters of type " + m.getClass().getName() + " : " + m.toString());
    }
}

// build the email template model
Map<String, Object> model = createEmailTemplateModel(actionedUponNodeRef, suppliedModel, fromPerson, toRecipients);

Итак, если вы прокомментируете ссылку на шаблон и передаете в действие дополнительный параметр, предполагая, что ваш шаблон использует элементы, добавленные в модель. вы должны увидеть их в полученном электронном письме.

Ваш код будет выглядеть примерно так:

var templateModel = {};
templateModel["fullName"] = fullName;
templateModel["manager"] = manager;
templateModel["joiningDate"] = joiningDate;
mail.parameters.template_model = templateModel;
...