function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
daisy1153daisy1153 

triggerを使用した、データの更新について

お世話になっております。

 

データを登録する際、キー項目によってtriggerで

insertかupdateかを判断しようとしております。

 

既存のデータのキー項目と、新規で登録するデータのキー項目が一致している場合、既存のデータを新規データの内容で

update。

キーが一致しない場合、新規データをinsert。

 

上記内容はtriggerでは実現不可能でしょうか。

trigger.newをListに貯めて、insertかupdateを判断したのですが、エラーとなります。

 

どなたかご存知の方いらっしゃいましたら、ご教示のほどよろしくお願いいたします。

Best Answer chosen by Admin (Salesforce Developers) 
Taiki YoshikawaTaiki Yoshikawa

Trigger内でInsert, Updateを行っている処理と思ってコメントしてたのですが、例えば取引先の保存処理を実行したときに取引先トリガーでInsertかUpdateに切り替えるという処理でしたら、トリガーが実行されるときには保存処理が実行されたあとなので、トリガー内でのUpsert対応はちょっとできなかったです。

All Answers

Taiki YoshikawaTaiki Yoshikawa
upsertで対応できると思います。
[upsert list 外部ID項目]という感じで指定できます。

例)
upsert accounts AccountCd__c

キー項目は外部ID項目でユニークである必要があります。
ikouikou

Trigger内に来てるときにはもうUpdateかInsertかの判断が済んだ状態なので、その前にUpsert処理を使う必要がありますね。

Upsertのキー項目には

ちなみにTrigger.isUpdateやTrigger.isInsertを使うと、どちらの処理状態か判断することができます。

daisy1153daisy1153

ご回答ありがとうございます。

 

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、ユニークとしております。

 

 

Taiki YoshikawaTaiki Yoshikawa

Trigger内でInsert, Updateを行っている処理と思ってコメントしてたのですが、例えば取引先の保存処理を実行したときに取引先トリガーでInsertかUpdateに切り替えるという処理でしたら、トリガーが実行されるときには保存処理が実行されたあとなので、トリガー内でのUpsert対応はちょっとできなかったです。

This was selected as the best answer
daisy1153daisy1153

ご回答ありがとうございます。

 

了解いたしました。

controllerでの処理を検討します。

 

ありがとうございました。