QAD 实现数据批量导入(WEB版) BaseCls

定义base类和接口

/*------------------------------------------------------------------------
    File        : Iwebcimode
    Purpose     : 
    Syntax      : 
    Description : 
    Author(s)   : 
    Created     : Wed Apr 17 16:00:05 CST 2019
    Notes       : 
  ----------------------------------------------------------------------*/

USING Progress.Lang.*.

INTERFACE spxcls.Iwebcimode:  
    DEFINE PUBLIC PROPERTY wbtitle AS CHARACTER NO-UNDO  /*HTML 标题*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY mytheme AS CHARACTER NO-UNDO  /*用户KENDO UI主题*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY kdjsrc AS CHARACTER NO-UNDO  /*引用JS的路径  用优化用*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY paction AS CHARACTER NO-UNDO  /*POST目标程序 一般即入口程序*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY csvtplate AS CHARACTER NO-UNDO  /*CSV模板名称*/
    GET.
    SET.

    DEFINE PUBLIC PROPERTY docpath AS CHARACTER NO-UNDO  /*模板文件保存路径*/
    GET.

    DEFINE PUBLIC PROPERTY domain AS CHARACTER NO-UNDO  /*域*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY uid AS CHARACTER NO-UNDO  /*userid*/  
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY username AS CHARACTER NO-UNDO  /*username*/  
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY ulang AS CHARACTER NO-UNDO  /*语言 language*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY umailaddr AS CHARACTER NO-UNDO  /*邮箱地址*/  
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY myjs1 AS CHARACTER NO-UNDO  /*JS片段1*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY myjs2 AS CHARACTER NO-UNDO  /*JS片段2*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY myjs3 AS CHARACTER NO-UNDO  /*JS片段3*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY myjs4 AS CHARACTER NO-UNDO  /*JS片段4*/
    GET.
    SET.        
    
    DEFINE PUBLIC PROPERTY kdcolumns AS LONGCHAR NO-UNDO  /*KENDO UI的列定义片段*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY cfilename AS CHARACTER NO-UNDO  /*上传文件原始名称路径*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY cfile_dest AS CHARACTER NO-UNDO  /*上传文件名称路径*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY htmltb AS LONGCHAR NO-UNDO  /*主数据HTML片段*/
    GET.
    SET.   
    
    DEFINE PUBLIC PROPERTY preview AS LOGICAL NO-UNDO   /*可预览再更新*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY isupdate AS LOGICAL NO-UNDO  /*确认更新*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY choicesync AS LOGICAL NO-UNDO   /*可选择异步同步*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY isasync AS LOGICAL NO-UNDO  /*是否异步*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY showdateformat AS LOGICAL NO-UNDO  /*是否显示日期格式*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY dateformat AS CHARACTER NO-UNDO
    GET.
    
    DEFINE PUBLIC PROPERTY istransm AS LOGICAL NO-UNDO  /*是否整体导入为事务    YES-一条出错则整次导入回滚*/
    GET.
    SET.

    DEFINE PUBLIC PROPERTY fshortlog AS LOGICAL NO-UNDO  /*错误截取第一段 YES 全部-NO*/
    GET.
    SET.

    DEFINE PUBLIC PROPERTY retainlog AS LOGICAL NO-UNDO  /*是否保留导入日志    临时文件夹*/
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY retainxxqkf AS LOGICAL NO-UNDO  /*是否保留临时中间表 */
    GET.
    SET.
    
    DEFINE PUBLIC PROPERTY paramslist AS CHARACTER NO-UNDO  /*参数字符串    保留使用*/
    GET.
    SET.

    DEFINE PUBLIC PROPERTY defaultdateformat AS CHARACTER NO-UNDO
    GET.
    SET.

    DEFINE PUBLIC PROPERTY dfcimexec AS CHARACTER NO-UNDO  /*默认执行导入的程序  用于检验原始菜单权限*/
    GET.   /*ADDED 2021-10-12*/
    
    DEFINE PUBLIC PROPERTY cimtypeid AS CHARACTER NO-UNDO  /*FOR LOW CODE CIMLOAD USE*/
    GET.   /*ADDED 2022-09-27*/

    DEFINE PUBLIC PROPERTY checkerr AS LOGICAL NO-UNDO  /*check后发现了errmsg*/
    GET.

    DEFINE PUBLIC PROPERTY csvmsg1 AS CHARACTER NO-UNDO
    GET.
    
    DEFINE PUBLIC PROPERTY csvmsg2 AS CHARACTER NO-UNDO
    GET.
    
    METHOD PUBLIC VOID gencsvtplate(INPUT csvname AS CHARACTER).  /*#STEP0 生成csv导入模板*/
    
    METHOD PUBLIC VOID mainblock().  /*主方法 包含以下注释的方法*/
    
    //METHOD PUBLIC VOID gencolumns().  /*生成kdcolumns 列框架 #STEP0 类实例化 显示页面*/
    
    //METHOD PUBLIC VOID getdata(INPUT filepath AS CHARACTER).  /*#STEP1 取模板里的数据*/
    
    //METHOD PUBLIC VOID checkdata().  /*#STEP2 检查数据*/
    
    //METHOD PUBLIC VOID genxxqkf().  /*#STEP3 生成CIMLOAD临时表*/
    
    //METHOD PUBLIC LOGICAL execload(INPUT exec AS CHARACTER).  /*#STEP4 执行cimload*/
    
    //METHOD PUBLIC VOID getresult(INPUT tphd AS HANDLE,INPUT xxcimtype AS CHARACTER).  /*#STEP5 取导入结果*/

    //METHOD PUBLIC VOID genhtmltb().  /*生成htmltb 列内容 #STEP6 显示导入结果*/

    //METHOD PUBLIC VOID emptytb().  /*清空临时表 #STEP7*/
    
END INTERFACE.
/*------------------------------------------------------------------------
    File        : Iwebcimodej
    Purpose     : for aspx/jsp/ajax webcimload 
    Syntax      : 
    Description : 
    Author(s)   : 
    Created     : Mon Mar 23 09:56:40 CST 2020
    Notes       : 
  ----------------------------------------------------------------------*/

USING Progress.Lang.*.
USING spxcls.*.

INTERFACE spxcls.Iwebcimodej INHERITS Iwebcimode:  
    
    DEFINE PUBLIC PROPERTY xlstplate AS CHARACTER NO-UNDO  /*EXCEL模板名称*/
    GET.
    SET.
    
    METHOD PUBLIC CHARACTER gencolist().
    
    METHOD PUBLIC CHARACTER gencoltype().
    
    METHOD PUBLIC INTEGER getdataj(INPUT fphd AS HANDLE,OUTPUT omsg AS CHARACTER).  /*#取JSON数据*/
    
    METHOD PUBLIC HANDLE getdfhd().
    
END INTERFACE.

几种实现方式 按代码量从少到多排列:
0.继承webcimbase 实现Iwebcimode 实现全部由配置产生 零代码  现有实现类 webcimlcmodel 带tpstrval字段 
1.继承webcimbase 实现Iwebcimode 单一临时表句柄赋给tptbhd 全部按默认设置 mainblock 里调用 vmainblock 实现  vcheckdata() vgenxxqkf()  例子 webcimwostat  $$ 最简单逻辑的应用 
   若是多临时表 读取和显示的为不同临时表时 则可以插入变换tptbhd逻辑 重写gencolumns() genhtmltb()等部分方法  例子 webcimfcfsd
   此种webcimcls除可以使用csv上传之外 还可以选择 JSP读EXCEL上传/JS读EXCEL AJAX上传 实现
2.继承webcimbase 实现Iwebcimode 单一临时表句柄赋给tptbhd 全部按默认设置 实现 mainblock checkdata() genxxqkf()  例子 webcimpil  复杂度正常的应用 *** 可以简化成1方式 ***
3.继承webcimbase 实现Iwebcimode 直接传单一临时表句柄 全部按默认设置 实现 mainblock checkdata() genxxqkf()  例子 webcimbkemc  复杂度正常的应用 *** 可以简化成1方式 ***
4.继承webcimbase 实现Iwebcimode 多临时表/有数组字段 重写 gencolumns() genhtmltb() getdata() getresult()  例子 webcimffd(预测导入)  $$  比较复杂的应用  定制
5.继承webcimbase 实现Iwebcimode 多临时表 重写 gencolumns() genhtmltb() getdata() getresult() backend 程序也单独写  例子 webcimcons(客户寄售使用量导入)  最复杂的应用  定制

额外功能:
1.如果 class里含有数据库 trigger 则设置xxcimtype 为class名称 并设置空参数 构造方法 供后台导入程序时调用  例子 webcomfadd(固定资产新增导入)
2.如果要支持中文描述 名称之类导入 设置dfcodepage = 'utf-8' 并设置成excel导入方式 
3.非cimload模式 空参数vmainblock() => vgenxxqkf() 可以 #1 直接写数据库更新语句  #2 调用Progress Appserver #3 调用QXtend Inbound 例子 webcimeprdrafts

 

posted @ 2025-09-13 14:35  skyofchaos  阅读(30)  评论(0)    收藏  举报