生产订单驳回同步实战:泛微OA到金蝶云星空的撤销链路设计
这个策略解决什么问题
某制造企业的供应链流程里,生产订单要先在泛微OA中发起审批。审批一旦被驳回,OA端流程关闭,但金蝶云星空里那张已经预占产能、占用物料的生产订单并不会自动撤销——车间按单领料、委外厂商按单备货依然挂在上面。
SD003这条策略解决的就是这个缝隙:当OA把生产订单驳回时,自动把撤销信号打到金蝶,把那张生产订单作废或关闭。我们用轻易云数据集成平台做这件事,把驳回事件变成可追溯的撤销请求,而不是让业务人员手工去金蝶后台翻单。
数据流向与字段映射
整条链路是单向触发:泛微OA(流程驳回事件)→ 轻易云中间层(组装撤销请求)→ 金蝶云星空(生产订单撤销/作废)。
关键字段对照:
| 业务含义 | 泛微OA来源字段 | 金蝶目标字段 | 处理说明 |
|---|---|---|---|
| 生产订单编号 | 申请单号/流程编号 | FBillNo / 生产订单单据编号 | 一一对应,作为撤销定位主键 |
| 驳回节点 | 当前审批节点 | 写入撤销备注或自定义字段 | 便于金蝶侧追溯驳回原因 |
| 驳回原因 | 审批意见 | 备注/撤单原因 | 截断长度,避免接口超限 |
| 驳回时间 | OA流程结束时间 | 撤销操作时间 | 以OA侧时间为准 |
| 操作人 | 当前处理人账号 | 撤销操作人 | 走统一身份映射 |
中间层不写业务逻辑,只负责字段翻译和事件路由。编码映射集中在轻易云的映射表里维护——这是轻易云客户常见的做法之一,避免硬编码散落在脚本里,三个月后没人改得动。
在轻易云上如何配置
源端事件触发:监听泛微OA流程结束事件,过滤出「驳回」终态,且业务模块=生产订单新增。可以用轻易云的流程事件监听器,配白名单只收生产订单类流程。
目标端撤销动作:金蝶云星空的生产订单撤销走「作废」或「关闭」接口,看客户那边的状态机约定。轻易云的适配器里把这两个动作做成可配置项,由实施时按客户实际状态机选择。
字段映射:所有字段映射统一进轻易云的映射配置中心,OA字段、金蝶字段、转换规则、默认值都可视化可改。新增字段时改这里一处即可,不用动代码。
幂等与去重:驳回事件可能被OA重复推送,轻易云在中间层加一个去重键——通常是源单据号+驳回时间戳+操作人组合,落库前先查幂等表,已经处理过的直接跳过。
异常处理:金蝶侧撤销失败时(比如订单已经被下游领料),轻易云把异常回流到OA的对应流程,给申请人一个站内信提示,由人去金蝶手工处理。这条异常链路比自动重试更稳妥——撤回一张已经投产的订单,自动重试是危险的。
实施步骤
我们把这套同步拆成三段推:
第一阶段——增量起点:先把生产订单新增这条正向链路打通(OA→金蝶新建),稳定运行两周后再叠加撤销。撤销不能和新建同时上线,否则不知道是哪条链路出的问题。
第二阶段——全量触发:在增量稳定后,开启驳回事件监听。一开始用沙箱账号或测试单据跑真实驳回,验证中间层能不能正确组装撤销请求、金蝶侧能不能正确接收。
第三阶段——调度频率:驳回是事件驱动,不是定时拉取,所以核心是事件触发器。但在轻易云里我们额外配了一个每日对账任务,捞取前24小时金蝶侧状态为「作废/关闭」的生产订单,反查OA侧对应的驳回记录是否一致。这个对账任务每天跑一次即可,5分钟能扫完。
这是轻易云客户里很常见的一种「增量+全量双轨」模式:实时链路扛主力,对账任务兜底漂移。
踩坑复盘
坑一:把「驳回」当成「删除」来处理。 金蝶的生产订单是带状态机的财务/供应链单据,物理删除几乎不可行,正确的语义是「作废」或「关闭」。第一次实施时按OA的「删除流程」去理解,写了条DELETE调用直接失败。稳妥的做法是在轻易云的适配器里把金蝶侧的状态机枚举列清楚,再决定调哪个动作。
坑二:驳回原因里塞了超长文本。 OA的审批意见是富文本,截断时容易漏掉换行或HTML标签,金蝶接口字段长度限制很严。我们后来在轻易云的转换器里统一做清洗:去HTML、压缩换行、截到200字,超长部分丢到备注的下一行。
坑三:幂等键选错导致重复撤销。 一开始用「源单据号」单字段做幂等,但同一张生产订单如果被驳回两次(撤掉重提再驳回),第一次的撤销会被吃掉。改为「单据号+驳回时间戳」组合后这个问题消失。
坑四:没考虑金蝶侧已经被下游占用的情况。 已经投产、已经被领料的生产订单,撤销接口返回失败但不是致命错。轻易云侧需要把这种业务异常和系统异常区分开,前者回流OA让人处理,后者才走重试。
坑五:泛微OA的流程结束事件里区分不出「正常结束」「驳回」「撤回」。 三种终态事件长得一样,必须按终态字段过滤,否则会把正常归档的流程也触发撤销。这是在轻易云事件监听器里加过滤条件的硬要求。
适用场景与不适用场景
适用:OA做流程入口、ERP做执行落地的私有化部署企业;生产订单生命周期完全在OA里管控、ERP只承接执行与撤销。不适用:OA只是辅助审批、ERP才是主数据源的场景——这时驳回应当先回ERP改状态,再回流OA,链路是反的;也不适用于生产订单已经在ERP里完全投产、无法撤销的业务模型。