目录 |
---|
常用导出案例
一、导入
1、标准导入
背景:直接配上标准的导入按钮即可使用,将excel文件中的数据导入系统或将系统内数据导出成excel文件
...
导入模板默认时带描述行(橙色那一行),作为对该列数据填写规范的解释。如果不想要,可以在服务器参数里关掉。关掉的效果见下图。
(6)导入映射
导入文件的列名和导入模板的列名或者info元数据设置的字段名不一致,则导入时无法识别。
正若服务器设置中开启了“是否开启导入映射”为是,那么即使导入文件与模板中的字段名称没有完全匹配上,也会设置的算法自动去匹配符合的字段,例如上图导入文件中的“必填项作业类别”会与“作业类别”匹配上
2、个性化导入
背景:标准的导入导出不符合用户需求,需要配置个性化的导入导出模板
(1)第一步:配置按钮
第一步:在导入按钮元数据配置的data中添加is在导入按钮元数据配置的data中添加is_from_config:true,以使用个性化模板,若需要使用其他参数,参考上述标准按钮参数配置。
代码块 |
---|
{ |
...
"key": "common_import", |
...
"label": "标准导入按钮", |
...
"action": "COMMON_IMPORT", |
...
"data": { |
...
"is_from_config": |
...
true, |
...
"category": "可以不填,不填时默认取当前模型名。填的话想写啥就写啥,但是要记下来,下面要用。" |
...
} |
...
(2)第二步:配置公司级模板
在扩展管理-公司级模板查询common_imp_setting.json
...
2)若查询不到,则切换过滤条件为是,再次查询,复制模板key后点击新增,将复制的key粘贴到新增的公司级模板key中,则会新增一个公司级非全局模板。公司级模板中一般会自动复制原全局模板已有参数内容,则只需要配置本次自定义模板参数,若新增公司级模板无参数内容,则需先将全局模板所有参数复制后,粘贴至公司级模板中,再配置本次自定义导入模板的参数。
(3)第三步:配置模板参数
第三步:在公司级模板中配置本次自定义模板参数,如,配置参数解析:(在公司级模板中配置本次自定义模板参数,如,配置参数解析:(//双斜杠之后的是注释)
代码块 |
---|
{ |
...
... |
...
"AttendLocation": { // 冒号前面的东西,叫“映射名”或者“key”。按钮里的category没写的话,就用模型名,否则category写了啥就用啥。 |
...
"name": "考勤点", // 文件名 |
...
"imp": "AttendLocation_import.json", // 导入使用的个性化模板的公司级模板名(等会你要新建另一个公司级模板,名字就叫这个) |
...
"exp": "AttendLocation_import.json", // 导出使用的个性化模板的公司级模板名(等会你要新建另一个公司级模板,名字就叫这个),导入导出可以用同一个。 |
...
...
"role": "cm-org-emp" |
...
// 下载模板所需的权限 |
...
}, |
...
... |
...
}, |
(4)第四步:新建个性化导入模板
第四步:根据上一步中配置的根据上一步中配置的"imp"的公司级模板名,新建一个公司级模板。本例中是AttendLocation_import.json。
模板中配置的内容和释义:
个性化模板配置
代码块 |
---|
{ "alias": "考勤点", #【选填】备注 "category": "AttendLocation", #【必填】注意,这个要写要导入的模型名,即按钮中配置的category是什么。 "import_class": "core.base.imp_exp.services_dynamic_model.CommonDynamicImport", #【必填】标准导入配置,不需要改直接复制 "export_class": "core.base.imp_exp.services_dynamic_model.CommonDynamicExport", #【必填】标准导出配置。注意,和导入的不一样。 "filters": [], "orders": [], "fields": [{ # 【必填】模板中展示的列 "key": "address", #【必填】 "name": "名称", #【必填】 "width": 20, #【选填】旧版列宽,要使用的话需要特别配置,否则控制不了。 "excel_width": 10, #【选填】新版列宽,配置了就可以直接控制列宽。 "comment": "请输入考勤点名称", #【选填】描述行 "require": true #【选填】是否必填 }, { "key": "number", "name": "编号", "width": 20, "comment": "请输入考勤点编号", "require": true }, { "key": "province", "name": "省份", "width": 20, "comment": "\n关联型,请选择考勤点所在省份", "drop_down_filter": { "enabled": true }, "require": true }, { "key": "city", "name": "市(区)", "width": 20, "comment": "\n关联型,请选择考勤点所在市(区)", "require": true }, { "key": "address_note", "name": "详细地址", "width": 20, "comment": "请输入考勤点详细地址", "require": true }, { "key": "depart_id", "name": "所属组织", "width": 20, "comment": "文本型,请输入考勤点所属组织", "require": true }, { "key": "area_type", "name": "区域类型", "width": 20, "comment": "参照型,选择考勤点区域类型" }, { "key": "radius", "name": "有效打卡距离(米)", "width": 20, "comment": "文本型,请输入考勤点有效打卡距离(米)", "require": true }, { "key": "location_usable", "name": "可用范围", "width": 20, "comment": "参照型,选择考勤点可用范围(适用于哪个组织)" }, { "key": "enabled", "name": "是否启用", "width": 20, "comment": "请输入该考勤点是否可用", "require": true }], "charge_role": [{ #【选填】用于校验权限。 "field": "dept_id", # 需要校验部门权限的字段 "role": "cm-org-emp", # 权限范围 "type": "dept" # 类型(部门校验) }, { "field": "employee", # 需要校验人员权限的字段 "role": "cm-org-emp", # 权限范围 "type": "emp" # 类型(人员校验) }], "check_items": { #【选填】 "imp": [], "exp": [] }, "data_plugins":[{ #【选填】 "key": "before_imp_data_xxx", // 【必填】注: 作为before_imp_data的插件须以before_imp_data开头,after_imp_data的插件则以after_imp_data开头。 "name": "", // 【必填】云函数名 "plugin_type": "standard" // 【选填】不填时使用云函数。填写为standard时为使用标准代码,上面的name也应为对应class路径。 }] } |
...
(b) parser的一般使用方式:
parser配合column_config使用
代码块 |
---|
{ |
...
。。。 "fields": [{ |
...
"comment": "员工姓名", |
...
"width": |
...
20, |
...
"require": true, |
...
"name": "员工姓名", |
...
"key": "employee_id", |
...
"parser":"emp_primary_key", |
...
"column_config":[ |
...
{ |
...
"name": "姓名", |
...
"key": "name" |
...
}, |
...
{ |
...
"name": "编号", |
...
"key": "number" |
...
}] |
...
}, |
...
。。。 } |
(c)注意:
(1)column_config会产生多的列。比如,如果不配置column_config,那么模板中只会有一列“员工姓名”;配置了column_config后会根据column_config里的配置产生多的列,如“员工姓名_姓名”,“员工姓名_编号”。但是,这些产生的列并不会导入进模型里,只是作为字段的校验补充数据(这个例子中“姓名”和“编号”是作为“员工姓名”这一字段的补充数据),辅助校验而已,最终导入进去的是校验后的员工的ID。
(2)column_config只能和parser一起用,parser也要求相对应的column_config。
(
...
d) parser汇总(持续更新,欢迎补充):
注意:当字段为多选时,需要在下列parser前加“multi_”,如人员字段多选,其parser为"multi_emp_primary_key",column_config不用变更。多个数据以英文逗号(,)分隔,column_config的两列输入的数据需要前后一一对应(如下图)。
...
column_config (默认name和number) | |||
---|---|---|---|
时间范围选择器组件 | time_range | start&end 如: "column_config": [{ | |
树型代码项 | common_tree_item
| name&number | 【不建议使用】这个parser是古早版本,不区分代码项类别。 |
树型/列表代码项 | common_basic_item | name&number | 【推荐使用】当树形和列表的number重复时,能够根据实际关联的模型区分 |
树型/列表代码项 | common_basic_item_cache | name&number | 【推荐使用】(测试中,预计发版时间2.10)性能较好,能够区分实际关联的代码项模型 |
Employee | emp_primary_key | name&identity_card; name&number; name&mobile; ... 人员主键字段任意组合 | 校验数据,转换为人员id存入模型 |
PreEmployee | pre_emp_primary_key | 待入职人员主键字段任意组合 | |
Department(包括OrgPosition、OrgPositionHistory、DepartmentHistory、OrgDepartment、OrgUnit、OrgDepartmentHistory、OrgUnitHistory ) | cached_department_number
| name&number | 根据名称和编号,校验数据。编号原则上不能重复(部门、岗位等都不能) |
org_primary_key
| name&number 部门主键字段任意组合 | ||
combination_path
| [ | 根据组织路径进行校验 | |
DepartmentHistory | org_history_primary_key
| 主键字段任意组合 | |
JobType | job_type_primary_key
| 主键字段任意组合 | |
Job | job_primary_key
| 主键字段任意组合 | |
JobStep | job_step_primary_key
| ||
JobStepType | job_step_type_primary_key
|
3、子表导入
...
(1)标准导入
...
在当前列表场景配置按钮
二、导出
1、标准导出
背景:标准的导出文件不符合用户需求,需要配置个性化的导出模板
(1)导出想选择导出的字段
2、个性化导出
3、子表导出
4、主子集导出
...
代码块 |
---|
{
"default": false,
"action": "SUB_IMPORT",
"left": true,
"data": {
},
"key": "sub_import",
"label": "导入"
} |
(2)个性化导入
第一步:配置按钮
代码块 |
---|
{
"default": false,
"action": "SUB_IMPORT",
"left": true,
"data": {
"is_from_config":true,
"category":"子表模型名称"
},
"key": "sub_import",
"label": "导入"
} |
第二步:配置个性化模板
注意:一定要去改下面的信息,不改肯定导入有问题,不要不看不改又提bug!!!
然后根据按钮中配置的子表模型名称,去common_imp_setting.json中添加一个模版即可,然后新增个性化导入模板,模版配置格式和正常的模版配置一致,需要将个性化模版中的
import_class 配置为:core.base.imp_exp.services_dynamic_model.CommonTableImportService
export_class配置为:core.base.imp_exp.services_dynamic_model.CommonDynamicExport
4、主子集导入
(1)配置按钮
除了配置imp_type外,还需要配置business_key_list。这个参数填写主集的业务主键或者具有唯一性的字段,配置了这个参数之后,导入时子集的数据才能查找到对应的主集数据,才能关联上对应的主集数据来进行导入。同时,这个参数里配置的字段会展示在子集的导入模板中,要求填写。
代码块 |
---|
{
"label": "主子集导入",
"key": "common_import",
"action": "BASE_IMPORT",
"data": {
"imp_type": "MULTI_IMPORT", # 导入类型【必填】。可选项有COMMON_IMPORT, SUB_IMPORT, MULTI_IMPROT。MULTI_IMPROT即为主子集导入。
"business_key_list": [ # 主集的字段【必填】。填写要求:1.具有唯一性;2.能通过填写的字段锁定到具体某一条主集数据。
"number",
"name"
],
"extend_property": { # 额外参数【选填】。但是如果要写导入场景,state参数必须写在其内。
"extra_property": {
"state": "" # 主集的导入场景【选填】。
}
},
"childs":[ # 自定义要下载的子集模板【选填】。要求与base元数据中的childs写法一致。
{
"key": "IconSales", # 【必填】。
"model": "IconSales", # 子集对应的模型【必填】。
"label": "专辑销量", # 作为模板文件名【必填】。
"parent_id": "icon_id", # 子集存储主集id的字段【必填】。
"meta_state": "" # 子集的导入场景【选填】。
},
{
"key": "xxx",
"model": "xxx",
"label": "xxx",
"parent_id": "icon_id"
},
]
}
} |
若要配置子集的导入场景,除了在按钮的data中指定childs外,还可以在base元数据中相应子集配置里增加meta_state参数。
(2)导入导出元数据配置
主模型的导入导出元数据与框架标准导入的配置方式一致,子模型的import_class有所区别。子模型的import_class应配置为:"core.base.imp_exp.services_dynamic_model.CommonMultiImport"
3.注意
请勿修改下载下来的主子集导入模板的文件名名称,文件名是系统用于判断属于哪一个模型的重要依据
5、附件导入
(1)配置按钮
其中,business_list的填写要求:1. 需是业务主键字段;2. 关联字段需在导入导出元数据中额外配置(见下文);3. 文件名需与business_list中的字段顺序一致。
代码块 |
---|
{
"label": "附件导入",
"key": "common_import",
"action": "BASE_IMPORT",
"data": {
"imp_type": "UPLOAD_FILES", # 导入类型【必填】。UPLOAD_FILES为附件导入。
"model_index": "u_file", # 附件字段的key【必填】。
"business_list": [ # 主集的字段【必填】。
"employee_id",
"dept_id"
],
"split_str": "-", # 文件名分隔符【选填】。如为"-",则文件名为"0001-张三"。不填默认为"-"。
"file_convert": true, # 是否覆盖原有附件【选填】。覆盖原来的已有附件,配置后每次导入都会将原来的全部覆盖掉。不填默认每次追加附件。
"is_insert": true, # 是否新增不存在数据【选填】。在找不到与业务主键对应的数据时,新增一条数据,并将附件导入改条数据。
"state": "xxxx", # 导入导出元数据场景【选填】。选择是哪一个场景的导入导出元数据,不填用当前场景。导入导出元数据新建方式请看下文。
"tips": "xxxxx" # 上传附件提示语【选填】。
}
} |
(2)元数据配置
上述例子中,business_list中配置了关联字段主键employee_id和dept_id,且这两个关联字段需要用id和名字一起确定一条数据(如:人员编号0001和人员名字张三,编号和名字一起确定是哪一个张三,否则容易出现重名),故需在模型的导入导出元数据中配置parser和column_config。注意:文件名需与column_config中的配置顺序一致!
导入导出元数据在对象管理器中找到,如下图:
parser和column_config与框架导入的个性化模板配置方式一致。具体配置如下:(文件名命名为:“人员编号-人员姓名-部门编号-部门名称”,人员和部门的顺序由按钮中business_list决定,但是编号和名称的顺序由column_config决定,若column_config中名称在前、编号在后,则文件名为"xx名称-xx编号")。
注意,导入导出元数据除了下例中提到的配置,上文导入导出元数据配置规则中必填项也应填上。
代码块 |
---|
{
"fields":[
...,
{
"name": "employee_id",
"key": "employee_id",
"parser": "emp_primary_key",
"column_config": [
{
"name": "编号",
"key": "number"
},
{
"name": "姓名",
"key": "name"
}
]
},
{
"name": "所属组织",
"key": "dept_id",
"parser": "department_number",
"column_config": [
{
"name": "编号",
"key": "number"
},
{
"name": "名称",
"key": "name"
}
]
},
...
} |
二、导出
1、标准导出
背景:标准的导出文件不符合用户需求,需要配置个性化的导出模板
标准导出按钮与导入按钮配置类似,
(1)标准导出按钮配置
场景: 若新建弹性模型或标准模型无导出按钮,需要 导出功能。
配置标准按钮,可在当前列表元数据配置的 "actions": []里配置COMMON_EXPORT,其他控制参数如role、lable、file_name等可参照导入按钮配置
代码块 |
---|
{"action": "COMMON_EXPORT",
"left": true,
"data": {},
"key": "common_export",
"label": "标准导出"
} |
(2)导出想选择导出的字段
在标准导出按钮的data中配置"select": true,点击导出时会弹出来一个弹窗让选择导出列。如果想默认选中一个字段,配置"selected_data":["字段key"]
效果图:
2、个性化导出
第一步:在标准导出按钮配置is_from_config:true 参数
第二步:参照个性化导入配置个性化模板
3、子表导出
(1) 标准导出
在子表当前列表场景配置按钮即可。
代码块 |
---|
{
"hide": false,
"action": "SUB_EXPORT",
"data": {
"celery_mode": true
},
"key": "sub_export",
"label": "导出"
} |
子表导出暂时不支持个性化模版,另外子表导出数据一定是要表单提交后的数据,刚导入的数据,主表单未提交,是无法导出数据的。子表导出数据如果不是按照主表分类,直接在子表的list层配置导出按钮即可,不用在配置子表导出。
(2)流程子表导入导出特殊配置
流程单据页面子表导出比较特殊,在单据结束状态的子表操作按钮默认为不可见状态,需要在子表元数据的子表导出按钮options中添加如下配置
4、主子集导出
(1)按钮配置
代码块 |
---|
{
"label": "主子集导出",
"key": "common_export",
"action": "BASE_EXPORT",
"data": {
"exp_type": "MULTI_EXPORT", # 导出类型【必填】。可选项有COMMON_EXPORT, SUB_EXPORT, MULTI_EXPROT。MULTI_EXPROT即为主子集导出。
"category": "BaseModel", # 导出主集【选填】。默认为当前模型。
"celery_mode": false, # 是否需要异步【选填】。默认否。开启的话可以看到导出过程。
"message": "send", # 导出完成后是否发消息【选填】。默认"send",即会发消息。"no send" 即不发消息。
"is_from_config": false, # 是否使用imp_exp导入导出元数据的配置【选填】。默认否。
"export_class": "", # 主集的导出类【选填】。默认框架导出。
"file_name": "", # zip文件名【选填】。
"extend_property": { # 额外参数【选填】。但是如果要写导入场景,state参数必须写在其内。
"extra_property": {
"state": "" # 主集的导出场景【选填】。
}
},
"childs":[ # 自定义要导出的子集【选填】。要求与base元数据中的childs写法一致。
{
"key": "IconSales", # 【必填】。
"model": "IconSales", # 子集对应的模型【必填】。
"label": "专辑销量", # 导出文件名【必填】。
"parent_id": "icon_id", # 子集存储主集id的字段【必填】。
"meta_state": "", # 子集的导出场景【选填】。
"file_name": "", # 导出文件名【选填】。 配置file_name则不使用label。
"extend_property": {
"filter_dict": {
"xxx": "" # 自定义过滤条件【选填】
}
}
},
{
"key": "xxx",
"model": "xxx",
"label": "xxx",
"parent_id": "icon_id"
},
]
}
} |
(2) 其他配置
主集需要base元数据(与主子集导入一样)。可以不指定childs,但一定要有base
5、附件导出
(1)按钮配置
最终导出.zip文件将会发送到消息中,如果导出的最终压缩包数超过5个,那么会以每五个压缩包发一条消息
1 |
|