自定义函数
函数更新系统预置的订单子表单
1、需求描述:销售订单明细行中的价格,需要从价格库中自动带出。 2、实现难点:系统预置的4个订单模块 - 报价单、销售订单、发货单和采购订单,当需要用函数更新子表单时,需要使用接口方式更新。 3、实现方案:函数样例如下 //定义集合 ss = list(); //获取销售订单信息 SO = zoho.crm.getRecordById("Sales_Orders",id); //销售订单主题 sub = SO.get("Subject"); //客户名称 accid = ...
通过API获取当前审批人邮箱地址
需求描述:审批中的数据,需要精确通知到当前审批的用户,进行流程催办 实现方案:通过API接口获取当前审批人进行邮件通知,配置工作流调用函数触发,触发时机可以设置为‘提交审批后 xx 天’ 函数代码: //获取报价单主题 quote = zoho.crm.getRecordById("Quotes",id,{"approved":"both"}); name = quote.get("Subject"); info name ; //通过API接口获取审批详情 approval_details = ...
获取选择列表参考值
1、函数样例: Leads = zoho.crm.getRecordById("Leads",id); Lead_Status = Leads.get("Lead_Status"); info "字段值:" + Lead_Status ; leads = invokeurl [ url :"https://www.zohoapis.com.cn/crm/v3/settings/fields?module=Leads&include=allowed_permissions_to_update" ...
通过函数触发记录锁定配置
1,客户需求:审批拒绝后点击“重新提交”,需要增加校验规则,子表单中的某些字段不允许为空。 2,实现方案:由于“重新提交”是审批流的默认功能,无法进行任何定制,所以变通方案是审批拒绝后锁定数据,然后复制当前数据重新提交,通过提交按钮的函数实现校验规则。 3,实现难点:审批拒绝后,jishi满足记录锁定配置的条件,也无法自动触发锁定,所以需要在审批拒绝动作增加函数来触发。 函数样例: requestData = {"data":{{"Locked_Reason__s":"审批拒绝"}}}; ...
自动化函数里调用另一个函数的样例
使用场景:某个用户字段更新后,需要将相关列表数据共享给用户字段本人和上级。由于很多模块都有相同的需求,所以可以将“共享给用户字段和上级”封装到一个独立的函数中,每个模块在调用的时候传参即可。 样例函数: 1、单机版函数 //获取业务员信息 searchList = zoho.crm.getRecordById("users",yeWuYuanId); info searchList; if(searchList.size() > 0) { //获取业务员 yeWuYuan = ...
批量操作按钮获取记录id的方法
x = 0; for each b in ids.toList("|||") { a = zoho.crm.getRecordById("Contacts",b.toLong()); a1 = a.get("Owner").get("id"); m = Map(); m.put("Owner",a1); //m.put("Custom",b.toLong()); // m.put("Custom",b); c = zoho.crm.createRecord("CustomModule9",m); ...
从一个CRM系统向另外一个CRM系统推送数据
前言: zoho crm 实现两个机构之间推送数据。 zoho accesstoken(以下简称token) 有效性是1个小时,而且在短时间内有重复生成token的限制(10分钟范围内最多生成10个token) 问题点: 使用自定义函数推送数据。如果要在代码中生成token,那么如果不加限制 短时间推送太多次。有可能造成获取token失败,从而导致数据推送失败。 解决方案: 使用zoho crm 变量 在crm变量中创建两个变量。 1, token生成时间 2, token ...
两个多对多关系的表单需要计算金额
背景:回款模块包含子表单,子表单中可以选择应收单,需要计算应收单的认领金额和未认领金额,认领金额就是应收单关联了多少回款 解决办法:建立中间模块,中间模块创建两个查找字段,同时关联应收和回款,然后创建工作流调用函数,保证无论回款明细行怎么编辑修改,中间模块的回款金额,应收单和回款明细行保持一致即可进行计算。 Sample Code: record = zoho.crm.getRecordById("CustomModule48",id); //获取回款明细 subform = ...
跨模块查询子表单计算数量
背景:两个表单一对多的关系,例如销售订单和排产单,都有子表单,需要查询排产单的数量,然后将已排产数量更新到销售订单的明细行上, 解决办法:通过调用COQL接口查询排产数量,然后更新到销售订单明细行上,好处是不容易混乱,性能更快,不推荐使用双重遍历循环查询 Sample Code: for each piSubformRecord in piSubform { mp = Map(); mp.put("id",piSubformRecord.get("id")); //获取PI单子表单的产品代码 ...
子表单行数过多情况下,需要将子表单所有行生成其他模块记录的处理办法
如果子表单行数过多,调用zoho.crm.createRecord方法一条一条创建会耗时过长,导致函数超时,可以通过调用批量插入接口一百行一百行的插入。 通过批量插入接口创建数据 //更新客户报价库 if(baoJiaKuList2.size() > 0) { info "更新报价列表大小:" + baoJiaKuList2.size(); pageLargest = ceil(baoJiaKuList2.size() / 100); info "最大值:" + pageLargest; str ...
常用函数方法
1、将当前时间更新到日期时间字段 currentTime = zoho.currenttime.toString("yyyy-MM-dd'T'HH:mm:ss","Asia/Shanghai"); 2、工作流触发另一个工作流/蓝图/审批流程的参数: {"trigger":{"workflow","blueprint","approval"}} 3、审批拒绝后更新字段没有触发工作流或者没有获取到记录,需要加的参数: b = ...
定时更新两个日期之间的差值
1、使用场景:适用于每年更新年龄或每天更新逾期天数等,需要定时更新当前日期与另一个指定日期字段差值的场景。 2、实现方法:1)新建一个日期字段,用工作流定时(几天后/几周后/几月后)更新当前日期;2)新建一个公式字段,计算当前日期和另一个日期字段的差值。 3、效果样例: 1)工作流 2)公式字段 公式表达: ...
中文简体繁体互转
param = Map(); text = "简体字"; // t2s是简转繁, s2t是繁转简 type = "s2t"; // 放入参数 param.put("text",name); param.put("type",type); info param; //key = zoho.crm.getOrgVariable("Line_key"); key = ...
更新子表单指定字段
1、使用场景:单独更新子表单中指定的字段,不需要全量更新子表单中的所有字段。 2、实现方法:赋值的时候将子表单行id插入map()中。 3、函数样例: //定义集合 sub = list(); //获取当前模块数据 xj = zoho.crm.getRecordById("CustomModule64",id); //获取子表单 subforms = xj.get("LinkingModule39"); for each sbf in subforms { //8-BOM代码 BOM = ...
金额转人民币大写
//已部署在服务器中,直接调用即可,将货币或小数类型字段转换成字符串格式的,直接传给接口,接口返回的就是大写,直接PUT即可; header = Map(); header.put("Content-Type","application/json"); myMap = Map(); myMap.put("num",“金额转换后的字符串”); response = invokeurl [ url :"http://81.70.161.35:8081/common/commonConversion" ...
判断字符串中是否包含汉字
方法一: str = "您好2243434您好"; reg = "[\u4E00-\u9FA5]"; count = 0; for each s in str.toList("") { // info s; if (s.matches(reg)) { info true; count = count + 1; } } info count; 方法二: str = "dsfdsfsd您好"; s = ...
通过按钮一键发送邮件合并模板
1、使用场景:简化邮件合并操作步骤,一键发送邮件合并模板。 2、实现方法:通过自定义按钮调函数执行邮件合并模板并发送邮件。 3、函数样例: //获取某个字段名称用于邮件主题和附件名称 a = zoho.crm.getRecordById("CustomModule13",id); dealname = a.get("field7").get("name"); //定义集合 temail = List(); //插入收件人邮箱地址 tmp = Map(); ...
根据工单信息获取CRM中订单信息,并回传到工单自定义字段中
1、示例场景:处理工单时能够查看到CRM中的订单信息 2、实现方法:将CRM订单号手动填写到工单自定义字段中,保存后触发工作流调用下面的函数抓取CRM信息 函数样例: //获取desk工单信息 t = zoho.desk.getRecordById("41071068","tickets",id.toLong()); //获取订单号 oid = t.get("customFields").get("订单号"); //在CRM中搜索订单信息 orders = ...
通过函数更新蓝图迁移
1、示例场景:报价单审批通过后自动更新商机阶段,商机阶段受蓝图控制,所以审批通过后需要自动触发蓝图迁移 2、操作步骤: 1)创建连接器,勾选与设置相关的选项 2)创建一个函数用来获取这一步迁移对应的id //固定格式 resp = invokeurl [ //Deals是模块名称 url :"https://www.zohoapis.com.cn/crm/v2/Deals/%22 + id + "/actions/blueprint" //目的是获取所以用get ...
根据上下级用户,自动共享数据给到上级用户
sharelist = List(); resp = zoho.crm.getRecordById("CustomModule2",id); last_id = resp.get("field6").get("id").toString(); //customer_count = zoho.crm.searchRecords("Accounts","(Account_Name:equals:" + last_name + ")",1,200); customer_count = ...
模块之间左侧相关列表附件传递
a = zoho.crm.getRelatedRecords("relatedlist","Cases",id); for each resp in a { Dispatchlist_id = resp.get("id").toString(); //获取表单ID //Listofattachments:获取附件列表数据 Listofattachments = invokeurl [ url ...
将名称中的空格替换为下划线
示例场景:为了避免因空格造成搜索或与第三方同步的问题,需要将空格自动替换为下划线 函数样例: //通过id获取客户信息 a = zoho.crm.getRecordById("Accounts", id); //获取客户名称 accn = a.get("Account_Name"); //将其中的空格替换为下划线 newtext = replaceAll(accn," ","_"); //定义赋值函数 m = Map(); //将替换后的信息赋值到客户名称中 ...
按最近联系时间打回公海
1、示例场景:客户超过1个月未联系(接收邮件或通话)则打回公海 2、操作步骤: 1)在客户模块新建“最近联系时间”(日期类型)字段,再创建一个“打回公海时间”(日期类型)字段 2)基于电子邮件创建工作流,用于更新最近联系时间 3)基于通话创建工作流,同样用于更新最近联系时间 4)创建打回公海的工作流,在打回公海的同时更新打回公海的时间