rex0220 項目検証プラグイン

kintone の入力項目必須チェック、バリデーションチェック、入力抑止、表示制御を行うプラグインです。
項目入力時に画面に状況が表示されます。

必須チェック・バリデーションチェック・入力抑止・表示制御を、条件式を指定するだけで処理出来ます。
Excel の計算式のような指定方法で、複雑な条件を指定できます。

- 必須チェック・バリデーションチェック・入力抑止・表示制御
- エラー及び必須項目入力枠に色表示
- エラー及び必須項目入力状況表示
- 項目絞り込みプラグイン（Ver.11 以降）連携
- PC・スマホ対応

[rex0220 stores](https://rex0220.stores.jp)で、販売中です。

# 直近の変更点

※ Ver.61
・一覧画面編集のキャンセル後の不具合対応
・FSIZE 関数追加。バイト数を適切な単位（B, KB, MB など）に変換し、カンマ区切り付きでフォーマット
　FSIZE(5000000) -> "4.8 MB"
・FILE 関数追加。添付ファイル項目の値を取得
　※イベントの種類により取得可能(追加・編集中のイベントでは取得不可)
　FILE(file, "key", 0) -> "nn.."
・FVAL, FIELDS_HTML 等の関数追加

※ Ver.60
・DIC_MAP 関数を追加
・EV_INFO 関数に、appId オプション追加
・APP_URL, LOOKUP_GETID, RELATED_GETID 関数追加
・TABLE_DATA, TABLE_MAP, TPDIC 関数追加
　TABLE_DATA(TABLE_MAP(テーブル1,
　TPDIC("ドロップダウンT2",ドロップダウンT1, "数値T2",数値T1, "金額T2", 単価T1*数量T1)))
・プラグイン設定画面初期処理でエラー発生時に、ダイアログ表示するように変更

# 応用例
項目検証プラグインの応用例です。

- [rex0220 項目検証プラグイン よくある値チェック](https://qiita.com/rex0220/items/d1caf5e1d41368cba10a)
- [rex0220 項目検証プラグイン 数値チェック](https://qiita.com/rex0220/items/ba1d394e063bcf3f0824)
- [rex0220 項目検証プラグイン テーブルの重複チェック](https://qiita.com/rex0220/items/7380b999b613abf83cd4)
- [rex0220 項目検証プラグイン ドロップダウン選択肢による必須チェック](https://qiita.com/rex0220/items/16eb23f1b7b50765373f)
- [rex0220 項目検証プラグインでユーザー選択の指定数をチェック](https://qiita.com/rex0220/items/85dd09a3f3e7d662ea90)
- [rex0220 項目検証プラグイン ユーザー選択項目間の重複チェック](https://qiita.com/rex0220/items/767e73414e5dd71bdaee)
- [rex0220 項目検証プラグイン ユーザー選択間の重複チェック２](https://qiita.com/rex0220/items/a1bca640083e103f3091)
- [rex0220 プラグイン 祝日チェック](https://qiita.com/rex0220/items/23045118eaa3a189f228)
- [rex0220 プラグイン 電話番号の半角自動変換とハイフォンチェック](https://qiita.com/rex0220/items/f78186bffb7eb7bd7793)
- [rex0220 プラグイン カタカナ変換とカタカナチェック](https://qiita.com/rex0220/items/05b98dd625845ccb6733)
- [rex0220 項目検証プラグイン チェックボックスによる表示制御](https://qiita.com/rex0220/items/834baa01ac4be12a69b4)
- [rex0220 項目検証プラグイン チェックボックスによる表示制御（テーブル版）](https://qiita.com/rex0220/items/e327aa3af019c81f261a)
- [rex0220 項目検証プラグイン テーブル内項目の非表示](https://qiita.com/rex0220/items/f40d5f7f59cf653913f2)
- [rex0220 項目検証プラグイン テーブル行追加・削除ボタンの非表示制御](https://qiita.com/rex0220/items/fdd7d4fc796358039df3)
- [rex0220 項目検証プラグイン 印刷時に項目を非表示](https://qiita.com/rex0220/items/ecfb7d0421825ae85fad)
- [rex0220 項目検証プラグイン 新規・編集時の入力不可制御](https://qiita.com/rex0220/items/d249a041955ff55aa1f5)

# 編集画面表示例

- メニュー欄に、必須項目入力状況（入力数／必須項目数）を表示
- 入力状況が分かりやすいように、必須項目入力枠に色表示。

※文字列複数行、リッチテキスト、ファイル、ルックアップの項目については、入力枠の色表示と、必須項目入力状況を入力したタイミングで更新されません。
（kintone API の制限によるものです）

<img width="1128" alt="2017-08-23_14h44_36.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/64a23b22-ea91-539c-0f37-81f91c72e12e.png">



**※文字列（複数行）、リッチエディター、ルックアップは、入力時のタイミングで、色枠表示が切り替わりません。**



# 編集画面エラー表示例

保存ボタンクリック時、必須項目の未入力の場合、「必須」エラーが表示されます。


<img width="1128" alt="2017-08-23_14h47_10.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/8eaa228e-9a85-ca06-b8bd-b7de798ae3bf.png">



# 一覧画面編集例

一覧画面編集時も、必須項目の色枠表示されます。


<img width="1111" alt="2017-08-23_14h58_51.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/effefb3e-b495-1587-0592-b8df4af998f2.png">


# 項目表示制御

項目の値により、項目の表示制御を行うことができます。

- ドロップダウン項目の値により、グループの表示制御する例

<img width="1053" alt="2017-08-24_19h55_26.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/1712cbd6-6ae1-932b-c202-4d26ec9d0b47.png">



- 設定例

「ドロップダウン」の値が "sample3" の場合、「グループ」項目を非表示

<img width="899" alt="2017-08-24_20h03_41.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/a86d0e88-16c7-f9be-2e96-3bb827e38344.png">


- 画面操作例

![2017-08-24_19h49_05.gif](https://qiita-image-store.s3.amazonaws.com/0/100572/dd5056b6-75b5-29ab-8929-400313235b1f.gif)



# 初期化

非表示対象になった項目について、「保存」処理時に項目を規定値で初期化します。
編集画面表示中は、非表示の切り替えが発生しても、値はそのままです。



# スマホ対応

スマホの編集画面でも、必須項目に色枠表示し、ヘッダ部に入力状況が表示されます。
スクロールしても、ヘッダ部の入力状況は表示されています。


<img width="958" alt="2017-08-20_16h28_36.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/2a52c222-6a85-ca58-a42f-11ecd5154250.png">



# 基本バリデーションチェック

kintone のフォーム設定で指定された制約条件をチェックします。
標準機能では、「保存時」にチェックされますが、本プラグインでは、
項目入力時にチェックが行われますので、入力ミスがすぐわかります。

- 数字項目の自動変換<br>全角文字数字を半角変換およびカンマの自動削除

- 数字項目の min、 max 指定のチェック

- 文字列の minLength、maxLength 指定のチェック

# カスタムバリデーションチェック

- 条件式により、項目の入力値をチェックして、エラーメッセージを表示します。
- エラーメッセージにも、計算式を指定できます。


<img width="826" alt="2017-08-23_15h48_21.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/8b850d73-68b4-ed6b-9729-7b858264db06.png">




# 操作例

ドロップダウン項目により、必須項目を切り替えています。

![2017-08-20_01h42_37.gif](https://qiita-image-store.s3.amazonaws.com/0/100572/35312a0a-f4db-c0c4-b709-622b58d84a57.gif)


#プラグインの追加

- 「kintone システム管理 > プラグイン」で追加します。
- 「アプリの設定 > プラグイン」で、アプリに追加します。

<img width="1088" alt="2017-08-20_16h39_58.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/31658d57-e340-09d4-4ce8-3762d12fbfb5.png">


# プラグイン設定

- 対象アプリで、対象項目を選択し、必須条件・入力不可・非表示・検証の条件式を設定します。
- フィルタ機能で、表示項目を絞れます。
- グリッドのラベル欄をクリックすると、その項目順にソートされます。
- 初期化を指定すると、項目が非表示になったら、項目の規定値に更新します。
- 条件式には、[計算式プラグイン](http://qiita.com/rex0220/items/ae83c6d5ce50ff7a9a73)と同様の式を指定可能です。
- 編集ボタン
    - テーブル項目：　テーブル内項目の非表示を指定
    - テーブル項目以外：　対象項目の検証条件を指定
- 「保存する」をクリックします。

※　条件式に「改行」を指定して、式を見やすく出来ます。
「改行」は、実行時には無視されます。

**※フォーム変更時は、本プラグインの再設定を行ってください。**



<img width="891" alt="2018-04-13_11h07_32.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/224a33a1-e345-38f1-ed76-3960ce7850a1.png">



条件式の例

必須チェック条件式例

- IN(ステータス, "アサイン", "処理中")
- ステータス=="処理中"
- ドロップダウン=="sample1"

## 全画面表示

全画面表示ボタンクリックで、全画面表示に出来ます。
もう一度クリックすると元に戻ります。

<img width="1727" alt="2018-04-13_11h11_26.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/3202404d-5c4b-4751-fc1c-d7f38936ba06.png">


## フィルタ機能

- フィルタ入力欄に、キーワードを入力すると、該当する項目のみ表示されます。
- キーワードは、黄色表示となります。
- またドロップダウンで、抽出条件と対象欄を選択できます。
- リセットボタンで、フィルタをリセットします。
- フィルタ後に再表示されても、表示順は戻りません。必要に応じソート機能を使います。


<img width="894" alt="2018-04-13_11h08_16.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/aa277620-e632-d642-f7b5-db36ba726788.png">



## ソート機能

- グリッドのヘッダ部をクリックすると、ソートされます。
- もう一度クリックすると、逆順に表示されます。


<img width="889" alt="2017-09-19_09h12_00.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/be0a5fd9-fa7b-d6c8-672d-2b13b96d2af2.png">


## 関数入力支援

編集エリア内で「?」を入力すると、指定可能な関数一覧が表示されます。
関数をクリックすると編集エリアに関数名が入力されます。

<img width="903" alt="2017-08-24_17h13_36.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/a3d0e80a-3674-7c24-67e0-a14554886d2b.png">

## フィールドコード入力支援
編集エリア内で「:」(コロン)を入力すると、項目一覧（項目名:フィールドコード）が表示されます。
項目をクリックすると編集エリアにフィールドコードが入力されます。

<img width="892" alt="2017-08-24_17h16_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/b5cb7561-95b2-a4e9-ec47-cca5fb32fea0.png">


## テーブル内項目の非表示設定

- 非表示条件を指定します。
- 設定終了後、保存ボタンをクリックします。

<img width="754" alt="2020-06-14_11h08_20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/5c7cf86e-2af1-3ded-8b60-d6875e19b6b5.png">

## 検証条件の設定画面

- 検証条件とエラーメッセージを指定します。
- エラーメッセージにも、計算式を指定可能です。
- メッセージ（日）は、必須で、（英）・（中）は、オプションです。
- 設定終了後、保存ボタンをクリックします。

<img width="1112" alt="2017-08-24_17h06_15.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/13655051-afe2-735e-3b33-3a69be11cfbc.png">


- サブテーブル項目の検証条件設定例


<img width="1108" alt="2017-08-24_17h09_04.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/307beead-9d54-2f2e-c954-b27395e82507.png">


# 条件式の設定例

- 条件式の優先順位は、検証条件<必須条件＜入力不可＜非表示<制約。
- 無条件に必須項目： 1 を指定
- 項目の値で制御：フィールドコード=="指定値"
- 項目の複数値で制御：IN(フィールドコード,"指定値1","指定値2")
- ステータスで制御: IN(ステータス,"指定値1","指定値2")

# カスタムバリデーションチェック例

「住所」項目に、「都,道,府,県」が含まれているかをチェック

条件：AND(住所,NOT(TEST(住所,"都","道","府","県")))
メッセージ(日)："都・道・府・県が必要です"

※住所が入力されており、かつ住所に"都","道","府","県"が含まれていない場合に、メッセージ表示


# ステータスを使った設定例

- ステータスの状態によって、非表示・入力不可・必須項目を設定します。


<img width="898" alt="2017-08-23_15h17_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/7b4984ce-b48e-cba2-0742-792394a68823.png">



- ステータスによる、画面表示例

ステータス="完了"で、入力不可になっています。

<img width="990" alt="2017-08-21_08h56_03.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/a7d3dcd3-61df-41aa-d1fd-d253d124d0a2.png">



# ルックアップ項目の設定例

kintone API の制限により、ルックアップ項目はリアルタイムで入力変更を検知できませんが、ルックアップのコピー項目を使うと、リアルタイムで検知できます。

- 必須条件: IN(ステータス,"指定値1","指定値2")
- 非表示: 1==0 && ルックアップコピー項目 == ""
<br>非表示指定は、ルックアップ以外の項目でもOK。動作するきっかけがあればよい。


非表示に、式が true にならない条件で、ルックアップコピー項目を指定します。
この設定で、ルックアップコピー項目の変更のタイミングで、ルックアップ項目のチェックが行われます。


<img width="892" alt="2017-08-23_15h21_19.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/28514893-fe0c-dd51-214e-b04dbe10b8a2.png">

# 言語ごとの名称設定時の条件式について

項目の値に、言語ごとの名称を設定した場合、条件式には各言語に対応する条件を指定します。

- ドロップダウン、ラジオボタン、チェックボックス、複数選択、ステータス

チェックボックスの言語ごとの名称設定例
　英語、日本語、中国語にそれぞれ名称を設定している

<img width="1042" alt="2017-08-26_14h13_52.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/b13b7ab5-e4f0-2ee8-8aaf-b3608bf95ee7.png">

ユーザの設定言語により、表示される値が異なりますので、条件式も対応します。
sample1 が選択された場合の条件式は、下記のようにします。

IN(チェックボックス, "sample1", "サンプル１", "样品1")


# プラグイン設定のダウンロード

- プラグイン設定をダウンロードできます。
- 計算式を変更している場合は、変更後の設定が対象です。
- ブラウザ IE については、プラグイン設定のダウンロードの動作対象外です。

<img width="894" alt="2017-09-18_20h10_18.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/c5537d96-68c0-ec33-d7c4-d328b677d2db.png">


# プラグイン設定のアップロード

- プラグイン設定をアップロードできます。
- フィールドコードをキーにして、設定ファイルから計算式を設定します。
- ブラウザ IE については、プラグイン設定のアップロードの動作対象外です。


<img width="891" alt="2017-09-18_20h11_31.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/3d7082ea-7cdf-1283-0464-09af54eee11c.png">


- プラグイン設定ファイル情報を確認して、設定します。


<img width="890" alt="2017-09-18_20h11_53.png" src="https://qiita-image-store.s3.amazonaws.com/0/100572/04c9571b-03dd-15ea-395c-ce6240b8a82e.png">



# 注意事項
- 既に、JavaScript によるカスタマイズを行っているアプリの場合、処理が競合して、エラーになる場合があります。その場合は、該当するアプリでプラグインの使用を中止してください。