企业|前端

Odoo 企业版 Survey 到 Spreadsheet 面板,为什么不是“把问卷答案塞进一张表”

从 ODOO.SURVEY 公式、文档访问 token 到协同 revision,讲清问卷结果面板为什么是一条公式与协作并行的前端链路。

企业 前端
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 5 阅读

结论先行

“问卷结果导出成表格”听上去像一个一次性导出功能,但企业版做的是可协作、可分享、可持续刷新的 survey dashboard。它同时踩了 survey、documents、spreadsheet collaboration 三条链,所以绝不是把答案塞进一张静态 Excel。

第一层:入口或表面动作

squarey_survey 这边,get_survey_results_for_spreadsheet() / _build_spreadsheet_data() 会把问卷结果组织成二维结构,并直接在单元格 A1 放入 =ODOO.SURVEY(<id>) 公式。重点在这里:Spreadsheet 并不把问卷结果拷贝成死数据,而是通过 Odoo 公式把 survey 当成一个数据源。这就意味着后续的展示、刷新、透视都可以留在表格引擎内部做。

第二层:真正的业务护栏

文档层负责分享与只读访问。documents_spreadsheet.controllers.documents.documents_spreadsheet() 会基于 access_token 返回序列化快照与 revisions;documents_document._check_spreadsheet_share() 又会校验 link sharing 权限、frozen spreadsheet 可写性、token 是否匹配。于是浏览器拿到的不是一个裸 JSON,而是一份受文档权限保护的协作状态。

第三层:状态落点与边界

协作层在 spreadsheet_edition.spreadsheet_mixin.dispatch_spreadsheet_message() 里更明显。每个协同消息都带 serverRevisionId,服务端只接受顺序正确的更新;save_spreadsheet_snapshot() 若发现 revision 不一致,就抛并发更新错误。换句话说,Survey dashboard 不是“后台重生成一次表格,前端覆盖掉”,而是在协同表格协议里持续承载 survey 数据

为什么这套设计更稳

这条链特别适合前端分类,因为它的核心不在 ORM,而在“浏览器拿到的是哪一种状态”。是快照?是 revisions?是只读 token?是可编辑链接?企业版把这几层拆开后,用户既能把问卷变成 live dashboard,又不会因为多人同时打开文档就把结果写乱。

实战启示

如果你想二开类似能力,最危险的做法就是每次问卷提交后直接重写整张 spreadsheet JSON。那会绕开 revision 顺序控制,也会让分享 token 与文档权限失去意义。企业版真正优雅的地方,是让 Survey 只提供数据源,让 Documents 守访问边界,让 Spreadsheet 协议守并发一致性。

DISCUSSION

评论区

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