企业 制造 / 工序质检

Odoo 企业版工单位质检为什么失败后不会直接跳下一步:do_measure、_next 与 failure wizard 的接力

围绕 quality_mrp_workorder 说明 Shop Floor 里的质检通过、失败与测量,不是三个孤立按钮,而是一条会回传 next_check_id 的接力链。

企业 制造
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 3 阅读

很多人把工序质检里的“通过、失败、测量”看成三个按钮,但企业版 quality_mrp_workorder 实际实现的是一条接力链。核心不在按钮文字,而在每次动作之后系统如何决定下一步。

do_measure() 先执行父类逻辑,再判断这条检查是否关联工单。如果不是工单位质检,它就按普通质量检查结束;如果是工单位质检,它会继续调用 _next(),并把结果包装成 next_check_id 或带向导动作的返回值。

_next() 才是整条链最关键的路由器。检查失败且存在 warning/failure message 时,它不会假装一切正常继续跳转,而是返回 quality.check.wizard 的弹窗动作,同时把 default_check_idsdefault_current_check_iddefault_failure_message 等上下文一起带过去。也就是说,失败不会被吞掉,而会被显式升级成下一段交互。

action_pass_and_next()action_fail_and_next() 则把“做结果”与“算下一步”绑成一个连续动作。对于 Shop Floor 来说,这意味着前端不需要自己猜还有没有下一检查,也不用自己拼失败提示;后端已经把这条路排好了。

于是制造、质量和前端客户端在这里完成一次很典型的接力:工序执行触发质量动作,质量模块决定是否放行或拦截,客户端再按 next_check_id 或向导动作继续推进。没有 _next() 这层,现场流程会非常碎。

现场如果出现“失败了却直接跳过”或“通过后没去下一项”的异常,优先检查的不是按钮事件,而是 _next() 返回了什么、失败消息是否存在、以及前端是否真的按 next_check_id 处理了返回值。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。