【问题标题】:Count various records and display sum in Zoho在 Zoho 中统计各种记录并显示总和
【发布时间】:2018-09-08 02:38:49
【问题描述】:

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


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

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

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


目标:

Form 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 中执行上述逻辑。 我尝试了聚合方法,但它似乎没有计算记录的总和,知识库文章也没有太大帮助。 结果保持空白。

这是我用来显示总和的脚本(放在 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

【问题讨论】:

    标签: aggregate-functions biginteger zoho deluge


    【解决方案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    
        }
    

    你很高兴。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多