#field #salesforce #relationship #custom-fields
#поле #система salesforce #взаимосвязь #настраиваемые поля
Вопрос:
Я постепенно осваиваюсь с Salesforce и пытаюсь связать некоторые поля между учетными записями и возможностями и многое другое.
Моя текущая проблема связана с деталями активности учетной записи. У меня есть набор учетных записей, в которых отображаются данные и сведения, связанные с учетной записью, такие как:
Введите имя учетной записи владельца учетной записи, номер телефона веб-сайта и многое другое…
В этой учетной записи у нас есть лента активности, в которой содержатся сведения о телефонных звонках, встречах или электронных письмах, которые ссылаются на учетную запись. Для каждого события в рамках действия учетной записи есть Type
поле: встреча, звонок или электронная почта.
То, что я пытаюсь сделать, это создать настраиваемое поле в основной учетной записи, которое просматривает активность учетной записи и отображает дату последнего собрания, поэтому с точки зрения кода sudo это будет что-то вроде:
SELECT DueDate WHERE type=Meeting and DueDate <= TODAY()
Или что-то в этом роде (я знаю, что это в основном SQL).
Если бы кто-нибудь мог помочь, это было бы замечательно, особенно к 5 вечера, поскольку мой босс сказал, что купит мне пинту пива, если я это выясню!
Спасибо всем.
———- РЕДАКТИРОВАТЬ ———
Я пытаюсь сделать что-то вроде этого:
ОБРАЩЕНИЕ (ТЕКСТ(Действие.Введите), Собрание, СЕГОДНЯ — LastActivityDate)
при создании настраиваемого поля формулы, поэтому я пытаюсь перейти к полю события с именем Type, выполнив:
Активность.Тип
Это не работает, но это было предположение, которое было взято из LastActivityDate . Возможно, я ошибаюсь, поэтому все поможет. приветствия!
———- РЕДАКТИРОВАТЬ ———
Комментарии:
1. Я не думаю, что есть способ сделать это с помощью только одного настраиваемого поля формулы. Вам понадобится некоторый код, в частности триггер для объекта Event, который выполняет запись в настраиваемое поле учетной записи (например, Last_Event_Type__c) всякий раз, когда вставляется или обновляется событие. Используя это настраиваемое поле, вы могли бы выполнить сравнение формул, как вы пытались. Что-то вроде:
CASE(TEXT(Last_Event_Type__c), Meeting, TODAY - LastActivityDate)
2. Спасибо за это @MatthewKeefe, так куда бы мне поместить подобный код, будет ли он помещен в поле настраиваемой формулы в учетной записи или в событии?
3. @MatthewKeefe Я только что попробовал ваш код, и он не распознает
Last_Event_Type__c
илиLast_Event_Type
не является допустимым. есть еще идеи?4. Последнее_Event_Type__c должно быть настраиваемым (текстовым) полем, вам нужно будет его создать.
5. да, во время моей сегодняшней игры я попробовал это, и мне все равно не повезло, сейчас я пробую все виды и терплю неудачу во всем! ха
Ответ №1:
Вы не можете сделать это с помощью формулы, и вы не можете использовать поле LastActivityDate, потому что оно отслеживает ВСЕ типы событий, а не только «Собрание».
Один из способов добиться этого — создать триггер после вставки / после обновления для объекта события, который обновит поле «Последнее_собрание _ Дата__c» в учетной записи (вам нужно будет создать это поле).
Вот код:
trigger EventUpdateAccountMeetingDate on Event (after insert, after update) {
Map<String,Date> acctToDate = new Map<String,Date>();
for(Event e : Trigger.new){
if(e.Type=='Meeting' amp;amp; e.AccountId!=null amp;amp; (!acctToDate.containsKey(e.AccountId) || acctToDate.get(e.AccountId) < e.activityDate)){
acctToDate.put(e.accountId, e.activityDate);
}
}
if(acctToDate.size()>0){
List<Account> accts = [select id, Last_Meeting_Date__c from Account where id in :acctToDate.keyset()];
List<Account> acctsToUpdate = new List<Account>();
for(Account a : accts){
if(a.Last_Meeting_Date__c==null || a.Last_Meeting_Date__c<acctToDate.get(a.id)){
a.Last_Meeting_Date__c = acctToDate.get(a.id);
acctsToUpdate.add(a);
}
}
if(acctsToUpdate.size()>0){
update acctsToUpdate;
}
}
}
Я не пытался его развернуть, поэтому не уверен, попросит ли он вас увеличить охват кода для этого триггера. Возможно, вам придется создать для него тестовый класс.