You need to sign in to do that
Don't have an account?
daisy1153
triggerを使用した、データの更新について
お世話になっております。
データを登録する際、キー項目によってtriggerで
insertかupdateかを判断しようとしております。
既存のデータのキー項目と、新規で登録するデータのキー項目が一致している場合、既存のデータを新規データの内容で
update。
キーが一致しない場合、新規データをinsert。
上記内容はtriggerでは実現不可能でしょうか。
trigger.newをListに貯めて、insertかupdateを判断したのですが、エラーとなります。
どなたかご存知の方いらっしゃいましたら、ご教示のほどよろしくお願いいたします。
Trigger内でInsert, Updateを行っている処理と思ってコメントしてたのですが、例えば取引先の保存処理を実行したときに取引先トリガーでInsertかUpdateに切り替えるという処理でしたら、トリガーが実行されるときには保存処理が実行されたあとなので、トリガー内でのUpsert対応はちょっとできなかったです。
All Answers
[upsert list 外部ID項目]という感じで指定できます。
例)
upsert accounts AccountCd__c
キー項目は外部ID項目でユニークである必要があります。
Trigger内に来てるときにはもうUpdateかInsertかの判断が済んだ状態なので、その前にUpsert処理を使う必要がありますね。
Upsertのキー項目にはTaikiさんの言うように、外部IDが使えます。
ちなみにTrigger.isUpdateやTrigger.isInsertを使うと、どちらの処理状態か判断することができます。
ご回答ありがとうございます。
List<Account> l = new List<Account>();
if(trigger.isBefore){
for(integer i = 0; i < (trigger.isDelete ? trigger.old.size() : trigger.new.size()); i++){
l.add(trigger.new[i]);
}
upsert l AccountCd__c;
}
上記のようにしておりますが、エラーとなってしまいます。
AccountCd__cは、外部ID、ユニークとしております。
Trigger内でInsert, Updateを行っている処理と思ってコメントしてたのですが、例えば取引先の保存処理を実行したときに取引先トリガーでInsertかUpdateに切り替えるという処理でしたら、トリガーが実行されるときには保存処理が実行されたあとなので、トリガー内でのUpsert対応はちょっとできなかったです。
ご回答ありがとうございます。
了解いたしました。
controllerでの処理を検討します。
ありがとうございました。