很多团队以为启用 Website Helpdesk 只是把一个工单表单公开到网站,但企业版真正处理的是页面生成、菜单挂载、附件权限和门户可见性。
核心链路
- 在
website_helpdesk/models/helpdesk.py中,create()和write()会在启用use_website_helpdesk_form后调用_ensure_submit_form_view()与_ensure_website_menu()。这意味着“开启功能”本身就会修改站点结构,而不是只改一个布尔字段。 _ensure_submit_form_view()会从默认模板website_helpdesk.ticket_submit_form克隆出团队专属 QWeb 视图,并把视图 ID 记到website_form_view_id。因此每个团队其实有自己的提交页模板,后续做局部定制时不能只改公共模板。_ensure_website_menu()会按 website 维度统计启用表单的团队数;当某个网站只有一个 Helpdesk team 时,它会直接在站点主菜单下生成/helpdesk入口。这个设计解释了为什么某些站点会“突然多出一个 Help 菜单”。- 在
controllers/main.py里,WebsiteForm._handle_website_form()会先尝试根据邮箱复用 partner;找不到就新建联系人,并把partner_id注入提交参数。也就是说,网站访客提交工单并不是匿名黑洞,而是被尽量挂到一个可追踪的业务联系人上。 - 如果用户上传附件,
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
评论区