引入原创
金蝶云社区-zixiang_yan
zixiang_yan
2人赞赏了该文章 575次浏览 未经作者许可,禁止转载编辑于2023年12月28日 11:34:27

引入概述 

引入的实质是模拟单据保存。引入过程分为引入起始页(点击引入数据出来的页面),引入进度条页面和引入结果页。引入插件完成引入初始化工作的准备、引入线程的启动、引入结果的统计和错误文件的输出。引入起始页初始化完成,用户上传待引入的Excel文件后,点击开始引入,将进入进度条页面。进度条页面在其初始化方法中,启动“解析”线程(线程方法resolveExcel)和“引入”线程(线程方法importData),解析线程将Excel的数据转换为JSON数据包,入队数据队列,“引入”线程不断从队列中尝试出队,出队后进行引入,最后完成引入操作并出现引入结果页。 

涉及到的插件事件 

resolveExcel解析excel,并将数据放入缓存队列中(可完全自定义解析过程,需同步重写importData) importData 从队列中分批取数(可完全自定义引入的转换保存过程) 

save导入数据(可在此设置引入日志) 

initImportData批量引入数据之前触发此事件,批量处理只触发一次。插件可以在此事件,预先批量取到需要的依赖的数据缓存整个批量数据都需要的内容

beforeImportData 引入数据填写之前触发的事件,批量处理时,每张单据触发一次。可以对本次引入的源单数据包,进行修订,或者取消本单引入。例如:判断单据状态不为暂存取消本单引入,e.setCancel(true);e.setCancelMessage(); 

afterImportData 引入数据填写完毕之后,保存前触发的事件,批量处理时,每张单据触发一次。可用作补充默认值和计算数量信息, 

事件的执行过程 

resolveExcel -> importData(从缓存队列里分批取数) -> save -> initImportData -> beforeImportData -> afterImportData(beforeImportData 和afterImportData的循环) 如果数据一次没有取完会继续执行 -> importData(从缓存队列中继续分批取数) -> save -> initImportData -> beforeImportData -> afterImportData(beforeImportData 和afterImportData的循环)

赞 2