Flow for kintone blog 05 05-06-01

Flow for kintone のアクション ― 保存中断でバリデーションを設定する

この記事で解説すること

kintone では、レコードを保存するときに「このフィールドが空欄なら保存させたくない」という場面がよくあります。たとえば、商談フェーズを「受注」に変更するとき、売上金額が空欄のまま保存されてしまうと、後から集計したときにデータが欠けてしまいます。

kintone の標準機能でフィールドを必須にすることはできますが、「特定の条件のときだけ必須にする」という動的なバリデーションは設定できません。

Flow for kintone の 保存中断アクション を使うと、「商談フェーズが受注のときだけ、売上が空欄なら保存を止める」という条件付きバリデーションを実現できます。

この記事では以下の内容を解説します。

  • 保存中断アクションの役割と使いどころ
  • 「保存前」トリガーとの組み合わせ方
  • IF条件で「商談フェーズ = 受注 AND 売上 = 空欄」を設定する手順
  • エラーメッセージの書き方のポイント
  • 複数フィールドをまとめてチェックする応用例

なお、レコードが保存されたに担当者へ通知を送る方法は、次の記事「Flow for kintone のアクション ― 通知送信で担当者に自動連絡する」で解説します。保存前(バリデーション)と保存後(通知)をセットで理解すると、フローの設計がしやすくなります。


保存中断アクションとは

保存中断アクションは、レコードの保存を強制的に止めて、ユーザーにエラーメッセージを表示するアクションです。

保存中断が発動すると:

  1. レコードは保存されない(データベースに書き込まれない)
  2. 設定したエラーメッセージがダイアログで表示される
  3. ユーザーは入力内容を修正してから再度保存を試みることができる

使いどころ: 入力チェック(バリデーション)専用のアクションです。「〇〇の条件のときは保存させない」という制御をしたいときに使います。


「保存前」トリガーとの組み合わせ

保存中断アクションは、必ず「保存前」トリガーと組み合わせて使います。

トリガー タイミング 主な用途
保存前 保存ボタン押下直後、レコード確定前 バリデーション、保存中断
保存後 レコードが確定した直後 通知送信、他アプリへの書き込み

「保存前」トリガーのフローは、ユーザーが保存ボタンを押してからレコードが確定するまでの間に実行されます。このタイミングで保存中断アクションを発動させることで、不正なデータがデータベースに入るのを防ぎます。

Flow for kintone エディタ — 完成したフロー全体像(トリガー→IF条件→保存中断の接続図)

完成したフローの全体像です。「保存するとき」トリガー → IF条件(受注かつ売上が空欄)→ 保存中断アクション の順に接続されています。


実践:受注時の売上金額チェックを設定する

案件管理アプリで「商談フェーズを受注にしたとき、売上が空欄なら保存を止める」フローを設定します。

使用するアプリとフィールド

  • アプリ: 案件管理(アプリID: 20)
  • 商談フェーズ(DROP_DOWN): 商談予定 / 提案中 / 内示 / 受注 / 失注 / 保留 / 中止
  • 売上(NUMBER): 単位 ¥

Step 1: トリガーを「保存するとき」に設定する

フローの新規作成時に「フローを追加するタイミングを選択」ダイアログで「レコード画面表示・編集」グループを選びます。フロー名は「受注時 売上金額バリデーション」などとしておくと管理しやすいです。

フローエディタ左パネルの「レコード画面表示・編集」グループ内にある「保存するとき」チェックボックスにチェックを入れます。「保存するとき」は保存ボタン押下直後・レコード確定前のタイミングです。

Step 2: IF条件ノードで2つの条件を設定する

トリガーの直後にIF条件ノードを追加します。条件名は「受注かつ売上が空欄」としておくと、キャンバス上でノードの役割がひと目で分かります。

条件の設定:

  • 条件1: 商談フェーズ が次と等しい 受注
  • 条件2: 売上 が空欄
  • 条件間の論理演算子: AND

AND条件にすることで、「商談フェーズが受注 かつ 売上が空欄」の場合だけバリデーションが発動します。商談フェーズが受注以外のときは売上が空欄でも通常通り保存できます。

IF条件ノードの設定画面 — 「商談フェーズ = 受注」AND「売上 = 空欄」の2条件設定

Step 3: 保存中断アクションにエラーメッセージを設定する

IF条件の「はい(両方の条件を満たす)」ルートに保存中断アクションを追加します。

エラーメッセージの入力例:

受注登録には売上金額の入力が必要です。
売上フィールドに金額を入力してから保存してください。

エラーメッセージを書くときのポイントは2つです。

  1. 何が問題なのかを明示する ― 「売上金額の入力が必要です」のように、どのフィールドに何を入力すればよいかを伝える
  2. 次のアクションを示す ― 「〇〇フィールドに入力してから保存してください」のように、ユーザーが次に何をすればよいかを示す
保存中断アクションの設定画面 — アクション名を「受注時 売上未入力で中断」に変更した状態

Step 4: 「いいえ」ルートは何も接続しない

IF条件の「いいえ」ルート(商談フェーズが受注でない、または売上が入力済みのケース)には何も接続しません。このルートに到達したときは、フローが何もせず通常通り保存が完了します。

Step 5: 動作確認

フローを保存・有効化してアプリを更新したら、動作を確認します。

  1. 商談フェーズを「受注」に設定し、売上フィールドは空欄のまま保存を試みる → エラーメッセージが表示されて保存が中断される
  2. 売上フィールドに金額を入力してから保存を試みる → 正常に保存される
  3. 商談フェーズを「提案中」にして売上が空欄のまま保存する → 正常に保存される(受注以外はチェックしない)
商談フェーズを受注にして保存したときに表示されるエラーダイアログ

商談フェーズが「受注」で売上が空欄のまま保存しようとすると、このようにエラーダイアログが表示されて保存が中断されます。

売上を入力した後に保存が通ることを示す画面

売上フィールドに金額を入力してから保存すると、正常に保存が完了します。


複数フィールドをまとめてチェックする応用例

受注時に「売上」と「受注予定日」の両方を必須にしたい場合、2通りのアプローチがあります。

アプローチ1: 2つのフローに分ける

フロー1: 売上チェック(商談フェーズ = 受注 AND 売上 = 空欄)
フロー2: 受注予定日チェック(商談フェーズ = 受注 AND 受注予定日 = 空欄)

それぞれ別々のエラーメッセージを表示できるため、ユーザーが何を修正すればよいか明確になります。

アプローチ2: OR条件で1つのフローにまとめる

1つのIF条件ノードで「売上が空欄 OR 受注予定日が空欄」の条件を設定し、いずれかが欠けていたら保存中断します。

エラーメッセージ例:

受注登録には「売上」と「受注予定日」の両方の入力が必要です。

シンプルにまとめたい場合はアプローチ2、項目ごとに丁寧なエラーを出したい場合はアプローチ1が向いています。


保存前と保存後の使い分けまとめ

保存中断アクションを理解する上で、「保存前」と「保存後」トリガーの違いを押さえておくことが重要です。

保存前トリガー 保存後トリガー
発火タイミング 保存ボタン押下後・確定前 レコード確定直後
主な用途 バリデーション・保存中断 通知送信・連携処理
保存を止められるか できる(保存中断アクション) できない(既に保存済み)
データ変更への影響 中断すればデータは変わらない データは確定済み

「何かあったら止める」のが保存前、「保存が完了したら動かす」のが保存後です。

保存後トリガーを使った通知送信の設定方法は、次の記事で解説します。


ハイライト表示と条件コピペで「見える化」する

バリデーションを設定したら、もうひと工夫。Flow for kintone の ハイライト表示(UI拡張設定)を使うと、保存前のバリデーションに引っかかりそうなレコードを一覧画面で色分けして表示できます。

例えば、今回の「商談フェーズが受注 AND 売上が空欄」という条件でハイライトルールを作成すれば、一覧画面で該当レコードが赤く表示されます。バリデーションでブロックする前に、担当者が自分で気づいて修正できるようになります。

ポイントは、IF条件ノードで設定した条件をそのままハイライトルールに再利用できることです。条件ノード上のコピーアイコンをクリックすると条件がクリップボードにコピーされ、ハイライトルールの条件欄に貼り付けることができます。同じ条件を手入力し直す必要はありません。


まとめ

設定項目 内容
トリガー 保存前
条件 商談フェーズ = 受注 AND 売上 = 空欄
アクション 保存中断
エラーメッセージ 「受注登録には売上金額の入力が必要です。売上フィールドに金額を入力してから保存してください。」
「いいえ」ルート 何も設定しない(通常通り保存)

Flow for kintone の保存中断アクションを使うと、「特定の条件のときだけ保存を止める」という動的なバリデーションを、プログラミングなしで設定できます。条件設定と分かりやすいエラーメッセージの組み合わせで、データ品質を保ちながらユーザーが正しく修正できる仕組みを作りましょう。

類似投稿