没有创建所有记录

时间:2012-06-07 10:24:29

标签: salesforce apex-code

在apex-code中我写了2个触发器。我有2个对象A和B.我需要在创建对象时创建B对象的记录。例如:当创建对象A的1条记录然后创建对象B的4条记录。我写过2触发器1默认情况下,当创建对象时(这是在插入之前,更新之前)触发器和B对象中的某些字段2触发器是在创建A记录时创建对象B的记录(这是在插入后,更新后)触发。

但是当我创建对象A的记录时,则创建了4个记录ID。 但是当使用Apex Data Loader创建对象A的记录时,为A创建了2条记录,但对于B对象,只创建了4条记录。这是为A对象的第二个记录创建的。

我将代码更改为

for(Object e:Trigger.new){

有(){    为B对象创建4条记录 }}

当我这样做时,我收到了这个错误

插入失败。第0行的第一个例外,id为abcdef12345;第一个错误:INVALID_FIELD_FOR_INSERT_UPDATE,无法在插入调用中指定Id:[Id]

任何人都可以帮助我解决问题。 谢谢 ANU

2 个答案:

答案 0 :(得分:0)

错误消息告诉您无法为ID字段分配值。 ID字段受到保护,其值由Salesforce.com自动生成。

从插入语句中删除ID字段。

答案 1 :(得分:0)

在插入触发器之前尚未填充Id,因此您可能过早地引用它,可能尝试将B记录指回A记录。另一个问题是尝试为B.Id分配一个值。两个代码问题如下所示:

trigger trigA on A__c (before insert) {
    List<B__c> listB = new List<B__c>();
    for (A__c a : trigger.new) {
        B__c b = new B__c();
        B__c.reference_to_A__c = a.Id; // <-- Wrong! a.Id isn't populated yet in before insert
        B__c.Id = '...'; // <-- Wrong! Salesforce generates the Id field for you
        listB.add(b);
    }
    insert listB;
}

查看更多代码会很有帮助。