はじめに
こんにちは。今回はSpring '15にリリースされたLightningファミリーのひとつProcessBuilderについて紹介します。 ProcessBuilderはApexTriggerに近い機能を設定のみ(コーディングなし)で実現できる機能です。
Processの作成
取引先オブジェクトの住所を変更したら、取引先責任者の住所を同じ値を設定するProcessを作成してみます。 まずProcessBuilderの管理は『設定>作成>ワークフローと承認申請>プロセスビルダー』のリンクから起動します。Auraベースの画面が表示されます。新規ボタンから作成してみましょう。
プロセスの作成
プロセス名、API参照名、説明を設定し、保存ボタンを押します。
設定画面
保存後にプロセスの設定画面が表示されます。以下の内容を設定していきます。
・プロセスの開始対象となるオブジェクト
・アクションの実行条件 ※スケジュール実行も可能
・アクションの内容
設定画面はフロー図になっており、上から下に条件に合致したアクションが実行されていきます。
オブジェクト設定
オブジェクトを設定し、プロセスの開始条件を選択します。
開始条件は『レコードを作成したときのみ』、『レコードを作成または編集したとき』のいずれかからの選択になり、編集時のみの場合は?となりますが、『レコードを作成または編集したとき』を選択しておき、次のアクション開始の条件で『作成日≠最終更新日』で実現できます。
条件設定
次にアクションの開始条件を設定します。数式を使った条件も利用できるようです。
今回は標準の条件で設定してみます。
住所が変更された場合に起動したいので、条件リストの『変更済み=True』を選択します。
条件を保存後にアクションの内容を設定します。
指定できるアクションは、以下の通りです。
・Apexの起動
・Chatterに投稿
・クイックアクション
・フロー
・メールアラート
・レコードを更新
・レコードを作成
・承認申請
既存の資産も利用できますが、承認申請を開始できるのはちょっと驚きました。
取引先に紐付く全ての取引先責任者の住所を変更するにはアクション種別に『レコードを更新』を設定し、レコードタイプに子リレーション名(Contacts)を設定します。
※特定のレコードのみ更新する場合は『レコードの更新条件』に条件を指定することも可能です。
※制約として、オブジェクト間にリレーション(参照・主従関係)があるレコードのみ更新対象にできます。
以上で設定は完了です。あとはプロセスを有効化すると機能するようになります。
バージョン管理
ProcessBuilderで特徴的な機能の1つにバージョン管理の機能があります。 1つのプロセス内で有効化できるバージョンは1つだけとなっています。 バージョン管理されていることにより、誤った修正を行った場合にすぐに過去のバージョンに戻すことができます。Salesforceではめずらしい機能かと思います。
制限
ワークフロー、VisualWorkFlow等と同様に制限があるようです。
詳細はヘルプを参照してみてください。
あとは自動更新するような機能(ワークフロー、Trigger)等に対しても同じ考え方だとは思いますが、更新時にワークフロー/Process/Tiggerがそれぞれ連鎖して動くような設計、無条件に全件更新するような設計は控えた方が良さそうです。
現状、今回のような親子で同期を取る処理をビューの一括更新で101件以上に対して実行すると"Too many SOQL queries: 101"のガバナ制限に抵触することが確認できています。Process Builderは有効な機能なので、今後の機能改善に期待したいところですね。
おわりに
ProcessBuilderはSummer '15でも機能拡張されており、今後も楽しみな機能です。
・LightningProcessBuilderの機能拡張
新しい関数の追加
複数選択リストをさまざまなところで利用可能に
プロセスのVersion管理が容易になり、削除にも12時間待つ必要がなくなる。
ApexTriggerの代替になるかどうかは個人的にも興味があるので、色々試して紹介できればと思ってます。