2012-06-07 4 views
0

꼭대기 부호에서 나는 2 개의 방아쇠를 썼습니다. 나는 2 개의 객체 A와 B를 가지고 있습니다. 객체가 생성 될 때 B 객체의 기록을 만들어야합니다. 예를 들어 : 개체 A의 레코드 하나가 생성 된 다음 개체 B의 레코드 4 개를 생성합니다. 2 개의 트리거를 작성했습니다. 1 개체가 생성 될 때 B 개체의 기본 필드가 하나입니다 (이 개체는 업데이트 전에 삽입됩니다). 2 트리거는 A 레코드가 생성 될 때 (삽입 후, 업데이트 후) 트리거가 발생할 때 객체 B의 레코드를 생성하는 것입니다.모든 레코드를 만들지 않습니다

하지만 개체 A의 레코드를 만들면 4 개의 레코드 ID가 만들어집니다. 그러나 Apex Data Loader를 사용하여 개체 A의 레코드를 만들었을 때 2 개의 레코드가 A에 대해 만들어졌지만 B 개체의 경우 4 개의 레코드 만 만들어졌습니다. 이것은 A 오브젝트의 두 x 째 레코드에 대해 작성됩니다. {에 대한

() { 가 B 객체 } 4 개 레코드를 만들}

나는이 오류를 얻고을 :

은 내가 (Trigger.new 개체 전자)에 대한

에 코드를 변경 내가 그랬을 때

삽입에 실패했습니다. id가 abcdef12345 인 행 0에 대한 첫 번째 예외. 첫 번째 오류 : INVALID_FIELD_FOR_INSERT_UPDATE, 삽입 호출에서 ID를 지정할 수 없습니다. [Id]

어떤 문제라도 해결할 수 있습니까? 감사합니다. Anu

답변

0

오류 메시지는 ID 필드에 값을 할당 할 수 없다는 오류 메시지가 표시됩니다. ID 필드는 보호되며 값은 Salesforce.com에서 자동 생성됩니다.

insert 문에서 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; 
} 

코드를 더 많이 보는 것이 도움이됩니다.

관련 문제