テックブログ

Lightning Process Builderを使ってみよう

Lightning Process BuilderはSalesforceの1つの特徴である「宣言的開発」によってビジネスロジックの自動制御を行うための方法です。ApexやTriggerに関するコーディング知識が無くてもビジネスロジックを記述することができます。今日はLightning Process Builderの特徴をいくつか紹介しましょう。

Salesforceにおけるプロセス自動制御化

Salesforceにおいてビジネスロジックを自動制御するには、5つの方法があります。

  1. Workflow
  2. 承認プロセス
  3. Visual Workflow
  4. Lightning Process Builder
  5. Trigger

Lightning Process Builderの前にこれらをおさらいしておきましょう。

1. Workflow

Workflowは、比較的簡単な条件(1つのIF文に相当)によりビジネスロジックを構築する場合に適しています。例えば、「商談が登録された場合に、"Closingまでのプランを計画する"というToDoを作成する」といったビジネスロジックにはWorkflowは適切です。条件を満たした場合に実行される「アクション」としては以下がサポートされています。このうち「項目自動更新」はToDoの作成とともによく使われる機能の1つでしょう。

  • 項目自動更新
  • ToDoの作成
  • メールアラートの送信
  • アウトバウンドメッセージの送信

一方で、「ChatterへPostする」「(ToDo以外の)レコードを新規に作成する」と言った機能はWorkflowではサポートされていません。これらの機能はVisual WorkflowやLightning Process Builderにてサポートされています。

2. 承認プロセス

ビジネスにおいて何らかの行為に対して上長や関連する人物の承認が必要な場合があります。「1000万円以上の商談の場合は、上長の承認を得る」というのもその1つです。Salesforceの承認プロセスにより「承認」「却下」という行為だけではなく、承認者(却下者)、それが行われた時間等が管理されます。承認プロセスのアクションとしては、Workflowのアクションに加えて「レコードロック」「レコードロックの解除」が提供されます。なお設定できる条件の複雑さという意味では、Workflowも比較的簡単な条件(1つのIF文に相当)のみです。

3. Visual Workflow

Visual Workflowは2つ側面を持っています。1つは、Salesforceの画面上のボタン/リンクから起動されるウィザード形式の小さな画面機能を提供します。固定文言をベースとした簡単なアンケートであれば、Visual Workflowにより実現することができます。もう1つは、他のFlowから呼び出されることでしょう。Lightning Process BuilderからはVisual Workflowを呼び出すことができます。
Workflow/承認プロセスではサポートされなかったChatterでのPostやToDo以外のレコードの作成もVisual Workflowではサポートされています。

4. Lightning Process Builder

Lightning Process BuilderはSalesforceで最も新しいビジネスロジックを自動制御するためのツールです。Workflowや承認プロセスではその定義内容が視覚的にわかりにくい部分が(正直)ありましたが、Lightning Process Builderでは大きく改善されフロー形式のGUIにより視覚的にてもわかりやすいツールです。複数の条件により複雑なビジネスロジックを設定することができます。Visual Workflow同様に、ChatterのPostやレコードの作成も可能です。また、Visual Workflowで定義したフローを呼び出すことができます。一方で、Visual Workflowのような画面機能は提供されていません。

5. Trigger

Triggerは宣言的開発よるビジネスロジックを構築するのではなく、Apexにより構築する方法です。上記の4つの自動化プロセス機能で紹介した機能はカバーされていますが、複雑な条件により処理の分岐が必要な場合、あるいはビジネスフローではありませんが複雑な条件による入力値のチェックが必要な場合はTriggerが適しています。

Lightning Process Builderを使用してみる

前置きが長くなりましたが、早速Lightning Process Builderを使用してみます。以下のようなビジネスケースを考えてみます。

  1. 商談の金額が1,000万円以上へ更新された場合、Chatterで営業グループへメンションが行われる。
  2. 1以外の場合、商談のフェーズが"Closed Won"へ変更された場合は、社内の別システム(Salesforce外)へ商談情報が連携される。

Lightning Process Builderでは、1のChatterのPostは容易です。一方、2のSalesforce外のシステムへの連携はLightnig Process Builderだけでは解決できません。Apexを1つ定義し、Lightning Process Builderから呼び出すことが必要となります。早速Lightning Process Builderでプロセスを作成してみましょう。

Salesforceを開き、Lightning Process Builderを起動します。新規にプロセスを作成し、以下のようなプロセス名を定義します。
pic1

次にこのプロセスを開始するオブジェクト --- 商談を選択します。開始条件としては、「レコードを作成または編集したとき」としておきましょう。
pic2

続いて条件を以下のように定義します。
pic3

条件を満たす場合は、ChatterのPostを行います。以下のように「営業グループ」へメンションします。
pic4

条件を満たさない場合を定義します。もう1つの条件に対して、以下のように「商談のフェーズが"Closed Won"へ変更された」と設定します。
pic5

ここでApexを準備します。Lightning Process Builderのアクションでは外部へのコールアウト機能は提供されていません。この部分はApexによる実装が必要となります。

 

このクラスは2つの機能を有しています。1つは、Lightning Process Builderから呼び出されるために、@InvocableMethod アノテーションが付与されたメソッドが定義されていることです。これにより、Lightning Process BuilderからApexを呼び出すことができるようになります。なお、メソッド定義にはいくつか注意点があり、public static or global staticであること、Inputとして受け取ることができるデータ型/構造に制約があります。詳細については、こちらを参照ください。もう1つは、非同期処理(@future)により外部システムへの連携を行っていることです。最も外部システムと言っても、送信先のURLをみていただくとわかるように、別なSalesforceへRESTによりJSONデータを送信しています。非同期にしているのは、Lightning Process Builderにより管理されるトランザクション内では、Calloutがサポートされていないためです(futureを使わず同期処理にすると、System.CalloutExceptionが発生します)。
なおここでは省略しますが、Callout処理により呼び出されたSalesforce側では、JSONとして受け取った"oppNumber"をSystem.debugによりログ出力しています。

Apexが準備できたら、Lightning Process Builderへ戻ります。アクションとしてApexを選択し、先ほど作成したApexクラスを指定します。
pic6

Apexを呼び出す際に重要なのがApexのメソッドへ渡す引数です。今回は商談オブジェクトのIdをListで定義していますので上記の図のように、"oppIdList"という引数にこのプロセスで使用している商談オブジェクトのIdを設定します。Lightning Process Builderから値を引き渡すことができます。
以上でプロセスの定義は終了です。保存ボタンを押下し、このプロセスを有効化します。

プロセスのテスト

それでは早速テストしてみます。まずは、新規に商談を登録します。金額は900万円ですのでChatterへのPostはされません。
pic7

次に、1100万円の商談を作成してみましょう。保存後”Chatter"タブを開くと、営業グループ宛に「テスト商談102」について新規に投稿されていることが確認できます。
pic8

最後に、この商談のフェーズを"Closed Won"へ変更します。Calloutが成功したときに表示されるメッセージ"### Success to integrate"が表示されていることが確認できます。
pic9

最後に

簡単な例ですが、Lightning Process Builderでできることをご紹介しました。今回はApexの呼び出しも行いましたが、Lightning Process Builderだけでもビジネスプロセスを構築することができます。またApexを組み合わせるとより複雑なロジックを構築することができます。

最後にLightning Process Builderを使用する点での注意点をまとめておきましょう。

  1. 1つのオブジェクトに対して、複数のプロセス(Workflow/Visual Workflow/Lightning Process Builder)を定義することは極力避けた方がよいでしょう。条件を満たす場合それらが個別に実行されることになります。
  2. プロセスの実行に依存するようなプロセス定義をしてすべきではありません。つまり1つのオブジェクトにWorkflowとLightnig Process Builderのプロセスを定義した場合に、Workflowの実行後にLightning Process Builderのプロセスが実行されることを期待する実装をしてはいけません。
  3. 無限ループに陥らないようにすること。特にアクションで同じオブジェクトを更新する処理を記述する場合や、オブジェクトを新規に作成する場合、その作成/更新処理により他のプロセスが起動する場合は、プロセスの実行がチェーンしてしまいます。そのような場合は、本当にそのプロセスが必要であるか/適切であるかを検討し、Apexも併用してプロセスがチェーンしないような工夫が必要でしょう。
  4.  Apexによる呼び出しを行う場合は、SOQLの発行回数やクエリで取得できる件数の上限値などにガバナ制限が適用されます。

Lightning Process Builderの考慮点はこちらにも記載があるのでご参考ください。

Appirio