見出し画像

AppSheet実践編シリーズ⑥~AppSheetにおける入力チェックが全てわかる!(前編)~

はじめに

 こんにちは。ソシオネットの髭晩酌です。突然ですが、最近「コロッケそば」がなぜか好きです(異論は認めます笑)。弊社は基本的にはリモートワークで私も普段は自宅から仕事をしていますが、月に1回、月例会+SNCで全社員が集まる日があります(SNCが何かを知りたい方は以下のリンクを見てね)。都度レンタルスペースを借りるので場所は毎回違うのですが、会場の最寄り駅に立ち食いそば屋さん(富○そばさんとか、ゆ○太郎さんとか)があると、ちょっと嬉しいです。

 さて今回のブログは、AppSheet入力された値が妥当かどうかをチェックする方法の話です。世の中にあるシステムを使っているとよく表示される「○○欄に値を入力してください」とか「値は▲▲以上の数値で入力してください」とかのことですね。

 AppSheetでは以下のブログに書いた通り、数値ならNumber型、特定の値の中から選択させたいならEnum型、といった感じで、データ型で入力値の制限をすることにより、ダーティデータの入力をかなり防止することができます。

 が、それだけでは不十分で「もっと業務要件に合った入力チェックを実装したい」という方もおられるかと思います
 そこで今回のブログでは、実際の業務アプリでよく出てくる以下の入力チェックの実装の仕方についてまとめてご紹介します。

  • 入力必須チェック

  • 重複チェック

  • 数値が特定の範囲かどうかのチェック

  • 日付が特定の範囲かどうかのチェック

  • 入力値が決まった文字数以内かどうかのチェック

  • 特定の文字のみで入力されているかのチェック

 なお、本ブログの画面説明は「improved editor」モードにて説明していきます。


まずは「Valid If」を知ろう

 さて今回のブログのテーマである入力チェックを実装するにあたっては、ほとんどの場合、左側のメニュー「Data」からデータソースを選択し、鉛筆マークを押下して表示される画面の「Data Validity」セクション内にある「Valid If」を使います。
 ということで、まずは、この「Valid If」の仕様を改めて確認しましょう。設定箇所としては、以下となります。

 まず「Valid If」の入力画面を見ると、以下のように(Yes/No,List)と書かれています。

 これは「Valid If」欄に入力する関数の結果が、「①Yes/Noで返ってくるもの」「②Listで返ってくるもの」のいずれかを指定する必要があるという意味です。
 今回のブログで説明する入力チェックのほとんどは、「①Yes/Noで返ってくるもの」を指定してNo(つまりFalse)が返ってくる場合にエラーを表示する、という形で実装します。
 なお、その時に画面に表示するエラーメッセージは「Invalid value error」に設定します。ということでこの欄には、「なぜその入力だとNGなのか?どういう入力をすればよいのか?」がユーザに伝わりやすいメッセージを簡潔に書きましょう。

 ちなみに今回のブログでは触れませんが、「②Listで返ってくるもの」を指定すると、Enum型のようにListに含まれる値をボタンやラジオボタンで選択する画面表示となります。

 「Valid If」に関する説明は以上です。

入力必須チェック

 まずは入力必須チェックです。
 と言っても、これは入力必須にしたい項目の「REQUIRE?」チェックボックスにチェックを入れるだけで実装できます。
 またこの時に表示するエラーメッセージは、左側のメニューから「setting」を選択して「Views」→「Localization」の中にある「This entry is required」で設定できます。

 なお『説明しておきながら「Valid If」使わないんかい!』とツッコミたい方もいると思いますので、以下の実験をしてみました。(この部分については、興味がない人は飛ばしてOKです)

【実験内容】
・「REQUIRE?」チェックボックスのチェックを外す
・「Valid If」に「False」を設定(常にFalseを返す)

 では早速、上記の設定をするとどうなるか、画面から試してみましょう。
 以下の左図が新規登録画面を表示した直後です。当然入力がないので、エラーも表示されていません。そして、この状態だと保存が可能です。
 また、以下の右図は入力欄に文字を入力した場合です。エラーが表示されており、この状態だとエラーで保存できません。

 これより、「Valid If」のエラーチェックは入力内容の変更をトリガにして評価される仕様のようですね(いわゆるonchangeイベントのようです)。
 とすると、上記の実験の通り、入力必須チェックは「Valid If」では実装できないため、「REQUIRE?」チェックボックスで実装するしかさそうです。またそうなると、全ての入力欄の入力必須チェックのエラーメッセージが一律「Localization」で設定した文言になってしまう、、、ということのようです。
※もしかしたら「Valid If」を使って入力必須チェックをする方法があるのかもしれませんが、私には思いつきませんでした。よい方法をご存じの方はコメントください!

 まあ色々と書きましたが、必須チェックについてはごちゃごちゃ考えずに、AppSheetの標準でせっかく必須チェックが実装されているので、それをありがたく活用しよう!というのがよさそうです。 

重複チェック

 次に重複チェックの実装する方法をご説明します。
 まず、キーとなる項目であれば、「KEY?」にチェックを入れるだけで重複チェックが実装できます。
 が、キー以外の項目でも重複チェックをかけたい、という人もいるはず。。ということで、キー以外の項目で重複チェックをかける方法をご説明します。

 いきなり答えを書きますが、以下の関数を重複チェックをかけたい項目の「Valid If」に設定してください。
※「テーブル名」「カラム名」はご自身の環境に併せて書き換えてください。

ISBLANK(
    FILTER(
        "テーブル名",
        [_THIS] = [カラム名]
    )
    -
    LIST(
        [_THISROW]
    )
)

 こちらの意味については、以下のように関数を分解して解説していきます。

 まず①の部分についてですが、必須チェックをかけたい項目について画面で入力しているものと同じ値を持っている行を当該テーブルからリストで取得して返す、という意味です。
 したがって、当該項目について登録済の値と重複していない値を入力した場合は、入力中の1行のみがリストで返ります。逆に、重複している値を入力した場合は、入力中の1行に加えて重複している値を持つ登録済の行がリストで返ることになります。

 次に②の部分ですが、今画面で入力中の行そのものをリストで返す、という意味です。

 そして③の部分で、①のリストから②のリストを引き算します。①で重複していない値を入力した場合は、引き算の結果はブランクになります。逆に、重複している値を入力した場合は、引き算の結果はブランクになりません(重複している登録済の行だけ残る)。

 最後に④ですが、③で引き算した結果がブランクかどうかをISBLANK関数で評価しています。ブランクでなければFalseが返り、結果エラーチェックに引っ掛かるという仕組みです。以下のブログでも似たような事を書きましたが、このリスト同士の引き算の結果を評価するところがポイントですね。

 ちなみに、AppSheetに限らずExcelなどでも同じですが、関数の中に関数を入れる(関数のネスト、とか、関数の入れ子、と呼びます)と見づらいなー、って思う方もいると思います。
 AppSheetの関数の場合、必ず関数名の後にかっこ「()」が存在するので、上記のように「関数名(」と「)」の縦の位置を揃えた上でかっこの中に入る引数を字下げ(インデントと呼びます)すると、後からその関数を見たときに見やすくなると思います!

数値が特定の範囲かどうかのチェック

 Number型やDecimal型、Price型のデータをチェックする際によく出てくる、入力値が特定の範囲内かどうか?をチェックする処理です。「○○以上」「○○以下」のような場合は、以下のように当該項目の鉛筆マークから「Maximum value」「Minimum value」を設定するだけで実装できます。これなら簡単ですね。

 ただし、「○○以上」「○○以下」ではなく「○○より大きい」「○○より小さい」のように、閾値を含まないようなチェックの場合は上記のやり方では設定できません。ということで、この場合も「Valid If」を使いましょう!

例1:3より大きい値のみ許可する場合

 以下を「Valid If」に設定します。

[_THIS]>3

例2:3より大きく10より小さい値のみ許可する場合

 以下を「Valid If」に設定します。
※ついでに、インデントの復習もしてみました。

AND(
    [_THIS]>3,
    [_THIS]<10
)

これで、数値のチェックのバッチリかと思います。

ということで、前編はここまで!

終わりに

 本ブログでは、Appsheetにおいて入力チェックをする方法をいくつか紹介しており、今回が前編となります。
 後編も実際に業務アプリ開発時でよく出てくる入力チェックの実装方法をご紹介していきますので、ご期待くださいませ。

 ということで、今回のブログは以上となります。ではまた次回ブログでお会いしましょう!ルネッサーンス!!

AppSheet勉強会を開催しております

 弊社主催のAppSheet勉強会を毎月開催しております。6月開催分のお申込みは以下からお願いいたします。

6/13(火)【毎月第2火曜開催】AppSheetを知ろう!+もくもく会/初心者歓迎/途中入退出可 | Peatix

6/20(火)【毎月第3火曜開催】AppSheetでかんたんアプリ開発!~実践編~/途中入退場可 | Peatix

IT内製化支援、Salesforceの運用・導入、DX化推進に関するご相談をお待ちしております

 弊社では、ノーコード開発アプリを用いたIT内製化支援、Salesforceの運用・導入、および、DX化推進に関するご相談を承っております。お気軽に弊社お問い合わせサイトよりご相談などをお寄せいただければと思います。

ソシオネットHP:http://www.socionet.co.jp/
IT内製化支援支援サービス:https://socionet.co.jp/insourcing-support-service/
Salesforce最適化支援サービス:https://socionet.co.jp/salesforce-service/
DXサポーターズ特設サイト:https://socionet.co.jp/dx-supporters/
お問い合わせ:https://socionet.co.jp/contact/

この記事が参加している募集

#企業のnote

with note pro

12,665件

この記事が気に入ったらサポートをしてみませんか?