フォームのアクション- 検証(Validate)
解説
不正なデータ入力を許してしまうアプリケーションは、とても不便ですね。Zoho Creator は、デフォルトで、適切な数のフィールド型の検証をサポートしています。
ユーザは、フォームの作成時に定義したフィールドに対して、制限を指定することができます。
たとえば、Email型のフィールドを定義した場合、Zoho Creator
は、フォーム内のそのフィールドに入力されたデータが、有効なメールアドレスかどうかをチェックします。
もし、メールアドレスが無効な場合には、ユーザにエラーメッセージを表示します。
デフォルトの検証に加えて、Zoho creator では、アクションスクリプトによって、ユーザがフォームデータをサーバへ送信した時に、実行されるカスタム検証を行うことができます。
このスクリプトは、ユーザのフォームデータがデータベースに保存される前に、サーバーサイドで実行され、ユーザが入力したすべてのデータへアクセスします。
ユーザ入力への構文は、input.<変数名> です。使用例は、下記のとおりです。
検証のデフォルトアクションは、データの送信です。ですので、フォームを送信したくない場合には、送信の中止(cancel
submit) を設定しなくてはなりません。
中止する場合には、ユーザへ適切な アラートメッセージ(alert message )を表示することも可能です。
その場合には、ユーザへ同じフォームが再表示され、データの再入力を促します。
検証のアクションスクリプトは、新規フォームデータが送信された場合や、既存データが修正され送信された場合、または、既存データが削除された場合に、実行されます。
構文
検証(On Validate) のフォームアクション- レコードの追加時(On Add) : レコードの追加時(On Add) ブロックに設定された検証フォームアクション(validate form action)のスクリプトは、新規フォームデータの送信時に実行されます。 スクリプトは、新規ユーザデータがデータベースに保存される前に実行されます。
on add { on validate { // write validate form action to be executed when a new form data is submitted
{ // specify alert message if not valid and cancel submission alert "<Specify alert message>"; cancel submit; } } }
|
検証(On Validate) のフォームアクション - レコードの編集時(On Edit) : レコードの編集時(On Edit)ブロックに設定された検証フォームアクション(validate form action)スクリプトは、 既存レコードの修正&送信時に実行されます。スクリプトは、修正されたユーザデータがデータベースに保存される前に実行されます。
on edit { on validate { // write validate form action to be executed when an existing record is modified and submitted { // specify alert message if not valid and cancel submission alert "Enter valid Date of Birth"; cancel submit; } } }
|
検証(On Validate) のフォームアクション - レコードの削除時(On Delete) :レコードの削除時(On Delete) ブロックに設定された検証フォームアクション(validate form action)スクリプトは、既存レコードの削除のための送信時に実行されます。スクリプトは、ユーザデータがデータベースから削除される前に実行されます。
on delete { on validate { if (input.Email_id != zoho.loginuserid) { alert "You can delete only your records"; cancel delete; } } }
|
使用例① - フリー スクリプトを利用する場合
フィールド値が指定の範囲にあるかどうかの検証 - レコードの追加時(on add) / レコードの編集時(on edit)
下記のサンプルでは、誕生日フィールド内の年が、現在の年より大きい(未来の値である)場合には、送信アクションは中止されます。
on add { on validate { if (input.DateOfBirth.getYear() > zoho.currentdate.getYear()) { alert "Enter valid Date of Birth"; cancel submit; } } }
on edit { on validate { if (input.DateOfBirth.getYear() > zoho.currentdate.getYear()) { alert "Enter valid Date of Birth"; cancel submit; } } }
|
レコードの複製のチェック - レコードの編集時(on add)
下記のサンプルでは、同じチームメンバーが2度以上追加されると、送信が中止されます。
on add { on validate { if (count(team_member[name == input.name]) > 0) { alert "Name already exists"; cancel submit; } } }
|
ここでは、つぎのように設定されています。
team_member [name == input.name] - 名前(name)が現在入力された名前(input.name)に等しい、すべてのチームメンバー(team_members)を選択します
input.name - フォーム送信時に、ユーザが名前("name")フィールドに入力した値
count - カウント(count)演算子が、this.name に等しい名前(name)のチームメンバーの人数を返します
登録の制限 - レコードの追加時(on add)
下記の Deluge コードでは、送信のキャンセルのための要求された条件をチェックします。
ここでは、カウント(count)関数がデータベース内でのレコード数の勘定に使われています。
条件が満たされると、ユーザに対してアラートメッセージが表示され、送信が中止されます。レコードはデータベースに保存されません。
on add { on validate { if(count(Employee)>= 20) { alert("No more registrations allowed"); cancel submit; } }
|
下記の Deluge コードでは、zoho.currentdate 変数を利用して、登録日の有効期限が切れていないかどうかを検証します。
on add { on validate { if (zoho.currentdate > '20-Mar-2007') { alert "time for registration expired"; cancel submit; } } }
|
他のフィールド値に基づいたフィールド値の更新 - レコードの追加時(on add)/レコードの編集時(on edit)
下記の Deluge コードでは、PatientID フィールドの値は、 First_Name と Last_Name の入力値と、変数 zoho.currenttime によって返された値「現在日時」に基づいて表現されています。
on add { on validate { input.PatientID = input.First_Name + " " + input.Last_Name + " " + zoho.currenttime; } }
on edit { on validate { input.PatientID = input.First_Name + " " + input.Last_Name + " " + zoho.currenttime; } }
|
ユーザは自身のレコード以外は削除できない制限 - レコードの削除時(on delete)
下記の Deluge コードでは、Email_id フィールドの値は、変数 zoho.loginuserid によって返された値である、「ユーザのZohoログイン用メールアドレス」に基づいて計算されています。
on delete { on validate { if (input.Email_id != zoho.loginuserid) { alert "You can delete only your records"; cancel delete; } } }
|
使用例② - スクリプトビルダーを利用する場合
次のトピック内の使用例②をご参照ください。 Deluge 文 -> 制御フロー -> 送信の中止 - Cancel Submit -> 使用例②スクリプトビルダーを利用する場合
関連リンク:
フォームのアクション
アラート - Alert
送信の中止 - Cancel Submit