• 【零散技术】Odoo 服务台(helpdesk)Qweb设计模式


    序言:时间是我们最宝贵的财富,珍惜手上的每个时分

    目录

    一.缘起

    二.心落

    三.纷扰

    四:忖量

    五:已矣


     一.缘起

             近期有一个基于 Odoo服务台(helpdesk)的项目开发,web端显示的原始需求很简单:

    增加一些字段,并填入表单内。效果图如下

    看似如此简单的一个前段修改,却隐藏了不少坑。

    二.心落

     按往常修改网页的套路,我找到了 helpdesk 的xml文件,并通过继承对进行修改:

    1. "1.0" encoding="utf-8"?>
    2. <odoo>
    3. <template id="ticket_submit_form" inherit_id="website_helpdesk_form.ticket_submit_form">
    4. <xpath expr="//div[@class='container']" position="replace">

    但是刷新后控制台竟然无任何效果,这让我怀疑是否是 xpath写错了,于是直接修改原始模块文件,升级模块后界面显示巍然不动,真的是个奇异事件。

    三.纷扰

     气急败坏下,我卸载了模块,然后重新安装helpdesk,“奇迹”发生了:我打的 ???出现了!

    但是我依旧很懵,重新安装模块后可以看到修改,但是我继续修改qweb,页面又不变化了

    四:忖量

            这种情况下想要做到心如止水谈何容易,在我崩溃边缘的时候,突然想到是否是初始化的时候使用了 hooks 或者其他的方法,所以只会依据qweb初始化一次?

            顺着这个思路,我翻看了helpdesk下的py文件,终于发现了问题:

    1. @api.model_create_multi
    2. def create(self, vals_list):
    3. teams = super(HelpdeskTeam, self).create(vals_list)
    4. teams.filtered('use_website_helpdesk_form')._ensure_submit_form_view()
    5. return teams
    6. def write(self, vals):
    7. if 'use_website_helpdesk_form' in vals and vals['use_website_helpdesk_form']:
    8. self._ensure_submit_form_view()
    9. return super(HelpdeskTeam, self).write(vals)
    10. def unlink(self):
    11. teams_with_submit_form = self.filtered(lambda t: t.website_form_view_id is not False)
    12. for team in teams_with_submit_form:
    13. team.website_form_view_id.unlink()
    14. return super(HelpdeskTeam, self).unlink()
    15. def _ensure_submit_form_view(self):
    16. for team in self:
    17. if not team.website_form_view_id:
    18. default_form = etree.fromstring(self.env.ref('website_helpdesk_form.ticket_submit_form').arch)
    19. xmlid = 'website_helpdesk_form.team_form_' + str(team.id)
    20. form_template = self.env['ir.ui.view'].create({
    21. 'type': 'qweb',
    22. 'arch': etree.tostring(default_form),
    23. 'name': xmlid,
    24. 'key': xmlid
    25. })
    26. self.env['ir.model.data'].create({
    27. 'module': 'website_helpdesk_form',
    28. 'name': xmlid.split('.')[1],
    29. 'model': 'ir.ui.view',
    30. 'res_id': form_template.id,
    31. 'noupdate': True
    32. })
    33. team.write({'website_form_view_id': form_template.id})

    每一个 helpdesk实例,都会依据xml模版创建一个qweb数据!!!!

    所以无论怎么修改,已有的helpdesk web界面,都不会发生变化!!!

    五:已矣

    基于如上缘由,每次调试xml的时候,需要手动去web新建一个 helpdesk记录。下图就是我的冤种测试记录。

    经过多次的调试,终于得到最终结果。

            虽说完成了工作,但是依旧无法理解这样做的用法。

            非要从代码层面解释,是可以在python里灵活的为服务台创建不同的web界面。

            但是 目前odoo15没有任何自定义的设置,也许这是个 future 且官方早有解释,但我才懒的翻github,就拭目以待吧!!!

     

    odoo开发部署实施.

    wx号: _ro_cd

  • 相关阅读:
    Django+Pytest搭建在线自动化测试平台实战1
    309. 最佳买卖股票时机含冷冻期
    swig教程-指令文件《一》
    DRIVEN|15分的CNN+LightGBM怎么做特征分类,适用于转录组
    第十七章 开发Productions - ObjectScript Productions - 对业务服务、流程和操作进行编程
    Dubbo---使用直连方式 dubbo
    Pr 视频效果:生成
    Shell脚本简单认知
    NotePad++ 在行前/行后添加特殊字符内容方法
    FragmentManager is already executing transactions异常
  • 原文地址:https://blog.csdn.net/Srekal/article/details/126472594