Zoho Deluge脚本报错:自定义函数变量未定义问题排查求助
问题分析与解决方案
错误原因
出现「Variable 'xxx' is not defined」错误,核心原因通常有以下3种:
- 工作流未传递目标字段:自定义函数触发时,工作流未将需要的下拉框字段作为参数传递给函数,导致
input对象中不存在这些字段。 - 自定义模块字段引用格式错误:Zoho CRM自定义模块的字段,在Deluge脚本中需要通过「模块API名称」作为中间层访问,直接写
input.字段API名称无法正确获取值。 - 下拉框选项取值混淆:误将下拉框的「显示值」当作「API值」使用,或者未正确获取字段的实际存储值。
具体解决步骤
1. 检查并配置工作流参数传递
- 进入Zoho CRM的工作流规则编辑页面,找到触发该自定义函数的规则。
- 在「执行操作」环节,点击自定义函数后的「设置参数」按钮。
- 将
Personalization_Option、D_Dividers、DoDts这三个字段添加到参数列表中,确保工作流触发时会把这些字段的值传递给自定义函数。
2. 修正脚本中的字段引用格式
自定义模块的字段必须通过模块API名称访问,假设你的Orders模块API名称为Orders(可在模块设置的「API名称」项中确认),修正后的完整脚本如下:
void automation.TotalPriceCalc() { // 正确引用自定义模块字段 personalization = input.Orders.Personalization_Option; dividers = input.Orders.D_Dividers; dodts = input.Orders.DoDts; total_price = 0; // 调用getDisplayValue()获取下拉框显示值进行比较 if (personalization.getDisplayValue() == "One Letter") { total_price = total_price + 119; } else if (personalization.getDisplayValue() == "Two Names") { total_price = total_price + 235; } if (dividers.getDisplayValue() == "One Small") { total_price = total_price + 55; } if (dodts.getDisplayValue() == "One") { total_price = total_price + 15; } // 正确更新记录:使用Zoho CRM官方API保存修改 recordMap = Map(); recordMap.put("Total_Price", total_price); zoho.crm.updateRecord("Orders", input.Orders.Id, recordMap); }
3. 确认下拉框选项的取值逻辑
- 进入字段设置页面,查看每个下拉框选项的「API值」:
- 如果脚本中用的是显示值(如"One Letter"),必须调用
.getDisplayValue()方法获取; - 如果直接使用API值(如"One_Letter"),则无需调用该方法,直接比较即可。
- 如果脚本中用的是显示值(如"One Letter"),必须调用
- 示例:若
Personalization_Option的「One Letter」选项API值为One_Letter,则代码可简化为:if (personalization == "One_Letter") { total_price += 119; }
4. 额外验证点
- 确认自定义函数的「关联模块」设置为Orders模块,避免模块不匹配导致字段无法访问。
- 测试时可在脚本开头添加日志输出,排查字段取值:
info "Personalization value: " + personalization; info "Personalization display value: " + personalization.getDisplayValue();
内容的提问来源于stack exchange,提问作者Ahmad Alattal
相关产品推荐
相关产品推荐

