本文目录导读:

这是一个关于 Axelor(一个开源ERP/CRM/BPM平台) 自定义与扩展的深度问题,Axelor 以其高度模块化和低代码特性著称,其扩展机制主要基于 Java(后端)和 Angular(前端),结合 元数据模型 和 模块化架构。
以下是针对 Axelor 自定义与扩展的全面指南,涵盖从简单配置到深度二次开发的各个层次:
核心概念:模块化与元数据
在开始之前,你需要理解 Axelor 的两个核心概念:
- 模块(Module): 所有功能都被打包成模块(如
axelor-base,axelor-sale,axelor-account),自定义和扩展也是通过创建新模块或继承现有模块来实现。 - 模型(Model)与视图(View): Axelor 不是传统的代码生成,而是通过 XML 文件定义数据模型(Java 实体)、视图(表单、列表、看板)、菜单和权限,这些 XML 文件在应用启动时被解析,动态生成数据库表和 UI。
自定义与扩展的三个层次
根据你的需求和能力,你可以从以下三个层面进行操作:
第1层:配置级自定义(无需代码)
这是最安全、最快捷的方式,适合业务管理员。
- 字段自定义:
- 在 设置 > 技术 > 自定义字段 中,可以直接为任何现有实体添加新的字段(文本、数字、日期、选择、多对多等)。
- 可以定义计算字段(使用 Groovy 脚本)。
- 可以设置字段的可见性、必填、只读条件。
- 视图自定义:
- 视图配置器: 在视图右上角(高级模式),可以直接拖拽字段、修改布局、添加按钮、设置过滤和排序,这些修改会被保存为“用户自定义视图”。
- 视图导入/导出: 可以将调整好的视图导出来,作为模块中的 XML 文件。
- 工作流(BPM)自定义:
使用内置的流程设计器,通过拖拽节点(用户任务、自动任务、条件分支)来定义或修改审批流程、业务流程。
- 报表自定义:
使用 Jasper 报表模板设计器(Studio)或者基于 XML/HTML 的模板,修改现有报表或创建新报表。
- 规则引擎:
- 通过 Groovy 脚本编写业务规则,如:
当订单金额 > 10000 且客户信用良好时,自动批准订单。
- 通过 Groovy 脚本编写业务规则,如:
第2层:模块级扩展(低代码/代码)
当配置无法满足需求时,需要开发一个自定义模块,Axelor 的扩展机制非常优雅,遵循“继承”原则,不修改核心代码。
开发环境准备:
- 需要安装 Axelor 官方提供的 axelor-development-tools Maven 项目骨架。
- 使用 IDE(如 IntelliJ IDEA / Eclipse)。
关键扩展能力:
-
继承与修改模型:
- 通过
extends属性继承现有实体。<!-- my-module/src/main/resources/domains/SaleOrder.xml --> <entity name="MySaleOrder" parent="axelor-sale:SaleOrder" lang="java"> <field name="myCustomField" type="STRING" title="自定义字段"/> <field name="deliveryDate" title="修改现有字段标题"/> <new-field name="totalWithTaxCalculation" type="BIG_DECIMAL" title="含税总计(自定义计算)"/> </entity>
- 注意: 你继承的实体必须有对应的 Java 类生成,Axelor 会自动合并字段、帮助、搜索、日志等。
- 通过
-
覆盖与补充视图:
- 在模块的
views目录下创建同名的 XML 文件,但加上模块前缀。<!-- 覆盖 SaleOrder 的列表视图 --> <list name="my-module-sale-order-list" model="com.axelor.apps.sale.db.SaleOrder" title="销售订单(扩展)" extends="sale-order-list"> <extend target="//field[@name='statusSelect']"> <attribute name="showIf" value="statusSelect > 1"/> </extend> <insert position="after"> <field name="myCustomField"/> </insert> </list>
- 在模块的
-
扩展菜单与权限:
- 在
menus.xml中定义新菜单,或通过parent属性插入到现有菜单树中。 - 在
permissions.xml中定义针对新字段或新对象的权限规则。
- 在
-
扩展业务逻辑(Java Action 与 Groovy Script):
- Java Action: 创建实现
ActionHandler接口的 Java 类。 - Groovy Script: 在模型、视图或工作流中直接编写 Groovy 代码进行轻量级逻辑处理。
- Wizard(向导): 创建多步骤表单,处理复杂交互。
- Java Action: 创建实现
第3层:框架级深度扩展(高级)
- 创建新模块(如
axelor-my-crm): 完全从头开发属于业务领域的新功能模块,不与现有模块关联。 - 扩展 Core 框架: 修改 Axelor Core 的底层行为(如拦截器、事务管理)。
- 自定义 Web Services / API: 创建 RESTful API 或集成外部系统。
- 前端深度定制: 修改 Angular 组件、服务、路由,创建完全自定义的 UI 组件。
最佳实践与注意事项
- *绝不修改核心模块(`axelor-`)的代码!** 这是最重要的规则,核心模块会在后续升级中被覆盖,所有定制都必须通过继承或自定义模块实现。
- 使用版本控制系统(Git): 为你的自定义模块单独建立 Git 仓库,方便跟踪变更和回滚。
- 利用 Maven 管理依赖: 在自定义模块的
pom.xml中声明它依赖了哪些核心模块,Axelor 会按模块依赖顺序启动。 - 测试先行: 编写单元测试和集成测试,特别是对于 Java Action 和复杂业务规则,Axelor 提供测试基础类。
- 清晰的模块命名: 建议使用公司或项目缩写作为模块名称前缀(如
mycompany-base),避免与官方模块冲突。 - 关注性能: 在自定义字段中使用
targetFind(快速搜索)时注意索引;避免在 Groovy 脚本中进行数据库查询。 - 文档化: 记录你的自定义点、扩展方式和业务逻辑,便于后续维护和团队协作。
- 升级兼容性: 定期关注 Axelor 的 Release Notes,如果你的扩展依赖了某核心模块的内部 API,升级时可能需要适配。
常用工具与命令
- Axelor Studio: 官方提供的 Web IDE,允许在浏览器中直接进行模型、视图、流程的可视化编辑,非常高效。
mvn clean install: 编译并打包你的自定义模块。mvn axelor:watch(开发模式): 监听代码变化并热部署,极大提升开发效率。axelor-database:reset: 在开发环境中重置数据库。
| 层次 | 方法 | 适用场景 | 技能要求 |
|---|---|---|---|
| 配置级 | 自定义字段、视图、工作流、报表 | 简单的字段、审批流、报表修改 | 业务分析能力 |
| 模块级 | 继承模型、覆盖视图、编写Java Action | 添加全新的业务字段、修改复杂交互、集成外部系统 | Java / Angular / XML / Maven |
| 框架级 | 自定义模块、修改Core、自定义API | 构建全新的业务领域、深度集成 | 高级Java / 前端 / 架构设计能力 |
建议: 对于大多数企业级需求,第2层(模块级扩展) 是最常用且最稳妥的方式,它平衡了灵活性、可维护性和升级兼容性,从 Axelor Studio 开始,逐步学习 XML 视图和 Java Action,可以快速上手。
如果你有具体的自定义场景(在销售订单上加一个“客户信用检查”按钮,或修改采购流程),我可以提供更详细的步骤或代码示例。