轻易云
注册体验

采购订单撤销同步实战:钉钉审批撤回 → 金蝶云星空 CancelAssign

· 何金辉· 集成方案库· 54 次浏览· 约 4 分钟读完

这个策略解决什么问题

在某制造企业的采购协同流程里,采购订单先在金蝶云星空创建并审核,再通过审批流分发到钉钉做线下确认。一旦申请人在钉钉端撤回或审批人撤销该流程,金蝶侧的订单必须同步撤销,否则就会出现「钉钉已撤回、金蝶还在跑」的孤儿单。这个策略就是把这一个撤销动作,干净利落地从钉钉传到金蝶。

钉钉审批 + ERP 单据同步流程

数据流向与字段映射

数据流向:钉钉审批实例 → 轻易云(中间层) → 金蝶云星空 CancelAssign。源端不是订单本体,而是一条审批事件;目标端也不是写入新单,而是执行撤销。

源(钉钉表单/接口)目标(金蝶请求体)映射类型说明
表单控件「单据编号」NumbersDIRECT{{单据编号}},作为编码集合传入
—IdsCOLLECTION_findCollection find FID from {{查询方案ID}} where FBillNo={{单据编号}},由单据编号联查金蝶 FID
—FormIdCONSTANTPUR_PurchaseOrder,金蝶采购订单业务对象表单 ID
—IgnoreInterationFlagCONSTANTtrue,允许忽略交互提示,避免弹窗阻塞
—NetworkCtrlCONSTANTfalse,不启用网控
—IsVerifyProcInstCONSTANTfalse,不校验关联工作流

这里最关键的两列是 Numbers 和 Ids。金蝶撤销接口允许用编码或 FID 任一传入,因此稳妥的做法是两者都填,编码走表单,FID 走联查,任意一个命中都能落库。

在轻易云上如何配置

在轻易云数据集成平台(Qeasy)的策略编辑器里,按以下要点配置:

  1. 源端:平台选「钉钉」,API 选 topapi/processinstance/get,效果 QUERY,主键 id。response 列表里把「单据编号」勾上,并在 describe 里标注 _autoFillResponse,让钉钉表单控件值自动填充到变量。
  2. 目标端:平台选「金蝶云星空」,API 选 CancelAssign,效果 EXECUTE。FormId 写常量 PUR_PurchaseOrder;Numbers 用 {{单据编号}} 直接引用;Ids 用 COLLECTION 类型,表达式填 _findCollection find FID from {{查询方案ID}} where FBillNo={{单据编号}}。
  3. 联查依赖:确保平台里已经存在一个【查询】金蝶采购订单的方案,这是 _findCollection 的数据来源,审核策略与撤销策略可以共用同一个联查方案,这是我们给客户做集中管理时常用的模式——把所有「按单据编号找 FID」的需求都收口到一个查询方案,后续策略只引用不复制。
  4. 调度:两端均设为 */3 * * * *,源端每 3 分钟拉一次新增/变更的审批实例,目标端同步执行。撤销是低频动作,3 分钟粒度足够,无需降到 1 分钟。
  5. 开关:把 IgnoreInterationFlag 显式设为 true,这是撤销类策略的标准做法,否则金蝶侧若有交互弹窗,任务会卡死。

实施步骤

  1. 联查方案前置化:先在轻易云里建好「【查询】金蝶采购订单」,确认能按 FBillNo 返回 FID,这是撤销与审核两个策略共用的底座。
  2. 撤销策略落地:新建策略,按上节完成源端、目标端与字段映射,先手动触发一次,观察 _findCollection 是否能取到 FID、CancelAssign 是否返回成功。
  3. 增量起点配置:源端以「审批实例 id」去重,只处理状态变为「已撤销/已撤回」的实例,避免重复执行。
  4. 全量触发:首次上线时,用一次全量扫描兜底,把历史上「钉钉已撤、金蝶未撤」的孤儿单补齐;之后再回归增量。
  5. 调度频率:双方都按 3 分钟轮询;如果审批量很大,可以单独把源端调到 1 分钟,目标端保持 3 分钟,形成「上游快、下游稳」的节奏。
  6. 复核:上线后一周内,每天抽 3-5 单比对钉钉状态与金蝶状态,确认联动无误后再放宽监控。

踩坑复盘

  1. 单据编号拿不到,撤销直接失败。钉钉 topapi/processinstance/get 返回的是审批流结构,单据编号藏在 form_component_values 或 extend 里。务必在 source response 里配 _autoFillResponse,否则下游 {{单据编号}} 会是空字符串,金蝶侧直接报错「Numbers 不能为空」。
  2. 只传 Numbers 不传 Ids,接口偶发失败。金蝶某些版本在编码带前缀(如 PO-2024-xxx)时,纯编码匹配会落空。稳妥的做法是 Numbers 与 Ids 同时传,让金蝶自行判断,这是我们做客户项目时的默认配置。
  3. _findCollection 语法写错,联查返回空。典型错误是在 where FBillNo = {{单据编号}} 里加了空格,或者方案 ID 写错。该语法对空格敏感,字段名和值之间不能有空格,且方案 ID 必须是当前租户内可访问的查询方案。
  4. IgnoreInterationFlag 没设 true,任务卡死。金蝶撤销在某些校验场景下会弹出交互框,如果不忽略,异步任务会被挂起,表象是「策略一直运行中但没结果」。
  5. 撤销与审核共用联查方案,却忘了同步更新。如果查询方案里的字段被改了,审核和撤销会同时出问题。所以凡是共用底座,改一处就要回归两处,这是集中管理模式必须付出的纪律成本。

适用场景与不适用场景

适用:钉钉做审批入口、金蝶做业务系统,且审批状态需要反向联动业务单据(撤销、反审核、关闭)的场景。不适用:钉钉端没有「单据编号」表单控件、或者金蝶侧订单已发生过下游交易(如已收料、已入库)而无法直接撤销的场景,这类情况需要先做下游清理再走撤销。

本文为原创内容,转载请注明出处:https://www.qeasy.cloud/insights/solutions/strat-kingdee-cloud-dingtalk-9407-n7d5807b2-32ae00c9

评论