SalesForce: связывание настраиваемого поля и данных об активности учетной записи

#field #salesforce #relationship #custom-fields

#поле #система salesforce #взаимосвязь #настраиваемые поля

Вопрос:

Я постепенно осваиваюсь с Salesforce и пытаюсь связать некоторые поля между учетными записями и возможностями и многое другое.

Моя текущая проблема связана с деталями активности учетной записи. У меня есть набор учетных записей, в которых отображаются данные и сведения, связанные с учетной записью, такие как:

Введите имя учетной записи владельца учетной записи, номер телефона веб-сайта и многое другое…

В этой учетной записи у нас есть лента активности, в которой содержатся сведения о телефонных звонках, встречах или электронных письмах, которые ссылаются на учетную запись. Для каждого события в рамках действия учетной записи есть Type поле: встреча, звонок или электронная почта.

То, что я пытаюсь сделать, это создать настраиваемое поле в основной учетной записи, которое просматривает активность учетной записи и отображает дату последнего собрания, поэтому с точки зрения кода sudo это будет что-то вроде:

SELECT DueDate WHERE type=Meeting and DueDate <= TODAY()

Или что-то в этом роде (я знаю, что это в основном SQL).

Если бы кто-нибудь мог помочь, это было бы замечательно, особенно к 5 вечера, поскольку мой босс сказал, что купит мне пинту пива, если я это выясню!

Спасибо всем.

———- РЕДАКТИРОВАТЬ ———

Я пытаюсь сделать что-то вроде этого:

ОБРАЩЕНИЕ (ТЕКСТ(Действие.Введите), Собрание, СЕГОДНЯ — LastActivityDate)

при создании настраиваемого поля формулы, поэтому я пытаюсь перейти к полю события с именем Type, выполнив:

Активность.Тип

Это не работает, но это было предположение, которое было взято из LastActivityDate . Возможно, я ошибаюсь, поэтому все поможет. приветствия!

———- РЕДАКТИРОВАТЬ ———

Это изображение поля, к которому я пытаюсь получить доступ, похоже, я не могу найти какой-либо способ доступа к этому Type полю

Комментарии:

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;
        }
    }
}
 

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