在Zoho

时间:2018-03-29 08:06:16

标签: aggregate-functions biginteger zoho deluge

在Zoho Creator中,我有两个需要联系在一起的表格。

表格A:是一个奖励计数器,其中某些问题被授予某些点,并且每个条目都存储在名为“Points_Earned”的列中。

表格B:是一个身份数据库,包含人员的基本详细信息,例如姓名,姓名,数据库成员资格等。

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

目的:

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

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

问题:

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

这是我用来尝试显示Sum的脚本(放在编辑>> 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

1 个答案:

答案 0 :(得分:0)

感谢您在此处发布您的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    
    }

你很高兴。