You need to sign in to do that
Don't have an account?
muromuro
Apexの実行順序について(プロセスビルダー、トリガ)
お世話になっております。
商談の下にカスタムオブジェクトAとB(A・B間にリレーションなし)と、商談とはリレーションがないカスタムオブジェクトCとD(Cが親の主従関係、A・Bとはリレーションなし)があります。
これらのオブジェクトに対して、2つの動作があります。
1.Aにレコードを作成すると、商談を元にCを、Bを元にDを作成する(プロセスビルダーからApexクラス呼び出し)。
2.Aにレコードを作成すると、Bの値を更新する(Apexトリガ、After Insert)
当初、1.で作成されたCとDが2.の影響を受けていなかったので、これらは1.→2.の順で動作していました。
今回、処理2.のコードを改修することになり、ガバナ制限的にも問題のあるコードだったので、同様の動作を制限にかからないように書き直しました。
すると、処理内容はほぼ変わらないはずなのですが、1.で作成されたCとDが2.で更新した後の値となっており、2.→1.の順に動作するようになってしまいました。
Apexの動作順序を考えるとトリガ→プロセスビルダーなので2.→1.が正しい気もするのですが、だとすれば今まで1.→2.の順で動作していた理由がわかりません。業務的には1.→2.が理想です。
この逆転してしまった順番を、トリガを元に戻さずに1.→2.に戻すにはどうすればよいでしょうか。
また、当初1.→2.の順に動作する理由も開設いただければと思います。
以上、よろしくお願いいたします。
商談の下にカスタムオブジェクトAとB(A・B間にリレーションなし)と、商談とはリレーションがないカスタムオブジェクトCとD(Cが親の主従関係、A・Bとはリレーションなし)があります。
これらのオブジェクトに対して、2つの動作があります。
1.Aにレコードを作成すると、商談を元にCを、Bを元にDを作成する(プロセスビルダーからApexクラス呼び出し)。
2.Aにレコードを作成すると、Bの値を更新する(Apexトリガ、After Insert)
当初、1.で作成されたCとDが2.の影響を受けていなかったので、これらは1.→2.の順で動作していました。
今回、処理2.のコードを改修することになり、ガバナ制限的にも問題のあるコードだったので、同様の動作を制限にかからないように書き直しました。
すると、処理内容はほぼ変わらないはずなのですが、1.で作成されたCとDが2.で更新した後の値となっており、2.→1.の順に動作するようになってしまいました。
Apexの動作順序を考えるとトリガ→プロセスビルダーなので2.→1.が正しい気もするのですが、だとすれば今まで1.→2.の順で動作していた理由がわかりません。業務的には1.→2.が理想です。
この逆転してしまった順番を、トリガを元に戻さずに1.→2.に戻すにはどうすればよいでしょうか。
また、当初1.→2.の順に動作する理由も開設いただければと思います。
以上、よろしくお願いいたします。
こちらコードになります。
2.トリガ(変更前)
2.トリガハンドラー(変更後、トリガに直接同様の処理を記述しても順序変わらず)
1.クラス
変更前のトリガはガバナ制限に抵触しやすいコード(forループ内でDML処理・SOQLクエリを実施)のため、意図的に処理の場所を変更しております。