Регистрация  |  Вход

Как использовать Email Template в програмно создаваемом Email?

Всем привет,

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

и вот собственно метод, как использовать Email Template при создании Емейла:
email.setTemplateId(templateId);

и собственно мой вопрос заключается в том как при этом использавать merge fields в Template? Ведь "переменная" часть в Email Template - это ключевой момент в его использвании, но как заставить это работать при использовании Email Template через код?

вот я вижу два спец метода, вроде как для этого:
setTargetObjectId(targetObjectId)
Required if using a template, optional otherwise. The ID of the contact, lead, or user to which the email will be sent. The ID you specify sets the context and ensures that merge fields in the template contain the correct data.

и дополнительный:
setWhatId(whatId)
If you specify a contact for the targetObjectId field, you can specify an optional whatId as well. This helps to further ensure that merge fields in the template contain the correct data.

И, судя по описанию, она работают только, чтобы "помержить" поля contact, lead, or user.

А можно ли как то передать другую инфу из кода в Email Template?

Спасибо

Всем привет,

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

и вот собственно метод, как использовать Email Template при создании Емейла:
email.setTemplateId(templateId);

и собственно мой вопрос заключается в том как при этом использавать merge fields в Template? Ведь "переменная" часть в  Email Template - это ключевой момент в его использвании, но как заставить это работать при использовании  Email Template через код?

вот я вижу два спец метода, вроде как для этого:
[b]setTargetObjectId(targetObjectId)[/b]
Required if using a template, optional otherwise. The ID of the contact, lead, or user to which the email will be sent. The ID you specify sets the context and ensures that merge fields in the template contain the correct data.

и дополнительный:
[b]setWhatId(whatId)[/b]
If you specify a contact for the targetObjectId field, you can specify an optional whatId as well. This helps to further ensure that merge fields in the template contain the correct data.

И, судя по описанию, она работают только, чтобы "помержить" поля  contact, lead, or user.

А можно ли как то передать другую инфу из кода в Email Template?

Спасибо

Очень просто:

public static void sendSingleMail(Id contactId, Id templateId, String fromAddress, String myCustomString){

// grab the email template
EmailTemplate emailTemplate = [select Id, Subject, HtmlValue, Body from EmailTemplate where Id =: teamplateId];

// grab the contact fields we need. This assumes we are emailing a contact.
Contact c = [Select Id, FirstName FROM Contact WHERE Id=: contactId];

// process the merge fields
String subject = emailTemplate.Subject;
subject = subject.replace('{!Contact.FirstName}', c.FirstName);

String htmlBody = emailTemplate.HtmlValue;
htmlBody = htmlBody.replace('{!Contact.FirstName}', c.FirstName);
htmlBody = htmlBody.replace('{!myCustomString}', myCustomString);

String plainBody = emailTemplate.Body;
plainBody = plainBody.replace('{!Contact.FirstName}', c.FirstName);
plainBody = plainBody.replace('{!myCustomString}', myCustomString);

//build the email message
Messaging.Singleemailmessage email = new Messaging.Singleemailmessage();

email.setReplyTo(fromaddress);
email.setSenderDisplayName(fromaddress);
email.setTargetObjectId(objId);
email.setSaveAsActivity(true);

email.setSubject(subject);
email.setHtmlBody(htmlBody);
email.setPlainTextBody(plainBody);

Messaging.sendEmail(new Messaging.SingleEmailmessage[] {email});
}

Очень просто:
[code]    
public static void sendSingleMail(Id contactId, Id templateId, String fromAddress, String myCustomString){

    // grab the email template
    EmailTemplate emailTemplate = [select Id, Subject, HtmlValue, Body from EmailTemplate where Id =: teamplateId];

    // grab the contact fields we need. This assumes we are emailing a contact.
    Contact c = [Select Id, FirstName FROM Contact WHERE Id=: contactId];

    // process the merge fields
    String subject = emailTemplate.Subject;
    subject = subject.replace('{!Contact.FirstName}', c.FirstName);

    String htmlBody = emailTemplate.HtmlValue;
    htmlBody = htmlBody.replace('{!Contact.FirstName}', c.FirstName);
    htmlBody = htmlBody.replace('{!myCustomString}', myCustomString);

    String plainBody = emailTemplate.Body;
    plainBody = plainBody.replace('{!Contact.FirstName}', c.FirstName);
    plainBody = plainBody.replace('{!myCustomString}', myCustomString);

        //build the email message
    Messaging.Singleemailmessage email = new Messaging.Singleemailmessage();

    email.setReplyTo(fromaddress);
    email.setSenderDisplayName(fromaddress);
    email.setTargetObjectId(objId);
    email.setSaveAsActivity(true);

    email.setSubject(subject);
    email.setHtmlBody(htmlBody);
    email.setPlainTextBody(plainBody);

    Messaging.sendEmail(new Messaging.SingleEmailmessage[] {email});
}
[/code]

Спасибо,

очень даже прикольный поворот:

String htmlBody = emailTemplate.HtmlValue;

можно попробовать.

единственно, что в твоем случае ты используешь Контакт, а он, как мне кажется, может мержится в програмно используемых emailTemplat, если присунуть его ID вот сюда: setTargetObjectId(targetObjectId)

но для того чтобы програмно "помержить" emailTemplate с записями кастомных объетов, очень даже интересное решение, надо бы попробовать

Спасибо,

очень даже прикольный поворот:

[code]String htmlBody = emailTemplate.HtmlValue;[/code]

можно попробовать.

единственно, что в твоем случае ты используешь Контакт, а он, как мне кажется, может мержится в програмно используемых emailTemplat, если присунуть его ID вот сюда: setTargetObjectId(targetObjectId) 

но для того чтобы програмно "помержить" emailTemplate с записями кастомных объетов, очень даже интересное решение, надо бы попробовать

Вчера создал емейлТемплате, потом не мог его програмно получить, только сегодня увидел, что создал его в другом сендбоксе, бывает

Вчера создал емейлТемплате, потом не мог его програмно получить, только сегодня увидел, что создал его в другом сендбоксе, бывает :)