引入Excel的插件开发原创
金蝶云社区-闫方亮
闫方亮
5人赞赏了该文章 863次浏览 未经作者许可,禁止转载编辑于2021年11月16日 09:23:28

引入excel的原理, 首先是通过resolveExcel解析excel,并将数据放入缓存队列->importData从队列分批取数->save导入数据->initImportData初始化导入数据->执行beforeImportData后保存到数据模型->执行afterImportData后保存到数据库,其中会执行一个小的循环从importData分批取数后执行执行beforeImportData后保存到数据模型->执行afterImportData后保存到数据库。如果缓存队列里还有数据会循环执行importData从队列分批取数->save导入数据->initImportData初始化导入数据->执行beforeImportData后保存到数据模型。

下面的插件代码可以测试一下引入的原理

///在单据列表界面注册操作编码ImportData的操作类插件
public class DemoImport extends BatchImportPlugin {

    @Override
    protected ApiResult save(List<ImportBillData> rowdatas, ImportLogger logger) {   //可以在此设置引入日志
        Iterator<ImportBillData> it= rowdatas.iterator(); //可以查看是否循环save方法
        return super.save(rowdatas, logger);
    }

    @Override
    protected void resolveExcel() {
        super.resolveExcel();
    }

    @Override
    protected void importData() throws Throwable {
        super.importData();
    }
}
//在单据界面注册的界面插件
public class DemoImportPlugin extends AbstractFormPlugin {

    @Override
    public void initImportData(InitImportDataEventArgs e) {
        super.initImportData(e);
    }

    @Override
    public void beforeImportData(BeforeImportDataEventArgs e) {   //查看是否进行小循环
        super.beforeImportData(e);
    }

    @Override
    public void afterImportData(ImportDataEventArgs e) {
        super.afterImportData(e);
    }

}

插件常见的三种情况:

    1.引入前对Excel数据进行过滤

    2.引入失败自定义失败日志

    3.引入后可能动态关联其他单据

实现的方案就是单据页面注册插件类需要继承AbstractFormPlugin

然后重写beforeImportData保存到数据模型之前触发事件,批量处理时,每张单据触发一次,可以对引入的源单数据包进行修改或者取消本单引入。

重写afterImportData保存数据到数据模型后保存到数据库前触发事件,批量处理时,每张单据触发一次,可在此事件进行单据的关联操作(建立联查、反写等)

具体学习链接:https://vip.kingdee.com/school/242301697266367744?topicId=239384541469947648

赞 5