Axelor自定义与扩展

wen PHP项目 4

本文目录导读:

Axelor自定义与扩展

  1. 核心概念:模块化与元数据
  2. 自定义与扩展的三个层次
  3. 最佳实践与注意事项
  4. 常用工具与命令

这是一个关于 Axelor(一个开源ERP/CRM/BPM平台) 自定义与扩展的深度问题,Axelor 以其高度模块化和低代码特性著称,其扩展机制主要基于 Java(后端)和 Angular(前端),结合 元数据模型模块化架构

以下是针对 Axelor 自定义与扩展的全面指南,涵盖从简单配置到深度二次开发的各个层次:

核心概念:模块化与元数据

在开始之前,你需要理解 Axelor 的两个核心概念:

  1. 模块(Module): 所有功能都被打包成模块(如 axelor-base, axelor-sale, axelor-account),自定义和扩展也是通过创建新模块或继承现有模块来实现。
  2. 模型(Model)与视图(View): Axelor 不是传统的代码生成,而是通过 XML 文件定义数据模型(Java 实体)、视图(表单、列表、看板)、菜单和权限,这些 XML 文件在应用启动时被解析,动态生成数据库表和 UI。

自定义与扩展的三个层次

根据你的需求和能力,你可以从以下三个层面进行操作:

第1层:配置级自定义(无需代码)

这是最安全、最快捷的方式,适合业务管理员。

  • 字段自定义:
    • 设置 > 技术 > 自定义字段 中,可以直接为任何现有实体添加新的字段(文本、数字、日期、选择、多对多等)。
    • 可以定义计算字段(使用 Groovy 脚本)。
    • 可以设置字段的可见性、必填、只读条件。
  • 视图自定义:
    • 视图配置器: 在视图右上角(高级模式),可以直接拖拽字段、修改布局、添加按钮、设置过滤和排序,这些修改会被保存为“用户自定义视图”。
    • 视图导入/导出: 可以将调整好的视图导出来,作为模块中的 XML 文件。
  • 工作流(BPM)自定义:

    使用内置的流程设计器,通过拖拽节点(用户任务、自动任务、条件分支)来定义或修改审批流程、业务流程。

  • 报表自定义:

    使用 Jasper 报表模板设计器(Studio)或者基于 XML/HTML 的模板,修改现有报表或创建新报表。

  • 规则引擎:
    • 通过 Groovy 脚本编写业务规则,如:当订单金额 > 10000 且客户信用良好时,自动批准订单

第2层:模块级扩展(低代码/代码)

当配置无法满足需求时,需要开发一个自定义模块,Axelor 的扩展机制非常优雅,遵循“继承”原则,不修改核心代码。

开发环境准备:

  • 需要安装 Axelor 官方提供的 axelor-development-tools Maven 项目骨架。
  • 使用 IDE(如 IntelliJ IDEA / Eclipse)。

关键扩展能力:

  1. 继承与修改模型:

    • 通过 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 会自动合并字段、帮助、搜索、日志等。
  2. 覆盖与补充视图:

    • 在模块的 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>
  3. 扩展菜单与权限:

    • menus.xml 中定义新菜单,或通过 parent 属性插入到现有菜单树中。
    • permissions.xml 中定义针对新字段或新对象的权限规则。
  4. 扩展业务逻辑(Java Action 与 Groovy Script):

    • Java Action: 创建实现 ActionHandler 接口的 Java 类。
    • Groovy Script: 在模型、视图或工作流中直接编写 Groovy 代码进行轻量级逻辑处理。
    • Wizard(向导): 创建多步骤表单,处理复杂交互。

第3层:框架级深度扩展(高级)

  • 创建新模块(如 axelor-my-crm): 完全从头开发属于业务领域的新功能模块,不与现有模块关联。
  • 扩展 Core 框架: 修改 Axelor Core 的底层行为(如拦截器、事务管理)。
  • 自定义 Web Services / API: 创建 RESTful API 或集成外部系统。
  • 前端深度定制: 修改 Angular 组件、服务、路由,创建完全自定义的 UI 组件。

最佳实践与注意事项

  1. *绝不修改核心模块(`axelor-`)的代码!** 这是最重要的规则,核心模块会在后续升级中被覆盖,所有定制都必须通过继承或自定义模块实现。
  2. 使用版本控制系统(Git): 为你的自定义模块单独建立 Git 仓库,方便跟踪变更和回滚。
  3. 利用 Maven 管理依赖: 在自定义模块的 pom.xml 中声明它依赖了哪些核心模块,Axelor 会按模块依赖顺序启动。
  4. 测试先行: 编写单元测试和集成测试,特别是对于 Java Action 和复杂业务规则,Axelor 提供测试基础类。
  5. 清晰的模块命名: 建议使用公司或项目缩写作为模块名称前缀(如 mycompany-base),避免与官方模块冲突。
  6. 关注性能: 在自定义字段中使用 targetFind(快速搜索)时注意索引;避免在 Groovy 脚本中进行数据库查询。
  7. 文档化: 记录你的自定义点、扩展方式和业务逻辑,便于后续维护和团队协作。
  8. 升级兼容性: 定期关注 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,可以快速上手。

如果你有具体的自定义场景(在销售订单上加一个“客户信用检查”按钮,或修改采购流程),我可以提供更详细的步骤或代码示例。

抱歉,评论功能暂时关闭!