QAD Cimload 自定义通用类
作者:互联网
1.类
/*------------------------------------------------------------------------ File : cimload Purpose : A COMMON CLASS FOR CIMLOAD Syntax : Description : Compatibility with PROGRESS OPENEDGE 10.1A and above Author(s) : TERRENCE ZHANG Created : Mon Mar 21 10:03:55 CST 2016 Notes : {mfdeclre.i} must exists before this class was instanced Both Windows GUI/CHUI and Unix Chui can use ----------------------------------------------------------------------*/ &SCOPED-DEFINE SK + CHR(10) + /*换行符*/ &SCOPED-DEFINE TEMPPATH "d:\temp\" /*指定临时文件路径*/ CLASS cimload: /*------------------------------------------------------------------------------ Purpose: Notes: 兼容10.1A 没有用到后续OOP新增的 命名空间 属性 重载 等新功能 ------------------------------------------------------------------------------*/ DEFINE PUBLIC VARIABLE temppath AS CHARACTER INIT {&TEMPPATH} NO-UNDO. /*临时文件路径*/ DEFINE PUBLIC VARIABLE batchmode AS LOGICAL NO-UNDO. /*默认为GUI模式导入*/ DEFINE PUBLIC VARIABLE testmode AS LOGICAL NO-UNDO. /*是否为测试模式*/ DEFINE PROTECTED VARIABLE datalog AS CHARACTER NO-UNDO. DEFINE PROTECTED VARIABLE errlog AS CHARACTER NO-UNDO. DEFINE PROTECTED VARIABLE user_lang_dir AS CHARACTER NO-UNDO. /*对应语言程序目录*/ DEFINE PROTECTED VARIABLE SPACES AS CHARACTER NO-UNDO. /*空值*/ DEFINE PUBLIC VARIABLE hverr AS LOGICAL NO-UNDO. /*是否有错误*/ DEFINE PUBLIC VARIABLE errmsg AS CHARACTER NO-UNDO. /*错误信息*/ /*截取导入日志里的值 一般为流水自动产生的ID 最多支持9个*/ DEFINE PROTECTED VARIABLE lblname AS CHARACTER EXTENT 9 NO-UNDO. /*要读取的字段名称*/ DEFINE PROTECTED VARIABLE strval AS CHARACTER EXTENT 9 NO-UNDO. /*读取到的值*/ METHOD PUBLIC VOID setlblname(INPUT n AS INTEGER,INPUT elbl AS CHARACTER): ASSIGN lblname[n] = elbl. END METHOD. METHOD PUBLIC CHARACTER getstrval(INPUT n AS INTEGER): RETURN strval[n]. END METHOD. /*10.1A版本尚不支持PUBLIC 变量是数组 所以用set/get 新版本直接属性数组代替*/ DEFINE PUBLIC VARIABLE strexnum AS INTEGER INIT 1 NO-UNDO. /*偏移读取*/ DEFINE PUBLIC VARIABLE invchar AS CHARACTER NO-UNDO. /*无效的符号 读取时消除*/ CONSTRUCTOR PUBLIC cimload(INPUT langdir AS CHARACTER): /*输入 对应语言程序目录 global_user_lang_dir*/ ASSIGN user_lang_dir = langdir. END CONSTRUCTOR. METHOD PUBLIC VOID cgdomain(INPUT domain AS CHARACTER): /*内置切换域的方法*/ DEFINE VARIABLE domstr AS CHARACTER. ASSIGN domstr = QUOTER(domain) {&SK} ".". IF NOT batchmode THEN uiload(domstr,"mgdomchg.p"). ELSE batchload(domstr,"mgdomchg.p"). END METHOD. /*batchrun = YES*/ METHOD PUBLIC VOID batchload(INPUT dstring AS CHARACTER,INPUT execname AS CHARACTER): ASSIGN datalog = temppath + GUID + "cim". ASSIGN errlog = datalog + ".err". OUTPUT TO VALUE(datalog). PUT UNFORMATTED dstring. OUTPUT CLOSE. INPUT FROM VALUE(datalog). OUTPUT TO VALUE(errlog) APPEND. /*导入产生的LOG*/ PAUSE 0 BEFORE-HIDE. RUN VALUE(user_lang_dir + SUBSTRING(execname,1,2) + '/' + execname). INPUT CLOSE. OUTPUT CLOSE. IF SEARCH(errlog) NE ? THEN geterror(INPUT errlog). IF NOT testmode THEN DO: OS-DELETE VALUE(errlog). OS-DELETE VALUE(datalog). /*删除临时文件*/ END. END METHOD. /*BATCH MODE*/ /*batchrun = NO*/ METHOD PUBLIC VOID uiload(INPUT dstring AS CHARACTER,INPUT execname AS CHARACTER): /*dstring是character 有32k大小限制 longchar则没有*/ ASSIGN datalog = temppath + GUID + "cim". ASSIGN errlog = datalog + ".err". OUTPUT TO VALUE(datalog). PUT UNFORMATTED dstring. OUTPUT CLOSE. INPUT FROM VALUE(datalog). OUTPUT TO VALUE(errlog) APPEND. /*导入产生的LOG*/ PAUSE 0 BEFORE-HIDE. RUN VALUE(user_lang_dir + SUBSTRING("gpwinrun.p",1,2) + '/' + "gpwinrun.p") (execname, 'CIMLOAD-PROCESS PLEASE WAIT...'). INPUT CLOSE. OUTPUT CLOSE. IF SEARCH(errlog) NE ? THEN geterror(INPUT errlog). IF NOT testmode THEN DO: OS-DELETE VALUE(errlog). OS-DELETE VALUE(datalog). /*删除临时文件*/ END. END METHOD. /*UI MODE*/ METHOD PROTECTED FINAL CHARACTER getTermLabel(INPUT eterm AS CHARACTER): FIND FIRST lbl_mstr WHERE lbl_lang = user_lang_dir AND lbl_term = eterm NO-LOCK NO-ERROR. IF AVAILABLE lbl_mstr THEN RETURN TRIM(lbl_long). ELSE RETURN eterm. END METHOD. /*根据语言取错误信息的LABEL*/ METHOD PROTECTED VOID geterror(INPUT errfile AS CHARACTER): /*获取导入时的错误信息*/ /*导出错误相关定义*/ DEFINE VARIABLE linefield AS CHARACTER EXTENT 40 FORMAT "x(80)" NO-UNDO. DEFINE VARIABLE progress_errors AS INTEGER NO-UNDO. DEFINE VARIABLE function_warnings AS INTEGER NO-UNDO. DEFINE VARIABLE function_errors AS INTEGER NO-UNDO. DEFINE VARIABLE e AS INTEGER INIT 0 NO-UNDO. DEFINE VARIABLE lineflist AS CHARACTER NO-UNDO. DEFINE VARIABLE ex AS INTEGER NO-UNDO. ASSIGN progress_errors = 0 function_warnings = 0 function_errors = 0. ASSIGN hverr = NO errmsg = STRING(TODAY) + " " + STRING(TIME,"HH:MM:SS") + " " + CHR(10). DO e = 1 TO 9: strval[e] = SPACES. END. INPUT FROM VALUE(errfile) NO-ECHO. REPEAT: linefield = SPACES. SET linefield WITH WIDTH 255. /*START 截取指定的关键词信息*/ DO e = 1 TO 9: IF lblname[e] EQ SPACES OR strval[e] NE SPACES THEN NEXT. IF strexnum < 1 THEN strexnum = 1. lineflist = ''. DO ex = 1 TO strexnum: lineflist = lineflist + linefield[ex]. END. IF lineflist BEGINS lblname[e] THEN DO: ASSIGN strval[e] = REPLACE(lineflist,lblname[e],SPACES). IF invchar NE SPACES THEN strval[e] = REPLACE(strval[e],invchar,SPACES). END. END. /*END 取值 多语言可用*/ IF linefield[1] = "**" OR linefield[1] = "ORACLE" OR linefield[1] = (getTermLabel("WARNING") + ":") OR linefield[1] = (getTermLabel("ERROR") + ":") THEN DO: DO e = 1 TO 40: IF linefield[e] = SPACES THEN LEAVE. ASSIGN errmsg = errmsg + " " + linefield[e]. END. e = e - 1. ASSIGN errmsg = errmsg + CHR(10). IF linefield[1] = "**" OR linefield[1] = "ORACLE" THEN DO: IF (linefield[2] = "tr_hist" AND linefield[e] = "(132)") OR (linefield[2] = "op_hist" AND linefield[e] = "(132)") THEN function_warnings = function_warnings + 1. ELSE ASSIGN progress_errors = progress_errors + 1. END. ELSE IF linefield[1] = (getTermLabel("WARNING") + ":") THEN function_warnings = function_warnings + 1. ELSE IF linefield[1] = (getTermLabel("ERROR") + ":") THEN function_errors = function_errors + 1. END. END. INPUT CLOSE. IF progress_errors NE 0 OR function_errors NE 0 THEN ASSIGN hverr = YES. ASSIGN errmsg = errmsg + getTermLabel("DATABASE_ERRORS") + ' ' + STRING(progress_errors) + ' ' + getTermLabel("PROGRAM_WARNINGS") + ' ' + STRING(function_warnings) + ' ' + getTermLabel("PROGRAM_ERRORS") + ' ' + STRING(function_errors). END METHOD. /*读取日志里的错误*/ END CLASS.
2.例子
{mfdeclre.i} /*必须*/ define variable c as cimload no-undo. define variable s as character no-undo. assign s = "us100" + chr(10) + ".". /*字符串流*/ c = new cimload(global_user_lang_dir). batchrun = YES. /*必须*/ c:batchload(s,"mgdomchg.p"). /*input 字符串流 input 调用程序*/ batchrun = NO. message c:errmsg view-as alert-box. /*显示导入后提示信息*/ delete object c. c = ?.
标签:Cimload,END,自定义,NO,CHARACTER,UNDO,QAD,VARIABLE,DEFINE 来源: https://www.cnblogs.com/skyofchaos/p/13776728.html