创建采购申请审批同步流
- 集成工作台-我的流-创建流
- 连接器中选择“计划”,触发事件为“重复执行”(设置定时任务同步SparkPackERP待审批单据同步至企业微信)
- 设置重复周期与重复方式为全局配置方便顾问配置。
- 添加执行动作,选择连接器为创建的SparkPackERP连接器,执行动作为“查询草稿单列表”
- 填写过滤参数,参考字段为DocObjectCode eq '1470000113' and U_SyncStatus eq 'N'(筛选对应的单据类型并且没有同步到企业微信过的草稿单,配置成全局配置方便实施人员修改),$select只填写DocEntry节约性能
- 添加执行动作,选择连接器为“控制”,执行动作为“遍历集合元素”;
- 遍历的集合内容为,查询草稿单列表结果中的“value”字段;
- 新增执行动作,选择连接器为创建的SparkPackERP连接器,执行动作为“查询审批流列表”;
筛选参数如图所示,筛选出遍历的草稿单对应的审批流(因为需要知道该审批目前在SparkPackERP处于哪个审批阶段)
再给查询审批流列表节点添加一个配置如下图所示(OriginatorID用来知道发起审批人,Remarks是备注,ApprovalRequestLines用来判断是否处于需要同步到企业微信的审批阶段),再选择这个配置
- 添加执行动作,执行动作选“运行JavaScript”;
入参为需要同步到企业微信审批的审批阶段审批人ID以及审批流目前的审批信息,代码如图所示判断是否到了需要同步至企业微信审批的阶段,返回1或0(1代表需要同步至企业微信)
代码如下:
function main(input) { input = (typeof input === "string") ? JSON.parse(input) : input; var inputData = input['body']; // 用户定义的函数参数数据 var output = {}; // 在此填充逻辑 let spArr = inputData.spArr let userId = inputData.userId if (!spArr) return 0 let res = spArr.some(sp => sp['UserID'] == userId) output['res'] = res ? 1 : 0 return output; }
- 新增执行动作,连接选择为“控制”,执行动作为“条件判断”
条件为上一步结果是否为1
- 在满足条件的分支下添加‘查询单个草稿’执行动作,用来查询草稿的详细信息,输入参数如图
再给‘查询单个草稿’添加配置,选择需要同步至企业微信的字段
配置好字段后再选择该配置(DocEntry为必填字段方便后续审批回调同步结果至SparkPackERP)
- 添加执行动作,执行动作为‘SparkPackERP-微信数据转换’(此执行动作本质是一个函数,根据配置将SparkPackERP字段格式转换成企业微信数据格式)
再点击‘SparkPackERP-微信数据转换’,添加配置,根据对应字段进行配置如下图所示(左侧为SparkPackERP字段,右侧为企业微信对应字段):
添加完成后再选择该配置
- 新建执行动作,选择连接器为创建的SparkPackERP连接器,执行动作为“查询user”(先在SparkPackERP配置用户传真名为企业微信账号ID,该步骤用来查询草稿审批发起人的传真名用来对应企业微信审批发起人);
输入参数如图所示
- 新建执行动作,连接器选择之前创建的OA连接器,执行动作选择“发起审批”;
再根据截图填写对应参数,apply_data为审批申请数据选择转换后的数据,creator_userid则是会以此员工身份提交审批,template_id则是表单ID以全局配置形式方便配置,申请理由为SparkPackERP发起审批时的备注
- 添加执行动作,选择连接器为“控制”,执行动作为“条件判断”;该步骤为判断是否成功提交审批,对应参数如图所示:
- 在满足条件分支下添加执行动作,执行动作为“更新草稿单”;同时创建并且选择一个新的配置如图:
该步骤为将已经同步到企业微信的草稿的U_SyncStatus字段改为Y以免后续重复同步,对应参数如图所示:
- 确认无误后保存,集成工作台-我的流-找到刚创建的流-开启流
最终API如下图所示: