Lightningで使える一括ToDo作成フローを作ってみた

ユーティリティーバーで実用的なフローのサンプルとして作ってみました。

今回は要素（アイコン）の数も20以上と多くなってしまったのでいくつかポイントに絞ってお伝えしたいと思います。今回は主に今まで紹介しきれなかった部分も含めて説明できれば幸いです。

・一括ToDo作成フロー
![一括ToDo作成フロー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/417baf15-be76-7497-aadf-16146f4660e6.png)

・フローのサンプル：名前で一括ToDo作成
![フローのサンプル：名前で一括ToDo作成.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/d5620105-fd85-ae57-59f7-574478111888.gif)

・フローのサンプル：条件で一括ToDo作成
![フローのサンプル：条件で一括ToDo作成.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/1293efe9-3f43-347c-4b44-1fc60f592ba8.gif)

##全体的な話
###アイコンの縦と横をそろえて見やすくする
中身に入る前に見やすいフローの作り方に関してです。これは完全に個人的な好みの問題ですので参考程度でよいと思いますが、私が心がけているポイントを伝えたいと思います。

私の過去のフローを見ていただければわかるかと思いますが、基本的にフローの要素（アイコン）の**縦と横をそろえる**ようにしています。そうすればすっきりした見た目になり、あとで見返したときも修正しやすくなります。

###コピーを活用する
このフローは指定した文字列の一部を含む取引先にToDoを作成するか、複数の指定条件から合致した取引先にToDoするというものです。名前か条件で作成するという違いはありますが、フローの内容はそれ以外は基本的に同じものになります。

こういったときはまずどちらか片方のフローを作ってから右下にある「ドラッグして選択」をして、コピーすればとても楽に作成ができます。コピーされた要素はその要素のAPI参照名に「_0」がついたものになります。

![フローのコピー.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/4a559be5-046e-ed66-12ae-3633841d5109.gif)


##画面コンポーネント「選択」
ここでは選択リストとラジオボタンを使ってユーザに指定もらいます。選択リストの値は今回「選択リスト選択肢セット」を使っています。こちらの**メリットは項目で指定した件名の選択肢が増えても自動的にフロー側の「選択リスト選択肢セット」の項目が増える**仕様です。

![フローの選択リスト選択肢セット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/00a6255c-fc55-65ae-c48d-0a9e7ea628df.png)


今回のように**ToDoの作成だけれど、ToDoオブジェクト以外からのオブジェクトの選択肢を作ることも**できます。通常はケースの件名とToDoの件名が一致することはないかと思いますのでやめたほうがよいでしょうが、これはあくまでテスト的に作ったものなので、こんなこともできますという紹介も兼ねています。
（当初はToDoの件名から作ろうとしましたが、なぜかフローから選択できなかったということもあります・・・）

また選択肢に関連して**レコード選択肢セットというもので選択肢の一覧を作ることも可能**です。**レコードを取得と同じように条件で絞り込めば、それに合致したレコードの選択肢が一覧で表示することが可能**です。選択肢表示ラベルをNameなどにして選択肢の値をレコードIdにすれば選択肢のAPI参照名を指定することでIDの情報を取得することもできます。


##「定数」の使いどころ
ラジオボタンの値に関して、今回は「定数」を使用しています。「決定」の要素で直接値を入力しなくても定数を指定してあげれば入力も楽ですしラジオボタンの値を変えたいとなった場合、定数を使っていればその一か所だけの修正になります。しかし値を直接入力していた場合は修正も大変になってしまうので、**同じ値を複数回使う**場合は「定数」を使ったほうが良いかもしれません。

##割り当て「件数集計」「取引先名追加」
**「割り当て」は変数に値を追加したり削除することができる要素**です。今回こちらはループ中につかっており、件数を数えるためと条件に該当した取引先名を画面に表示させるために該当データをコレクション変数に保存させています。ユーザビリティを考えなければこれらのループは不要ですが、ユーザにわかりやすくするために表示させています。

![フローの割り当て設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/9870062f-25f2-b35e-9956-e08a55c199d8.png)


##画面「取引先がない画面」、「条件検索結果」

こちらの編集画面では2つの表示テキストがありますが、実際に**表示されるのは片方だけ**です。これは表示するタイミングを**条件によってコントロール**しているからです。このコントロールは「コンポーネントの表示を設定」で行うことができます。

「条件検索結果」の場合でお伝えすると{!radio_select}は最初の画面にあるToDoの作成手段を意味し、{!create_ToDo_from_name}は定数で指定した名前となります。例えば名前で検索する場合で表示させたいのは下の表示テキストになりますから条件は以下のようになります。

リソース：{!radio_select}
演算子：次の文字列と一致する
値：{!create_ToDo_from_name}

![フローのコンポーネントの表示の設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/93d6bbbe-8e03-dd75-bb04-1a80c8b6d3f7.png)

##ループ「条件ループ」、「ToDo作成ループ」
以前に「[プロセスビルダーとFlowBuilderを組み合わせた（応用）](https://qiita.com/DEKA_PIYO/items/51d800f79eec1cbc215b)」でループの解説したように該当した取引先すべてに対してループ変数を通じてループ内の処理を行います。条件ループでは該当する**件数を数えるために変数に1を足し、テキストコレクション変数に取引先の名前を全て入れていきます**。

ToDo作成ループではToDoを作成するために「レコードを作成」Todo作成で以下の指定をしてToDoを作成していきます。

![フローのレコード作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/8190150c-ae6e-7f2f-fc50-490eed767bf0.png)


ループ後にコネクタ（矢印）を別の要素につなげると「最後の項目の後」と表示されますが、ループ終了後は要素につなげた処理を行うことを意味します。ちなみにループの開始後は「項目ごと」とコネクタに表示されループの最初の処理へつなげます。



##フローのエラー画面カスタマイズ「障害」について
レコードを作成・更新・取得・削除に関して、システムのエラーが発生した場合、**エラー発生画面を別に表示させることができます**。もし作らなければ「このフローで未対応の障害が発生しました。フローを処理中に未対応の障害が発生しました。詳細は、組織のシステム管理者にお問い合わせください。」と表示されます。

この画面はカスタマイズすることが出来ます。レコードの操作に関わるでエラーが発生した場合にエラー画面をカスタマイズする場合は、以下のように本来の要素とは別にエラーが起こった場合の画面へつなげます。

![フローの障害のコネクタ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/318738eb-08f8-bb10-20e8-18228dbc1445.gif)


またこれに関連して**{!$Flow.FaultMessage}を表示テキストに追加すればエラーの詳細が表示**されます。
このエラーメッセージの内容はプロセスビルダーでエラーが発生したときと差はありません。

![フローのエラー画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/46d76574-97a4-39ed-eb35-f6de2ef953cf.png)

##ユーティリティーバーにフローを追加する

設定画面から「アプリケーションマネージャ」と入力し新規でLightningアプリケーションを作成するか既存のアプリケーション種別でLightningとなっているものを編集を行います。「ユーティリティ項目(デスクトップのみ)」をクリックし、「ユーティリティ項目を追加」をクリックします。その中にフローがあるので、選択して内容を選択・決定していきます。

![フローをユーティリティバーへ設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510376/609122c4-fdb8-00c7-3d9c-231161682a8e.png)


「入力で使用可」にチェックが入った状態だと変数に値を入れることが出来ますが、固定値のみで、「recordId」といった動的な値の取得はできないようです。