正に万能条件!「2つの値を比較して条件を満たすならば」でチェックボックスの値に応じたエラーチェック

公開日:

注意

本記事は情報提供を目的としており、本記事の内容は無保証、サポートの対象外です。
サポート窓口、問合せ窓口にご質問をいただいても対応いたしかねますのでご了承ください。

こんにちは!システム開発グループのけいんです♪

先日とある担当SI案件にて「チェックボックスの値に応じて必須フィールドを変更したい」との追加要望をいただきました。

その際に対応したエラーチェック方法について共有したいと思います。
実際に遭遇したちょっとしたハマりポイントや、修正に至るまでの試行錯誤も交えながら書いていきますので、同じような場面で困った時の参考になればうれしいです。


サンプルアプリ

こんな感じです(案件の画面はお見せできないのであくまでもサンプルってことで💦)

チェックボックスが1つあって、文字列1行フィールドが2つある構成です。

実際の案件では、チェックボックスには業務内容が並び、文字列フィールドにはその業務内容に関連する詳細項目や日付が入る形でした。

📝 改修仕様

①チェックボックスの値が「スポーツ」「運動(筋トレ等)」のいずれかの場合

 ・「特に行っているスポーツ・運動は?」フィールドを必須にする

 ・保存する直前で空欄の場合はエラーダイアログを表示して保存をキャンセルする

②チェックボックスの値が「食生活の工夫」「サプリメント」のいずれかの場合

 ・「食生活で工夫している点や摂取しているサプリ名は?」フィールドを必須にする

 ・保存する直前で空欄の場合はエラーダイアログを表示して保存をキャンセルする

 

ふむふむ、なるほど。
このように分岐条件を設定し、それぞれに紐づく入力欄の必須化を行う、というのが基本の仕様と。

特に複雑なことはなさそうなのでカスタマインでサクッと実装する。

実装できたのでさっそく動作確認。

まず①単独のケースをテスト

これは特に問題なく思い通りの挙動。もちろん「スポーツ」のみ、「運動(筋トレ等)」のみの場合でも同じエラーダイアログが出現するので特に問題なし。

では続いて次に②単独のケースを確認。

これも特に問題なく思い通りの挙動。単独チェックの場合も問題ないので順調順調。

さて今度は①②複合条件ではどうか?

ちゃんと複合条件にマッチしたエラーダイアログが出ているのでこれも問題なし。

この時点では「思ったより簡単だな」と思っていたのですが、ここから落とし穴が…。

では次にすべての選択肢をチェックした場合はどうなるか?

おおう??? 保存できただと?

期待していた挙動と違う…この場合は①②複合条件のダイアログが出てほしいのに…

本来なら①②の両方にマッチするのでエラーダイアログが出るはず。それがスルーされてしまいました。

ここで初めて条件式の仕様をしっかり調べ直すことになりました。

🔍 原因追及

その後動作確認を続けると「睡眠改善」「メンタルケア」「その他」のいずれかが選択肢に含まれていると保存できる状態になると判明。

なのでまずは今回使用した条件のドキュメントを確認する。

➡️ フィールドの全ての選択値が指定の値のいずれかと等しいならば

例えば、比較値が X,Y,Z という3つの値だったとして、条件の判定は以下のようになります。

  • フィールドの選択が X,Y ⇒ 条件を満たす
  • フィールドの選択が X,Y,Z ⇒ 条件を満たす
  • フィールドの選択が X,Y,Z,W ⇒ 条件を満たさない(Wが比較値にないため)

フィールド値が空だった場合は、比較値に関わらず条件は満たされたことになります。


なるほど、ここでいうWに値する「睡眠改善」「メンタルケア」「その他」のいずれかが選択されている場合は条件を満たさないのでエラーダイアログが出現しない→保存できた、ということか。

これは改善せねば。。。

🔍 カスタマイズ修正

条件の「フィールドの全ての選択値が指定の値のいずれかと等しいならば」はこの仕様にはマッチしていないことが判明したので条件を変更する。

ここは困った時の万能条件(勝手に命名w)の「2つの値を比較して条件を満たすならば」を使って修正する。

➡️ 2つの値を比較して条件を満たすならば

この条件の比較する値Aにcount関数findif関数とを組み合わせてExcelの『countif』のような式を作成する。

= count(findif( 健康習慣 , "=", "スポーツ" , 健康習慣 ))

これでチェックボックス『健康習慣』で「スポーツ」が選択されていると「1」、選択されていない場合は「0」が返ってくる。

これをさらに他の値の関数と組み合わせ、

= count(findif( 健康習慣 , "=", "スポーツ" , 健康習慣 )) + 
count(findif( 健康習慣 , "=", "運動(筋トレ等)" , 健康習慣 ))

両方選択の場合は2、いずれか片方だけならば1となるのでこれを比較する値Aにセット

残りの項目は以下のようにセットする

  • 条件:大きいか等しい(>=)
  • 比較する値B:1
  • 数字の比較方法:数値として比較

ただし、このままだと①だけの時は問題ないが、①②の複合条件の時にもこの条件を通ってしまうので更に修正が必要。

この場合は『 ①>=1 & ②=0 』とすると①だけのエラーダイアログが出現するようにできる。

同様に他の条件も修正する。

この場合は②だけのエラーダイアログが出現するようにしたいので『 ①=0 & ②>=1 』とする。

最後に①②の複合条件の場合。

この場合は『 ①>=1 & ②>=1 』とするとそれぞれのチェックを通り、①単独と②単独の条件が発動せずに①②両方を満たした場合の条件となる。

これで再度動作確認する。

①は問題なし、必須対象ではない値があっても必須対象が1つでも選択されていれば期待通りのエラーダイアログが出現。

②も問題なし、こちらも期待通りのエラーダイアログが出現。

さらにに①②の複合条件の場合。こちらも期待通りのエラーダイアログが出現。

最後に必須対象外の選択肢のみの場合。こちらは問題なく保存されている状態。

これで仕様通りの完璧な仕上がり♪

まとめ

今回はチェックボックスの値に応じたエラーチェックの方法のご紹介でした。

特に今回のようなエラーチェックの対象外となる選択肢がある場合は、カスタマインに登録されている条件だけでは実現できないケースが出てきます。

その場合は今回使用した「2つの値を比較して条件を満たすならば」の活用や各種関数の組み合わせで乗り切れる場合もあるのでどんどんチャレンジしましょう♪

投稿者プロフィール

けいん
けいん
kintone歴8年ユーザーからのジョブチェンジ。
サッカー日本代表と最近では湘南ベルマーレをこよなく愛してます♪