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

Email уведомление для администратора

Представим ситуацию, что у вас есть задание уведомить администратора о том, что на вашем сайте зарегистрировался новый человек.





Есть как минимум 2 способа реализации этой ситуации:

- через создание WorkFlow на это событие (добавился новый User) и добавить к нему соответствующий Email Alert

- написать (before insert trigger), который будет вызывать ваш метод для отправки почты (статический метод можно положить в отдельный класс)

 

Примечание:

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

(Пример: при создании нового пользователя на сайте будем уведомлять администратора об этом)

 

Разберем первый способ:

Для того. что бы создать наш WorkFlow нам необходимо перейти в этот раздел:

setup / create / Workflow & Approvals / Workflow Rules

Жмем на кномку "NEW" и далее выбираем объект, для которого мы хотим  проверять наши изменения. В данном случае нам понадобится объект USER. Жмем "NEXT" и видим следующее:

workflow

Тут нам надо заполнить соответствующие поля:

- имя

- описание

- событие, при котором должено отработать наше бизнес правило

- критерий выбора для сортировки (в случае если нам надо что то дополнительно проверить)

После заполения всех необходимых полей и выставления Rule Criteria мы сохраняем наш WorkFlow.

 

Важно:

не забудьте активировать ваш Workflow после создания (для этого в окне этого WorkFlow вам нужно нажать на Edit и установить галочку в поле ACTIVE).

 

После того, как мы создали наш WorkFlow - создаем к нему действие, которое будет отрабатывать при выполении нашего уже заданного условия.

Для этого на странице:
setup / create / Workflow & Approvals / Workflow Rules / имя вашего Workflow

Мы находим блок Workflow Actions:

workflow2

Жмем на Edit и на новой странице выбираем "Add Workflow Action"  и в выпавшем списке выбираем "Email Alert" - вы будете переброшены на страницу следующего вида:

workflow3

Заполнив данные (не забудьте выбрать нужный шаблон для вашего уведомления)  сохраняем наше уведомление.

Теперь при регистрации пользователя на сайте - будет отрабатывать соответствующий WorkFlow и его WorkFlow Action (т.е. наше уведомление).

 

Рассмотрим второй способ:

Представим ситуацию. что вам необходимо не только присылать уведомление о регистрации нового пользователя, но и отображать в письме некоторые данные. к примеру Имя, Email и другие.

Отследить ситуацию добавления нового пользователя в этом случаем мы будем через trigger на объект User.  Для того, что бы создать такой триггер переходим в раздел:
Customize / User / Trigger

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

 
trigger CachNewSiteUserRegister on User (after insert) {

    for(User user : Trigger.new){
        SentNotificationForAdmin.SendNoteForAdmin(user.id, user.Name, user.Email);
    }
}

В этом триггере мы просто обращаемся к методу SendNoteForeAdmin класса SentNotificationForAmin и передаем на вход нужные нам параметры.

В нашем методе мы просто фармируем письмо, которое будет отправляться нашему администратору. вот пример моего метода (из документации):
public class SentNotificationForAdmin {

    
    public static void SendNoteForAdmin(Id user_id, String user_name, String user_email){
        // First, reserve email capacity for the current Apex transaction to ensure
        // that we won't exceed our daily email limits when sending email after
        // the current transaction is committed.
        Messaging.reserveSingleEmailCapacity(2);

        // Processes and actions involved in the Apex transaction occur next,
        // which conclude with sending a single email.
        // Now create a new single email message object
        // that will send out a single email to the addresses in the To, CC & BCC list.
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();

        // Strings to hold the email addresses to which you are sending the email.
        String[] toAddresses = new String[] {'roman.bazylev.vrp@gmail.com'};
        String[] ccAddresses = new String[] {'support@bikeshop-developer-edition.ap1.force.com'};

        // Assign the addresses for the To and CC lists to the mail object.
        mail.setToAddresses(toAddresses);
        mail.setCcAddresses(ccAddresses);

        // Specify the address used when the recipients reply to the email.
        mail.setReplyTo('roman.bazylev.vrp@gmail.com');

        // Specify the name used as the display name.
        mail.setSenderDisplayName('BikeShop Support');

        // Specify the subject line for your email address.
        mail.setSubject('New User was registered : ' + case.Id);

        // Set to True if you want to BCC yourself on the email.
        mail.setBccSender(false);

        // Optionally append the salesforce.com email signature to the email.
        // The email address of the user executing the Apex Code will be used.
        mail.setUseSignature(false);

        // Specify the text content of the email.
        mail.setPlainTextBody('New User was registered: ' + user_id + ' name: ' + user_name + ' Email: ' + user_email + '');

        mail.setHtmlBody('New User was registered: ' + user_id + ' name: ' + user_name + ' Email: ' + user_email + '');

        // Send the email you have created.
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
    }
    
}

Не забудьте указать вашему методу Static.

 

Применение:

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

После этих дейстий мы можем наслаждаться работой нашего уведомления для администратора.

 

Полезно:

если необходимо получить созданый visualforce шаблон для вашего письма, формируемого через указанный выше метод, то получить его вы можете к примеру вот так:
    public static void getTemplateBody (){

        EmailTemplate et;
        Id templateId = '00X90000000k0VJ';
        et = [SELECT id, Name, Subject, Body, TemplateType, Markup, HtmlValue  FROM EmailTemplate WHERE id = :templateId];
        if (et.TemplateType == 'visualforce'){
            String template = et.Markup;
            template = template.replace('{0}','Our data');
            system.debug('seeeeee:'+ template);
        }
    }

обратите внимание, что эта реализация верна только в случае получения вашего visuaforce шаблона, а иначе вам надо было бь указывать:
String template = et.Body;


Это для HTML шаблона.

 

Denis Pereverzev и DmitryShnyrev предложили еще один способ:
 

 
//SiteReisterController.cls
//...
String userId = Site.createPortalUser(u, accountId, password);

if (userId != NULL) {

User newPortalUser = [SELECT Name, Email FROM User WHERE Id=:userId];
//...
//something todo