在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
答案 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;
}
查看更多代码会很有帮助。