Zoho Creator では、Deluge スクリプトによって、新規レコードの追加時(On Add)、既存レコードの編集時(On Edit)、既存レコードの削除時(On Delete) の3つの時点での、フォームのアクションを実行できます。
Zoho Creator がサポートするフォームのアクションは、次の3つです。
FAQ - フォーム- Deluge スクリプトで、フォームを定義するにはどうすればよいですか?
- Deluge スクリプトで、フォーム名を変更することはできますか?
- Deluge スクリプトで、フォームを削除するにはどうしたらよいですか?
- アプリケーション内で、同じ名前のフォームを作成することはできますか?
FAQ - フォームのアクションスクリプト
-
検証(on validate)スクリプトと、完了時(on success)スクリプトの違いはなんですか?
ユーザ入力時(on user input)スクリプトと、データ更新時(on update)スクリプトの違いはなんですか?
複数のメールを送信するスクリプトを設定することはできますか?たとえば、名前がジョンという人の全連絡先にメール送信するなどです。"for-each"
コマンドや同等のコマンドがありますか?
メールの送信("sendmail")のメッセージに改行を挿入するにはどうしたらよいですか?
フォームが開かれたり/読み込まれたりした時に、フォーム内に現在日を表示することはできますか?
スクリプトで利用するために、自分のメールアドレスとユーザ名を取得することはできますか?
スクリプトに、SUM 関数を追加するにはどうしたらよいですか?
- レコードを追加したユーザのみ、データを編集できるように設定する方法を教えてください。
FAQ - フォーム
1. Deluge スクリプトで、フォームを定義するにはどうすればよいですか?
フォームは、データを含む構造体です。次の2つの方法で、参照されます。
-
表示名
GUI(グラフィックユーザインターフェース)モードで参照されるフォームの名前です。ユーザが、アクセスモードでアプリケーションにアクセスするときにも、このフォームの表示名を参照します。
表示名は、Deluge スクリプト内では、二重引用符(" ")で囲まれた形式で表示されます。
ラベル名
フォームの実際の名前です。フォームのラベル名は、アプリケーション内で固有のものです。Deluge スクリプト内で参照されるのは、このラベル名だけです。
フォームのラベル名には、英数字と下線(_)のみ利用することができます。
サンプルコード:
form add_employee { displayname = "Add Employee" }
|
ここでは、
"Add Employee" が、表示名です。
add_employee が、ラベル名です。
2. Deluge スクリプトで、フォーム名を変更することはできますか?
フォームの名前の変更は、安全な操作です。データに影響はありません。
表示名の変更
フォームの表示名の変更は、非常に単純な操作です。下記のように、フォームの定義内で表示名を変更し、スクリプトを保存します。
form add_employee { displayname = "Add Employee" "Add New Employee" }
|
ラベル名の変更
ラベル名は、下記の構文を利用して変更することができます。
"form <現在のフォーム名> as <新しいフォーム名>"
form add_employee as add_new_employee { displayname = "Add New Employee" }
|
add_employee を add_new_employee で置き換えるだけで、add_employee というフォームを削除して、新しいフォーム form add_new_employee を作成するのと同じことになります。
|
注意: フォーム名に、空白(スペース" ")は利用できません! フォームのラベル名の変更によって、すでに設定している Deluge アクションスクリプトなどが一切失われますので、ご注意ください!
|
3. Deluge スクリプトで、フォームを削除するにはどうしたらよいですか?
登録データが存在しない場合は、フォームの削除は、スクリプトエディタのテキストエリアからフォームの定義を削除して、スクリプトを保存するだけで可能です。
もし、登録データが存在する場合には、「登録データが存在している場合には、フォームは削除できません」というエラーメッセージが表示されます。この場合、フォームは削除できません。
エラーメッセージは下図のように表示されます。

この場合、フォームを削除するには、下記のように、明確な delete
キーワード を使用する必要があります。
または、下記のように、フォームの定義の前に delete キーワード を追加します。
delete form add_employee { displayname = "display name of the form" }
|
|
注意: フォームを削除したとき、そのフォームに対応する全データも削除されます。データの回復はできません。
|
4. アプリケーション内で、同じ名前のフォームを作成することはできますか?
フォームには、表示名とラベル名があります。同じ表示名のフォームは、アプリケーション内に複数作成することが可能ですが、ラベル名はアプリケーション内で固有である必要があります。
FAQ - フォームのアクションスクリプト
1. 検証(on validate)スクリプトと、完了時(on success)スクリプトの違いはなんですか?
検証(validate)スクリプトは、フォームの送信時に、フォームデータ上で検証を実行します。データは、検証が中止されない限りは、存続します。
詳細や使用例は、フォームのアクション -> 検証(Validate)
をご参照ください。
完了時(on success)スクリプトは、フォームデータがデータベース内で保存された後に、アクションを実行します。
詳細や使用例は、フォームのアクション -> 完了時(On success) をご参照ください。
2. ユーザ入力時(on user input)スクリプトと、データ更新時(on update)スクリプトの違いはなんですか?
ユーザ入力時(On User Input)スクリプトと、データ更新時(On Update)スクリプトは、特定のフィールドで実行されるフィールドのアクションです。
これらのスクリプトは、特定のフィールド値が変更されたか、更新された際にアクションを実行します。
詳細な情報と使用例は、フィールドのアクション をご参照ください。
3. 複数のメールを送信するスクリプトを設定することはできますか?
たとえば、名前がジョンという人の全連絡先にメール送信するなどです。"for-each" コマンドや同等のコマンドがありますか?
はい。条件によってレコードを取得することが可能です。同操作を、全レコードに対して繰り返し行うことができます。
下記のサンプル使用例をご参照ください。
ある企業の代表が、'10-jun-2006'という特定の日付以降に入社した新入社員全員を呼び出したい場合に、これらの新入社員全員にメールを送信しなければならないとします。
さて、どのように達成することができるでしょうか。
フォーム 'Employee' には、つぎのようなフィールドがあります。:
Name, Qualification, EmailID,
TeamName, JoinDate
1) フィルタを使って、データを取得します。
emprecords = Employee [JoinDate > '10-Jul-2006']; |
2) レコードに対して、繰り返し上記の操作を行い、メールを送信します。
ここで、'x' は、インスタンス変数であり、毎回の条件によるレコード取得操作にて、取得された各レコードを示します。
for each x in emprecords { sendmail ( To : x.EmailID From : zoho.adminuserid Subject : "Meeting" Message : "You are requested to attend the meeting at 6:pm tomorrow"
) }
|
4. メールの送信("sendmail")のメッセージに改行を挿入するにはどうしたらよいですか?
メッセージ内に、<br> タグを直接入力することができ、自動で改行が表示されます。
たとえば、下記のように、メッセージ(Message)テキストを設定して、sendmail 関数を使用する場合、
on success { sendmail ( To : "xxx@adventnet.com" From : "support@zohocreator.com"
Subject : "ようこそ" Message : "Zoho Creator Delugeで <br>自由に <br>アプリケーション作成をしよう!" ) }
|
メッセージ(Message)は、次のように表示されます。
Zoho Creator Deluge で 自由に アプリケーション作成をしよう! |
5. フォームが開かれたり/読み込まれたりした時に、フォーム内に現在日を表示することはできますか?
読込時(on load)アクション内で zoho.currentdate 関数を利用すれば、日付(date) フィールドを作成し、現在日を設定できます。
下記の Deluge コードでは、フォームの読込時に、日付フィールドに現在日を表示します。
form CurrentDate { date1 ( type = date )
on load { input.date1 = zoho.currentdate; } }
|
Top
6. スクリプトで利用するために、自分のメールアドレスとユーザ名を取得することはできますか?
はい。スクリプトで利用できる、2つの Zoho Creator 定数があります。
- zoho.loginuser (ログインユーザのZohoユーザ名)
- zoho.loginuserid (ログインユーザのメールアドレス)
それぞれ、現在ログインしているユーザの、Zohoユーザ名とメールアドレスを参照します。
これらの定数は、スクリプトでの利用に大変便利です。
さらなる情報は、式>Deluge システム変数
をご参照ください。
7. スクリプトに、SUM 関数を追加するにはどうしたらよいですか?(ビュー内で、複数の数字フィールドの合計を計算できますか?)
複数の数字フィールドの合計を求めるには、新規で数式(formula)フィールドを作成し、下記のように入力します。
ここで、Maths、English、Science は合計値を計算する対象のフィールドです。合計値は、TotalMarks フィールドに表示されます。
TotalMarks
(
type = formula
value = (Maths + English + Science) |
※ 同一フィールド(数字、通貨)の合計を求める方法は、こちら
8. レコードを追加したユーザのみ、データを編集できるように設定する方法を教えてください。
①まず、該当フォームに、ユーザIDが表示されるように設定します。
フォームに「UserID」というテキストフィールドを追加します。
ここに、ログインしているユーザのZohoアカウントのメールアドレスが表示されるように設定します。(ID認識用)
スクリプトタブにて、レコードの追加時>読み込み時に、下記のスクリプトを追加します。
if ((zoho.loginuserid == null) || (zoho.loginuserid == "")) { input.UserID = ""; } else { input.UserID = zoho.loginuserid; } |
②UserID フィールドを編集できないように設定します。
スクリプトタブにて、レコードの追加時>読み込み時と、レコードの編集時>読み込み時に、下記のスクリプトを追加します。
③スクリプトタブにて、レコードの編集時>検証時に、下記のスクリプトを追加します。
if (input.UserID != zoho.loginuserid) { alert "You cant edit this record"; cancel submit; } |