单据体新增导入、更新导入和新增并更新导入功能介绍

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

单据体新增导入、更新导入和新增并更新导入功能介绍

1.  业务场景

在录入HR人员信息、物料等数据的场景中,这些数据大部分是单据体的数据,并不需要同时导入单头的数据,因此需要单独导入单据体数据的功能。

2.  适用版本

单据体新增导入:金蝶云苍穹 V5.0.011及以上版本。

单据体更新导入、更新并新增导入:金蝶云苍穹 V7.0.01及以上版本。

3.  操作流程    

3.1.      新增数据

1)   配置单据体导入操作

在单据工具栏中配置“单据体导入”操作按钮。

2)   配置单据体导入模板

模板可以通过两个入口进行配置:

V6.0.0.0前:

a.【配置工具】->【导入导出模板】->【单据体导入模板】

V6.0.0.0后

a.【公共设置】->【导入导出模板】->【单据体导入模板】

b.【单据页面】->【单据体导入按钮】->【单据体导入起始页】->【模板下载】->【下载单据体导入模板】

 上述两个入口均可进入单据体导入模板的编辑界面。

模板编辑界面中,可以在“单据体选择”多选下拉列表中,选择需要生成模板的单据体。配置好需要导入的字段,其中基础资料字段需要配置导入属性(可选编码/名称)。

3)   录入数据

下载的模板中,单据体展示在Excel的工作表中,单据体与工作表一一对应,工作表名称为单据体名称。如下图所示:


4)   导入数据

上传导入文件,文件校验通过后(校验不通过时,文件无法上传成功),点击“导入数据”。导入完成后,可查看每个单据体的导入结果,如下图所示:

上传图片

导入结果:

导入结果界面按单据体分别展示导入成功数据及失败数据。

如全部数据导入成功,下方显示【关闭】按钮;

如存在错误数据,下方显示【导出错误数据】超链接(如在上传文件界面,勾选"是否导出所有错误数据",则展示导出全量错误数据),错误信息统一录在Excel工作表的第一列,如果单据体不存在错误信息,则对应的工作表不会输出至错误文件。

点击【继续导入】,重新进入单据体导入界面。

按照错误提示修改数据后,可使用错误文件再次导入。

上传图片

     

3.2.      更新数据

1)      在单据体导入模板中,将需要更新单据体的“匹配id”的“是否导入”属性打开,按单据体导入模板导出数据(该功能介绍详见:),对需要更新的数据进行修改。例如原已订货数量为3,需要将数据更新为5。



2)      再点击“单据体导入”操作,打开单据体导入界面,选择“导入方式为更新数据”,默认根据单据体的“匹配id”更新数据,上传更新后的文件,然后点击“导入数据”。

3)      默认根据匹配id更新数据,导入成功后即可看到字段值更新,例如下方的“已订货数量”更新为5。

3.3.      更新已有数据并添加新的数据

1)      在单据体导入模板中,将需要更新单据体的“匹配id”的“是否导入”属性打开,按单据体导入模板导出数据(该功能介绍详见:),对需要更新的数据进行修改。例如原已订货数量为3,需要将数据更新为5,并新增一条数据。



2)      再点击“单据体导入”操作,打开单据体导入界面,选择“导入方式为更新数据”,默认根据单据体的“匹配id”更新数据,上传更新后的文件,然后点击“导入数据”。

3)      默认根据匹配id更新数据,匹配上的就更新,没匹配上的就新增,导入成功后即可看到更新和新增的数据,例如下方的“已订货数量”更新为5,并增加一条数据。

4  插件干预

单据体引入支持两种方式进行插件干预:

模板下载:

在模板编辑界面中,通过“插件”编辑框,注册插件。该插件用于下载模板时,将模板中“基础资料”类型的列,设置单元格格式为下拉选项,并给下拉项赋值。

例:将标识为“basedatafield1”的字段,下拉值列表设置为"0002", "0003", "0004","0005","0006","0007"

import java.util.Arrays; 
  
 public class TestImportEntryBaseDataPlugin implements ImportEntryTemplateListener{ 
     //将标识为“basedatafield1”的字段 
     //下拉值列表设置为"0002", "0003", "0004","0005","0006","0007" 
     @Override 
     public void beforeSetBaseData(BeforeDownloadImportEntryTemplateEvent evt) { 
         evt.getBaseDataDropDownValues().put("basedatafield1", Arrays.asList("客户","0002","0003","0004","0005","0006","0007")); 
     } 
 }

 

效果如下:

修改数据:

编写表单插件,继承表单插件基类AbstractFormPlugin,实现beforeImportEntry方法,在设计器界面注册表单插件。


 

 

例:校验单据体数据,并填入自定义错误信息,移除错误数据不予引入。

public class TestBeforeImportEntryPlugin extends AbstractFormPlugin { 

  @Override      
  public void beforeImportEntry(BeforeImportEntryEventArgs e) { 
      //key为单据体标识
       Set<Map.Entry<String, List<ImportEntryData>>> entries = source.entrySet();
        for (Map.Entry<String, List<ImportEntryData>> entry : entries) {
            entryName = entry.getKey();
            List<ImportEntryData> entryEntityImportDataList = entry.getValue();
            if (CollectionUtils.isEmpty(entryEntityImportDataList) ) {
                return;
            }
            // 校验并返回Map<行号, 业务自定义错误信息>
           // validateEntry为自定义的校验方法
            Map<Integer, String> indexVsMsgMap = validateEntry(entryEntityImportDataList);
            //校验并记录错误
            Set<Integer> indexSet = indexVsMsgMap.keySet();
            Map<String, List<Object>> logMap = event.getEntryDataMap();
            ImportLogger importLogger = (ImportLogger)logMap.get(entryName).get(0);
            Set<Map.Entry<Integer, String>> indexVsMsgEntries = indexVsMsgMap.entrySet();
            //干预导入结果里成功、失败条数
            for (Map.Entry<Integer, String> indexVsMsgEntry : indexVsMsgEntries) {
                // 封装错误信息
                Integer index = indexVsMsgEntry.getKey();
                importLogger.log(index, indexVsMsgEntry.getValue());
                importLogger.fail();
                importLogger.setTotal(importLogger.getTotal() + 1);
            }

            //干预导出错误结果,移除后excel无该条数据
            Iterator<ImportEntryData> iterator = entryEntityImportDataList.iterator();
            while (iterator.hasNext()) {
                ImportEntryData entryData = iterator.next();
                Integer rowNum = (Integer)entryData.getData().get("rowNum");
                if (indexSet.contains(rowNum)) {
                    iterator.remove();
                }
            }
        }
 }

 当基础资料查不到或者查到多个结果时,设置正确的id:

@Override
public void queryImportBasedata(QueryImportBasedataEventArgs e) {
	Map<BasedataItem, List<Object>> searchResult = e.getSearchResult();		
        for (Entry<BasedataItem, List<Object>> entry : searchResult.entrySet()) {
	    List<Object> basedata = entry.getValue();			
            if (basedata.isEmpty()) { // 查不到基础资料数据
            	basedata.add(业务自己查一个id放着);
	    } else { 
            	// 查到多个基础资料数据
                // 业务场景,应根据需求剔除不合法的基础资料数据(最终保留一个)
		Iterator it = basedata.iterator();
		it.next();				
            	while (it.hasNext()) {
		    it.remove();
                }
	    }
        }
}



单据体新增导入、更新导入和新增并更新导入功能介绍

1. 业务场景在录入HR人员信息、物料等数据的场景中,这些数据大部分是单据体的数据,并不需要同时导入单头的数据,因此需要单独导入单据体...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息