1

在 Zoho Creator 中,我有两个需要链接在一起的表单。


表格 A:是一个奖励计数器,其中某些问题会获得一定的积分,并且每次输入都会存储在名为“Points_Earned”的列中。

Form B:是一个身份数据库,包含个人的基本信息,例如姓名、DB 成员身份等。

两个表单之间的 PK 是一个人员身份,格式为"UID - Lastname, Firstname"(这些字段在表单 B中显示为单独的列,但在表单 A中,显示为下拉框中的一个串联字符串,字段名称Reward_Member)。


客观的:

表单 B 有一个名为 的列Total_Points,它需要显示Points_Earned特定 UID 的所有值的总和。

SQL 表达式类似于:select SUM(Points_Earned) from Form_A where Reward_Member = Form_B.UID + " - " + Form_B.Lastname + ", " + Form_B.Firstname;


问题:

我不确定如何在 Deluge 中执行上述逻辑。我尝试过 Aggregate 方法,但它似乎没有计算记录的总和,知识库文章也没有太大帮助。结果保持空白。

这是我用来显示总和的脚本(放在 EDIT>>ON_LOAD 中):

//Variables
curpts = 0;
emp_lookup_val = input.Employee_ID + " - " + input.First_Name + ", " + input.Last_Name;

//Perform the sum aggregation function
curpts = Add_Loyalty_Entry[Reward_Member == input.Employee_ID].sum(Points_Earned);

//Set the Text Field Total_Points with the calc result
input.Total_Points = curpts;

示例数据:

表格 A:

+---------------+---------------+
| Reward_Member | Points_Earned |
+---------------+---------------+
| 1 - Doe, John |       3       |
| 1 - Doe, John |       2       |
| 4 - Crow, Bob |       1       |
+---------------+---------------+

表格 B:

+-----+-----------+----------+
| UID | Firstname | Lastname |
+-----+-----------+----------+
|  1  |   John    |   Doe    |
|  4  |   Bob     |   Crow   |
+-----+-----------+----------+

调试信息

我使用下面的表达式来查看存储的数据是什么Reward_Member样的,并得到表达式后显示的结果:

表达式:alert input.Reward_Member.toString() + " earned " + input.Points_Earned + " Point(s)."; 结果:3485853000000015046 earned 1 Point(s)....看起来像 BigInt

4

1 回答 1

1

感谢您在此处发布您的 Zoho Creator 问题

您几乎已经获得了您的代码,它只是在标准中:而不是与 Employee_ID 进行比较,您必须将其与 input.ID 进行比较,即给定记录的实际记录 ID。

所以你的代码应该是这样的。

curpts = Add_Loyalty_Entry[Reward_Member ==  input.ID].sum(Points_Earned);
input.Total_Points = curpts;

解释

因为您似乎在表单 A 中使用了表单 B 查找并将该查找命名为 Reward_Member。因此,如果您直接记录查找值,您将获得您在查找中选择的项目的记录 ID,正如您刚刚在您的调试信息中显示的那样。

所以查找应该与您要比较的项目的记录 ID 进行比较。

因此,如果要获取表单 A 中与相应 Reward_Member 值相关的所有记录,则必须将该值与相应 Reward_Member 记录的 ID 进行比较。

由于您正在编辑表单 B(这似乎是 Reward_Member 表单)上编写此代码:要访问该表单记录的 ID,您必须使用 input.ID 系统字段。

(如果您要以这种形式编写此代码,则必须先获取 ID,然后在您的标准中进行比较)

您可以使用的另一种方法是

将 Reward_Member 查找字段的 Employee_ID 与您的 input.Employee_ID 字段进行比较,这将平衡标准并正常工作。

curpts = Add_Loyalty_Entry[Reward_Member.Employee_ID == input.Employee_ID].sum(Points_Earned);
input.Total_Points = curpts;

最佳方法

放置您的代码的最佳位置是提交(添加和编辑)表单 A ,

因为每当任何 Reward_Member 将获得任何积分奖励时,在表格 A 中提交记录时,它最终将计算提交的 Reward_Member 的新总数并更新其在表格 B 中的 Total_Points,这将使您的系统瞬间保持一致。

要在提交表格 A 时执行此操作,您应该输入此代码

    if(input.Reward_Member != null)
    {
        total_points_earned = Form_A[Reward_Member == input.Reward_Member].sum(Points_Earned); // calculate updated total points earned
        rm_rec = Form_B[ID==input.Reward_Member]; // fetch reward_member record
        rm_rec.Total_Points = total_points_earned; // update the calculated total points into the fetched reward members record    
    }

你很高兴去。

于 2018-03-31T03:31:16.067 回答