You need to sign in to do that
Don't have an account?
慈 小堀
System.NullPointerException: Attempt to de-reference a null object・・のエラー
商談のトリガで以下のように書きましたところ、エラーがでました。
CopyOpportunityYakuwari: execution of AfterInsert caused by: System.NullPointerException: Attempt to de-reference a null object: Trigger.CopyOpportunityYakuwari: line 7, column 1
ご教授お願いします。
trigger CopyOpportunityYakuwari on Opportunity (after Insert) {
for(Integer i=0; i<Trigger.new.size(); i++){
Opportunity nw = Trigger.new[i];
Opportunity old = Trigger.old[i];
/*
* 「取引先責任者の役割」をコピー
*/
List<OpportunityContactRole> contactRoleList = [
SELECT
ContactId,
Role,
IsPrimary
FROM
OpportunityContactRole
WHERE
OpportunityId = :'old.id'
];
List<OpportunityContactRole> newContactRoleList = new List<OpportunityContactRole>();
for (OpportunityContactRole contactRole : contactRoleList) {
newContactRoleList.add(new OpportunityContactRole(
OpportunityId = 'nw.id',
ContactId = contactRole.contactId,
Role = contactRole.role,
IsPrimary = contactRole.isPrimary
));
}
insert newContactRoleList;
}
}
CopyOpportunityYakuwari: execution of AfterInsert caused by: System.NullPointerException: Attempt to de-reference a null object: Trigger.CopyOpportunityYakuwari: line 7, column 1
ご教授お願いします。
trigger CopyOpportunityYakuwari on Opportunity (after Insert) {
for(Integer i=0; i<Trigger.new.size(); i++){
Opportunity nw = Trigger.new[i];
Opportunity old = Trigger.old[i];
/*
* 「取引先責任者の役割」をコピー
*/
List<OpportunityContactRole> contactRoleList = [
SELECT
ContactId,
Role,
IsPrimary
FROM
OpportunityContactRole
WHERE
OpportunityId = :'old.id'
];
List<OpportunityContactRole> newContactRoleList = new List<OpportunityContactRole>();
for (OpportunityContactRole contactRole : contactRoleList) {
newContactRoleList.add(new OpportunityContactRole(
OpportunityId = 'nw.id',
ContactId = contactRole.contactId,
Role = contactRole.role,
IsPrimary = contactRole.isPrimary
));
}
insert newContactRoleList;
}
}
■エラーについて
Opportunity old = Trigger.old[i];
⇒Insertトリガーでは、Trigger.Oldは利用できません。
新規登録なので、レコードの前情報がないためです。
■エラーの原因ではありませんが
OpportunityId = :'old.id'
⇒正しくは、「OpportunityId = :old.id」です。
シングルクォートは不要です。
■本題
前の質問も参照しましたが、トリガーでの実装ではなく、
Apexで独自のコピー機能を実装するやり方のほうが、
シンプルになると思いますが、トリガーで実装しなければいけない理由があるのでしょうか?
All Answers
■エラーについて
Opportunity old = Trigger.old[i];
⇒Insertトリガーでは、Trigger.Oldは利用できません。
新規登録なので、レコードの前情報がないためです。
■エラーの原因ではありませんが
OpportunityId = :'old.id'
⇒正しくは、「OpportunityId = :old.id」です。
シングルクォートは不要です。
■本題
前の質問も参照しましたが、トリガーでの実装ではなく、
Apexで独自のコピー機能を実装するやり方のほうが、
シンプルになると思いますが、トリガーで実装しなければいけない理由があるのでしょうか?
Ryosuke Kobayashi様
返信ありがとうございます。
Trigger.Old利用できないことが理解できました。別の項目の値をひきついで対応できました。
Apexでコピー機能を作成すると、ボタンを押すとすでにデータが出来てしまうのを避けたく、トリガにしてみました。
ありがとうございましたm(__)m