# 平台 CSV 导入模板及说明
关于 CSV 文件准备及导入的规则(文件名、查询字段、关联字段、(F) 文件列、DELETE_FLAG、OVERWRITE_FLAG 等),请参考 数据导入。
# 牧言低代码平台数据导入模板 适用版本: 1.0.0-beta18
提示
- 以
;开头的行将被视为注释。下载的模板中只有标题行和注释,注释中的「示例」行形如;; 示例: [email protected],...,要导入时把开头的;; 示例:整段删掉(只删;;的话,示例:会变成第一列值的一部分)。 - 每个模板的标题行都已在 1.0.0-beta18 上实际导入验证过(验证的是标题行能被识别,数据行的已知问题见各节说明)。不需要的列可以删除,但 不能出现模型中不存在的列,否则整个文件导入失败。
- 列名后缀
(*)表示查询字段,.name等表示按关联对象的字段查找,[:]表示集合字段且用:分隔多个值,(F)表示从文件读取内容。 - 1.0 以前的
$ROOT_ORG$占位符、organization.name、enableRoles等列 1.0 起已移除(组织模型已删除;权限改用accessRequirement.name等角色要求列)。
# 用户与权限
# User.csv
| 字段名 | 说明 |
|---|---|
username(*) | 用户名(用于查找),建议使用电子邮件地址 |
password | 初始密码,导入时加密保存到用户表;但 CSV 行原文(含明文密码)会保存在行导入成功记录中,DEVELOPER 可见,请只用临时密码并要求用户首次登录后修改 |
name | 姓名 |
accountLocked | 账号是否锁定 |
accountExpired | 账号是否过期 |
passwordExpired | 密码是否过期 |
avatar | 头像图片文件路径(附件) |
extInfo | 扩展信息(JSON) |
roles.name[:] | 用户直接拥有的角色(引用 HierarchyRole.name) |
# Group.csv
| 字段名 | 说明 |
|---|---|
name(*) | 用户组名称(用于查找) |
roles.name[:] | 用户组拥有的角色(引用 HierarchyRole.name) |
# UserGroup.csv
| 字段名 | 说明 |
|---|---|
user.username(*) | 用户名(用于查找,引用 User.username) |
group.name(*) | 组名(用于查找,引用 Group.name) |
# HierarchyRole.csv
| 字段名 | 说明 |
|---|---|
name(*) | 角色名称(用于查找),一般以 ROLE_ 开头 |
implies.name[:] | 该角色包含的其他角色(引用 HierarchyRole.name),可逐级继承 |
平台内置 ROLE_USER、ROLE_DEVELOPER(包含 ROLE_USER)、ROLE_ADMIN(包含 ROLE_DEVELOPER)。
# RoleRequirement.csv
| 字段名 | 说明 |
|---|---|
name(*) | 角色要求名称(用于查找) |
hasPermissionRoles.name[:] | 满足要求的角色列表(引用 HierarchyRole.name),拥有其中任一即可 |
customLogic.name | 自定义判断逻辑(引用 DynamicLogic.name),设置后由该逻辑判断 |
平台内置 USER、DEVELOPER、ADMIN 三个角色要求,分别对应 ROLE_USER、ROLE_DEVELOPER、ROLE_ADMIN。领域模型、表单、菜单、动作的权限列都引用角色要求的名称。
# 领域模型
# DomainClass.csv
| 字段名 | 说明 |
|---|---|
shortName(*) | 领域模型短名称(用于查找);新建的都是动态模型 |
extInfo | 扩展信息(JSON),见 动态领域模型 |
createRoleRequirement.name | 新建权限(引用 RoleRequirement.name) |
readRoleRequirement.name | 查看权限(引用 RoleRequirement.name) |
updateRoleRequirement.name | 修改权限(引用 RoleRequirement.name) |
deleteRoleRequirement.name | 删除权限(引用 RoleRequirement.name) |
注意:权限列留空表示任何人都没有该项权限(包括管理员)。「开发定制 > 领域模型」页面不能新建模型,也不能编辑这四项权限,只能通过 CSV 设置。
# DomainClassField.csv
| 字段名 | 说明 |
|---|---|
domainClass.shortName(*) | 模型名称(用于查找,引用 DomainClass.shortName) |
name(*) | 字段名(用于查找) |
dataType | 数据类型(参见附录 P),创建后不能修改 |
referenceDomain.shortName | 关联模型(DOMAIN_OBJECT、DOMAIN_OBJECT_LIST 类型必填) |
nullable | 是否可为空 |
editable | 是否可编辑 |
defaultValue | 默认值 |
options | 可选值,JSON 数组,例如 "[""VIP"",""普通客户""]" |
extInfo | 扩展信息(JSON) |
注意:
- 数据库列名由系统根据字段名自动生成,不需要填写。
- 模型中还有
comment(备注)字段,1.0.0-beta18 中填写后该字段会创建失败,暂不要使用。
# DomainClassIndex.csv
| 字段名 | 说明 |
|---|---|
domainClass.shortName(*) | 模型名称(用于查找,引用 DomainClass.shortName) |
name(*) | 索引名称(用于查找) |
fields | 索引包含的字段名,JSON 数组,例如 "[""code""]" |
unique | 是否唯一索引 |
用于为动态模型创建数据库索引。
1.0.0-beta18 已知问题
DomainClassIndex 本身是一个动态模型(在「开发定制 > 领域模型」中类型为 DYNAMIC),而当前版本向动态模型导入数据时每一行都会失败(ScopedValue not bound,见数据导入中的已知问题),所以这个模板的数据行目前无法导入成功。
# 动态逻辑
# DynamicLogicEngine.csv
| 字段名 | 说明 |
|---|---|
name(*) | 动态逻辑引擎名称(用于查找) |
description | 描述 |
handlerClassName | 处理器类名 |
注意:平台内置数据,除非您确切知道自己在做什么,否则请不要修改。
# DynamicLogicType.csv
| 字段名 | 说明 |
|---|---|
name(*) | 动态逻辑类型名称(用于查找) |
label | 标签 |
description | 描述 |
codeTemplate | 代码模板 |
注意:平台内置数据,除非您确切知道自己在做什么,否则请不要修改。
# DynamicLogic.csv
| 字段名 | 说明 |
|---|---|
dynamicLogicEngine.name | 动态逻辑引擎名称(引用 DynamicLogicEngine.name) |
name(*) | 动态逻辑名称(用于查找) |
logicType.name | 逻辑类型名称(引用 DynamicLogicType.name) |
code(F) | 源码文件路径,从种子数据根目录算起,一般以 groovy/ 开头 |
description | 描述 |
isSystem | 是否为系统逻辑 |
sourceFileName | 源文件名(可选) |
enableLog | 是否记录执行日志 |
rateLimit | 调用频率限制(可选) |
# DynamicObjectHook.csv
| 字段名 | 说明 |
|---|---|
objectType.shortName | 对象类型短名称(引用 DomainClass.shortName) |
name(*) | 对象客制化名称(用于查找) |
hookType | 类型(参见附录 O) |
coreLogic.name | 核心逻辑名称(引用 DynamicLogic.name) |
active | 是否启用 |
isSystem | 是否为系统对象客制化 |
description | 描述 |
# 表单与菜单
# DynamicFormType.csv
| 字段名 | 说明 |
|---|---|
name(*) | 表单类型名称(参见附录 D) |
表单类型是平台内置数据,一般不需要导入。
# DynamicForm.csv
| 字段名 | 说明 |
|---|---|
name(*) | 表单名称(用于查找),系统内唯一 |
label | 显示名称 |
description | 描述 |
objectType.shortName(*) | 关联对象类型(引用 DomainClass.shortName) |
type.name(*) | 表单类型(引用 DynamicFormType.name,参见附录 D) |
formHook.name | 表单 Hook(引用 DynamicLogic.name) |
formHookTriggerFields | 触发表单 Hook 的字段 |
dataHook.name | 数据 Hook(引用 DynamicLogic.name) |
extInfo | 扩展信息(JSON) |
accessRequirement.name | 访问权限(引用 RoleRequirement.name) |
注意:没有设置 accessRequirement 的表单无法打开。「开发配置 > 表单 > 表单」的界面上没有这一项,只能通过 CSV 设置。表单 Hook 与数据 Hook 见 表单客制化。
# DynamicFormGroup.csv
| 字段名 | 说明 |
|---|---|
displaySequence | 显示顺序 |
name(*) | 字段组名称(用于查找) |
label | 显示名称 |
icon | 图标 |
form.name(*) | 表单名称(用于查找,引用 DynamicForm.name) |
helpText | 帮助文本 |
# DynamicFormField.csv
| 字段名 | 说明 |
|---|---|
form.name(*) | 表单名称(用于查找,引用 DynamicForm.name) |
fieldName(*) | 字段名称(用于查找) |
displaySequence | 显示顺序 |
label | 显示名称 |
helpText | 帮助文本 |
fieldType | 字段类型(参见附录 E) |
nullable | 是否可为空 |
group.name | 所属字段组(引用 DynamicFormGroup.name) |
extInfo | 扩展信息(JSON) |
displayType | 显示控件(参见附录 F) |
editable | 是否可编辑 |
decides | 该字段变化时需要联动刷新的字段,多个字段名用逗号分隔(CSV 中整格要加双引号,例如 "customer,amount");@ALL@ 在 1.0.0-beta18 中不生效 |
注意:表单只要定义了任意一个表单字段,就只显示已定义的字段。
# DynamicMenu.csv
| 字段名 | 说明 |
|---|---|
parent.name | 上级菜单名称(引用 DynamicMenu.name) |
label | 显示名称 |
icon | 图标 |
link | 链接地址(内部链接、外部链接类型使用) |
type | 类型(参见附录 C) |
displaySequence | 显示顺序 |
name(*) | 菜单名称(用于查找) |
form.name | 关联表单(引用 DynamicForm.name,FORM 类型使用) |
accessRequirement.name | 访问权限(引用 RoleRequirement.name) |
注意:MENU_GROUP 类型的菜单没有设置访问权限时对所有人隐藏;FORM 类型的菜单没有设置访问权限时,按关联表单的访问权限显示。
# 对象动作
# DynamicActionGroup.csv
| 字段名 | 说明 |
|---|---|
name(*) | 动作组名称(用于查找) |
label | 显示名称 |
icon | 图标 |
helpText | 帮助文本 |
displaySequence | 显示顺序 |
# DynamicAction.csv
| 字段名 | 说明 |
|---|---|
name(*) | 动作名称(用于查找) |
mode | 模式(参见附录 A) |
form.name | 参数表单(引用 DynamicForm.name,类型一般为 ACTION) |
confirmMessage | 执行前的确认消息 |
coreLogic.name | 核心逻辑名称(引用 DynamicLogic.name) |
enableLogic.name | 启用逻辑名称(引用 DynamicLogic.name) |
label | 显示名称 |
icon | 图标 |
helpText | 帮助文本 |
enableAsync | 是否异步执行 |
isSystem | 是否为系统动作 |
extInfo | 扩展信息(JSON) |
active | 是否启用 |
accessRequirement.name | 执行权限(引用 RoleRequirement.name) |
# DynamicActionDynamicForm.csv
| 字段名 | 说明 |
|---|---|
action.name(*) | 动作名称(用于查找,引用 DynamicAction.name) |
form.name(*) | 表单名称(用于查找,引用 DynamicForm.name) |
displaySequence | 显示顺序 |
group.name | 动作组(引用 DynamicActionGroup.name) |
下载 DynamicActionDynamicForm.csv 模板
动作要绑定到表单上才会在界面中显示。1.0 以前按领域模型绑定的 DynamicActionDomainClass 1.0 起已移除(改为按表单绑定的 DynamicActionDynamicForm)。
# 仪表盘与过滤器
# DynamicDashboardWidget.csv
| 字段名 | 说明 |
|---|---|
name(*) | 小组件名称(用于查找) |
label | 显示名称 |
displaySequence | 显示顺序 |
description | 描述 |
form.name | 所属仪表盘(引用 DynamicForm.name,类型为 DASHBOARD) |
enableLogic.name | 启用逻辑名称(引用 DynamicLogic.name) |
coreLogic.name | 核心逻辑名称(引用 DynamicLogic.name) |
type | 类型(参见附录 G) |
options | 选项(JSON) |
refreshInterval | 自动刷新间隔,1.0.0-beta18 的前端没有读取该字段,填写后不生效 |
下载 DynamicDashboardWidget.csv 模板
# DynamicFilter.csv
| 字段名 | 说明 |
|---|---|
name(*) | 过滤器名称(用于查找) |
label | 显示名称 |
displaySequence | 显示顺序 |
conditions | 过滤条件(JSON) |
objectType.shortName | 对象类型短名称(引用 DomainClass.shortName) |
isDefault | 是否默认 |
description | 描述 |
icon | 图标 |
isSystem | 是否为系统过滤器 |
# 系统配置与显示主题
# DynamicConfig.csv / DynamicConfig_withFile.csv
| 字段名 | 说明 |
|---|---|
name | 名称 |
key(*) | 键(用于查找) |
value / value(F) | 值 / 值(从文件读取) |
parent.key | 父级键(引用 DynamicConfig.key) |
description | 描述 |
modifyRemark | 修改备注 |
displaySequence | 显示顺序 |
allowPublicAccess | 是否允许未登录访问 |
icon | 图标 |
isSystem | 是否为系统配置 |
下载 DynamicConfig.csv 模板 下载 DynamicConfig_withFile.csv 模板
注意:两个文件导入到同一个模型。DynamicConfig_withFile.csv 中的 value(F) 列是文件路径,系统从该文件读取配置值,路径从种子数据根目录算起。
# DynamicTheme.csv
| 字段名 | 说明 |
|---|---|
name(*) | 主题名称(用于查找) |
description | 描述 |
css(F) | 自定义 CSS 文件 |
active | 是否激活 |
title | 标题 |
squareLogo | 方形徽标(附件文件路径) |
favicon | 网站图标(附件文件路径) |
backgroundImage | 背景图片(附件文件路径) |
logo | 徽标(附件文件路径) |
themeSettings(F) | 主题设置 JSON 文件 |
ssoEnableLogic | 单点登录启用逻辑 |
landingPage.name | 登录后的首页(引用 DynamicForm.name) |
注意:css(F)、themeSettings(F) 及各图片列中的文件路径从种子数据根目录算起。
# 定时任务与系统集成
# DynamicTask.csv
| 字段名 | 说明 |
|---|---|
name(*) | 任务名称(用于查找) |
helpText | 说明 |
coreLogic.name | 核心逻辑名称(引用 DynamicLogic.name) |
active | 是否启用 |
startDate | 生效时间 |
expiryDate | 失效时间 |
cronExpression | Cron 表达式(CRON_TASK 使用) |
dynamicTaskType | 任务类型(参见附录 Q) |
parameters | 任务参数(JSON) |
scheduleDate | 执行时间(SCHEDULE_TASK 使用) |
isSystem | 是否为系统任务 |
详见 定时任务。
# DynamicService.csv
| 字段名 | 说明 |
|---|---|
name(*) | 服务名称(用于查找),也是调用地址的一部分 |
active | 是否启用 |
logic.name | 核心逻辑名称(引用 DynamicLogic.name) |
enableAnonymous | 是否允许未登录调用 |
enableLog | 是否记录调用日志 |
bodyType | 请求体类型(参见附录 R) |
注意:enableAnonymous 为 Y 时无需登录即可调用该服务,1.0.0-beta18 修复了与该开关相关的安全问题,详见 动态服务。
# DynamicWebhook.csv
| 字段名 | 说明 |
|---|---|
name(*) | Webhook 名称(用于查找) |
description | 描述 |
httpMethod | HTTP 方法(参见附录 M) |
url | 调用地址,新建时由系统生成,一般留空 |
active | 是否启用 |
coreLogic.name | 核心逻辑名称(引用 DynamicLogic.name) |
effectiveDate | 生效时间 |
expiryDate | 失效时间 |
1.0 以前的 DynamicIntegration、DynamicIntegrationDomainClass 1.0 起已移除(接收外部调用改用 Webhook 或动态服务)。
# 国际化
# I18nType.csv
| 字段名 | 说明 |
|---|---|
name(*) | 翻译命名空间名称(用于查找) |
description | 描述 |
# I18n.csv
| 字段名 | 说明 |
|---|---|
type.name(*) | 翻译命名空间(用于查找,引用 I18nType.name) |
lang(*) | 语言(用于查找),CHINESE 或 ENGLISH |
entries(F) | 翻译内容 JSON 文件路径 |
OVERWRITE_FLAG | 是否强制覆盖界面上的修改 |
# 平台与插件
# AppVersion.csv
| 字段名 | 说明 |
|---|---|
versionNumber(*) | 版本号(用于查找) |
codeName | 版本代号 |
releaseNote(F) | 发布说明文件 |
goLiveDate | 上线时间 |
# DynamicPlugin.csv
| 字段名 | 说明 |
|---|---|
name(*) | 插件名称(用于查找) |
pluginVersion(*) | 插件版本(用于查找) |
description | 描述 |
storageFile | 插件包文件(附件) |
enabled | 是否启用 |
dependsOnPlugins | 依赖的插件(JSON) |
isSystem | 是否为系统插件 |
OVERWRITE_FLAG | 是否强制覆盖 |
注意:插件一般通过插件包导入(见 数据导入 中的「插件数据导入」),不需要手工编写本文件。
# Tenant.csv
| 字段名 | 说明 |
|---|---|
name(*) | 租户标识(用于查找) |
注意:Tenant.csv 放在种子数据根目录下(不是 csv 子目录),只在没有通过系统属性 gorm.tenantId(docker 镜像中为环境变量 TENANT_ID)指定租户时使用。
# 已移除的模板
以下模型 1.0 起已移除,本页不再提供说明,站点上残留的同名旧模板也不要再使用:Organization、Role、GroupRole、RequestMap、DynamicPrompt、DynamicFormWizardStep、DynamicActionDomainClass、DynamicFieldDefinition、DynamicFieldInstance、DynamicFieldHook、DynamicIntegration、DynamicIntegrationDomainClass(替代方案:角色用 HierarchyRole,权限用 RoleRequirement,动作按表单绑定用 DynamicActionDynamicForm,字段级定制用表单 Hook,外部集成用 Webhook 或动态服务)。
# 附录:枚举值定义
# 附录A: DynamicAction.mode
OBJECT_SINGLE: 作用于单个对象OBJECT_MULTIPLE: 作用于多个对象CLASS_LEVEL: 不作用于特定对象,显示在对象列表页面
# 附录C: DynamicMenu.type
MENU_GROUP: 菜单组EXTERNAL_LINK: 外部链接INTERNAL_LINK: 内部链接FORM: 表单
# 附录D: DynamicForm.type
平台内置了以下表单类型(DynamicFormType):
LIST、CREATE、UPDATE、DELETE、FINDER、WIZARD、DASHBOARD、MASTER_DETAIL_LIST、TREE_LIST、INLINE_FULL_TEXT_SEARCH_LIST、FULL_TEXT_SEARCH_LIST、INLINE_DISPLAY、RELATED_DETAIL_LIST、INLINE_EDITABLE_DISPLAY、CARD_LIST、GANTT、GANTT_TOOLTIP、SUB_TABLE、DYNAMIC_FRAME、AMIS、DEFAULT、DOMAIN、ACTION、IFRAME
其中当前前端有独立页面渲染器、可以作为菜单入口打开的是:
| 类型 | 说明 |
|---|---|
LIST | 表格列表 |
CREATE | 新建 |
UPDATE | 编辑、查看 |
DOMAIN | 对象表单 |
DEFAULT | 默认表单 |
MASTER_DETAIL_LIST | 主从列表 |
TREE_LIST | 树形列表 |
FINDER | 查找器 |
DASHBOARD | 仪表盘 |
ACTION | 动作参数表单 |
AMIS | AMIS 表单 |
IFRAME | 内嵌页面 |
其余类型(如 GANTT、CARD_LIST、WIZARD)在当前前端没有对应的页面渲染器。
# 附录E: DynamicFormField.fieldType
STATIC_FIELD: 模型中的字段TRANSIENT_FIELD: 临时字段,不对应模型字段,一般用于动作参数表单
1.0 以前的 DYNAMIC_FIELD 1.0 起已移除。
# 附录F: displayType
DynamicFormField.displayType 是小写的控件名称,当前前端支持以下取值:
array、authentication、boolean、code、currency、date、dateRange、datetime、decimal、enum、file、fileList、functionEditor、genericObject、genericObjects、httpMethod、icon、id、image、int、integer、json、lineChart、link、long、markdown、object、objects、password、percentage、popOverSteps、progress、relativeSubTable、roles、stacktrace、string、subTable、tableChart、text、treeSelect、valueSelect、video、zonedDatetime
填写其他值时,界面上显示 Unsupported displayType: xxx。1.0 以前的大写 DisplayComponentType 枚举(如 TEXT_AREA、CURRENCY)1.0 起已移除。各控件的说明见 基础表单。
# 附录G: DynamicDashboardWidget.type
MARKDOWN:Markdown内容HTML:HTML内容PIE_CHART: 饼图LINE_CHART: 线图COLUMN_CHART: 柱状图GAUGE_CHART: 仪表图LIQUID_CHART: 水波图DATA_TABLE: 数据表格AREA_CHART: 面积图BAR_CHART: 条形图BULLET_CHART: 子弹图PROGRESS_CHART: 进度图RING_PROGRESS_CHART: 环形进度图TINY_AREA_CHART: 迷你面积图TINY_LINE_CHART: 迷你线图TINY_COLUMN_CHART: 迷你柱状图BI_DIRECTION_BAR: 双向条形图STATISTIC: 统计数据COUNTDOWN: 倒计时HISTOGRAM: 直方图
# 附录M: httpMethod
GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE
# 附录O: DynamicObjectHook.hookType
CREATE: 是否可创建UPDATE_DELETE: 是否可更新/删除 不生效BEFORE_CREATE: 创建前BEFORE_DELETE: 删除前BEFORE_UPDATE: 更新前AFTER_CREATE: 创建后AFTER_DELETE: 删除后AFTER_UPDATE: 更新后
注意:UPDATE_DELETE 仍可导入,但当前版本没有任何代码执行这类对象客制化,对象能否修改、删除只由领域模型的 updateRoleRequirement、deleteRoleRequirement 决定。
# 附录P: DomainClassField.dataType
STRING: 字符串BOOLEAN: 布尔值BIG_DECIMAL: 高精度小数INTEGER: 整数LONG: 长整数DOUBLE: 双精度浮点数LOCAL_DATE: 日期ZONED_DATETIME: 带时区的日期时间OFFSET_DATETIME: 带时区偏移的日期时间JSON_STRING: JSON 字符串DOMAIN_OBJECT: 关联单个对象DOMAIN_OBJECT_LIST: 关联多个对象(一对多)ENUM: 枚举ENUM_LIST: 枚举列表FILE: 单个附件FILE_LIST: 多个附件MAPPED_DOMAIN_OBJECT: 映射的关联对象MAPPED_DOMAIN_OBJECT_COLLECTION: 映射的关联对象集合GENERIC_OBJECT: 任意类型的单个对象GENERIC_OBJECTS: 任意类型的多个对象
# 附录Q: DynamicTask.dynamicTaskType
CRON_TASK: 按 Cron 表达式周期执行SCHEDULE_TASK: 在指定时间执行一次
# 附录R: DynamicService.bodyType
JSONXMLINPUT_STREAM