通过函数合并数据,包括子表单

通过函数合并数据,包括子表单

1、示例场景:多张发票合并成一张发票。

2、实现方法:创建自定义按钮,显示在模块列表页上方,在列表页勾选多条数据后点击合并按钮,触发函数执行合并动作。

3、函数样例:

//定义集合与变量
itemlist = list();
statulist = list();
sum1 = 0;
sum2 = 0;
nos = "";
//遍历多条数据的样例
for each  a in ids.toList("|||")
{
        //获取每张发票的信息
inv = zoho.crm.getRecordById("Invoice",a.toLong(),{"approved":"both"});
        //发票名称
invname = inv.get("Name");
        //将发票名称拼接
nos = invname + ";" + nos;
        //客户名称
accn = inv.get("Customer_Name");
        //将获取到的客户名称插入集合
accnlist.add(accn);
        //发票状态
statu = inv.get("Invoice_Status");
        //将获取到的发票状态插入集合
statulist.add(statu);
        //发票金额
billga = inv.get("Billing_Gross_Amount").toDecimal();
        //多张发票金额汇总求和
sum1 = billga + sum1;
        //获取子表单
itemds = inv.get("Item_Details");
        //子表单遍历
for each  itemd in itemds
{
                //下面是子表单的字段
Period = itemd.get("Period");
Description = ifnull(itemd.get("Description"),"");
Qty = ifnull(itemd.get("Qty"),"0");
UnitPrice = ifnull(itemd.get("Unit_Price"),"0");
DataCurrency = ifnull(itemd.get("Data_Currency"),"");
AmountDataCurrency = ifnull(itemd.get("Amount_Data_Currency"),"0");
Amount = ifnull(itemd.get("Amount"),"0");
Exchange_Rate1 = ifnull(itemd.get("Exchange_Rate1"),"0");
AmountLocal = ifnull(itemd.get("Amount_Local"),"0");
                //将获取到的每个字段赋值
ms = Map();
ms.put("Period",Period);
ms.put("Description",Description);
ms.put("Qty",Qty);
ms.put("Unit_Price",UnitPrice);
ms.put("Data_Currency",DataCurrency);
ms.put("Amount_Data_Currency",AmountDataCurrency);
ms.put("Amount",Amount);
ms.put("Exchange_Rate1",Exchange_Rate1);
ms.put("Amount_Local",AmountLocal);
                //将获取到的子表单每一行插入集合
itemlist.add(ms);
}
}
//客户名称集合先去重,再计算个数
accs = accnlist.distinct().size();
//发票状态集合先去重,再计算个数
status = statulist.distinct().size();
//判断客户集合和状态集合去重后是否唯一,如果客户名称和发票状态都唯一,则可以执行合并
if(accs == 1 && status == 1)
{
        //将上面获取到的以及合并后的数据赋值
m = Map();
m.put("Original_Invoice_No",nos);
m.put("Combined_Invoice_ids",ids);
m.put("Invoice_Status","Pending");
m.put("Customer_Name",accn);
m.put("Billing_Gross_Amount",sum1);
        //创建新数据
res = zoho.crm.createRecord("Invoice",m);
        //按钮返回信息合并成功
return "Merged Invoice has been successfully created";
}
//如果客户名称不唯一,则返回失败及相应提示
else if(accs != 1 && status == 1)
{
return "Failed, Account name should be same";
}
//如果发票状态不唯一,则返回失败及相应提示
else if(accs == 1 && status != 1)
{
return "Failed, Invoice status should be Prepared";
}
//如果客户名称和发票状态都不唯一,则返回失败及相应提示
else if(accs != 1 && status != 1)
{
return "Failed, Please check Account Name and Invoice Status";
}
//除以上情况之外,同样返回失败
else
{
return "Failed, the select record doesn't matched";
}

相关参数:
id:Invoice id

    • Related Articles

    • 构建子表单

      子表单 - 概述 简单来说,子表单是一个 辅助表单 或 表格,它允许您在主表单中添加多个行式项目。CRM 数据通常相互依赖。通常,您可能需要使多项与单个记录相关联。用术语来说,我们称为“行式项目”。例如,订购手机时,客户可能会在购买主产品的同时订购配件,例如,手机充电器、保护套和耳机,称之为“副产品”。客户 A 订购这些配件时,客户 B 可能订购另外 5 个配件。每个配件可能需要相关基本信息,例如,金额、费率、数量、折扣等等。 ...