在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
答案 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
}
你很高兴。