最近画面フローを作成する中でちょくちょく出くわすのが、フローでのレコード作成・更新時に入力規則にひっかかるケースです。
入力規則にかかってエラーとなるのは問題ないのですが表示されるエラーメッセージがよくない。
こんな感じ。
“未対応の障害が発生”と表示され、何が問題なのかわかりません。
もちろんエラーメールも送信されるので管理者はメールを見れば入力規則に引っかかったんだなということが分かりますが、ユーザー視点ではわかりませんよね。
このような場合は、フロー内で障害パスを作成し、エラーメッセージを明示化します。
障害パスの利用
障害パスは、レコード処理やアクションでエラーが発生する可能性のある要素に追加します。
今回はレコード作成時に入力規則エラーが発生しているので、レコード作成要素に障害パスを作成します。
レコード作成要素を選択肢、[障害パスを追加]を選択します。
フローのレイアウトは[自動レイアウト]にしておきます。
続いて追加された障害パスに[画面]要素を追加し、エラーメッセージ表示画面を作成していきます。
画面のプロパティを以下のように設定します。
表示ラベル | エラー画面 |
---|---|
API参照名 | ErrorScreen |
ヘッダーを表示 | チェックなし |
フッターを表示 | チェックあり |
[次へ] ボタンまたは [完了] ボタン | [次へ] または [完了] を非表示 |
[前へ] ボタン | カスタム表示ラベルを使用:”戻る” |
[一時停止] ボタン | [一時停止] を非表示 |
[コンポーネント]から[表示テキスト]を選択し、画面のメインエリアにドラッグします。
次のように値を設定します。
API参照名 | ErrorMessage |
---|---|
入力エリア | {!$Flow.FaultMessage} ※赤文字にしておくとエラーメッセージ感でます。 |
{!$Flow.FaultMessage}でフローのエラーメッセージを取得可能です。
[完了]をクリック後、フローを保存し有効化します。
検証
フローを実行してみると今度は以下のようなエラーが表示されました。
入力規則で定義しているエラーメッセージ(「株式コードは必須入力です」)が表示されているので、ユーザーにも何が問題であるか明示できますね。
ただ、その前後の文章はできれば削除したいですね。
後半のSOAP APIのリンクなんかは開発者しか見ないでしょうし。。。
ということで「おまけコーナー」で無理くりエラーメッセージを加工し、必要な文字のみを抽出してみました。
おまけコーナー
フローのエラーメッセージから入力規則のエラーメッセージを抽出する
先ほどのフローのエラーで表示された文言はこちら。
このエラーは、フローでレコードの作成が試行されたときに発生しました: FIELD_CUSTOM_VALIDATION_EXCEPTION: 株式コードは必須入力です。ExceptionCode の値については、『SOAP API 開発者ガイド』を参照してください。
画面に表示させたいのは、入力規則で定義した”株式コードは必須入力です。”のメッセージです。
その前後の文言は、仮に入力規則のエラーメッセージが変更されたそしても変わらないので、それらの間の文字列を抽出すればよいですね。
ということで作っていきます。
数式作成
フローキャンバスのサイドメニューから[新規リソース]を選択します。
以下のように設定します。
リソース種別 | 数式 |
---|---|
API参照名 | ValidationError |
データ型 | テキスト |
数式 | /*文字列「FIELD_CUSTOM_VALIDATION_EXCEPTION:」と「ExceptionCode 」をそれぞれ「θ」と「λ」に置換し、それらの間に表示される入力規則のエラーメッセージを返す */ MID(SUBSTITUTE(SUBSTITUTE({!$Flow.FaultMessage}, “FIELD_CUSTOM_VALIDATION_EXCEPTION: “, “θ” ), “ExceptionCode “, “λ”), FIND( “θ”,SUBSTITUTE(SUBSTITUTE({!$Flow.FaultMessage}, “FIELD_CUSTOM_VALIDATION_EXCEPTION: “, “θ”),”ExceptionCode “, “λ”))+1, FIND(“λ”,SUBSTITUTE(SUBSTITUTE({!$Flow.FaultMessage}, “FIELD_CUSTOM_VALIDATION_EXCEPTION: “, “θ”),”ExceptionCode “, “λ”))-FIND(“θ”,SUBSTITUTE(SUBSTITUTE({!$Flow.FaultMessage},”FIELD_CUSTOM_VALIDATION_EXCEPTION: “, “θ”),”ExceptionCode “, “λ”))-1) |
続いて先ほど障害パスに追加した画面を選択し、[表示テキスト]に上記で作成した数式を埋め込みます。
[完了]をクリックし、フローを保存、有効化します。
検証
フローを実行すると、
入力規則のエラーメッセージだけが表示されました。
これでユーザー側も何が問題だったか一目で分かりますね。
おわりに
今回は画面フローにおける障害パスの利用について簡単にご紹介しました。
今回は触れていませんが、障害パスでよく利用されるのはエラー発生時にメール通知をするアクションを実行するなどでしょうか。
いずれにせよエラー発生時により詳細な情報を取得したい場合に有効ですね。
Apexでもエラーハンドリングがあるので同じような使い方かなと思っています。
有効に使っていきたいです。
以上です。
コメント