Salesforce: добавить запись в поле, которое зависит от ввода другого поля - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть объект с именем «Зарплата». В нем три поля: «Добавить зарплату», «Месяц» и «Доступная зарплата». Также существует отношение поиска от объекта Salary к объекту «Имя пользователя». Для каждого пользователя есть запись зарплаты за каждый месяц. Всякий раз, когда зарплата добавляется к записи конкретного пользователя, доступная зарплата должна показывать сумму зарплат за предыдущие месяцы. Как мне это сделать?? Пожалуйста, предложите мне .... Спасибо.

1 Ответ

0 голосов
/ 09 февраля 2012

Самым простым способом было бы изменить отношение поиска на отношение мастер-деталь и использовать поле Сводная сводка на объекте пользователя (Настройка> Настройка> Пользователи> Поля> Пользовательские пользовательские поля> Новый).

В качестве альтернативы вы можете использовать Trigger на объекте Salary, но делать это только в том случае, если вам абсолютно необходимы дополнительные функции, которые не могут быть выполнены с помощью сводной сводки или другой конфигурации.

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

trigger AddSalary on Salary__c (after update) {

    // create a set of all the unique User Ids
    Map<Id,List<Salary__c>> SalaryByUserId = new Map<Id,List<Salary__c>>();
    for(Salary__c s : Trigger.new)
    {
        List<Salary__c> SalariesForUser = SalaryByUserId.get(s.User__c);

        if(SalariesForUser == null) 
        { 
            SalaryByUserId.put(s.User__c,new Salary__c[]{s}); 
        }
        else
        {
            SalariesForUser.add(s);
            SalaryByUserId.put(s.User__c,SalariesForUser); 
        }
    }

    // query for all the User records for the unique UserIds in the records
    // create a map for a lookup / hash table for the User info
    Map<Id,User> Users = new Map<Id,User>(
        [Select Id, Username, Available_Salary__c From User Where Id IN SalaryByUserId.keyset()]);

    // iterate over the list of records being processed in the Trigger and add the Salaries to the Users
    for (Id i : SalaryByUserId.keyset())
    {
        User u = Users.get(i);
        Decimal TotalSalary = 0;

        for(Salary__c s : SalaryByUserId.get(u.Id))
        {
            TotalSalary += s.Monthly_Salary__c;
        }

        Users.get(u.Id).Total_Salary__c = TotalSalary;
    }

    update Users;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...