常见问题解答 - Deluge 脚本
综述
- Deluge 是什么?
- 我为什么应该在我的 Zoho Creator 应用程序中添加 Deluge 脚本?
- 您是否需要有编程基础才能在 Deluge 中编写代码?
- 当调用 deluge 动作时,可以执行的语句数是否有限制?
- 脚本中的关键词是否区分大小写?
- 我如何保存/备份应用程序?
表单
表单字段
- 如何在脚本模式中定义表单字段?
- 在定义表单字段时是否有任何命名规范需要遵循?
- Zoho Creator 中支持哪些不同类型的表单字段?
- 如何在脚本模式中重命名表单字段?
- 我是否可以删除包含数据的表单字段?如果可以,如何执行?
- 为什么有些字段没有生成默认值和工具提示?
- 是否存在配置隐藏字段以便仅允许所有者查看/编辑该字段的方法?
- 是否可以基于条件隐藏/显示字段?
- 有时候,我的要求是字段组合必须是唯一的。例如,名称和 DOB 组合必须唯一。有没有可能在 GUI 或脚本中设置?
- 当我修改公式字段时,有一段时间无法查看数据。为什么会这样?
- 一个公式字段是否可以按相同形式在另一个公式中使用?
- 我正尝试为订单录入创建数据库。我是否可以让每个订单都加上其提交时间?
- 我是否可以从另一个表单导入选择列表?
- 我是否可以设置查找字段以仅显示所选值?
- 如何创建动态填充的下拉菜单(单选列表)?
- 如何让一个字段有条件地设为必填?我有两个字段(地址和城市),除非另一个字段“金额”大于 100,否则它们不会被视为必填。所以如果“金额”大于 100,我如何保证“地址”和“城市”中有值?
- 我如何从另一个日期字段计算日期?
表单动作
- “验证时”和“成功时”脚本之间有什么不同?
- “用户输入时”和“更新时”脚本之间有什么不同?
- 我是否可以编写脚本以发送多封电子邮件?例如 - 向名字是 John 的所有联系人发送电子邮件。是否有“for-each”命令或其他类似的命令?
- 如何在“sendmail”的消息中插入换行符?
- 我是否可以在表单打开/加载时显示今天的日期?
- 我是否可以获取我的电子邮件 ID 和用户名以用于脚本编写?
- 如何将 SUM 函数添加我的脚本中?
- 是否可以将任务安排为按照与“添加时/验证时/提交时”脚本不同的时间表运行?
- 在声明元素(例如,表单元素 > 用户输入时)中使用的变量时,变量的作用域是应用于元素还是表单?例如,在同一个表单内的多个元素中使用相同变量名称是否有任何问题?
视图
示例
综述
1.Deluge 是什么?
Deluge 或我们所谓的 Data Enriched Language for the Universal Grid Environment(针对通用网格环境的数据丰富语言)是与 Zoho Creator 集成的在线脚本语言。它让用户能够向应用程序添加逻辑,让它更强大和稳健。
2.我为什么应该在我的 Zoho Creator 应用程序中添加 Deluge 脚本?
利用 Zoho Creator,您不需要编写代码即可构建简单的数据收集和查看应用程序,例如联系人列表应用程序。但是,若要构建具有复杂逻辑的成熟应用程序,例如图书馆管理程序、招聘应用程序、库存管理等等,我们提供了称为 Deluge 的内置脚本语言。
3.您是否需要有编程基础才能在 Deluge 中编写代码?
肯定不需要。Zoho Creator 主要解决了需要 Web 应用程序但不知道如何自己构建应用程序的许多人的需求。您只需要清楚了解您想要构建的应用程序以及想要让它如何呈现。
4.当调用 deluge 动作时,可以执行的语句数是否有限制?
是,当调用 deluge 动作时,可以执行的语句数存在限制,每天可以发送的邮件数也存在限制。您帐户的使用限制可以通过选择帐户设置 -> 使用限制选项来查看。
5.脚本中的关键词是否区分大小写?
否,该语言的关键词不区分大小写,但表单名称和字段名称区分大小写。
6.我如何将我的应用程序保存/备份为脚本文件(.ds 文件)?
您可以将您的应用程序保存/备份为 .ds 文件。
为此,
- 在访问模式下选择右上角显示的更多操作 -> 另存为脚本选项。
- 整个应用程序都将在所需的位置另存为 .ds 文件。
- 您可在以后通过导入此 deluge 脚本,为此应用程序制作副本。请参阅通过导入 Deluge 脚本来创建应用程序。
表单
1.如何在脚本模式中定义表单?
表单是包含数据的结构。它可以通过两种方式来引用:
- 显示名称
这是在 GUI 模式中以及用户在实时模式访问应用程序时表单将引用的名称。显示名称应在双引号中给出。
- 标签名称
它是表单的实际名称。表单的标签名称在应用程序内是唯一的。在编写脚本时将仅引用标签名称。表单的标签名称应为字母数字且可包含下划线。
form add_employee
{
displayname = "Add Employee"
}其中,
add_employee - 标签名称
"Add Employee" - 显示名称
2.如何在脚本模式中重命名表单?
重命名表单是一项安全的操作,无论如何都不会影响数据。
重命名显示名称
重命名表单的显示名称非常简单。如下所示,只需在表单定义中更改显示名称并保存脚本即可。
form add_employee
{
displayname = "Add Employee" "Add New Employee"
}
重命名标签名称
可使用以下语法重命名标签名称。
form add_employee as add_new_employee
{
displayname = "Add New Employee"
}
只需将 add_employee 替换为 add_new_employee,它等效于删除表单 add_employee 并创建新表单 add_new_employee。
3.我是否可以在脚本模式中删除含有数据的表单?
如果不存在任何数据,则只需通过从文本区删除表单定义并保存页面即可删除表单。如果存在数据,Zoho Creator 将显示错误消息,提示因为存在数据,无法删除表单。在这种情况下,若要删除表单,您必须明确地使用 delete 关键词,如下所示,
delete form add_employee
或只需在表单定义前面添加 delete 关键词,如下所示。
delete form add_employee
{
displayname = "display name of the form"
}
注:
当您删除表单时,表单对应的所有数据也会删除,且不能恢复。
4.在一个应用程序中是否可以有两个使用相同名称的表单?
表单有显示名称和标签名称。您可让多个表单在应用程序中使用相同的显示名称,但标签名称在应用程序内应是唯一的。
表单字段
1.如何在脚本模式中定义表单字段?
表单中的字段定义特定类型信息的个别属性。表单字段按两种方式引用。
显示名称
这是在 GUI 模式中以及用户在实时模式访问应用程序时字段将引用的名称。显示名称应在双引号中给出。
标签名称
它是字段的实际名称。字段的标签名称在表单内是唯一的。在编写脚本时将仅引用标签名称。标签名称应为字母数字且可包含下划线。
示例代码:
form add_employee
{
displayname = "Add Employee"
Name
Age
(
displayname = "Enter Age"
type = number
)
Date_Of_Birth
(
displayname = "Date Of Birth"
type = date
)
Qualification
(
displayname = "Educational Qualification"
type = number
)
}
其中,
Name、Age、Qualification- 标签名称
"Enter Age:"、"Educational Qualification" - 显示名称
注:
如果未指定类型,它被假定为文本类型字段。例如,名称
2.在定义表单字段时是否有任何命名规范需要遵循?
字段名称应为字母数字且可包含下划线。
3.Zoho Creator 中支持哪些不同类型的表单字段?
请参阅表单字段 - 类型以了解 Zoho creator 支持的所有字段类型、其说明和数据类型。
4.如何在脚本模式中重命名表单字段?
重命名字段是一项安全的操作,无论如何都不会影响数据。
重命名显示名称
重命名字段的显示名称非常简单。只需在字段定义中更改显示名称并保存脚本即可。
form add_employee
{
displayname = “Add Employee"
Name
Age
(
displayname = "Enter Age: " "Enter Employee Age: "
type = number
)
Date_Of_Birth
(
displayname = "Date Of Birth"
type = date
)
Qualification
(
displayname = "Enter Qualification" "Enter Educational Qualification"
type = number
)
}
重命名标签名称
可使用以下语法重命名标签名称。
form add_employee
{
displayname = “Add Employee"
Name as EmpName
Age as EmpAge
(
displayname = "Enter Age:"
type = number
)
Date_Of_Birth
(
displayname = "Date Of Birth"
type = date
)
Qualification as EmpQualification
(
displayname = "Educational Qualification"
type = number
)
}
5.我是否可以删除包含数据的表单字段?如果可以,如何执行?
当您删除字段时,字段对应的所有数据也会删除,且不能恢复。如果不存在任何数据,则只需通过从文本区删除字段定义并保存页面即可删除字段。如果存在数据,Zoho Creator 将显示错误消息,提示无法删除包含数据的字段。在这种情况下,若要删除字段,您必须明确地使用 delete 关键词。
form add_employee
{
displayname = "Add Employee"
Name
delete Age
Date_Of_Birth
(
displayname = "Date Of Birth"
type = date
)
Qualification
(
displayname = "Enter Educational Qualification"
type = number
)
}
或只需在字段定义前面添加 delete 关键词并保存脚本。
form add_employee
{
displayname = "Add Employee"
Name
delete Age
(
displayname = "Enter Employee Age: "
type = number
)
Date_Of_Birth
(
displayname = "Date Of Birth"
type = date
)
Qualification
(
displayname = "Enter Educational Qualification"
type = number
)
}
6.为什么有些字段没有生成默认值和工具提示?
脚本模式不会生成字段的所有属性。只有用户修改的属性才会生成,拥有默认值的属性将不会生成。例如,对于提交的文本,如果用户没有修改,则不会生成 maxchar 属性。
7.是否存在配置隐藏字段以便仅允许所有者查看/编辑该字段的方法?
是,您可以通过选中对其他人隐藏此字段框来创建隐藏字段,如下面的屏幕截图所示。选择此选项将让这个字段仅可由应用程序的制作者/所有者访问。若要基于条件隐藏/显示字段,请参阅主题客户端函数 - 隐藏和显示以了解更多信息。
8.是否可以基于条件隐藏/显示字段?
可以在脚本模式中使用 Hide 和 Show deluge 关键词来实现。请参阅主题客户端函数 - 隐藏和显示以了解更多信息。
9.有时候,我的要求是字段组合必须是唯一的。例如,名称和 DOB 组合必须唯一。有没有可能在 GUI 或脚本中设置?
可通过在脚本模式中为表单编写“提交时”脚本来实现此功能。在数据存留之前执行“提交时”脚本。在下面的代码中,编写了“提交时”脚本以查明是否有具有相同的名称和初始日期的行,如果有任何行匹配该条件,则取消提交动作。
10.当我修改公式字段时,有一段时间无法查看数据。为什么会这样?
每当修改公式时,将为所有行重新计算公式字段值。在重新计算完成之前,您将不能查看视图。
11.一个公式字段是否可以按相同形式在另一个公式中使用?
否,目前不支持在一个公式中使用另一个公式字段。
12.我正尝试为订单录入创建数据库。我是否可以让每个订单都加上其提交时间?
Zoho Creator 自动存储提交的每个记录的添加时间和修改时间。请参阅常见问题解答 - 视图以了解更多信息。也可以使用 Deluge 日期变量 zoho.currenttime 来记录当前时间。下面说明了如何使用 Deluge 脚本来实现:
Time_Stamp
(
type = formula
value = zoho.currenttime
)
在 UI 模式中,创建一个公式类型的字段,只需键入 zoho.currenttime 作为字段的值,以便启用时间戳。
13.我是否可以将选择列表字段从表单 A 导入到表单 B?
您不能将选择列表字段从一个表单导入到另一个表单。所有其他字段类型可以作为选择列表在另一个表单中导入。例如,您可以将表单 A 中的文本字段作为选择列表导入到表单 B。
14.我是否可以设置查找字段以仅显示所选值?
是,您可以设置选择列表以仅显示所选的值。请参阅导入选择列表数据中的条件以了解更多信息。
15.如何创建动态填充的下拉菜单(单选列表)?
是,您可以动态填充单选列表。请参阅主题动态添加到选择列表以了解更多信息。
16.如何让一个字段有条件地设为必填?我有两个字段(地址和城市),除非另一个字段“金额”大于 100,否则它们不会被视为必填。所以如果“金额”大于 100,我如何保证“地址”和“城市”中有值?
是,您可以通过在提交时函数中添加以下代码来实现。在以下代码中,如果“金额”大于 100 且如果地址/城市没有值,则不会提交任何条目。
on validate
{
if ((input.Amount > 100) && ((input.Address == "") || (input.City
== "")))
{
alert "enter Address/City";
cancel submit;
}
}
17.我如何从另一个日期字段计算日期?
您可以通过使用‘+’(加)和‘-’(减)运算符或通过使用 Deluge 内置日期函数来处理日期。请参阅内置日期和时间函数以了解更多信息和示例。
表单动作
1.“验证时”和“成功时”脚本之间有什么不同?
验证脚本对表单数据执行验证操作,在提交表单时执行。仅当验证未被取消时,数据才会留存。请参阅表单动作 -> 验证以了解更多信息和示例。
“成功时”脚本在表单数据保存在数据库之后执行动作。请参阅表单动作 -> 成功时以了解更多信息和示例。
2.“用户输入时”和“更新时”脚本之间有什么不同?
“用户输入时”和“更新时”是对特定字段执行的字段动作。仅当特定字段值更改或更新时才会调用这些脚本。请参阅字段表单动作以了解更多信息和示例。
3.我是否可以编写脚本以发送多封电子邮件?例如 - 向名字是 John 的所有联系人发送电子邮件。是否有“for-each”命令或其他类似的命令?
是,您可以有条件地提取一批记录并对它们进行迭代。思考下面的简单用例。公司的首席执行官想要对特定日期(比如说,2006 年 6 月 10 日)之后入职的所有新员工致辞。我们必须向所有这些新员工发邮件。让我们看看如何实现。
‘员工’表单有以下字段:名称、资格、电子邮件 ID、团队名、入职日期
1) 通过应用筛选器来提取数据。
emprecords = Employee [JoinDate > '10-Jul-2006'];
2) 现在迭代记录并发送邮件。在这里,‘x’是在每个迭代中表示单个记录的实例变量。
for each x in emprecords
{
sendmail
(
To : x.EmailID
From : "yourmail@yourdomain.com"
Subject : "Meeting"
Message : "您被邀请参加下午6点的会议"
)
}
4.如何在“sendmail”的消息中插入换行符?
您可以直接将 <br> 标记插入消息中,zoho creator 将自动引入换行符。例如,当您使用的 sendmail 具有如下面的代码中所示的消息文本时,
on success
{
sendmail
(
To : "xxx@adventnet.com"
From : "support@zohocreator.com"
Subject : "欢迎使用"
Message : "欢迎加入<br>Zoho Creator<br>开发平台"
)
}
消息将按下面这样显示:
欢迎加入
Zoho Creator
开发平台
5.我是否可以在表单打开/加载时显示今天的日期?
您可以创建日期字段并使用载入时动作内的 zoho.currentdate 函数将它设置为当前日期。以下 deluge 代码会在加载表单时将日期字段设置为当前日期。
form CurrentDate
{
date1
(
type = date
)
on load
{
set date1 = zoho.currentdate;
}
}
6.我是否可以获取我的电子邮件 ID 和用户名以用于脚本编写?
是。您可在编写脚本时使用两个 Zoho Creator 常量,
- zoho.loginuser
- zoho.loginuserid
它指的是当前登录用户的用户名和电子邮件 ID。它在编写脚本时非常有用。请参阅 Deluge 变量以了解更多信息。
7.我是否可以计算出我的视图中的多个数值字段的总和?
如需计算多个数值字段的总和,您可以创建一个“公式”类型的新字段,如下面的示例代码中所示。在这里,Maths、English 和 Science 是必须用于计算总和的字段。和值将显示在 TotalMarks 字段中。
TotalMarks
(
type = formula
value = (Maths + English + Science)
8.是否可以将任务安排为按照与“添加时/验证时/提交时”脚本不同的时间表运行?
Zoho Creator 目前暂不支持安排。
9.在声明元素(例如,表单元素 > 用户输入时)中使用的变量时,变量的作用域是应用于元素还是表单?例如,在同一个表单内的多个元素中使用相同变量名称是否有任何问题?
变量作用于定义/使用它们的局部“事件部分”。所以如果您在加载时部分定义了一个变量(名为 TotalAmount),则您也可以在表单的价格字段的用户输入时部分定义它... 分配给一个部分的值将不可用于其他部分。
此外,在函数内定义的变量仅是函数的那个实例的局部变量。
视图
1.如何在脚本模式中定义视图?
列表视图
在列表视图中,表单数据将显示为表格。下面给出的示例代码创建一个列表视图,其中“View Employee”是列表名称,“add_employee”是表单名称。这将以列表形式显示“add_employee”表单中的所有记录。
list "View Employees"
{
add_employee
}
如果视图名称不包含除下划线之外的任何其他特殊字符,则不需要使用双引号。应用程序内的视图名称不需要是唯一的。
日历视图
在日历视图中,数据将以日历形式呈现。仅当有日期列时才支持此视图。
calendar "View Employees"
{
add_employee
}
摘要视图
摘要视图提供比表格/列表视图更多的信息。但在摘要视图中不能像表格视图一样看到任何图片。这将以摘要形式显示“add_employee”表单中的所有记录。
summary "View Employees"
{
add_employee
}
若要指定条件以仅在视图中显示所选的记录,请参阅主题视图中的条件/筛选器。
2.如何在脚本模式中重命名视图?
若要将“View Employees“重命名为“View All Employees”,只需在脚本中替换视图名称并保存整个脚本。
calendar "View Employees" "View All Employees"
{
show all rows from add_employee
(
Name
Age
Date_Of_Birth
Qualification
)
}
3.当我删除视图时,数据会发生什么情况?
如果删除视图,数据不受影响。
4.在一个应用程序中是否可以有两个使用相同名称的视图?
一个视图只能有一个显示名称,应用程序中的多个视图可以有相同的显示名称。
示例
1.如何从 Zoho CRM 提取发货单及其各自产品并使用最新发货单记录填写 Zoho Creator 表单?
让我们假定我们的 Zoho Creator 表单包含以下字段:
- 主题(单行字段类型)
- 发货单日期(日期字段类型)
- 发货单编号(数字字段类型)
- 产品名称(单行字段类型)
- 数量(数字字段类型)
- 单价(货币字段类型)
若要从发货单模块提取记录并将它们填入表单字段,请在所需的表单动作块中添加以下脚本:
InvoiceList=zoho.crm.getRecords("Invoices");for each InvoiceRecord in InvoiceList{//To get Invoice DetailsSubject=InvoiceRecord.get("Subject");Invoice_Date=InvoiceRecord.get("Invoice Date");Invoice_Number=InvoiceRecord.get("Invoice Number");//To get Products linked to this InvoiceproductList=InvoiceRecord.get("product").toJsonList();for eachProductRecordinproductList { ProductMap=ProductRecord.toMap();Product_Name=ProductMap.get("Product Name");Quantity=ProductMap.get("Quantity");Unit_Price=ProductMap.get("Unit Price");}}
其中,
InvoiceList |
是 Zoho CRM 作为映射返回的响应,它保存着从 Zoho CRM 的发货单模块提取的记录。在此处查看示例响应。 |
"Invoices" |
指的是 Zoho CRM 中的发货单模块,它为字符串数据类型。 |
InvoiceRecord |
表示从 Zoho CRM 的发货单模块提取的每个唯一记录。 |
Subject Invoice_Date Invoice_Number Product_Name Quantity Unit_Price |
是 Zoho Creator 表单字段。 |
"Subject" "Invoice Date" "Invoice Number" "product" |
是字符串数据类型的 Zoho CRM 字段标签名称。 |
productList |
以列表格式保存产品(为每个发货单记录)。 |
ProductRecord |
表示 productList 中的每个唯一记录。 |
ProductMap |
以映射格式保存 productList 中的每个唯一记录。 |
2.如何检索自定义模块记录的 ID?
让我们假定我们一个名为 Reminder 的自定义模块,它包含 Events 作为其相关模块。自定义模块的 CRM 标签名称是 CustomModule1。
在这种情况下,我们将先使用唯一条件“自定义模块名称”搜索所需的记录。
searchList = zoho.crm.searchRecords("CustomModule1", "(Reminder Name |=| Test)");
其中,
searchList |
是 Zoho CRM 作为列表返回的响应。它保存从 Zoho CRM 的指定自定义模块提取的记录。 |
"CustomModule1" |
是所需的自定义模块的标签名称,它是字符串数据类型。 |
Reminder Name |
是 CustomModule1 中的字段名称。 |
searchRecords 任务返回列表格式的响应,因此,我们将从列表中提取第一个元素。“0”表示第一个元素。
record = searchList.get(0);
其中,
record |
是用于提取响应中的第一个元素的变量。 |
提取的元素将包含响应,包括记录 ID,它使用下面的脚本来检索。
customModuleID = record.get("CUSTOMMODULE1_ID");
其中,
customModuleID |
是用于提取记录 ID 的变量。 |
CUSTOMMODULE1_ID |
是 Zoho CRM 标签名称,它保存着记录 ID。 |