SalesforceからJavascriptボタンを追放する！アクションボタンとフロービルダーを組み合わせた(前編)

#はじめに
SalesforceのClassicでJavascriptボタンはかなり便利で使い勝手のよかったものの一つです。特別プログラムの経験がない私でも以下のように**レコード作成時や更新時の利便性向上のために、Javascriptボタンを使用していました。**

[レコード作成時に関連レコードや遷移元レコードの値を項目の初期値、デフォルト値を設定する方法](https://help.salesforce.com/articleView?id=000336823&language=ja&type=1&mode=1)

よく以下のようにJavascriptボタンを作っていました。
![Salesforceのjavascriptボタンの一例.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/4949acad-aa68-4106-f279-830b36d5a371.png)


取引先や商談のレコードページにJavascriptボタンを置くだけでなく、レポートを作成してそこにカスタム項目を追加して動的にレコードの作成、更新ができるようによく設定を行っていました。

Classicから**Lightningへ移行する際に一番困ったことはこのJavascriptボタン**の存在です。今まで当たり前のように使っていたJavascriptボタンが使えないとなると、ユーザがなかなかLightningを使ってくれません。レポートやダッシュボードだけはグラフィカルで見やすいLightningで見るけど、**日常業務は比較的表示スピードの早くて慣れているclassicになりがち**です。

今回は**アクションボタンを用いてフローを呼び出してみたい**と思います。それに関連してLightningへ移行途中でもclassicで使えるようにフローのボタンもご紹介できればと思います。

またいつものごとく長文になってしまいましたので、前編・後編にわけたいと思います。

#親取引先に紐づいた取引先の一括行動作成フローを作成

![行動一括作成全体像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/94baefed-c7be-6c6f-a78c-89b6bf76cff6.png)



今回作成するフローは「画面フロー」で、親取引先が紐づいている取引先はまとめて活動が作成できるフローになります。ただし、商談がない取引先には活動は作らないようにします。また親取引先がない取引先は対象の取引先だけ活動が作成するようにします。

###レコードIDと一致する「recordId」の意味を理解する
アクションボタンにフローを組み合わせて使う場合、一番重要で理解すべきことは「レコードを取得」でレコードを絞り込む条件として「レコードIDと一致する『recordId』」の意味を理解しなくてはいけません。


結論をいうとレコードを絞り込む条件として**変数「redordId」を指定してあげれば現在表示しているレコードのIDをSalesforce側で自動的に取得**してくれます。これはSalesforceのヘルプにもある通りです。

[フローアクションの考慮事項](https://help.salesforce.com/articleView?id=flow_actions_considerations.htm&type=5)

>フローに recordId というテキスト入力変数があれば、アクションの実行時にレコードの ID がその変数に渡されます。

これを実感できる非常に簡単なフローアクションを作成してみます。
![recordIdを含んだ画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/df293383-650d-63b6-fe58-99fd75d62466.png)

画面の要素を追加し、画面コンポーネントの「表示テキスト」を真ん中の画面イメージにドラッグ＆ドロップを行います。右側にある「リソースを挿入」をクリックし「新規リソース」をクリックします。

作成する変数は以下の通りです。
API名：` recordId` 
データ型：` テキスト` 
フロー外部での可用性：` 入力で使用にチェック` 

上記の画像のようになったら、「開始」と「画面」をつないで保存し、このフローを有効にします。

次に任意のオブジェクトでフローを用いたアクション（フローアクション）を作成します。

以下のようにアクション種別をフロー、フローは先ほど作成したフローを選択し、任意の表示ラベルと名前をつけて保存します。保存したアクションをページレイアウトの「Salesforce モバイルおよび Lightning Experience のアクション」に追加します。

![フローアクション.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/e6a57b20-efed-c510-5471-ab3a9aaf7192.png)


そうしてアクションボタンを実行すると次のような感じの画像が出てくるかと思います。

![レコードIDと一致するrecordId.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/8cc9b4c4-4723-fba0-64ac-cccb54f719d2.png)

画像ように**赤で囲んでいるレコードIDを確認するとまったく同じIDが確認**できると思います。

このようにフローアクションを作成するときは最初のレコードを取得するときにrecordIdの変数を用いて今現在表示しているレコードIDを取得します。これを起点に様々な情報を取得することが可能になります。

#この画面フローでやること
箇条書きでこのフローをまとめると以下の通りです。
**１．現在表示している取引先と商談の情報を取得**
**２．画面にデータを入力**
**３．条件分岐で親取引先がない場合は最初の取引先の活動だけ作成**
**親取引先がある場合は親に関連している全ての取引先を取得**
**４．３．で取得した情報をループに渡し最新の商談を取得後、行動を作成**
**５．取得した行動の件名がないものは削除し、ループに戻る。**
**件名はあるものはループにもどり取引先の数だけ繰り返す**


##①・②レコードを取得する
取引先のレコードを取得する際に変数recordIdで絞込み今現在の取引先の情報を取得します。**商談の情報を取得するのは商談のフェーズをもとに件名を自動的に入力するようにするため**です。

##③画面を作成し、事前に値を設定しておく

![フロービルダーの画面コンポーネント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/53239f2d-9147-2ff6-2ddd-bb9030e5af0f.png)


画面には色々な要素があってここで全てを説明するのは難しいうえに、フローの本質からずれてしまうので細かい部分は解説しません。また時間があるときにまとめようと思いますが、ここでは必要な部分だけかいつまんで説明していきます。

今回画面に使っているコンポーネントは上から
**１．表示テキスト**
**２．日時**
**３．チェックボックス**
**４．ルックアップ**

となります。

###１．表示テキスト
文字通り文字を入力できるコンポーネントになります。文字を打ち込むだけでなく、作成した変数も挿入できますので動的な文字表示が可能となります。また文字の大きさや装飾も可能です。

###２．日時
日付と時刻を入力するコンポーネントです。デフォルト値に日時に対応した変数を入れておくことができます。開始では現時刻を表示するために`{!$Flow.CurrentDateTime}`、終了では数式を以下のように作成して今より1時間後を表示していまます。

` {!$Flow.CurrentDateTime} + 60/1440` 
（1日24時間、1時間は60分となりますので分単位で表現するには分母を1440として分子に任意の分を入力します(24（時間）×60（分）＝1440分))

###３．チェックボックス
チェックはBoolean型になりますのでこちらのデフォルト値にはチェックなしであれば ` {!$GlobalConstant.False}`、 ありであれば` {!$GlobalConstant.True}` とします。

###４．ルックアップ
指定した参照関係の項目を表示することができます。今回は任命先なのでユーザに関連している参照項目を指定します。事前にレコードを入力する場合はレコードIDを入力します。

今現在操作しているユーザを事前にいれておきたいので数式を作成し、次の数式を入力します。
`{!$User.Id}`

数式を作成すれば他にもProfileやLabel、APIなど8種類のグローバル変数を用いることが可能です。

**前編はここまでとなります。**
後編はこちら
[SalesforceからJavascriptボタンを追放する！アクションボタンとフロービルダーを組み合わせた（後編）](https://qiita.com/DEKA_PIYO/items/85f5e0411006255ad3b7)