表单对象
将表单对象添加为函数的参数
Zoho Creator 支持可作为参数传递给用户定义函数的表单对象。表单对象表示表单中的一组记录。在下面名为“calculateNetPay”的函数中,emp 是表单对象,表示 Employee 表单中的一批记录。此表单对象作为参数传递给函数,通过对集合进行迭代来处理员工记录。
Void calculateNetPay(Employee emp)
{
for each emp1 in emp
{
emp1.NetPay=(emp1.BasicPay+emp1.HRA)-(emp1.PF+emp1.TAX);
}
}
为表单对象参数传递值的不同方法:
示例 1:创建一个集合变量并将此变量作为表单对象来传递。例如,在下面的示例代码中,empRec 是集合变量,用于在 Employee 表单中保存具有指定条件的记录。您可以将传递具有排序和范围属性的员工结果集。
empRec = Employee[Designation == input.Designation] sort by Added_Time range from 1 to 5;
thisapp.calculateNetPay(empRec);
示例 2:在此格式中,您不能与员工结果集一起传递排序和范围属性。在这里,“ID”指的是记录编号。
thisapp.calculateNetPay(Employee[ID=input.ID]);
示例 3:这是作为表单对象值传递当前记录的简单方法。
thisapp.calculateNetPay(input.ID);
使用在自定义动作中有表单对象的函数
使用表单对象作为参数的函数可在视图中配置为自定义动作。示例应用程序“Custom Action Example”演示这种场景。
关于应用程序:
示例应用程序“Custom Action Example”包含以下表单和视图。
- 用于输入员工详细信息的员工表单
- 用于显示员工数据的员工视图。
- 用于按百分比输入加薪的“晋升”和“加薪”表单。
为“Employee View”配置名为“PayHike & Promotion”的自定义动作,以便计算此视图中所选记录的加薪。自定义动作调用名为“showPayHikeForm”的函数,它将 Employee 表单作为表单对象参数传递给函数。
自定义动作
使用函数 showPayHikeForm 为 Employee View 配置名为 PayHike & Promotion 的自定义动作,如下面的屏幕截图中所示。选定选项在报表头部显示动作,以便在视图中显示自定义动作。选定选项对记录集合执行动作,在这种情况下,仅在执行一批记录之后才调用自定义动作。只有使用 formobjects 作为参数的函数才支持此选项。
自定义动作显示在视图标头中,如下所示:
函数“showPayHikeForm”
函数“showPayHikeForm”定义为使用 Employee 表单作为函数的参数。该函数使用员工视图中所选记录的员工编号来构成 querystring,并使用查询字符串(选定的员工编号)打开附加的名为“Promotion and Pay Hike form”的无状态表单。下面给出函数代码作为参考。
void employee.showPayHikeForm(Employee employees)
{
querystring = "";
for each employee in employees
{
querystring = querystring + "empid=" + employee.ID + "&";
}
openUrl("#Form:Salary_HikeForm?"+ querystring, "popup window", "height=100,width=100");
}
“点击时”脚本
上述函数“showPayHikeForm”使用查询字符串(选定的员工编号)打开 Promotion and Pay Hike form(无状态表单)。以下脚本添加到此表单的“点击时”按钮。当用户提交加薪百分比时,querystring 会在此表单的 empid 字段(此字段配置为查找字段- 多选类型并在表单中隐藏)中更新。
在以下代码中,
- | 是包含员工编号的列表。
- 对于列表中的每个员工编号,从 Employee 表单中提取员工记录,并更新为新的薪水和新名称。
- 员工视图显示新薪水和新名称。
l = input.empid;
for each emp in l
{
employeeinfo = Employee [empcode == emp];
newsalary = (employeeinfo.Salary * (1 + input.Pay_Hike / 100));
employeeinfo.Salary = newsalary;
if (input.Designation != "-Select-")
{
employeeinfo.Designation = input.Designation;
}
}
openUrl("#View:Employee_View", "same window");