一、导入

1、标准导入

背景:直接配上标准的导入按钮即可使用,将excel文件中的数据导入系统或将系统内数据导出成excel文件

(1)标准导入按钮配置

  场景: 若新建弹性模型或标准模型无导入导出按钮,需要导入 导出功能。

  第一种:简单配置按钮,即配即用,则可在当前列表元数据配置的 "actions": []里配置标准的导入导出按钮,COMMON_IMPORT和COMMON_EXPORT

{"action": "COMMON_IMPORT",
        "left": true,
        "data": {},
        "key": "common_import",
        "label": "标准导入"
    },
{"action": "COMMON_EXPORT",
        "left": true,
        "data": {},
        "key": "common_export",
        "label": "标准导出"
    }



第二种:在标准按钮基础上配置参数,如指定导出的文件名、控制按钮的使用角色等,具体参数及释义如下

注:仅使用平台标准导入模板时,"is_from_config"只能设置成flase

{
  "action": "COMMON_IMPORT",  #【必填】按钮调用的方法,COMMON_IMPORT是框架通用导入。
  "label" : "模版型导入",  #【必填】按钮名称。
  "key" : "common_import",  #【必填】按钮的key,即唯一键,与其他按钮区分的唯一标识。
  "data":{  #【选填】导入按钮的一些个性设置,以下均为选填。
    "is_from_config": false,  # 是否使用个性化模板,false为否。
    "category": "whatever",  # 模型名或者个性化模板的common_imp_setting.json映射名称。不用个性化模板最好别设置。
    "file_name": "自己想怎么命名怎么命名.xlsx",  # 自定义下载的导入模板文件名
    "import_class": "",  # 使用的导入类。业务老师提供了,则使用业务老师提供的,否则不写。是固定的,不要自己瞎写。
    "role": "",  # 导入角色。
    "use_column_defs": false,  # 多表头导入
    "data_row": "3",  # 导入时,数据从excel文件的哪一行开始读取。默认是:导入文件有描述行,则从第三行开始读取,否则从第二行开始。
    "imp_tips": ["1、今天简单说以下几点", "。", "。。"],  # 自定义导入提示
    "show_business_key": false,   # 显示导入依据
    "choose_method": false,  # 是否展示导入模式选择
    "imp_method": 0,  # 默认导入模式(0:仅新增,1:仅编辑,2:有则编辑无则新增)
   "empty_selector": false,  # 是否展示选择器(默认为true) false: 不展示, true: 展示
    "empty_mode": 1,  # 默认值(默认为1) 0: 正常导入(编辑时覆盖), 1: 跳过
    "action_state": "",  # 弹窗内部按钮的场景,修改ImpActionVirtual不同场景的list元数据来配置不同的弹窗内按钮,详见【导入导出小案例-9】
    "filter_org": [],  # 过滤组织(需要配合charge_role使用,进一步控制权限范围内的部门)
    "extend_property": {
        "map_warn": false,  # 当导入文件中的列名与info元数据中的列名不匹配时,是否直接拦截导入。默认为否(false)。
        "data_plugins": {},  # 自定义导入插件,详见【3.自定义配置导入插件】
      "charge_role": [{  # 用于校验权限。
            "field": "dept_id",   # 需要校验部门权限的字段
            "role": "cm-org-emp",  # 权限范围
            "type": "dept"  # 类型(部门校验)
        }, {
            "field": "employee",  # 需要校验人员权限的字段
            "role": "cm-org-emp",  # 权限范围
            "type": "emp"  # 类型(人员校验)
        }],
        "extra_property": {
            "field_state": {"字段1的key": "想要的场景"},  # 字典类型。当一个字段为关联对象类型时,可以设置他关联对象的场景进行下拉选项的过滤。详见【导入导出案例】
            "state": "imp",  # 导入场景。自定义是以哪个场景的info元数据为依据。
        }
    }
  }
},




(2)导入弹窗中导入模式、导入依据介绍

导入弹窗中会有三种导入模式,模式名称及解释如图


导入的时候怎么知道是原来已有的数据导入进行编辑,还是原来没有数据导入进行新增呢,这就是根据我们是否设置业务主键去判断,导入的业务主键如果系统已有则编辑,否则进行新增

配置业务主键有两种方法,一是在“弹性字段”设置中勾选,另一种是在“模型.json”元数据里配置,如下图所示。

(3)标准导入模板中展示的是哪些字段,导出又展示哪些字段呢?

标准导入: 导入模板根据info元数据中字段显示,即info场景中没有设置隐藏或只读的都会显示在模板中,顺序是按照list层的元数据                                   

标准导出: 根据list层显示的字段

                         

(5)导入导出文件里是否带描述行

 导入模板默认时带描述行(橙色那一行),作为对该列数据填写规范的解释。如果不想要,可以在服务器参数里关掉。关掉的效果见下图。

(6)导入映射


2、个性化导入

背景:标准的导入导出不符合用户需求,需要配置个性化的导入导出模板

第一步:在导入按钮元数据配置的data中添加is_from_config:true,以使用个性化模板,若需要使用其他参数,参考上述标准按钮参数配置。

{
    "key": "common_import",
    "label": "标准导入按钮",
    "action": "COMMON_IMPORT",
    "data": {
        "is_from_config": true,
        "category": "可以不填,不填时默认取当前模型名。填的话想写啥就写啥,但是要记下来,下面要用。"
}

第二步:配置公司级模板

在扩展管理-公司级模板查询common_imp_setting.json

1)可以先过滤【是否全局模板】为否,直接可查询说明已新增过公司级模板

2)若查询不到,则切换过滤条件为是,再次查询,复制模板key后点击新增,将复制的key粘贴到新增的公司级模板key中,则会新增一个公司级非全局模板。公司级模板中一般会自动复制原全局模板已有参数内容,则只需要配置本次自定义模板参数,若新增公司级模板无参数内容,则需先将全局模板所有参数复制后,粘贴至公司级模板中,再配置本次自定义导入模板的参数。

 

第三步:在公司级模板中配置本次自定义模板参数,如,配置参数解析:(//双斜杠之后的是注释)

{
...
    "AttendLocation": {  // 冒号前面的东西,叫“映射名”或者“key”。按钮里的category没写的话,就用模型名,否则category写了啥就用啥。
        "name": "考勤点",  // 文件名
        "imp": "AttendLocation_import.json",  // 导入使用的个性化模板的公司级模板名(等会你要新建另一个公司级模板,名字就叫这个)
        "exp": "AttendLocation_import.json",  // 导出使用的个性化模板的公司级模板名(等会你要新建另一个公司级模板,名字就叫这个),导入导出可以用同一个。
        "role": "cm-org-emp"  // 下载模板所需的权限
    },
...
},

image-2024-2-27_15-31-16.png

第四步:根据上一步中配置的"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路径。
    }]
}

我们的导入模板很多时候都需要导入人员、组织这样的字段,此类字段需要通过编码+名称或XX+名称双维度去共同确认唯一,则我们导入模板参数中则需要配置parser

(a) parser介绍:

parser是校验器,目的是防止出现重名的问题导致导入了错误的数据。目前,只有关联了人员、部门、职位、树型/列表代码项等业务特殊字段可以使用parser。同时,parser需要和column_config配合使用。

(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。

(4) parser汇总(持续更新,欢迎补充):

注意:当字段为多选时,需要在下列parser前加“multi_”,如人员字段多选,其parser为"multi_emp_primary_key",column_config不用变更。多个数据以英文逗号(,)分隔,column_config的两列输入的数据需要前后一一对应(如下图)。



column_config

(默认name和number)


时间范围选择器组件

time_range

start&end

如:

"column_config": [{
            "key": "start",
            "name": "开始日期"
        }, {
            "key": "end",
            "name": "结束日期"
        }]


树型代码项

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

 

[
{
"name": "一级组织",
"key": "name01",
"require": false
},
{
"name": "二级组织",
"key": "name02"
},
{
"name": "三级组织",
"key": "name03"
},
{
"name": "四级组织",
"key": "name04"
},
{
"name": "五级组织",
"key": "name05"
},
{
"name": "六级组织",
"key": "name06"
},
{
"name": "七级组织",
"key": "name07"
},
{
"name": "八级组织",
"key": "name08"
},
{
"name": "九级组织",
"key": "name09"
},
{
"name": "十级组织",
"key": "name10"
}
]

根据组织路径进行校验

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、子表导入

4、主子集导入

5、附件导入

二、导出


1、标准导出

背景:标准的导出文件不符合用户需求,需要配置个性化的导出模板

(1)导出想选择导出的字段

2、个性化导出

3、子表导出

4、主子集导出

5、附件导出

  • 无标签