轻易云
注册体验

聚水潭销售订单回传钉钉物料样品领用审批单:单号评论同步策略实战

· 王浩宇· 集成方案库· 5 次浏览· 约 4 分钟读完

这个策略解决什么问题

一次实际项目里,某零售企业把"物料样品领用"从线下表单搬到了钉钉 OA:申请人在钉钉提单,审批通过后自动在聚水潭生成销售订单并出库。但业务跑通后发现,申请人回到钉钉只能看到一个空洞的审批单,根本不知道订单有没有出库、物流单号是多少、找谁对接。客户最初让我们"把单号同步过去",看似一句话,做起来却卡在两个细节:一是聚水潭侧生成的是业务单号(so_id / o_id / io_id),钉钉评论接口要的却是审批实例的内部 ID;二是同一笔订单可能被多次修改,重复回传又会刷屏。本策略就是为了在不出错的前提下,把聚水潭的关键单号稳定地回写到对应的钉钉审批单评论里。

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

数据流向与字段映射

数据流向为 聚水潭 → 中间层(轻易云数据集成平台/Qeasy)→ 钉钉,源端为聚水潭单笔订单查询(/open/orders/single/query),目标端为钉钉审批实例添加评论(topapi/process/instance/comment/add)。

源端关键字段:so_id(线上单号)、o_id(内部单号)、io_id(出库单号)、l_id(物流单号)、io_date(出库时间)、status、modified。

目标端关键字段映射:

目标字段源字段/规则映射类型说明
request.process_instance_id_mongoQuery [钉钉物料样品领用方案集线器ID] findField=content.id where={"content.extend.business_id":{"$eq":"{{so_id}}"}}COLLECTION按 so_id 反查审批实例 ID
request.text拼接:线上单号:{{so_id}} 内部单号:{{o_id}} 出库单号:{{io_id}} 物流单号:{{l_id}} 出库时间:{{io_date}}TRANSFORM评论内容
request.file不传CONSTANT可选附件

编码映射的核心是 so_id → process_instance_id。源端只有业务单号,目标端评论接口必须传审批实例的内部 ID,因此通过 _mongoQuery 从上游"钉钉物料样品领用==聚水潭销售订单"策略的集线器里,按 extend.business_id 等于 so_id 的条件取出 content.id。如果 extend 结构简单且无特殊字符,也可以改用 _findCollection。

在轻易云上如何配置

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

  • 源端组件:选择 WebAPI / QUERY 模式,方法 POST,请求体带入 modified_begin、modified_end、page_size、page_index、status。page_size 按源端上限设置(材料中给出最大 25,但实际配置需结合供应商文档),idCheck 设为 true,autoFillResponse 开启。
  • 目标端组件:选择 EXECUTE 模式,方法 POST,接口 topapi/process/instance/comment/add,主键取钉钉返回的 id。
  • 编码映射:在字段映射面板,把 request.process_instance_id 的映射类型设为 COLLECTION,填写上面的 _mongoQuery 表达式;request.text 设为 TRANSFORM,写字符串拼接模板。
  • 幂等控制:评论接口支持追加,不天然去重;如果业务上不接受重复评论,可以在源端过滤条件里加 status 限制,只对已出库订单回传,或者用 _function 判断 io_id 为空时跳过本条。

实施步骤

  1. 建立上下游关联:先确认上游策略(钉钉→聚水潭)已经把 extend.business_id 写入聚水潭订单作为 so_id,这是本策略反查的前提。
  2. 配置增量起点:把源端 modified_begin 设为 {{LAST_SYNC_TIME|datetime}},modified_end 设为 {{CURRENT_TIME|datetime}},间隔控制在 7 天以内。
  3. 小范围试跑:先以一天内的修改时间为窗口跑一次,观察 _mongoQuery 是否能稳定命中审批实例 ID,评论文本是否符合预期。
  4. 全量触发一次:上线初期手动补一次历史数据,覆盖最近一段时间的出库订单,避免历史审批单全是空白。
  5. 配置调度:源端 crontab 1-59/9 7-23 * * *(每 9 分钟),目标端 crontab 1-59/10 7-23 * * *(每 10 分钟),两端错峰避免挤压。
  6. 监控与告警:在轻易云上开启日志面板,关注"反查无结果"和"评论写入失败"两类异常,前者通常是 so_id 未被上游写入,后者通常是钉钉 access_token 过期。

踩坑复盘

  • 典型错误:把 so_id 直接当 process_instance_id 传。钉钉评论接口根本不会报错,但评论会写到一个不存在的实例上,申请人看不到。稳妥的做法是先用 _mongoQuery 在测试环境验证能查到结果,再上线。
  • extend.business_id 类型不一致导致匹配失败。上游写入时如果 so_id 是字符串,而 _mongoQuery 条件里没加引号,会出现 MongoDB 类型不匹配。条件写成 {"$eq":"{{so_id}}"} 而不是 {"$eq":{{so_id}}},这种小细节最容易翻车。
  • 增量窗口超过 7 天被源端拒绝。聚水潭接口明确要求时间间隔不超过 7 天。一旦任务积压或调度中断,恢复后第一轮拉取就会失败。稳妥的做法是设置一个"最长回溯 6 天"的硬限制,宁可丢数据也不要超窗。
  • 重复评论刷屏。评论接口支持多次追加,源端订单每次修改都会触发回传。常见应对是只对已出库订单回传,或者用 _function 比较 modified 与上一次回传时间,未变化则跳过。
  • 调度错峰没做。源端每 9 分钟、目标端每 10 分钟看似异步,但大量订单并发回写时仍可能撞车。客户现场常见做法是源端 9 分钟、目标端 10 分钟起步,再根据日志调整。

适用场景与不适用场景

适用:审批单驱动销售订单、且需要在审批端回显订单履约单号的场景;订单侧有清晰业务单号且可与审批实例 ID 反查对应。不适用:需要写入钉钉审批表单字段(而非评论)的场景、需要结构化回传多个明细行的场景,以及审批实例已被归档或删除、无法再追加评论的旧数据。

本文为原创内容,转载请注明出处:https://www.qeasy.cloud/insights/solutions/strat-jushuitan-dingtalk-5066-ok-68620eda

评论