[Salesforce] 画面フローを利用したらかなり良かった話

2021.06.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Hola〜皆さんこんにちは!Salesforceのシステム管理者の清水です。

最近、弊社営業から機能追加要望をもらったのですが、それがどう考えてもFlowを使わないと実現できない要件だったため、恐る恐る調べながら画面フローを実装してみた話をご紹介します。

フローって何?

Salesforceの標準で利用できる自動化ツールのうちの一つで、一番実装の難易度が高いものになります。

Salesforceのプロセスの自動化3種の違いについて

簡単な内容の処理であれば、ワークフローや数式、プロセスビルダーなどで自動化が組めてしまうのがSalesforceの良いところですが、弊社のようにゴリゴリカスタマイズしていて、カスタムオブジェクトも多数作っている組織だと、どうしてもそれだけでは叶えられない要件の時が出てきます。そういった時、最後に考えるのがフローを利用する、もしくはApexで開発するかになります。

こんなような処理が、ポイント&クリックでできてしまう!

フローはノンコードでできるのですが、「変数」といったプログラミングの内容が登場するので、その辺が全くわからない場合だと扱いが難しいです。またSalesforceのテクニカルサポートでも、フローの内容はサポート外になってしまうので、ある程度玄人向けの内容になるかなと思います。

グローバルアクションと画面フロー

では本題です。

弊社では、営業メンバーが簡単にTodoレコードを作成できるように、このようにグローバルアクションを作って利用していました。

入力に必要な項目を単純に並べておけるだけでも、十分レコード作成には事足りていたのですが、Todoのコメントに最初から定型文を入れたり、関連先を「取引先」といったオブジェクトに固定するといったカスタマイズができませんでした。

営業からすると、「引継ぎ」の内容のTodoを作りたい場合、入力内容が定型されていたりするので登録をもっと簡単にしたい!ということだったので、兼ねてから気になっていた画面フローを調べてみることにしました。

画面フローを作ってみた

構成

では作ってみます。構成は以下のような感じで、すごくシンプルです。

最初、Todoの関連先にユーザーがどうやって取引先のレコードだけ選ぶようにしてあげたらいいのかわからず、取引先のレコード情報を取得する「レコードを取得」する要素を画面フローの前に入れてしまってましたが、うまく動かず、今回の要件にはどうやら不要なようです。

1、引継ぎ「画面」を作成

まずは、トリガの条件の指定で画面フローを選びます。

次に、ユーザーがレコードの内容を登録するための画面を作成します。「要素」は画面を選びます。

「ルックアップ」項目を選んで、以下のように設定します。この例の場合、「取引先」をユーザーに選ばせたかったので、取引先を参照項目として持っているオブジェクトとその参照名の項目を入れてあげます。

例>「商談」にあるAccount ID項目は、取引先を参照しに行っているので、その参照名を入れます。

※ 取引先を参照しているオブジェクトと項目名であれば、商談でなくても、なんでもいいかと思います。 期日の箇所には、デフォルトで今日の日付が入っていた方が何かと便利なので、数式を先に用意しておいてそちらを指定します。

その後の項目は、ユーザーが手入力していくためのテキスト項目で、その値を最後にテキストテンプレートに入れます。

上記で作成した値を、テキストテンプレートに埋め込みます。 ちなみに、画面フローとテキストプレートをセットで利用するときには、「リッチテキスト」、「プレーンテキスト」の両方用意しておいた方がいいです。理由は後述します。

出来上がった入力画面は、このような形で表示されます。Home画面に画面フローを埋め込んだりもできるようです。

フローを使う良い点は、最初に書きましたが「変数」が使えるところです! 画面上には複数入力項目を用意しておき、その値を変数に入れておきます。そしてテキストテンプレートに、変数を入れてあげることで、レコードに実際入れる項目は1つで済みます。グローバルアクションだと入力項目を全て用意しないといけません。

画面フローを使うと表示のカスタマイズも自由にできますが、不要な項目を増やさないで済むのを大きなポイントです。

2、Todoレコード作成

次に先ほどの「画面」要素で、ユーザーが入力した値と、Todoレコードに登録したい項目をマッピング設定していきます。

レコード作成時にTodoのコメント欄には、テキストテンプレートを入れる場合、プレーンテキスト形式にしておかないとhtmlの内容まで入ってしまうので、先に用意しておいたプレーンテキストの値の方を入れるのが良いと思います。

またページ下の方で「手動割り当て変数」の設定ができるので、あとの画面に例えば作成されたTodoレコードのURLを表示したいといった要件があれば、変数に入れておくのがいいかと思います。

3、保存後のメッセージの表示

最後にレコードが無事に作成されたことを、ユーザーに知らせてあげる画面を作成します。

画面上でのテキストテンプレートの表示は、このようにリッチテキストを指定した方が見栄えが綺麗です。長文になった場合、プレーンテキストだと改行が出来ず、非常に見にくいからです。実際の画面ではこうなります。

またURLは先に用意しておいた、TodoIDをURLに埋め込んでおくことで、毎回出来上がったレコードに飛べるようになります。ただ、何度トライしてもURL形式だと変数を埋め込むことができず、テキスト形式でしか表示できなさそうだったので、ぜひ良いやり方知っている方がいれば教えて欲しいです。

Todoレコードのコメント項目には、プレーンテキスト形式で入れましょう。

終わりに

画面フローの存在は知っていましたが、これまでそこまでの要件が上がって来ず、グローバルアクションで済んでいました。

今回調べながら実装してみて、変数が理解できていればそこまでハードルが高くないことと、自由度が広がる点がいいなと思いました。ただ社内で複数人でメンテナンスを考えた際に、全員が同じエンジニアリングのレベル感ではないので、早くSalesforceの公式サポートにフローが入らないかなと思う日々です。