跳至内容

ODOO动态加载资源

微信masterjmz

在实际开发过程中,我们经常遇到这样的场景:修改完代码,进行本地测试,然后通过 CI 推送到线上。然而升级后却发现线上存在一些小冲突,不得不再次回退重来。有经验的开发者都知道,这种反复操作非常耗时。

实际上,我们可以从两个方向进行优化:

1. 使用高效、轻量的 CI 流程

许多公司虽然实现了 CI(持续集成),但一次构建可能耗时 10 多分钟甚至更久。更糟糕的是,构建完成后部署到线上才发现存在冲突,又得重新调整。由于线上数据库庞大,完全同步到本地也不现实。

因此,CI 必须足够轻量——我们不应为了“有 CI”而做 CI,而应以提升效率、减少重复劳动为目标。一个快速反馈的 CI 系统,能显著缩短开发迭代周期。

2. 支持线上动态验证与实时更新

理想情况下,我们希望实现“线上实时更新”,这其实体现了低代码的核心思想。在 Odoo 中,系统本身支持动态添加 JS、CSS、QWeb 模板和视图。

然而,官方功能存在明显局限:

  • 视图可以在线添加,但无法指定 xmlid,这是一个硬伤——我们不可能在开发或引用时依赖数据库中的自增 ID。
  • 虽然支持动态脚本注入,但功能受限,例如无法实现 onchange 等交互逻辑。

因此,这些部分都需要我们进行扩展和优化。

本次开发将先实现以下三个核心功能:

  • 动态添加 CSS
  • 动态添加 JS
  • 动态添加 XML(视图)

界面设计如下:

菜单只有管理员才有权限,css对应动态添加css, js和assets同理,下边分别举例

动添加CSS


 .o_form_sheet {
        background-color: red !important
}

注意,bound也需要选择,这样会添到不同的bound中,后端对应的bound为web.assets_web, website为web.assets_frontend。类型无所谓,主要用于分类

动添加JS, 这里我们以patch为例


动添加QWEB

同时,如果添加的代码如果有问题时,我们可以对相关的代码进行屏蔽,屏蔽所有,通过路由上的ignore_dynamic=1进行

如果是屏蔽特定的模块  ignore_dynamic= Formlabel进行,多个名称通过逗号连接。如此,我们便用足够的自由度,

扫二维码进群下载


ODOO
ODOO18网站集成支付宝支付
微信masterjmz