Salesforce:将记录添加到依赖于其他字段输入的字段

时间:2012-02-08 19:06:38

标签: salesforce apex-code visualforce

我有一个名为'Salary'的对象。其中有三个字段 - “添加薪水”,“月份”和“可用薪水”。还有从Salary对象到'User Name'对象的查找关系。对于每个用户,每个月都有一份工资记录。每当工资被添加到特定用户的记录时,可用工资应显示前几个月的工资总和。我怎样才能做到这一点??请建议我....谢谢。

1 个答案:

答案 0 :(得分:0)

最简单的方法是将查找关系更改为主 - 详细信息关系,并在用户对象上使用Roll-Up Summary字段(设置>自定义>用户>字段>用户自定义字段>新)。

或者,您可以在Salary对象上使用Trigger,但只有在您绝对需要使用汇总摘要或其他配置无法实现的其他功能时才能这样做。

以下是使用触发器的示例。我没有尝试过编译它,因此不可避免地会出现一些编译错误,但它是一个可以开始的地方。

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;

}