Salesforce Lightning Platform でプロセスを自動化して、かしゆかの誕生日と同じ人を知らせる

Low-Code/No-Code Advent Calendar 2018 23日目、本日はかしゆかの誕生日です、ほんとにおめでとうございます! めっちゃアウェイのところへやってきましたが、かしゆかの誕生日を祝う気持ちはどこでも一緒です、どうぞよろしくお願いいたします。

さて、Salesforce はご存知でしょうか。Sales CloudやService Cloudなど、CRMやコールセンターなどの SaaSとして提供されているアプリケーションサービスです。Salesforceには、Lightning Platform(旧名 Force.com)という`aPaaS`(Application Platform as a Services)を包含していて、標準的な機能のカスタマイズや拡張はもちろん、一から新しいアプリケーションを開発することもできます。また、その開発されたアプリケーションは[AppExchange](https://appexchangejp.salesforce.com/)(旧名:AppStore - Appleさんに名前上げたあれ)で公開し、販売することができます。

ビジネス向けaPaaSの仕組みを持つLightning Platformですので、各処理にドリブンして様々な機能をキックすることができます。今回はその中から[プロセスビルダー](https://help.salesforce.com/articleView?id=process_overview.htm&language=ja&r=https%3A%2F%2Fwww.google.com%2F&type=5)を使って、取引先の担当者の誕生日がかしゆかと同じかどうかを確認して、同じだったらそれを通知する仕組みを「ノーコード」で実現してみます。

ここで実現できることは、[Salesforce開発環境](https://developer.salesforce.com/ja/)で利用できます。サインアップすれば、誰でも無償でお使いいただけますので、試してみてください。

# プロセスの自動化

ビジネスアプリケーションでありがちなのは、何かの値を変更したら、それを受け取って、別のデータを更新したり、通知したり、別の機能を呼び出したりして、ビジネスプロセスを自動化していくことでしょう。

Salesforceでは、プロセスを自動化する機能として、「[プロセスビルダー](https://help.salesforce.com/articleView?id=process_overview.htm&type=5)」と「[ワークフロー](https://help.salesforce.com/articleView?id=customize_wf.htm&type=5)」があります。人手を介するような「承認」が必要なプロセスには、「[承認プロセス](https://help.salesforce.com/articleView?id=approvals_getting_started.htm&type=5)」もあります。使い方によって、これらを選別して利用します。

プロセスビルダーとワークフロー、どちらを使えばいいの？というときもありますが、プロセスビルダーでは次のようなときに利用します。

- 任意のオブジェクト種別のレコードを作成する。
- レコードとその親のみでなく、あらゆる関連レコードを更新する。
- クイックアクションを使用して、レコードの作成、レコードの更新、または活動の記録を行う。
- プロセスを別のプロセスから呼び出す。
- フローを起動する。このアクションはワークフローでスケジュールできません。
- メールを送信する。
- Chatter への投稿
- 承認を受けるレコードを送信する。

ワークフローでは、項目自動更新、外部システムへのアウトバウンドメッセージを行う場合に利用します。

## プロセスビルダーを使ってみよう

Salesforceの設定画面から、プロセスビルダーを呼び出してみます。「クイック検索」のボックスに「プロセス」とか「ビルダー」「プロセスビルダー」打ち込むとアクセスがカンタンです。「プロセスの自動化」という中に「プロセスビルダー」があります。これをクリックします。

<img width="260" alt="Screen Shot 2018-12-22 at 13.52.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/37263/d622fc47-f0f4-7311-2419-7032fa219147.png">

すでに作成されているものがあれば、このようにプロセスの一覧が表示されます。結構謎な感じですが、「[Trailhead](https://trailhead.salesforce.com/ja/home)」とか Salesforce社のハンズオンをやってると、似たような感じにきっとなります。「高額交際費API」とかめっちゃ気になりますね。

そのあたりのことは一旦忘れて、右上の「新規」ボタンをクリックして、プロセスを実際に作っていくこととしましょう。

<img width="1302" alt="Screen Shot 2018-12-22 at 13.53.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/37263/6f7bfb50-784d-3a56-5186-8646b0ffd2aa.png">

## プロセスを作成する

プロセスの名前などを決めます。「プロセス名」や「説明」は好きにわかりやすいように付けます。API参照名は、Salesforce独自の`Apex`言語や他の機能から呼び出すときの参照値となりますので、これもわかりやすくしておきましょう。残念ながら、この名前の付け方は意味不明です。

プロセスを開始するタイミングは、このプロセスを始動するきっかけはなんですか、を指定します。今は、「レコード(保管されているデータのこと)の変更」と[プラットフォームイベント](https://trailhead.salesforce.com/ja/content/learn/modules/platform_events_basics)で呼び出される場合、それから他のプロセスビルダーで作ったプロセスから呼び出される場合になります。

<img width="870" alt="Screen Shot 2018-12-22 at 13.54.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/37263/8b66092d-b05d-577f-8c2a-e06861735eeb.png">

IT関係者だと見覚えのよくある、フローチャート的な何かがでてきます。直感でひらめいたとおりの動き方をします。まずは、きっかけとなるオブジェクト(データベースでいうテーブル、データを保管する箱の最小単位)を指定します。

<img width="782" alt="Screen Shot 2018-12-22 at 13.54.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/37263/d9d11fbe-087d-e4b7-f5a5-2a30699080f8.png">

Salesforceでは、顧客担当者情報を入れるオブジェクトを「取引先責任者」という名前にしています。オブジェクトからそれを選択し、「レコードを作成または編集したとき」にしておきます。すべてのデータを最初からすべて入れるわけではなく、あとで更新する可能性がありますので、今回はこちらのほうが使い勝手が良いでしょう。

<img width="539" alt="Screen Shot 2018-12-22 at 13.54.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/37263/f45d1790-3558-a5bc-fefe-1be8bf2ebaa4.png">

保存すると、また元のフローチャートの画面に戻ってきますから、分岐部分の「+ 条件を追加」を押してみます。

条件名は好きにして良いですが、まぁこんな感じですかね。取引先責任者には「誕生日」という項目がありますので、その項目が「1988/12/23」だったらということにします。

<img width="708" alt="Screen Shot 2018-12-22 at 14.30.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/37263/610c069f-ed74-47dd-2d2a-c44c660c645f.png">

なお、この項目名、真面目に入れる場合には`API参照値`を入れないといけないのですが、クリックして選択できます。なので、この項目の中から検索したり、階層を選んだりして「誕生日」を選択すればよいだけです。便利(当然か)。

<img width="624" alt="Screen Shot 2018-12-22 at 13.55.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/37263/d117cb22-d92d-b5dc-22bd-c0c849ff9337.png">

最後に「ルール適用時のアクション」を入れます。先程の分岐条件にマッチしたときに、何をするのかを定義する部分ですね。まずは、どのようなアクションを行うのかを選択します。次の９つから選択できます。今回はChatterに投稿してほしいので、「Chatter に投稿」を選択しました。

<img width="285" alt="Screen Shot 2018-12-22 at 14.33.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/37263/cb9471ee-79fb-5094-3af4-27829d108f71.png">

個々のアクションで入力すべきものは変わりますが、Chatterに投稿する場合には、「どこへ投稿するのか」と「メッセージ」を決めます。アクション名は分かりやすく、好きなものをどうぞ。ここで、「メッセージ」のところに「先込み項目」というものがあります。該当のレコードと関連する項目を指定すると、その内容で変更をしてくれるようになります。今回は、顧客担当者の名前を入れておきたいので、「姓」を選択しました。その結果が「{![Contact].LastName}になっています。`Contact`(取引先責任者)内の`LastName`(姓)を意味してるの、雰囲気でもわかりますね。あとは、メッセージを入れてきます。気持ち的には素晴らしいというか、羨ましいです。

<img width="706" alt="Screen Shot 2018-12-22 at 13.58.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/37263/64df39ed-c364-e358-01cc-5a3a701a972d.png">

ここまでの内容すべて「保存」したあとに、右上の「有効化」ボタンをクリックします。すると、このプロセスが実行状態になります。

<img width="620" alt="Screen Shot 2018-12-22 at 13.58.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/37263/2ff988a8-b7bf-4c22-1252-df63b966b1c2.png">

で、実際に取引先責任者を作って、「誕生日」を「1988/12/23」にして保存すると...。

<img width="505" alt="Screen Shot 2018-12-22 at 14.00.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/37263/ab119956-eeb9-882f-6d2b-14ff8956e452.png">

該当の取引先責任者のChatterへ、このように投稿がなされる...ということになります。やった、かんたんにできましたね？

# まとめ

このように、Salesforceでは、プロセスを自動化するためにプロセスビルダーなどの機能を標準で持っています。これらは、ノーコードで開発を行うことができますので、開発者でなくとも、かんたんにビジネスアプリケーションを開発することができる仕組みとなっています。これは、お便利ですね。