• 导入程序设计指南


    下面的例子假设要导入的对象是Vendor

    1 根据导入文件的格式,创建对应的VendorImportItem,此类应该继承自ImportLibrary.BaseImportItem

    2 创建VendorFileParser,此类需要实现ImportLibrary.IFileParser接口。在实现Parse方法的过程中,读取导入文件的内容,生成IEnumerable<VendorImportItem>的集合。注意:Parser不要加入业务逻辑过程,只把文件中的有用的原始数据导入

    3 创建一系列VendorXXXValidateHandler, 这些Handler需要继承自ImportLibrary.Validate.ValidateHandler<VendorImportItem>

    3.1 每一个VendorXXXValidateHandler的类定义的前面需要加一个属性Order如下

    [Order(1)]
    
        public class VendorCodeValidateHandler : ValidateHandler<VendorImportItem>
    
        {
    
            protected override void Validate(IEnumerable<VendorImportItem> item)
    
            {
    
                --这里是验证逻辑
    
    IEnumerable<VendorImportItem> emptyItems = item.Where (x=>string.IsNullOrEmpty(x.Code)) ;
    
                this.AppendErrorMessage(emptyItems, "编号不能为空");
    
            }
    
      }

    Order属性的参数是验证的顺序,框架会搜索所有的ValidateHandler<VendorImportItem>的实现类,并按Order后面的参数排序后逐个调用。如果省略此属性,则缺省值为100

      可以调用基类的AppendErrorMessage和AppendWarningMessage方法添加验证的错误信息。

    4创建VendorImporter,此类继承自ImportLibrary.BaseImporter<VendorImportItem>

    实现DoImport方法的步骤

    4.1此时VendorImportItem集合中,每一项的Result有Succeed, Failed, Warning三种,可以根据需要决定是否导入Warning的记录。

    4.2 调用相应的业务逻辑把符合条件的项导入到业务表中。

     

    注:BaseImporter有另外一种重载的格式BaseImporter<T,ResultT>, 详见文末关于自定义结果格式的说明

    5 Controller层

              5.1 通过IImportFactory创建对应的Importer

      

    IFileParser parser = new VendorFileParser(Server.MapPath("~/Temp/" + fileName));
    
                IImport importer = ImportFactory.CreateImport("Vendor");
    
                importer.FileParser = parser;

       5.2 调用Import方法

    return RcJson(JsonConvert.DeserializeObject<FeedbackResult<VendorImportItem>>(importer.Import()));

      5.3 在MyValueSelector.cs中配置Importer。Dictionary中每一项是对应的实现类。

    Dictionary<string, string> importerType = new Dictionary<string, string> {
    
                    {"QR","ESC.QRImpl.Import.QRImporter,ESC.QRImpl"},
    
                    {"Vendor","ESC.VendorImpl.Import.VendorImporter,ESC.VendorImpl" }
    
                };

    6 客户端呈现导入结果

    返回客户端的对象结构如下

    {
    
    FailedCount: 失败的数量,
    
    SucceedCount: 成功的数量,
    
    WarningCount: 警告的数量,
    
    Items: 导入文件中的Item的集合,包含一个ErrorMessage属性,如果是Failed或者Warning此属性不为空
    
    ErrorMessage: 如果上传的文件格式错误或者导入过程中出现意外错误,此属性包含对应的错误信息。
    
    }

    7 自定义结果格式

    可自定义一个VendorImportResult, 这个类需要继承自ImportLibrary.BaseImportResult<VendorImportItem>,然后重载GetSucceedMessage方法。

    同时VendorImporter需要继承自BaseImporter<VendorImportItem,VendorImportResult>.

  • 相关阅读:
    [HDU] 1269 迷宫城堡最简单的强连通分支题
    [HDU] 1301 Jungle Roads赤裸裸的最小生成树
    [HDU] 2647 Reward带有贪心算法的拓扑排序
    [HDU] 1181 变形课简单建模后广搜
    【慢慢学Android】:5.短信拦截
    【慢慢学Android】:8.获取所有短信
    ubuntu下设置Android手机驱动
    Win7笔记本变为热点供手机上WiFi
    VS快捷键和小功能
    【慢慢学Android】:11.对话框大全
  • 原文地址:https://www.cnblogs.com/wmm-pcy/p/14282619.html
Copyright © 2020-2023  润新知