更新多列表字段在SalesForce中不起作用?

时间:2015-04-03 17:16:32

标签: salesforce apex

我在salesforce中编写了以下类:

global class ChangeImmo implements Schedulable{
 // Execute method
    global void execute(SchedulableContext SC) {
        List<Realty_User__c> rs = [SELECT Buttons__c FROM Realty_User__c WHERE not (Buttons__c INCLUDES ('Terminplaner'))];
       for(Realty_User__c r : rs){
           r.Buttons__c += ';Terminplaner';
           update r;
       }                                                                           
    }
}

然后我把它打了一次。

它适用于我们的测试盒,但不适用于实时版本。我们有1700个用户,其中大约730个没有“终端平台”。有人知道,为什么这不起作用?

编辑:我使用SalesForce的DML异常指南调整了我的代码,但它仍然无效:

global class ChangeImmo implements Schedulable {

    // Execute method
    global void execute(SchedulableContext SC) {

        for (List < Realty_User__c > lstRu: [SELECT Buttons__c FROM Realty_User__c WHERE not(Buttons__c INCLUDES('Terminplaner'))]) {
            for (Realty_User__c r : lstRu) {
                r.Buttons__c += ';Terminplaner';
            }
            update lstRu;
        }
    }
}

编辑2:好的,我现在找到了调试日志,错误说明了:

17:00:14.574(10574150113)| FATAL_ERROR | System.ListException:列表中的重复ID:003b000000ZAhDgAAL

2 个答案:

答案 0 :(得分:1)

003 - 它是Contact对象的前缀。在更新Realty_User__c对象后,您的生产中看起来有一些与触点一起使用的触发器。

答案 1 :(得分:0)

    global class ChangeImmo implements Schedulable{

//执行方法

global void execute(SchedulableContext SC) {
    List<Realty_User__c> rs = [SELECT Buttons__c FROM Realty_User__c WHERE not (Buttons__c INCLUDES ('Terminplaner'))];
   for(Realty_User__c r : rs){
       **r.Buttons__c += ';Terminplaner';**
       update r;
   }                                                                           
}

}

似乎您没有更新值。

例如:r.Buttons__c += 'value1;value2;Terminplaner'; update r;