常见问题解答 - Deluge 脚本

 综述
  1. Deluge 是什么?
  2. 我为什么应该在我的 Zoho Creator 应用程序中添加 Deluge 脚本?
  3. 您是否需要有编程基础才能在 Deluge 中编写代码?
  4. 当调用 deluge 动作时,可以执行的语句数是否有限制?
  5. 脚本中的关键词是否区分大小写?
  6. 我如何保存/备份应用程序?
表单
  1. 如何在脚本模式中定义表单?
  2. 如何在脚本模式中重命名表单?
  3. 我是否可以在脚本模式中删除含有数据的表单?
  4. 在一个应用程序中是否可以有两个使用相同名称的表单?
表单字段
  1. 如何在脚本模式中定义表单字段?
  2. 在定义表单字段时是否有任何命名规范需要遵循?
  3. Zoho Creator 中支持哪些不同类型的表单字段?
  4. 如何在脚本模式中重命名表单字段?
  5. 我是否可以删除包含数据的表单字段?如果可以,如何执行?
  6. 为什么有些字段没有生成默认值和工具提示?
  7. 是否存在配置隐藏字段以便仅允许所有者查看/编辑该字段的方法?
  8. 是否可以基于条件隐藏/显示字段?
  9. 有时候,我的要求是字段组合必须是唯一的。例如,名称和 DOB 组合必须唯一。有没有可能在 GUI 或脚本中设置?
  10. 当我修改公式字段时,有一段时间无法查看数据。为什么会这样?
  11. 一个公式字段是否可以按相同形式在另一个公式中使用?
  12. 我正尝试为订单录入创建数据库。我是否可以让每个订单都加上其提交时间?
  13. 我是否可以从另一个表单导入选择列表?
  14. 我是否可以设置查找字段以仅显示所选值?
  15. 如何创建动态填充的下拉菜单(单选列表)?
  16. 如何让一个字段有条件地设为必填?我有两个字段(地址和城市),除非另一个字段“金额”大于 100,否则它们不会被视为必填。所以如果“金额”大于 100,我如何保证“地址”和“城市”中有值?
  17. 我如何从另一个日期字段计算日期?
表单动作
  1. “验证时”和“成功时”脚本之间有什么不同?
  2. “用户输入时”和“更新时”脚本之间有什么不同?
  3. 我是否可以编写脚本以发送多封电子邮件?例如 - 向名字是 John 的所有联系人发送电子邮件。是否有“for-each”命令或其他类似的命令?
  4. 如何在“sendmail”的消息中插入换行符?
  5. 我是否可以在表单打开/加载时显示今天的日期?
  6. 我是否可以获取我的电子邮件 ID 和用户名以用于脚本编写?
  7. 如何将 SUM 函数添加我的脚本中?
  8. 是否可以将任务安排为按照与“添加时/验证时/提交时”脚本不同的时间表运行?
  9. 在声明元素(例如,表单元素 > 用户输入时)中使用的变量时,变量的作用域是应用于元素还是表单?例如,在同一个表单内的多个元素中使用相同变量名称是否有任何问题?
视图
  1. 如何在脚本模式中定义视图?
  2. 如何在脚本模式中重命名视图?
  3. 当我删除视图时,数据会发生什么情况?
  4. 在一个应用程序中是否可以有两个使用相同名称的视图?
示例
  1. 如何从 Zoho CRM 提取发货单及其各自产品并使用最新发货单记录填写 Zoho Creator 表单?
  2. 如何检索自定义模块记录的 ID?

综述

 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.是否可以基于条件隐藏/显示字段?

可以在脚本模式中使用 HideShow 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。