# Platform CSV Import Templates and Instructions
For the rules of preparing and importing CSV files (file names, lookup fields, association fields, (F) file columns, DELETE_FLAG, OVERWRITE_FLAG, etc.), see Data Import.
# Muyan Low-Code Platform Data Import Templates Applicable version: 1.0.0-beta18
TIP
- Lines starting with
;are treated as comments. A downloaded template contains only the header row and comments (the comments are written in Chinese). The "example" line in the comments looks like;; ็คบไพ: [email protected],...; to import it, delete the whole leading;; ็คบไพ:(if you only delete;;,็คบไพ:becomes part of the first column's value). - The header row of every template has been verified by an actual import on 1.0.0-beta18 (what was verified is that the header row is recognized; for known issues with data lines, see the notes in each section). Columns you do not need can be deleted, but a column that does not exist in the model must not appear, otherwise the whole file fails to import.
- The column name suffix
(*)marks a lookup field,.nameand the like mean lookup by a field of the associated object,[:]marks a collection field with multiple values separated by:, and(F)means the content is read from a file. - The
$ROOT_ORG$placeholder and theorganization.nameandenableRolescolumns from before 1.0 have been removed since 1.0 (the organization model was deleted; permissions now use role requirement columns such asaccessRequirement.name).
# Users and Permissions
# User.csv
| Field Name | Description |
|---|---|
username(*) | Username (used for lookup); an email address is recommended |
password | Initial password, encrypted and saved to the user table during import; however, the original CSV line (including the plaintext password) is saved in Exec History > Import Record and visible to DEVELOPER, so use only a temporary password and require the user to change it after the first login |
name | Name |
accountLocked | Whether the account is locked |
accountExpired | Whether the account has expired |
passwordExpired | Whether the password has expired |
avatar | Avatar image file path (attachment) |
extInfo | Extended information (JSON) |
roles.name[:] | Roles owned directly by the user (references HierarchyRole.name) |
Download the User.csv template
# Group.csv
| Field Name | Description |
|---|---|
name(*) | User group name (used for lookup) |
roles.name[:] | Roles owned by the user group (references HierarchyRole.name) |
Download the Group.csv template
# UserGroup.csv
| Field Name | Description |
|---|---|
user.username(*) | Username (used for lookup, references User.username) |
group.name(*) | Group name (used for lookup, references Group.name) |
Download the UserGroup.csv template
# HierarchyRole.csv
| Field Name | Description |
|---|---|
name(*) | Role name (used for lookup), usually starting with ROLE_ |
implies.name[:] | Other roles included in this role (references HierarchyRole.name); can be inherited level by level |
Download the HierarchyRole.csv template
The platform has built-in ROLE_USER, ROLE_DEVELOPER (includes ROLE_USER) and ROLE_ADMIN (includes ROLE_DEVELOPER).
# RoleRequirement.csv
| Field Name | Description |
|---|---|
name(*) | Role requirement name (used for lookup) |
hasPermissionRoles.name[:] | Roles that satisfy the requirement (references HierarchyRole.name); having any one of them is enough |
customLogic.name | Custom decision logic (references DynamicLogic.name); when set, the logic makes the decision |
Download the RoleRequirement.csv template
The platform has three built-in role requirements, USER, DEVELOPER and ADMIN, corresponding to ROLE_USER, ROLE_DEVELOPER and ROLE_ADMIN. The permission columns of domain models, forms, menus and actions all reference role requirement names.
# Domain Models
# DomainClass.csv
| Field Name | Description |
|---|---|
shortName(*) | Domain model short name (used for lookup); newly created models are all dynamic models |
extInfo | Extended information (JSON), see Dynamic Domain Model |
createRoleRequirement.name | Create permission (references RoleRequirement.name) |
readRoleRequirement.name | View permission (references RoleRequirement.name) |
updateRoleRequirement.name | Update permission (references RoleRequirement.name) |
deleteRoleRequirement.name | Delete permission (references RoleRequirement.name) |
Download the DomainClass.csv template
Note: leaving a permission column empty means nobody has that permission (including administrators). The Development > Classes page can neither create models nor edit these four permissions; they can only be set with CSV.
# DomainClassField.csv
| Field Name | Description |
|---|---|
domainClass.shortName(*) | Model name (used for lookup, references DomainClass.shortName) |
name(*) | Field name (used for lookup) |
dataType | Data type (see Appendix P); cannot be changed after creation |
referenceDomain.shortName | Referenced model (required for types DOMAIN_OBJECT and DOMAIN_OBJECT_LIST) |
nullable | Whether it can be null |
editable | Whether it is editable |
defaultValue | Default value |
options | Options, a JSON array, for example "[""VIP"",""ๆฎ้ๅฎขๆท""]" |
extInfo | Extended information (JSON) |
Download the DomainClassField.csv template
Notes:
- The database column name is generated automatically from the field name and does not need to be filled in.
- The model also has a
commentfield. In 1.0.0-beta18, filling it in makes the field fail to be created, so do not use it for now.
# DomainClassIndex.csv
| Field Name | Description |
|---|---|
domainClass.shortName(*) | Model name (used for lookup, references DomainClass.shortName) |
name(*) | Index name (used for lookup) |
fields | Field names included in the index, a JSON array, for example "[""code""]" |
unique | Whether it is a unique index |
Download the DomainClassIndex.csv template
Used to create database indexes for dynamic models.
Known issue in 1.0.0-beta18
DomainClassIndex is itself a dynamic model (its type is DYNAMIC in Development > Classes), and in the current version every line fails when importing data into a dynamic model (ScopedValue not bound, see the known issues in Data Import), so the data lines of this template currently cannot be imported successfully.
# Dynamic Logic
# DynamicLogicEngine.csv
| Field Name | Description |
|---|---|
name(*) | Dynamic logic engine name (used for lookup) |
description | Description |
handlerClassName | Handler class name |
Download the DynamicLogicEngine.csv template
Note: this is built-in platform data. Do not modify it unless you know exactly what you are doing.
# DynamicLogicType.csv
| Field Name | Description |
|---|---|
name(*) | Dynamic logic type name (used for lookup) |
label | Label |
description | Description |
codeTemplate | Code template |
Download the DynamicLogicType.csv template
Note: this is built-in platform data. Do not modify it unless you know exactly what you are doing.
# DynamicLogic.csv
| Field Name | Description |
|---|---|
dynamicLogicEngine.name | Dynamic logic engine name (references DynamicLogicEngine.name) |
name(*) | Dynamic logic name (used for lookup) |
logicType.name | Logic type name (references DynamicLogicType.name) |
code(F) | Source file path, relative to the seed data root directory, usually starting with groovy/ |
description | Description |
isSystem | Whether it is system logic |
sourceFileName | Source file name (optional) |
enableLog | Whether to record execution logs |
rateLimit | Call rate limit (optional) |
Download the DynamicLogic.csv template
# DynamicObjectHook.csv
| Field Name | Description |
|---|---|
objectType.shortName | Object type short name (references DomainClass.shortName) |
name(*) | Object hook name (used for lookup) |
hookType | Type (see Appendix O) |
coreLogic.name | Core logic name (references DynamicLogic.name) |
active | Whether it is enabled |
isSystem | Whether it is a system object hook |
description | Description |
Download the DynamicObjectHook.csv template
# Forms and Menus
# DynamicFormType.csv
| Field Name | Description |
|---|---|
name(*) | Form type name (see Appendix D) |
Download the DynamicFormType.csv template
Form types are built-in platform data and usually do not need to be imported.
# DynamicForm.csv
| Field Name | Description |
|---|---|
name(*) | Form name (used for lookup), unique in the system |
label | Label |
description | Description |
objectType.shortName(*) | Object type (references DomainClass.shortName) |
type.name(*) | Form type (references DynamicFormType.name, see Appendix D) |
formHook.name | Form Hook (references DynamicLogic.name) |
formHookTriggerFields | Fields that trigger the Form Hook |
dataHook.name | Data Hook (references DynamicLogic.name) |
extInfo | Extended information (JSON) |
accessRequirement.name | Access permission (references RoleRequirement.name) |
Download the DynamicForm.csv template
Note: a form without accessRequirement cannot be opened. The System Config > Forms > Forms screen does not have this item; it can only be set with CSV. For Form Hook and Data Hook, see Form Customization (Form Hook).
# DynamicFormGroup.csv
| Field Name | Description |
|---|---|
displaySequence | Display sequence |
name(*) | Field group name (used for lookup) |
label | Label |
icon | Icon |
form.name(*) | Form name (used for lookup, references DynamicForm.name) |
helpText | Help text |
Download the DynamicFormGroup.csv template
# DynamicFormField.csv
| Field Name | Description |
|---|---|
form.name(*) | Form name (used for lookup, references DynamicForm.name) |
fieldName(*) | Field name (used for lookup) |
displaySequence | Display sequence |
label | Label |
helpText | Help text |
fieldType | Field type (see Appendix E) |
nullable | Whether it can be null |
group.name | Field group (references DynamicFormGroup.name) |
extInfo | Extended information (JSON) |
displayType | Display control (see Appendix F) |
editable | Whether it is editable |
decides | Fields to refresh in linkage when this field changes; separate multiple field names with commas (in CSV the whole cell must be wrapped in double quotes, for example "customer,amount"); @ALL@ does not take effect in 1.0.0-beta18 |
Download the DynamicFormField.csv template
Note: as soon as a form defines any form field, it shows only the defined fields.
# DynamicMenu.csv
| Field Name | Description |
|---|---|
parent.name | Parent menu name (references DynamicMenu.name) |
label | Label |
icon | Icon |
link | Link URL (used by internal link and external link types) |
type | Type (see Appendix C) |
displaySequence | Display sequence |
name(*) | Menu name (used for lookup) |
form.name | Associated form (references DynamicForm.name, used by the FORM type) |
accessRequirement.name | Access permission (references RoleRequirement.name) |
Download the DynamicMenu.csv template
Note: a menu of type MENU_GROUP without an access permission is hidden from everyone; a menu of type FORM without an access permission is shown according to the access permission of its form.
# Object Actions
# DynamicActionGroup.csv
| Field Name | Description |
|---|---|
name(*) | Action group name (used for lookup) |
label | Label |
icon | Icon |
helpText | Help text |
displaySequence | Display sequence |
Download the DynamicActionGroup.csv template
# DynamicAction.csv
| Field Name | Description |
|---|---|
name(*) | Action name (used for lookup) |
mode | Mode (see Appendix A) |
form.name | Parameter form (references DynamicForm.name, usually of type ACTION) |
confirmMessage | Confirmation message before execution |
coreLogic.name | Core logic name (references DynamicLogic.name) |
enableLogic.name | Enable logic name (references DynamicLogic.name) |
label | Label |
icon | Icon |
helpText | Help text |
enableAsync | Whether to execute asynchronously |
isSystem | Whether it is a system action |
extInfo | Extended information (JSON) |
active | Whether it is enabled |
accessRequirement.name | Execute permission (references RoleRequirement.name) |
Download the DynamicAction.csv template
# DynamicActionDynamicForm.csv
| Field Name | Description |
|---|---|
action.name(*) | Action name (used for lookup, references DynamicAction.name) |
form.name(*) | Form name (used for lookup, references DynamicForm.name) |
displaySequence | Display sequence |
group.name | Action group (references DynamicActionGroup.name) |
Download the DynamicActionDynamicForm.csv template
An action is shown in the UI only after it is bound to a form. DynamicActionDomainClass, which bound actions to domain models before 1.0, has been removed since 1.0 (replaced by DynamicActionDynamicForm, which binds actions to forms).
# Dashboards and Filters
# DynamicDashboardWidget.csv
| Field Name | Description |
|---|---|
name(*) | Widget name (used for lookup) |
label | Label |
displaySequence | Display sequence |
description | Description |
form.name | Dashboard it belongs to (references DynamicForm.name, of type DASHBOARD) |
enableLogic.name | Enable logic name (references DynamicLogic.name) |
coreLogic.name | Core logic name (references DynamicLogic.name) |
type | Type (see Appendix G) |
options | Options (JSON) |
refreshInterval | Auto refresh interval; the 1.0.0-beta18 frontend does not read this field, so it has no effect |
Download the DynamicDashboardWidget.csv template
# DynamicFilter.csv
| Field Name | Description |
|---|---|
name(*) | Filter name (used for lookup) |
label | Label |
displaySequence | Display sequence |
conditions | Filter conditions (JSON) |
objectType.shortName | Object type short name (references DomainClass.shortName) |
isDefault | Whether it is the default |
description | Description |
icon | Icon |
isSystem | Whether it is a system filter |
Download the DynamicFilter.csv template
# System Configuration and Display Themes
# DynamicConfig.csv / DynamicConfig_withFile.csv
| Field Name | Description |
|---|---|
name | Name |
key(*) | Key (used for lookup) |
value / value(F) | Value / value (read from a file) |
parent.key | Parent key (references DynamicConfig.key) |
description | Description |
modifyRemark | Modification remark |
displaySequence | Display sequence |
allowPublicAccess | Whether access without login is allowed |
icon | Icon |
isSystem | Whether it is a system configuration |
Download the DynamicConfig.csv template Download the DynamicConfig_withFile.csv template
Note: both files are imported into the same model. The value(F) column in DynamicConfig_withFile.csv is a file path; the system reads the configuration value from that file, and the path is relative to the seed data root directory.
# DynamicTheme.csv
| Field Name | Description |
|---|---|
name(*) | Theme name (used for lookup) |
description | Description |
css(F) | Custom CSS file |
active | Whether it is active |
title | Title |
squareLogo | Square logo (attachment file path) |
favicon | Favicon (attachment file path) |
backgroundImage | Background image (attachment file path) |
logo | Logo (attachment file path) |
themeSettings(F) | Theme settings JSON file |
ssoEnableLogic | Single sign-on enable logic |
landingPage.name | Home page after login (references DynamicForm.name) |
Download the DynamicTheme.csv template
Note: file paths in css(F), themeSettings(F) and the image columns are relative to the seed data root directory.
# Scheduled Tasks and System Integration
# DynamicTask.csv
| Field Name | Description |
|---|---|
name(*) | Task name (used for lookup) |
helpText | Description |
coreLogic.name | Core logic name (references DynamicLogic.name) |
active | Whether it is enabled |
startDate | Effective time |
expiryDate | Expiry time |
cronExpression | Cron expression (used by CRON_TASK) |
dynamicTaskType | Task type (see Appendix Q) |
parameters | Task parameters (JSON) |
scheduleDate | Execution time (used by SCHEDULE_TASK) |
isSystem | Whether it is a system task |
Download the DynamicTask.csv template
See Scheduled Tasks for details.
# DynamicService.csv
| Field Name | Description |
|---|---|
name(*) | Service name (used for lookup), also part of the call URL |
active | Whether it is enabled |
logic.name | Core logic name (references DynamicLogic.name) |
enableAnonymous | Whether calls without login are allowed |
enableLog | Whether to record call logs |
bodyType | Request body type (see Appendix R) |
Download the DynamicService.csv template
Note: when enableAnonymous is Y, the service can be called without login. 1.0.0-beta18 fixed a security issue related to this switch; see Dynamic Service for details.
# DynamicWebhook.csv
| Field Name | Description |
|---|---|
name(*) | Webhook name (used for lookup) |
description | Description |
httpMethod | HTTP method (see Appendix M) |
url | Call URL, generated by the system on creation; usually left empty |
active | Whether it is enabled |
coreLogic.name | Core logic name (references DynamicLogic.name) |
effectiveDate | Effective time |
expiryDate | Expiry time |
Download the DynamicWebhook.csv template
DynamicIntegration and DynamicIntegrationDomainClass from before 1.0 have been removed since 1.0 (use Webhook or dynamic services to receive external calls).
# Internationalization
# I18nType.csv
| Field Name | Description |
|---|---|
name(*) | Translation namespace name (used for lookup) |
description | Description |
Download the I18nType.csv template
# I18n.csv
| Field Name | Description |
|---|---|
type.name(*) | Translation namespace (used for lookup, references I18nType.name) |
lang(*) | Language (used for lookup), CHINESE or ENGLISH |
entries(F) | Path of the translation content JSON file |
OVERWRITE_FLAG | Whether to force overwriting changes made in the UI |
Download the I18n.csv template
# Platform and Plugins
# AppVersion.csv
| Field Name | Description |
|---|---|
versionNumber(*) | Version number (used for lookup) |
codeName | Version code name |
releaseNote(F) | Release note file |
goLiveDate | Go-live time |
Download the AppVersion.csv template
# DynamicPlugin.csv
| Field Name | Description |
|---|---|
name(*) | Plugin name (used for lookup) |
pluginVersion(*) | Plugin version (used for lookup) |
description | Description |
storageFile | Plugin package file (attachment) |
enabled | Whether it is enabled |
dependsOnPlugins | Plugins it depends on (JSON) |
isSystem | Whether it is a system plugin |
OVERWRITE_FLAG | Whether to force overwrite |
Download the DynamicPlugin.csv template
Note: plugins are usually imported as plugin packages (see "Plugin Data Import" in Data Import), so you do not need to write this file by hand.
# Tenant.csv
| Field Name | Description |
|---|---|
name(*) | Tenant identifier (used for lookup) |
Download the Tenant.csv template
Note: Tenant.csv is placed in the seed data root directory (not in the csv subdirectory), and is used only when no tenant is specified with the system property gorm.tenantId (the environment variable TENANT_ID in the docker image).
# Removed Templates
The following models have been removed since 1.0. This page no longer documents them, and do not use the leftover old templates with the same names on the site: Organization, Role, GroupRole, RequestMap, DynamicPrompt, DynamicFormWizardStep, DynamicActionDomainClass, DynamicFieldDefinition, DynamicFieldInstance, DynamicFieldHook, DynamicIntegration, DynamicIntegrationDomainClass (alternatives: use HierarchyRole for roles, RoleRequirement for permissions, DynamicActionDynamicForm to bind actions to forms, Form Hook for field-level customization, and Webhook or dynamic services for external integration).
# Appendix: Enum Value Definitions
# Appendix A: DynamicAction.mode
OBJECT_SINGLE: Acts on a single objectOBJECT_MULTIPLE: Acts on multiple objectsCLASS_LEVEL: Does not act on specific objects; shown on the object list page
# Appendix C: DynamicMenu.type
MENU_GROUP: Menu groupEXTERNAL_LINK: External linkINTERNAL_LINK: Internal linkFORM: Form
# Appendix D: DynamicForm.type
The platform has the following built-in form types (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
Of these, the types that have a standalone page renderer in the current frontend and can be opened as a menu entry are:
| Type | Description |
|---|---|
LIST | Table list |
CREATE | Create |
UPDATE | Edit, view |
DOMAIN | Object form |
DEFAULT | Default form |
MASTER_DETAIL_LIST | Master-detail list |
TREE_LIST | Tree list |
FINDER | Finder |
DASHBOARD | Dashboard |
ACTION | Action parameter form |
AMIS | AMIS form |
IFRAME | Embedded page |
The other types (such as GANTT, CARD_LIST, WIZARD) have no corresponding page renderer in the current frontend.
# Appendix E: DynamicFormField.fieldType
STATIC_FIELD: A field of the modelTRANSIENT_FIELD: A temporary field that does not correspond to a model field, usually used in action parameter forms
DYNAMIC_FIELD from before 1.0 has been removed since 1.0.
# Appendix F: displayType
DynamicFormField.displayType is the control name in lowercase. The current frontend supports the following values:
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
For any other value, the UI shows Unsupported displayType: xxx. The uppercase DisplayComponentType enum from before 1.0 (such as TEXT_AREA, CURRENCY) has been removed since 1.0. For a description of each control, see Basic Form Customization.
# Appendix G: DynamicDashboardWidget.type
MARKDOWN:MarkdowncontentHTML:HTMLcontentPIE_CHART: Pie chartLINE_CHART: Line chartCOLUMN_CHART: Column chartGAUGE_CHART: Gauge chartLIQUID_CHART: Liquid chartDATA_TABLE: Data tableAREA_CHART: Area chartBAR_CHART: Bar chartBULLET_CHART: Bullet chartPROGRESS_CHART: Progress chartRING_PROGRESS_CHART: Ring progress chartTINY_AREA_CHART: Tiny area chartTINY_LINE_CHART: Tiny line chartTINY_COLUMN_CHART: Tiny column chartBI_DIRECTION_BAR: Bi-directional bar chartSTATISTIC: StatisticCOUNTDOWN: CountdownHISTOGRAM: Histogram
# Appendix M: httpMethod
GET,POST,PUT,DELETE,PATCH,HEAD,OPTIONS,TRACE
# Appendix O: DynamicObjectHook.hookType
CREATE: Whether it can be createdUPDATE_DELETE: Whether it can be updated/deleted Not effectiveBEFORE_CREATE: Before createBEFORE_DELETE: Before deleteBEFORE_UPDATE: Before updateAFTER_CREATE: After createAFTER_DELETE: After deleteAFTER_UPDATE: After update
Note: UPDATE_DELETE can still be imported, but in the current version no code executes this kind of object hook; whether an object can be modified or deleted is decided only by the domain model's updateRoleRequirement and deleteRoleRequirement.
# Appendix P: DomainClassField.dataType
STRING: StringBOOLEAN: BooleanBIG_DECIMAL: High-precision decimalINTEGER: IntegerLONG: Long integerDOUBLE: Double-precision floating pointLOCAL_DATE: DateZONED_DATETIME: Date and time with time zoneOFFSET_DATETIME: Date and time with time zone offsetJSON_STRING: JSON stringDOMAIN_OBJECT: Single associated objectDOMAIN_OBJECT_LIST: Multiple associated objects (one-to-many)ENUM: EnumENUM_LIST: Enum listFILE: Single attachmentFILE_LIST: Multiple attachmentsMAPPED_DOMAIN_OBJECT: Mapped associated objectMAPPED_DOMAIN_OBJECT_COLLECTION: Mapped associated object collectionGENERIC_OBJECT: Single object of any typeGENERIC_OBJECTS: Multiple objects of any type
# Appendix Q: DynamicTask.dynamicTaskType
CRON_TASK: Runs periodically according to a Cron expressionSCHEDULE_TASK: Runs once at the specified time
# Appendix R: DynamicService.bodyType
JSONXMLINPUT_STREAM