低代码定制(Studio 风格)¶
Odoo Studio 是 Enterprise 专属的可视化编辑器。它所做的定制(字段、视图、 自动化动作)都是保存在数据库中的普通 Odoo 记录。本插件通过 RPC 创建这些 相同的记录,因此你在 Community 版上也能获得 Studio 常见的成果,而无需 许可证。
诚实的适用范围
这覆盖的是小型、低代码的改动:一个字段、一处视图调整、一个简单的 自动化。它不能替代严肃的模块开发(打包的代码、迁移、测试、复杂的业务 逻辑)。若需要这些,请构建一个模块。参见 它像 Odoo Studio 吗?。
改动存放在哪里¶
存放在实例/数据库中,与 Studio 完全一样,而不是像仓库中的模块代码那样。 它们像手动定制一样在升级中保留下来。如果你需要仓库中的代码,那属于模块开发, 不在本插件的范围之内。
1. 添加自定义字段¶
使用 odoo_add_field 工具。它会创建一个 state='manual' 的字段,并强制加上
必需的名称前缀 x_。
odoo_add_field {
"model": "res.partner",
"name": "loyalty_points",
"label": "Puntos de lealtad",
"field_type": "integer"
}
名称 loyalty_points 会变成 x_loyalty_points。
关系型示例:
odoo_add_field { "model": "res.partner", "name": "account_manager",
"label": "Ejecutivo de cuenta", "field_type": "many2one", "relation": "res.users" }
对于 selection 字段,将 selection 传为 [["a","A"],["b","B"]]。创建字段
之后,把它添加到一个表单视图或列表视图中(步骤 2),用户才能看到它。
2. 调整视图(继承)¶
没有专门的工具;请对 ir.ui.view 使用 odoo_create,配合一个继承的 arch,
这样就不会覆盖基础视图。先找到要扩展的视图:
odoo_search_read { "model": "ir.ui.view",
"domain": [["model","=","res.partner"],["type","=","form"]],
"fields": ["name","xml_id"], "limit": 5 }
然后创建一个继承视图:
odoo_create { "model": "ir.ui.view", "values": {
"name": "res.partner.form.x_loyalty",
"model": "res.partner",
"inherit_id": <id_vista_base>,
"arch_db": "<xpath expr=\"//field[@name='email']\" position=\"after\"><field name=\"x_loyalty_points\"/></xpath>"
}}
优先使用 xpath ... position="after|before|inside|replace",而不是重写整个视图。
3. 添加自动化¶
使用 odoo_add_automation。其 Python 代码在 Odoo 的 safe_eval 下运行;工具
会在发送之前对它进行校验,这一点在 Odoo online/SaaS 中尤为重要,因为在
那里,任意 Python 代码会在服务器端被拒绝。
odoo_add_automation {
"model": "crm.lead",
"name": "Marcar leads calientes",
"trigger": "on_create_or_write",
"code": "for rec in records:\n if rec.probability and rec.probability > 80:\n rec.priority = '3'"
}
safe_eval 规则(由工具强制执行)
代码在 Odoo 的 safe_eval 下运行。禁止:import、def、class、
return、with,以及访问以下划线或双下划线(__)开头的名称或属性。
工具会在发送之前拒绝这些结构,并给出清晰的修正建议,因此你会在本地
就发现问题,而不是通过服务器错误才知道。
该上下文中可用的名称:env、model、record/records、datetime、
dateutil、time、UserError。要返回一个动作,请把 action = {...} 作为
最后一条语句进行赋值(绝不要用 return)。
Enterprise 对比 Community¶
- 这里创建的字段、视图和自动化在两个版本中都能工作。
- 在 Enterprise 中,它们不会出现在 Studio 编辑器里(它们没有被标记为
web_studio定制),但在运行时表现相同。 - Enterprise 专属的模型(例如
documents.document)在 Community 中仍然 无法使用:兼容层会抛出一个清晰的错误。
验证(完成的定义)¶
读回记录并确认效果:
- 字段:
odoo_fields_get { "model": "<modelo>" }会显示新的x_字段。 - 视图:在 Odoo 中打开表单(或读取继承的
ir.ui.view)。 - 自动化:在一条记录上触发它,并读取被修改的字段。
技能参考:/odoo-tools:odoo-studio-style。