国内有哪些同步盘?好用的同步网盘有哪些?
857
2022-06-03
目标:管理软件通过API对接企业微信的报销审批数据,财务可结合报销金额和销售金额统计公司的总支出;
实现环境:白码低代码开发平台;
前期准备: 报销审批、报销审批明细数据表(如下图);
实现步骤:
1.在白码开发平台,API对接界面,新增一个webhook模板,作为企业微信回调的接口;
2.此时可以看到这个模板已经有一部分代码了;登录企业微信管理后台,找到应用管理的审批应用,复制secret到webhook对应的参数;
3.再到“我的企业”,复制企业id到webhook的Corpid参数;
4.回到审批应用,设置接收事件服务器;
复制webhook的路径,填写到接收消息服务器配置的URL,然后点击随机获取Token和EncodingAESKey,并复制到webhook对应的参数,开启webhook;
最后点击保存;
5.编写webhook代码;
//审批回调 let info = data.ApprovalInfo; let status = { 1: false,//"审批中", 2: true,//"已通过", 3: false,//"已驳回", 4: false,//"已撤销", 6: true,//"通过后撤销", 7: false,//"已删除", 10: true//"已支付" }; if (status[info.SpStatus] && info.SpName == "报销审批") {//审批表单名称为报销审批且状态为“已支付” //调用功能,新增报销审批数据 await $modules.program.exec("", { "": { "": info.SpNo//审批编号 } });
其中只录入审批通过的报销审批,其余忽略,通过调用功能的方式录入报销审批;
6.新增一个企业微信内部应用的云函数,获取审批表单完整数据;
同理填写API配置,并添加输入和输出参数,其中审批编号作为输入参数,审批单信息和审批申请详情作为输出参数;
async function run($input,$output,$modules = modules){ const wxworkApi = $modules.wxworkApi; let res = await wxworkApi.request({ method: "post", url: "oa/getapprovaldetail", data: { sp_no: $input.spNo } }); $output.info = res.info;//审批单信息-全部 $output.applyer=res.info.applyer;//申请人信息 $output.contents=res.info.apply_data.contents;//审批申请详情,由多个表单控件及其内容组成 }
7.新增一个功能,供webhook调用;
①第一步使用交互输入的步骤,填写审批编号;
②第二步使用自定义API,选择刚才写好的云函数,并设置输入参数为第一步填写的审批编号;
③第三步使用编程的步骤,将API的输出参数进行处理,录入数据;这里处理的方式是根据报销审批的格式来定的;
async function runProcess($model = model, $plugin = plugin, $params) { let info = await $params.info;//单据信息-全部 let contents = await $params.contents;//审批申请详情 //报销类型 let type = contents[0].value.selector.options[0].value[0].text; //报销事由 let reason = contents[1].value.text; //报销状态 let statusMap = { 1: "审批中", 2: "已通过", 3: "已驳回", 4: "已撤销", 6: "通过后撤销", 7: "已删除", 10: "已支付" } //报销单数据 let spData = { "601bc08a75d5d14aeac3d547": info.sp_no,//单号 "601bc09475d5d14aeac3d548": getTime(info.apply_time),//提交时间 "601bc09d75d5d14aeac3d549": type,//报销类型 "601bc0a675d5d14aeac3d54a": reason,//报销事由 "601bc0d075d5d14aeac3d54d": statusMap[info.sp_status]//状态 } //创建报销单 let sp = await $plugin.data.saveData("", spData); //报销明细list let detailList = contents[2].value.children; let total = 0;//总费用金额 for (let i = 0; i < detailList.length; i++) { let item = detailList[i]; //报销明细数据 let detailData = { "601bccae221d8322020e475d": item.list[0].value.selector.options[0].value[0].text,//费用类型 "601bc0f79089024ae9e7b38e": getTime(item.list[1].value.date.s_timestamp, "date"),//发生时间 "601bc0fe75d5d14aeac3d550": item.list[2].value.new_money,//费用金额 "601bc10575d5d14aeac3d551": item.list[3].value.text,//费用说明 "601bc0ed75d5d14aeac3d54f": sp._id//关联报销审批 } //创建报销明细 await $plugin.data.saveData("601bc0dd9089024ae9e7b38d", detailData); //计算费用总额 total += new Number(item.list[2].value.new_money); } //更新总费用金额 $plugin.data.updateData("601bc05475d5d14aeac3d546", sp._id, { "601bc0bc75d5d14aeac3d54c": total }); // 时间戳转日期时间 function getTime(time, type) { let date = new Date(new Number(time + "000")); let YY = date.getFullYear(); let MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1); let DD = (date.getDate() + 1 < 10 ? '0' + date.getDate() : date.getDate()); let hh = (date.getHours() + 1 < 10 ? '0' + date.getHours() : date.getHours()); let mm = date.getMinutes() + 1 < 10 ? '0' + date.getMinutes() : date.getMinutes(); return type == "date" ? YY + "-" + MM + "-" + DD : YY + "-" + MM + "-" + DD + " " + hh + ":" + mm; } }
8.将这个功能的id、第一步的步骤id以及第一步的属性id复制到webhook调用功能参数;
测试结果
发表评论
暂时没有评论,来抢沙发吧~