Skip to content

[finding] 删除记录后,它的审批单仍留在审批收件箱:pending 与 approved 两种都留,记录引用退化为原始 id #13568

Description

@yinlianghui

来源:宣传视频车道 #147(一句话新模块·请假管理)录制整备时发现。未改动任何平台代码,本单为只读观察 + 一次真实业务流程实跑。

本单只描述现象,不预设修正方向。 是否算缺陷、以及该往哪个方向处理(保留审计痕迹的软引用、连带清理、有在途审批时禁止删除、仅改界面呈现……)全部留给负责人裁定。故不带 pm:queue——请先分级,不要被自动流程当成待开发任务直接领走。

现象

一个用「审批流 + 按状态共享」搭起来的请假模块:员工提交请假 → 主管在审批收件箱批准。

删除一条请假记录后,它此前产生的审批单仍留在审批收件箱里,并且:

  • pending 的会留:记录被删时那条待批审批单仍在收件箱,仍为待批状态,仍可被点开;
  • approved 的也会留:已批准过的记录被删后,它的审批单同样留在列表里;
  • 记录引用退化:行内本该显示记录标识的位置不再显示业务编号(如 LR-00006),退化为原始记录 id(观察到的那条为 9SEmly…-J7Z)。审批单指向的记录此时已不存在。

是怎么撞上的

不是刻意构造的,是正常操作里绕不开的一步:

  1. 建了一条请假记录,触发审批,收件箱出现待批项;
  2. 需要改这条记录的日期,但因该模块声明了 lockRecord: true,在途审批把记录锁住,改不了(RECORD_LOCKED);
  3. 于是删掉重建——这是被锁之后唯一可走的路;
  4. 记录没了,它的审批单留在了收件箱里。

也就是说:lockRecord 把「改不了就删了重建」变成常规操作,而删除又会留下审批单,两件事叠在一起,普通搭建流程里就会持续积累这类指向不存在记录的行。

影响面

不限于请假:任何「审批 + lockRecord」的组合都走同一条路。收件箱是审批人每天看的界面,留下的行会计入待批数量,点开后指向的记录已不存在。

邻近既有单(已查,均非重复)

复现最小路径

  1. 建一个对象,声明 type:'approval' 节点 + approvalStatusField + lockRecord: true
  2. 以普通用户提交一条记录 → 审批收件箱出现待批项;
  3. 不批准,直接删除该记录;
  4. 打开审批收件箱 → 那条待批项仍在,记录标识处显示原始 id;
  5. 换一条已批准的记录重复第 3 步 → 其审批单同样留在列表里。

取证环境

2026-08-31,载体 objectstack-ai/hotcrm,钉 @objectstack/* 17.1.0。观察发生在 #147 录制整备的干跑中,收件箱当时共两行,其中一行即上述孤儿审批单。未做进一步代码级取证——本单停在现象层,按上面的说明留待分级。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions