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

Отправляем сообщение в ленту пользователя (Feed)

Вы наверняка замечали, что в SalesForce есть система общения (Chatter) и в ней есть лента пользователя, вот она:





Feed

Если сравнивать к примеру с соц. сетями, то это "стена" человека. Тут можно постить сообщения, файлы, выкладывать ссылки и другое (подробнее на скриншоте снизу):

Feed

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

 

Давайте рассмотрим более интересный вариант.  К примеру, когда в вашем магазине, созданном в рамках системы (можно и в виде сайта) необходимо пользователю при покупке товара автоматически на стену постить какой товар он купил, когда купил, с какой скидкой и сколько он в итоге должен заплатить за него (вы можете придумать другую ситуацию).

 

Рассмотрим один из методов реализации:

Т.к. в рамках моей системы, при покупке товара, создается соответствующая запись для объекта Order, то с ней и будем работать. Для того, что бы нам отследить момент покупки. т.е. момент добавления записи к объекту Order можно использовать триггер на событие after insert.

Для того, что бы создать триггер переходим  в раздел:

Setup / Create / Object / Имя_вашего_объекта / блок_с_триггерами

 

Выглядит этот блок следующим образом:

trigger

 

Нажимаем в блоке триггеров кнопку "New", таким образом мы создаем новый триггер, в которым и будем описывать нашу логику.

 

 У меня код получился следующим:
trigger AddFeed on Order__c (after insert) {  //создаем триггер и указываем на каком событии ему отрабатывать

for(Order__c newOrder : Trigger.new){ // для каждого объекта в триггере
if (Schema.SObjectType.User.isFeedEnabled()){ // если разрешено постить сообщения, то:
// Вытягиваем из БД необходимые поля:
List<Order__c> orders = [SELECT id, Product__r.Name__c, Final_Cost__c, Discount__r.Pese__c, CreatedBy.Name FROM Order__c WHERE id =: newOrder.id];
// Формируем строку
String setBody = 'User: ' + orders[0].CreatedBy.Name + ' by product: ' + orders[0].Product__r.Name__c + ' with Discout: ' + orders[0].Discount__r.Pese__c + '% and Final Cost: ' + orders[0].Final_Cost__c ;
// Задаем текст сообщения:
String body = String.valueOf(setBody);
// Создаем новое сообщение:
sObject fItem = (sObject)System.Type.forName('FeedItem').newInstance();
// Для текущего юзера:
fitem.put('ParentId' ,UserInfo.getUserId()); // or Account or Contact or Opportunity Id
fItem.put('Body' , body); // добавляем сообщение в body
insert fItem; // выводим сообщение на странице
}
}
}

Посмотрим на результат работы триггера при создании нового заказа:

trigger

 

Важно:

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

 

Резюмируем:

Chatter Очень полезная штука для общения между людьми в рамках системы (существуют решения позволяющие людям с разных систем общаться). Тут можно делится новостями, обсуждать проблемы, ставить задания и прочее... Так же можно автоматизировать некоторые рабочие моменты, к примеру: при регистрации нового человека в системе, ему на стену высылать сообщение, с приветствием. а так же ссылки на какие то документы. с которыми он должен ознакомиться.