You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Odoo 10社区版:自定义模块替换基础邮件模板的技术咨询

当然可以用相同ID的记录替换Odoo基础模块里的邮件模板,这是Odoo中扩展或修改基础功能的常规操作,我之前做过好多次类似的需求。下面分点解答你的三个问题:

1. 自定义模块能否通过相同ID替换标准基础模板?

绝对可以。Odoo的XML数据记录是通过外部ID(格式为模块名.记录ID)来唯一识别的。只要你的自定义模块在__manifest__.pydepends列表中添加了sale模块(确保加载顺序在sale之后),然后在你的模块XML文件中使用和原模板完全相同的外部ID(比如sale.mail_template_sale_order)创建mail.template记录,Odoo就会用你的记录覆盖原有的基础模板。

2. 标签内应如何编写?

这里要注意原模板的noupdate属性:Odoo基础模块里的大部分数据(包括sale的订单邮件模板)都是放在<data noupdate="1">标签下的,这意味着这些记录在模块更新时不会被Odoo重新覆盖,只有第一次安装时会创建。

所以要修改这类记录,你需要在自定义模块的XML中做以下操作:

  • 首先用<data noupdate="0">包裹你的修改记录,这样Odoo会在模块安装或升级时应用你的修改(因为noupdate="0"表示这条记录允许被更新)。
  • 修改完成后,如果你想让自己的自定义模板固定下来,避免后续模块更新时被意外覆盖,可以把标签改成<data noupdate="1">

示例代码如下:

<odoo>
    <!-- 先使用noupdate="0"来应用修改 -->
    <data noupdate="0">
        <record id="sale.mail_template_sale_order" model="mail.template">
            <!-- 覆盖原模板的主题 -->
            <field name="subject">您的销售订单 ${object.name} 已生成</field>
            <!-- 覆盖原模板的邮件内容 -->
            <field name="body_html" type="html">
                <div style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">
                    <p>尊敬的客户:</p>
                    <p>您的销售订单 <strong>${object.name}</strong> 已成功创建,详情如下:</p>
                    <p>订单金额:${object.amount_total} ${object.currency_id.name}</p>
                    <p>如需查看完整订单,请点击 <a href="${object.get_base_url()}/my/orders/${object.id}">此处</a>。</p>
                </div>
            </field>
        </record>
    </data>

    <!-- 如果确认修改没问题,后续可以改成noupdate="1"保护你的自定义模板 -->
    <!-- <data noupdate="1">
        <record id="sale.mail_template_sale_order" model="mail.template">
            ... 你的模板内容 ...
        </record>
    </data> -->
</odoo>
3. 若sale模块更新会发生什么情况?

分两种情况来看:

  • 常规情况:sale模块的基础邮件模板是标记为noupdate="1"的,所以当Odoo更新sale模块时,官方不会覆盖你已经修改过的模板。因为noupdate="1"的记录,Odoo只会在第一次安装sale模块时创建,后续更新sale模块时会跳过这些记录的修改。
  • 极端情况:如果官方在某次sale模块更新中,修改了原模板的noupdate属性为0,同时修改了模板内容,那么更新sale模块时可能会和你的自定义修改产生冲突。不过这种情况非常罕见,Odoo官方一般不会改动基础数据的noupdate属性,因为会影响大量用户的自定义配置。

另外,如果你在自定义模块中把原记录的noupdate改成了0,那么每次升级自定义模块时,你的修改会再次应用;但sale模块更新时,只要原记录还是noupdate="1",就不会影响你的模板。

最后补充个小建议:修改前最好先备份原模板内容,或者在测试环境先验证效果,避免影响生产环境的邮件发送。

内容的提问来源于stack exchange,提问作者M.E.

火山引擎 最新活动