特殊时期,大家一定要保重身体。增强自身免疫力,一切都会过去,一起加油!!!

カスタムオブジェクトお互いに参照処理とafter insertの中に自分をinsert処理(一回のみ)ーTriggerHandler

Salesforce zchao 1191℃ 0评论

対象と対象間の関係についてですが、及びトリガーでお互いに参照機能実現を紹介させていただきたいんです。

対象と対象間の関係、または表と表間の関係ですね。(table)
一対一
一対多
多対多(今回)

Javaと似合いますね。
多対多の場合は、新しい表を新規しないといけない、
例えば、
表と表はお互いに参照したいです、一対一、一対多の場合は、フローとかプロセスビルダーとかでできますでしょうね。
けれども、多対多はちょっと違いますので、新しい表が作らないと、

Table1表のプライマリキー (primary key)、それはsalesforceのIDです。key1にしよう。
Table2表のプライマリキー (primary key)、それはsalesforceのIDです。key2にしよう。
新しい表Table3の中に、とりあえず、プライマリキーkey3にしよう、あとはkey1とkey2とも必要です。(key1はTable1表のデータと繋がり、key2はTable2表のデータと繋がり)

早速ですが、表と表はお互いに参照とのことでしたので、どういう意味?勝手に”你中有我,我中有你”と呼ばれています。
要望として:
レコードAの中にレコードBを作成してから、レコードBの中にレコードAが存在します(Trigger)。
レコードAの中にレコードCを作成してから、レコードCの中にレコードAが存在します(Trigger)。
レコードAの中にレコードDを作成してから、レコードDの中にレコードAが存在します(Trigger)。
レコードBの中にレコードCを作成してから、レコードCの中にレコードBが存在します(Trigger)。

A⇒B、C、D
B⇒A、C
C⇒A、B
D⇒A
...
...

Table3はTable1とTable2との関連レストとして表示されています。

key1は参照元、(参照Table1)
key2は参照先、(参照Table2)

参照元と参照先が交換処理で以上の問題が解決できます。すべての処理は新しい表Table3の中に処理しています。

ポイントは登録後(after insert)処理ですね、繰り返してinsertのはダメなんです。だから、Flagとしては大丈夫です、一回のみinsertです。

サンプルコードはご参考になれば幸いです。
====*======================================
Table3Trigger.apxt


trigger Table3Trigger onTable3__c (after insert) {
Table3TriggerHandler handler = new Table3TriggerHandler();
if(Trigger.isInsert && Trigger.isAfter){
handler.onAfterInsert(Trigger.new, Trigger.newMap);
}

Table3TriggerHandler .apxc


public class Table3TriggerHandler {
public static boolean m_isExecuting = true;
// 登録後処理
public void onAfterInsert(List<Table3__c> newObjs, Map<ID, Table3__c> newObjMap){
ChangeDetail(newObjs);
}
}
// お互いに参照 共通処理
public void ChangeDetail(List<Table3__c> newObjs){
if(Table3TriggerHandler.m_isExecuting){ //Flagがないと、salesforceの制限で16回を繰り返、エラーになっちゃうから
// if was executed during the same context
// avoid recursion(再帰を避ける)
Table3TriggerHandler.m_isExecuting = false;   

List<Table3__c> ts = new List<Table3__c>();

for (Table3__c t : newObjs) {
Table3__c t3 = new Table3__c();
if(String.isNotBlank(t.key2__c)){

//参照元と参照先が交換処理
//参照元=参照先
t3.key1__c = t.key2__c;
//参照先=参照元
t3.key2__c = t.key1__c;

ts.add(t3);
}
}
insert ts;
}
}

======================================*====

以上となります。

もしかしたら、毎日、昨日の自分より今日の自分は良くなるなら、十分だと思います。
何より大事なことは、人生を楽しむこと、幸せを感じること、それだけです。

转载请注明:zchao博客之家 » カスタムオブジェクトお互いに参照処理とafter insertの中に自分をinsert処理(一回のみ)ーTriggerHandler

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!