版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

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参数。

Image Modified

2. 导入导出元数据配置

主模型的导入导出元数据与框架标准导入的配置方式一致,子模型的import_class有所区别。子模型的import_class应配置为:"core.base.imp_exp.services_dynamic_model.CommonMultiImport"
Image Modified

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中的配置顺序一致!

导入导出元数据在对象管理器中找到,如下图:

Image Modified

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、标准导出

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

...

流程单据页面子表导出比较特殊,在单据结束状态的子表操作按钮默认为不可见状态,需要在子表元数据的子表导出按钮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

Image Modified

5、附件导出


(1)按钮配置

最终导出.zip文件将会发送到消息中,如果导出的最终压缩包数超过5个,那么会以每五个压缩包发一条消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

{
        "key": "export_files",     # 按钮的属性完全符合元数据配置,params 是自定义部分
        "label": "批量导出",
        "action": "EXPORT_FILES",  #前端对应的函数名,固定
        "left": true,
        "params": {
            "model": "ImpTest",    # 附件所存在的模型名
            "template_name":"批量附件导出.zip" # 附件导出包名字,自定义,不传使用系统默认的
            "file_index": "file_index",  #附件对应的字段,当前模型为ImpTest1的附件字段就是file_index
            "datetime": "%Y-%m-%d",     #时间格式,文件名需要加入时间时才传入,不需要可以不传,默认是到秒
            "business_list": ["emp_id", "emp_name", "datetime","from.name"] ,  # 文件名以列表顺序拼接,可以不是业务主键。注意datetime 不是业务主键 ,from.name 支持关来你的字段作为附件重命名内容,不存在数据则默认"空"
            "page_size":40,
            "page_index":1,
            "file_page_size":500, #默认导出的压缩包内文件是500,总文件超过500个,分成(总数/500)个压缩包,发一条消息
            "is_img":false # 默认是false,如果导出的是图片并且是人员头像,设置为true,
            "filter_dict": {...}  # 如果不希望用当前页面的过滤条件,可以传入。
        }
    }