企业网站 / Helpdesk

Odoo 企业版网站 Helpdesk 表单为什么不是“开个页面收工单”而已:页面生成、附件放权与菜单生命周期讲透

从 team 开关开始,拆解 website_helpdesk 如何自动生成提交页、创建 Help 菜单、把附件 token 放给门户用户,并解释为什么多公司网站一旦配错会直接报错。

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

很多团队以为启用 Website Helpdesk 只是把一个工单表单公开到网站,但企业版真正处理的是页面生成、菜单挂载、附件权限和门户可见性。

核心链路

  1. website_helpdesk/models/helpdesk.py 中,create()write() 会在启用 use_website_helpdesk_form 后调用 _ensure_submit_form_view()_ensure_website_menu()。这意味着“开启功能”本身就会修改站点结构,而不是只改一个布尔字段。
  2. _ensure_submit_form_view() 会从默认模板 website_helpdesk.ticket_submit_form 克隆出团队专属 QWeb 视图,并把视图 ID 记到 website_form_view_id。因此每个团队其实有自己的提交页模板,后续做局部定制时不能只改公共模板。
  3. _ensure_website_menu() 会按 website 维度统计启用表单的团队数;当某个网站只有一个 Helpdesk team 时,它会直接在站点主菜单下生成 /helpdesk 入口。这个设计解释了为什么某些站点会“突然多出一个 Help 菜单”。
  4. controllers/main.py 里,WebsiteForm._handle_website_form() 会先尝试根据邮箱复用 partner;找不到就新建联系人,并把 partner_id 注入提交参数。也就是说,网站访客提交工单并不是匿名黑洞,而是被尽量挂到一个可追踪的业务联系人上。
  5. 如果用户上传附件,insert_attachment() 会给工单附件生成 access_token,并把对应 message 从内部 note 调整为 portal 可见 comment。真正开放给客户看的不是附件本身,而是“有 token 的附件 + 可见的消息线程”这一整套组合。

关键源码位置

  • /home/ubuntu/odoo-temp/enterprise/website_helpdesk/models/helpdesk.py
  • /home/ubuntu/odoo-temp/enterprise/website_helpdesk/controllers/main.py

容易误解的地方

  • 误区一:关闭 team 就只是隐藏页面。实际上 write() 里会联动 is_published,而 unlink() 还会删掉关联菜单。
  • 误区二:附件上传后客户天然能下载。源码明确要求先补 access_token,否则门户用户并没有读取权。
  • 误区三:多公司环境里 team 和 website 可以随意混搭。_check_website_company() 直接禁止公司不一致的组合。

实战注意事项

  • 如果要做企业官网 + 多品牌站点,先按 company / website 规划好 helpdesk team,再开表单;否则菜单和 URL 很容易挂到错误网站。
  • 要改提交页字段,优先看 team 专属 website_form_view_id,不要只改默认模板。
  • 做附件合规审计时,记得同时检查 ir.attachment.access_token 和 message 的 is_internal / subtype_id

结语

企业版这些代码共同说明一件事:真正可上线的业务流程,靠的不是“页面上看起来能点通”,而是权限、状态、时机、对账口径和跨模块回写都被收紧。理解这些边界,实施和二开时就不容易走进“功能演示能跑、真实业务一用就散”的坑。

DISCUSSION

评论区

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