0

apex-code では、2 つのトリガーを記述しました。私は2つのオブジェクトAとBを持っています.Aオブジェクトが作成されたときにBオブジェクトのレコードを作成する必要があります. 例: オブジェクト A の 1 つのレコードが作成されたら、オブジェクト B の 4 つのレコードを作成します。2 つのトリガー 1 は、A オブジェクトが作成されたときの B オブジェクトのデフォルトのいくつかのフィールド用です (これは挿入前、更新前です) トリガーと2 トリガーは、オブジェクト A のレコードが作成されたときにオブジェクト B のレコードを作成することです (これは挿入後、更新後です)。

しかし、オブジェクト A の i レコードを作成すると、4 つのレコード ID が作成されます。しかし、その時点で Apex Data Loader を使用してオブジェクト A のレコードを作成すると、A には 2 つのレコードが作成されますが、B オブジェクトには 4 つのレコードしか作成されません。これは、A オブジェクトの 2 番目のレコードに対して作成されます。

私はコードをに変更しました

for(Object e : Trigger.new){

for(){ B オブジェクトの 4 つのレコードを作成 }}

私がそれをしたときにこのエラーが発生しています

挿入に失敗しました。ID abcdef12345 の行 0 の最初の例外。最初のエラー: INVALID_FIELD_FOR_INSERT_UPDATE、挿入呼び出しで Id を指定できません: [Id]

どんな体でも問題を解決するのを手伝ってくれますか? ありがとうアヌ

4

2 に答える 2

0

Id は挿入前のトリガー中にまだ入力されていないため、B レコードを A レコードに戻そうとしている可能性があります。もう 1 つの問題は、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;
}

コードをもっと見ると役に立ちます。

于 2012-06-07T15:55:03.360 に答える
0

エラー メッセージは、ID フィールドに値を割り当てることができないことを示しています。ID フィールドは保護されており、その値は Salesforce.com によって自動生成されます。

insert ステートメントから ID フィールドを削除します。

于 2012-06-07T15:49:33.750 に答える