Plugin Development

Plugin 是 AuraBoot 业务能力的打包单元。一个 Plugin 可以包含 Model、字典、Command、Page、Menu、Permission、数据源、i18n 文件以及可选的后端或前端扩展。
对于大多数业务模块,先从 Config-only Plugin 开始。仅当模块需要无法用 DSL 资源表达的行为时,再添加 Java 或 React 扩展。
Plugin 内容
plugins/crm-starter/
plugin.json
config/
models.json
fields/
commands/
pages/
dicts.json
named-queries/
menus.json
permissions.json
roles.json
i18n.json| 资源 | 用途 |
|---|---|
plugin.json | Manifest、版本、依赖、资源位置 |
config/models.json | 业务数据结构 |
config/fields | 各 Model 的字段定义(按 Model 拆文件) |
config/commands | 创建、更新、删除、流转或自定义操作 |
config/pages | List、Form、Detail 与 Dashboard schema |
config/dicts.json | 用于下拉与状态的受控取值 |
config/named-queries | 供 Dashboard 或报表使用的查询定义 |
config/menus.json | 导航入口 |
config/permissions.json | 访问控制定义 |
config/roles.json | 初始 Role 与 Permission 分配 |
config/i18n.json | 本地化 label |
Manifest
{
"pluginId": "com.example.crm-starter",
"namespace": "crm",
"version": "1.0.0",
"displayName:en": "CRM Starter",
"description": "Lead and account management module",
"author": "Example Team",
"minPlatformVersion": "1.0.0",
"dependencies": [],
"resourceDirs": {
"models": "config/models.json",
"fields": "config/fields",
"commands": "config/commands",
"pages": "config/pages",
"dicts": "config/dicts.json",
"menus": "config/menus.json",
"permissions": "config/permissions.json",
"roles": "config/roles.json"
}
}使用稳定的 pluginId。它会参与升级、依赖与市场相关行为。使用 namespace 让 Model、Command、Page 与 Permission 的 code 保持有组织。
开发流程
Create manifest
-> add dictionary values
-> add models
-> add commands
-> add pages
-> register menus and permissions
-> validate plugin
-> publish plugin
-> verify generated UI这种顺序能尽早发现错误。不要等到最后才一次性导入所有资源。
示例 Task Model
{
"code": "pm_task",
"displayName:en": "Task",
"modelType": "entity",
"modelCategory": "entity",
"fields": [
{ "code": "title", "displayName:en": "Title", "dataType": "string", "constraints": { "required": true, "maxLength": 200 } },
{ "code": "description", "displayName:en": "Description", "dataType": "text" },
{ "code": "status", "displayName:en": "Status", "dataType": "enum", "dictCode": "pm_task_status", "defaultValue": "todo" },
{ "code": "priority", "displayName:en": "Priority", "dataType": "enum", "dictCode": "pm_task_priority", "defaultValue": "medium" },
{ "code": "assignee", "displayName:en": "Assignee", "dataType": "reference", "referenceModelCode": "sys_user", "refTarget": { "targetModel": "sys_user", "targetField": "id" } },
{ "code": "due_date", "displayName:en": "Due Date", "dataType": "date" }
]
}示例 create Command
{
"code": "pm:create_task",
"displayName:en": "Create Task",
"type": "create",
"modelCode": "pm_task",
"inputFields": [
"title",
"description",
"priority",
"assignee",
"due_date"
],
"autoSetFields": {
"status": {
"strategy": "fixed_value",
"value": "todo"
}
},
"permissions": [
"pm.task.manage"
]
}示例列表 Page
{
"pageKey": "pm_task_list",
"modelCode": "pm_task",
"kind": "list",
"schemaVersion": 4,
"layout": {
"type": "stack"
},
"blocks": [
{
"id": "pm_task_toolbar",
"blockType": "toolbar",
"buttons": [
{
"code": "create",
"primary": true,
"permissionCode": "pm.task.manage",
"label": { "zh-CN": "新建", "en-US": "New Task" },
"action": { "type": "navigate", "to": "pm_task_form" }
}
]
},
{
"id": "pm_task_table",
"blockType": "table",
"columns": [
{ "field": "title", "width": 260, "sortable": true },
{ "field": "status", "width": 120, "renderType": "tag", "dictCode": "pm_task_status" },
{ "field": "priority", "width": 120, "renderType": "tag", "dictCode": "pm_task_priority" },
{ "field": "assignee", "width": 160 },
{ "field": "due_date", "width": 140, "sortable": true }
],
"searchFields": [
"title"
]
}
],
"name:en": "Tasks",
"title": { "zh-CN": "任务列表", "en": "Tasks" }
}校验与发布
尽量使用 CLI:
aura plugin validate plugins/my-plugin
aura plugin publish plugins/my-plugin --yes校验应当能捕获 schema 漂移、缺失引用、非法 Command code、Menu 与 Permission 不匹配以及缺失的资源文件。
验证清单
发布 Plugin 后:
- 确认 Plugin 出现在 Plugin 列表中。
- 确认目标 Role 看得到 Menu。
- 从 Menu 打开列表 Page,而不仅仅是用 URL。
- 通过自动生成的表单创建一条记录。
- 编辑该记录。
- 用非管理员 Role 验证 Permission。
- 查看后端日志中的导入警告。
何时引入代码
需要后端扩展的场景:
- 自定义 Command Handler 逻辑
- Event Listener
- 外部 API 集成
- 无法用配置表达的复杂校验
需要前端扩展的场景:
- 专用可视化
- 自定义编辑器
- 自定义 Dashboard Block
- 非标准 Workflow 操作面
默认路径保持配置优先。它更易校验、评审与升级。