2012-06-07 150 views
0

在apex-code中,我寫了2個觸發器。我有2個對象A和B.當創建一個對象時,我需要創建B對象的記錄。例如:當創建對象A的1條記錄時,然後創建對象B的4條記錄。我寫了2條觸發器1,當A對象被創建時(這是在插入之前,在更新之前)觸發時,默認爲B對象中的一些字段。 2觸發器是創建A的記錄(這是插入後,更新後)觸發器時創建對象B的記錄。未創建所有記錄

但是,當我創建對象A的記錄然後創建4記錄ID。 但是當使用Apex Data Loader創建對象A的記錄時,爲A創建了2條記錄,但是對於B對象只創建了4條記錄。這是爲A對象的第二條記錄創建的。

我改變了代碼

爲(對象E:Trigger.new){

爲(){ 創建4個記錄B對象 }}

我正在此錯誤當我做了它

插入失敗。行ID爲abcdef12345的第一行例外;第一個錯誤:INVALID_FIELD_FOR_INSERT_UPDATE,無法在插入調用中指定Id:[Id]

任何機構都可以幫助我解決問題。 謝謝 Anu

回答

0

錯誤消息告訴你,你不能分配一個值到ID字段。 ID字段受到保護,其值由Salesforce.com自動生成。

從插入語句中刪除ID字段。

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; 
} 

這將有助於查看更多的代碼。