QAD 实现数据批量导入(GUI版) -Index6-LowCode Model&UIConfig

1.cimlcmodel.cls 作为通用model类,变成可配置

 
 /*------------------------------------------------------------------------
    File        : cimlcmodel
    Purpose     : 
    Syntax      : 
    Description : 
    Author(s)   : 
    Created     : Thu Nov 17 09:13:23 CST 2022
    Notes       : 
  ----------------------------------------------------------------------*/

&SCOPED-DEFINE SK + CHR(10) + 
&SCOPED-DEFINE CFGTYPE 'GUICIMLCSET'
&SCOPED-DEFINE TESTMODE YES

CLASS cimlcmodel INHERITS cimbase IMPLEMENTS Icimode: 
    /*------------------------------------------------------------------------------
     Purpose:
     Notes:
    ------------------------------------------------------------------------------*/
    
    DEFINE BUFFER bfqcfg FOR xxqcfg_mstr.
    
    CONSTRUCTOR PUBLIC cimlcmodel(INPUT domain AS CHARACTER,INPUT langdir AS CHARACTER,INPUT usrid AS CHARACTER,INPUT ecimtype AS CHARACTER):
        SUPER(domain,langdir,usrid,?).
        FIND FIRST bfqcfg WHERE bfqcfg.xxqcfg_type = {&CFGTYPE} AND bfqcfg.xxqcfg_id = ecimtype NO-LOCK NO-ERROR.
        IF AVAILABLE bfqcfg THEN 
        DO:
            ASSIGN
            cimtypeid = bfqcfg.xxqcfg_id
            dfcimexec = bfqcfg.xxqcfg_chr07.
        END.
        IF dfcimexec NE SPACES THEN 
        DO:
            tptbhd = preparetbhd().
            preparelabel().
        END.
    END CONSTRUCTOR.

    METHOD PROTECTED HANDLE preparetbhd():
        DEFINE VARIABLE i AS INTEGER NO-UNDO.
        DEFINE VARIABLE lctb AS HANDLE NO-UNDO.
        CREATE TEMP-TABLE lctb.
        lctb:ADD-NEW-FIELD("tpguid","character").
        FOR FIRST bfqcfg WHERE bfqcfg.xxqcfg_type = {&CFGTYPE} AND bfqcfg.xxqcfg_id = cimtypeid NO-LOCK:
            DO i = 1 TO NUM-ENTRIES(bfqcfg.xxqcfg_chr15):
                IF ENTRY(i,bfqcfg.xxqcfg_chr15) EQ SPACES THEN NEXT.
                lctb:ADD-NEW-FIELD(ENTRY(i,bfqcfg.xxqcfg_chr15),ENTRY(i,bfqcfg.xxqcfg_chr19)).
            END.
            IF bfqcfg.xxqcfg_chr21 NE SPACES THEN 
            DO i = 1 TO NUM-ENTRIES(bfqcfg.xxqcfg_chr21):
                IF ENTRY(i,bfqcfg.xxqcfg_chr21) EQ SPACES THEN NEXT.
                lctb:ADD-NEW-FIELD(ENTRY(i,bfqcfg.xxqcfg_chr21),"character").  /*添加要读取结果的字段*/
            END.
        END.
        lctb:ADD-NEW-FIELD("tpisok","logical").
        lctb:ADD-NEW-FIELD("tpmsg","character").
        lctb:TEMP-TABLE-PREPARE("templcm").
        RETURN lctb.
    END METHOD.

    METHOD PROTECTED VOID preparelabel():
        DEFINE VARIABLE i AS INTEGER NO-UNDO.
        DEFINE VARIABLE dhbf AS HANDLE NO-UNDO.
        dhbf = tptbhd:DEFAULT-BUFFER-HANDLE.
        IF VALID-HANDLE(dhbf) THEN
        FOR FIRST bfqcfg WHERE bfqcfg.xxqcfg_type = {&CFGTYPE} AND bfqcfg.xxqcfg_id = cimtypeid NO-LOCK:
            DO i = 1 TO NUM-ENTRIES(bfqcfg.xxqcfg_chr15):
                IF ENTRY(i,bfqcfg.xxqcfg_chr15) EQ SPACES THEN NEXT.
                IF ENTRY(i,bfqcfg.xxqcfg_chr16) NE SPACES THEN
                dhbf:BUFFER-FIELD(ENTRY(i,bfqcfg.xxqcfg_chr15)):COLUMN-LABEL = ENTRY(i,bfqcfg.xxqcfg_chr16).
            END.
            IF bfqcfg.xxqcfg_chr21 NE SPACES THEN 
            DO i = 1 TO NUM-ENTRIES(bfqcfg.xxqcfg_chr21):
                IF ENTRY(i,bfqcfg.xxqcfg_chr21) EQ SPACES THEN NEXT.
                dhbf:BUFFER-FIELD(ENTRY(i,bfqcfg.xxqcfg_chr21)):COLUMN-LABEL = "NA".
                dhbf:BUFFER-FIELD(ENTRY(i,bfqcfg.xxqcfg_chr21)):LABEL = 'STRVAL'.
            END.    /*标记要读取结果的字段*/
            IF LOOKUP("tpcrud",bfqcfg.xxqcfg_chr15) > 0 THEN 
            dhbf:BUFFER-FIELD("tpcrud"):COLUMN-LABEL = "Operator(blank-add/mod x-delete)".
        END.
    END METHOD.

    METHOD PUBLIC OVERRIDE VOID vexecload(INPUT cimexec AS CHARACTER):
        DEFINE VARIABLE dstring AS CHARACTER NO-UNDO.   /*字符串流*/
        DEFINE VARIABLE dhbf AS HANDLE NO-UNDO.
        DEFINE VARIABLE q AS HANDLE NO-UNDO.
        DEFINE VARIABLE i AS INTEGER NO-UNDO.
        dhbf = tptbhd:DEFAULT-BUFFER-HANDLE.
        IF VALID-HANDLE(dhbf) THEN
        DO:
            CREATE QUERY q.
            q:SET-BUFFERS(dhbf).
            q:QUERY-PREPARE("FOR EACH " + dhbf:TABLE + " WHERE tpmsg = ''").
            q:QUERY-OPEN.
            REPEAT ON ERROR UNDO,LEAVE:
                q:GET-NEXT().
                IF q:QUERY-OFF-END THEN LEAVE.
                FOR FIRST bfqcfg WHERE bfqcfg.xxqcfg_type = {&CFGTYPE} AND bfqcfg.xxqcfg_id = cimtypeid NO-LOCK:
                    IF picked THEN 
                    ASSIGN dstring = bfqcfg.xxqcfg_chr14.
                    ELSE 
                    ASSIGN dstring = bfqcfg.xxqcfg_chr13.
                    dstring = REPLACE(dstring,"effdate",STRING(effdate)).
                    IF LOOKUP("tpcrud",bfqcfg.xxqcfg_chr15) > 0 AND INDEX(dstring,'tpcrud') > 0 THEN 
                    DO:
                        IF dhbf:BUFFER-FIELD("tpcrud"):BUFFER-VALUE EQ 'x' THEN
                        SUBSTRING(dstring,INDEX(dstring,'tpcrud') + LENGTH('tpcrud'),LENGTH(dstring))
                        = CHR(10) + '-' {&SK} 'YES'.  /*如果是删除 则替换对应字符串*/
                    END.
                    DO i = 1 TO NUM-ENTRIES(bfqcfg.xxqcfg_chr15):  /*tpchr01 tpchr02 - - - tpdte01*/
                        IF ENTRY(i,bfqcfg.xxqcfg_chr15) EQ SPACES THEN NEXT.
                        IF ENTRY(i,bfqcfg.xxqcfg_chr19) EQ "character" THEN 
                        ASSIGN 
                        dstring = REPLACE(dstring,ENTRY(i,bfqcfg.xxqcfg_chr15),QUOTER(dhbf:BUFFER-FIELD(ENTRY(i,bfqcfg.xxqcfg_chr15)):BUFFER-VALUE)).
                        ELSE 
                        ASSIGN 
                        dstring = REPLACE(dstring,ENTRY(i,bfqcfg.xxqcfg_chr15),setd(STRING(dhbf:BUFFER-FIELD(ENTRY(i,bfqcfg.xxqcfg_chr15)):BUFFER-VALUE))).
                    END.
                    dstring = dstring {&SK} ".".
                    &IF DEFINED(TESTMODE) = 0 &THEN
                    IF bfqcfg.xxqcfg_chr21 NE SPACES THEN 
                    DO:
                        cim:invchar = bfqcfg.xxqcfg_chr22.
                        cim:strexnum = bfqcfg.xxqcfg_int02.
                        DO i = 1 TO NUM-ENTRIES(bfqcfg.xxqcfg_chr21):
                            /*MESSAGE global_user_lang_dir + ' ' + ENTRY(i,bfqcfg.xxqcfg_chr21) VIEW-AS ALERT-BOX.*/
                            cim:setLblname(i,ENTRY(i,bfqcfg.xxqcfg_chr21)).
                        END.
                    END.
                    &ENDIF
                    cim:uiload(dstring,cimexec).
                    ASSIGN 
                    dhbf:BUFFER-FIELD("tpisok"):BUFFER-VALUE = NOT cim:hverr    /*取反*/
                    dhbf:BUFFER-FIELD("tpmsg"):BUFFER-VALUE = cim:errmsg.
                    &IF DEFINED(TESTMODE) = 0 &THEN
                    IF bfqcfg.xxqcfg_chr21 NE SPACES THEN 
                    DO i = 1 TO NUM-ENTRIES(bfqcfg.xxqcfg_chr21):
                        ASSIGN 
                        dhbf:BUFFER-FIELD(ENTRY(i,bfqcfg.xxqcfg_chr21)):BUFFER-VALUE = cim:getStrval(i).
                    END.
                    &ENDIF
                    IF cim:hverr THEN UNDO,LEAVE.
                END.
            END.
            q:QUERY-CLOSE().
            DELETE OBJECT q.
            q = ?.
        END.
    END METHOD.

    METHOD PUBLIC VOID mainblock():
        vmainblock(dfcimexec).  
    END METHOD.

END CLASS.

2.相应的配置界面程序

/*------------------------------------------------------------------------
    File        : xxguicimlcset.p
    Purpose     : GUI CIMLOAD LOW-CODE MENU CONFIG

    Syntax      : 

    Description : 

    Author(s)   : 
    Created     : Sat Oct 29 13:38:56 CST 2016
    Notes       : 
  ----------------------------------------------------------------------*/

&SCOPED-DEFINE WIDTHLMT 56
&SCOPED-DEFINE TEMPPATH "D:\"
&SCOPED-DEFINE RCODEPATH "guicli"
&SCOPED-DEFINE TESTMODE YES
/*76  设置最大的合计宽度*/
{mfdtitle.i} DEFINE VARIABLE xxcimtype AS CHARACTER FORMAT "x(16)" NO-UNDO. /*TYPE-ID*/ DEFINE VARIABLE dfcimexec AS CHARACTER FORMAT "x(16)" NO-UNDO. /*procedure name*/ DEFINE VARIABLE clsname AS CHARACTER FORMAT "x(16)" INIT "cimlcmodel" NO-UNDO. /*类名*/ DEFINE VARIABLE menuname AS CHARACTER FORMAT "x(16)" NO-UNDO. DEFINE VARIABLE contrname AS CHARACTER FORMAT "x(16)" INIT "xxcimlcgeneral.p" NO-UNDO. DEFINE VARIABLE viewname AS CHARACTER FORMAT "x(16)" INIT "cimframe.cls" NO-UNDO. DEFINE VARIABLE frametitle AS CHARACTER FORMAT "x(60)" NO-UNDO. DEFINE VARIABLE bptitle AS CHARACTER FORMAT "x(60)" NO-UNDO. DEFINE VARIABLE datelab AS CHARACTER FORMAT "x(12)" NO-UNDO. DEFINE VARIABLE showdate AS LOGICAL NO-UNDO. DEFINE VARIABLE retainlog AS LOGICAL NO-UNDO. DEFINE VARIABLE togbxlab AS CHARACTER FORMAT "x(12)" NO-UNDO. DEFINE VARIABLE showtogbx AS LOGICAL NO-UNDO. DEFINE VARIABLE togbx AS LOGICAL NO-UNDO. DEFINE VARIABLE togbxmsgf AS CHARACTER FORMAT "x(60)" NO-UNDO. DEFINE VARIABLE togbxmsgt AS CHARACTER FORMAT "x(60)" NO-UNDO. DEFINE VARIABLE loglevel AS LOGICAL FORMAT "Basic/Verbose" NO-UNDO. DEFINE VARIABLE cimstr1 AS CHARACTER VIEW-AS EDITOR SIZE 65 BY 15 SCROLLBAR-VERTICAL NO-UNDO. DEFINE VARIABLE cimstr2 AS CHARACTER VIEW-AS EDITOR SIZE 65 BY 15 SCROLLBAR-VERTICAL NO-UNDO. DEFINE VARIABLE fieldlist AS CHARACTER FORMAT "x(24)" EXTENT 32 NO-UNDO. DEFINE VARIABLE labellist AS CHARACTER FORMAT "x(24)" EXTENT 32 NO-UNDO. DEFINE VARIABLE formatlist AS DECIMAL EXTENT 32 NO-UNDO. DEFINE VARIABLE visiblelist AS LOGICAL EXTENT 7 INIT YES NO-UNDO. DEFINE VARIABLE dtypelist AS CHARACTER FORMAT "x(24)" EXTENT 32 NO-UNDO. DEFINE VARIABLE totwidth AS DECIMAL NO-UNDO. DEFINE VARIABLE otherparams AS CHARACTER FORMAT "x(60)" NO-UNDO. DEFINE VARIABLE strvalist AS CHARACTER FORMAT "x(60)" NO-UNDO. DEFINE VARIABLE invchar AS CHARACTER FORMAT "x(2)" INIT ":" NO-UNDO. DEFINE VARIABLE strexnum AS INTEGER FORMAT ">>" NO-UNDO. DEFINE VARIABLE i AS INTEGER INITIAL 1 NO-UNDO. DEFINE VARIABLE choice AS LOGICAL INIT YES NO-UNDO. DEFINE VARIABLE msgtxt AS CHARACTER NO-UNDO. /*message text*/ FORM /*GUI*/ RECT-FRAME AT ROW 1.4 COLUMN 1.25 RECT-FRAME-LABEL AT ROW 1 COLUMN 3 NO-LABEL SKIP(.5) /*GUI*/ xxcimtype COLON 20 LABEL "GUI CIMLOAD-ID" dfcimexec COLON 55 LABEL "EXEC-PRO" SKIP(.1) clsname COLON 20 LABEL "MODEL-PROGRAM" menuname COLON 55 LABEL "MENU-PROGRAM" SKIP(.2) contrname COLON 20 LABEL "CONTR-PROGRAM" viewname COLON 55 LABEL "VIEW-PROGRAM" SKIP(.2) frametitle COLON 15 LABEL "MAIN TITLE" SKIP(.1) bptitle COLON 15 LABEL "BROWSE NAME" SKIP(.1) datelab COLON 20 LABEL "DATE LABEL" showdate COLON 55 LABEL "SHOW DATE" SKIP(.1) loglevel COLON 20 LABEL "MSG-ERROR LEVEL" retainlog COLON 55 LABEL "RETAIN LOG" SKIP(.1) togbxlab COLON 15 LABEL "TOGBX LABEL" showtogbx COLON 45 LABEL "SHOW TOGBX" togbx COLON 70 LABEL "TOGBX CHECKED" SKIP(.1) togbxmsgf COLON 15 LABEL "UNCHECKED MSG" SKIP(.1) togbxmsgt COLON 15 LABEL "CHECKED MSG" SKIP(.2) strvalist COLON 15 LABEL "READ STR-LIST"SKIP(.1) invchar COLON 20 LABEL "STR EX-SYMB" strexnum COLON 55 LABEL "STR OFFSET" SKIP(.1) SKIP(.2) otherparams COLON 15 LABEL "OTHER PARAMS" SKIP(.5) WITH FRAME a SIDE-LABELS WIDTH 80 ATTR-SPACE NO-BOX THREE-D /*GUI*/. DEFINE VARIABLE F-a-title AS CHARACTER. F-a-title = "GUI CIMLOAD LOW-CODE MENU CONFIG". RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME a = F-a-title. RECT-FRAME-LABEL:WIDTH-PIXELS IN FRAME a = FONT-TABLE:GET-TEXT-WIDTH-PIXELS(RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME a + " ",RECT-FRAME-LABEL:FONT). RECT-FRAME:HEIGHT-PIXELS IN FRAME a = FRAME a:HEIGHT-PIXELS - RECT-FRAME:Y IN FRAME a - 2. RECT-FRAME:WIDTH-CHARS IN FRAME a = FRAME a:WIDTH-CHARS - .5. /*GUI*/ FORM RECT-FRAME AT ROW 1.4 COLUMN 1.25 RECT-FRAME-LABEL AT ROW 1 COLUMN 3 NO-LABEL SKIP(.2) fieldlist[1] COLON 12 LABEL "Field[1]" labellist[1] COLON 50 LABEL "Label[1]" SKIP(.1) formatlist[1] COLON 12 LABEL "Width[1]" visiblelist[1] COLON 33 LABEL "Visib[1]" dtypelist[1] COLON 50 LABEL "Type[1]" SKIP(.2) fieldlist[2] COLON 12 LABEL "Field[2]" labellist[2] COLON 50 LABEL "Label[2]" SKIP(.1) formatlist[2] COLON 12 LABEL "Width[2]" visiblelist[2] COLON 33 LABEL "Visib[2]" dtypelist[2] COLON 50 LABEL "Type[2]" SKIP(.2) fieldlist[3] COLON 12 LABEL "Field[3]" labellist[3] COLON 50 LABEL "Label[3]" SKIP(.1) formatlist[3] COLON 12 LABEL "Width[3]" visiblelist[3] COLON 33 LABEL "Visib[3]" dtypelist[3] COLON 50 LABEL "Type[3]"SKIP(.2) fieldlist[4] COLON 12 LABEL "Field[4]" labellist[4] COLON 50 LABEL "Label[4]" SKIP(.1) formatlist[4] COLON 12 LABEL "Width[4]" visiblelist[4] COLON 33 LABEL "Visib[4]" dtypelist[4] COLON 50 LABEL "Type[4]" SKIP(.2) fieldlist[5] COLON 12 LABEL "Field[5]" labellist[5] COLON 50 LABEL "Label[5]" SKIP(.1) formatlist[5] COLON 12 LABEL "Width[5]" visiblelist[5] COLON 33 LABEL "Visib[5]" dtypelist[5] COLON 50 LABEL "Type[5]" SKIP(.2) fieldlist[6] COLON 12 LABEL "Field[6]" labellist[6] COLON 50 LABEL "Label[6]" SKIP(.1) formatlist[6] COLON 12 LABEL "Width[6]" visiblelist[6] COLON 33 LABEL "Visib[6]" dtypelist[6] COLON 50 LABEL "Type[6]"SKIP(.2) fieldlist[7] COLON 12 LABEL "Field[7]" labellist[7] COLON 50 LABEL "Label[7]" SKIP(.1) formatlist[7] COLON 12 LABEL "Width[7]" visiblelist[7] COLON 33 LABEL "Visib[7]" dtypelist[7] COLON 50 LABEL "Type[7]"SKIP(.2) fieldlist[8] COLON 12 LABEL "Field[8]" labellist[8] COLON 50 LABEL "Label[8]" SKIP(.1) formatlist[8] COLON 12 LABEL "Width[8]" dtypelist[8] COLON 50 LABEL "Type[8]" SKIP(.2) SKIP(.2) WITH FRAME c SIDE-LABELS WIDTH 80 ATTR-SPACE NO-BOX THREE-D /*GUI*/. RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME c = "Temp-Table Field Config 1". RECT-FRAME-LABEL:WIDTH-PIXELS IN FRAME c = FONT-TABLE:GET-TEXT-WIDTH-PIXELS(RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME c + " ",RECT-FRAME-LABEL:FONT). RECT-FRAME:HEIGHT-PIXELS IN FRAME c = FRAME c:HEIGHT-PIXELS - RECT-FRAME:Y IN FRAME c - 2. RECT-FRAME:WIDTH-CHARS IN FRAME c = FRAME c:WIDTH-CHARS - .5. /*GUI*/ FORM RECT-FRAME AT ROW 1.4 COLUMN 1.25 RECT-FRAME-LABEL AT ROW 1 COLUMN 3 NO-LABEL SKIP(.2) fieldlist[9] COLON 12 LABEL "Field[9]" labellist[9] COLON 50 LABEL "Label[9]" SKIP(.1) formatlist[9] COLON 12 LABEL "Width[9]" dtypelist[9] COLON 50 LABEL "Type[9]" SKIP(.2) fieldlist[10] COLON 12 LABEL "Field[10]" labellist[10] COLON 50 LABEL "Label[10]" SKIP(.1) formatlist[10] COLON 12 LABEL "Width[10]" dtypelist[10] COLON 50 LABEL "Type[10]"SKIP(.2) fieldlist[11] COLON 12 LABEL "Field[11]" labellist[11] COLON 50 LABEL "Label[11]" SKIP(.1) formatlist[11] COLON 12 LABEL "Width[11]" dtypelist[11] COLON 50 LABEL "Type[11]" SKIP(.2) fieldlist[12] COLON 12 LABEL "Field[12]" labellist[12] COLON 50 LABEL "Label[12]" SKIP(.1) formatlist[12] COLON 12 LABEL "Width[12]" dtypelist[12] COLON 50 LABEL "Type[12]" SKIP(.2) fieldlist[13] COLON 12 LABEL "Field[13]" labellist[13] COLON 50 LABEL "Label[13]" SKIP(.1) formatlist[13] COLON 12 LABEL "Width[13]" dtypelist[13] COLON 50 LABEL "Type[13]"SKIP(.2) fieldlist[14] COLON 12 LABEL "Field[14]" labellist[14] COLON 50 LABEL "Label[14]" SKIP(.1) formatlist[14] COLON 12 LABEL "Width[14]" dtypelist[14] COLON 50 LABEL "Type[14]"SKIP(.2) fieldlist[15] COLON 12 LABEL "Field[15]" labellist[15] COLON 50 LABEL "Label[15]" SKIP(.1) formatlist[15] COLON 12 LABEL "Width[15]" dtypelist[15] COLON 50 LABEL "Type[15]"SKIP(.2) fieldlist[16] COLON 12 LABEL "Field[16]" labellist[16] COLON 50 LABEL "Label[16]" SKIP(.1) formatlist[16] COLON 12 LABEL "Width[16]" dtypelist[16] COLON 50 LABEL "Type[16]" SKIP(.2) SKIP(.2) WITH FRAME d SIDE-LABELS WIDTH 80 ATTR-SPACE NO-BOX THREE-D /*GUI*/. RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME d = "Temp-Table Field Config 2". RECT-FRAME-LABEL:WIDTH-PIXELS IN FRAME d = FONT-TABLE:GET-TEXT-WIDTH-PIXELS(RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME d + " ",RECT-FRAME-LABEL:FONT). RECT-FRAME:HEIGHT-PIXELS IN FRAME d = FRAME d:HEIGHT-PIXELS - RECT-FRAME:Y IN FRAME d - 2. RECT-FRAME:WIDTH-CHARS IN FRAME d = FRAME d:WIDTH-CHARS - .5. /*GUI*/ FORM RECT-FRAME AT ROW 1.4 COLUMN 1.25 RECT-FRAME-LABEL AT ROW 1 COLUMN 3 NO-LABEL SKIP(.2) fieldlist[17] COLON 12 LABEL "Field[17]" labellist[17] COLON 50 LABEL "Label[17]" SKIP(.1) formatlist[17] COLON 12 LABEL "Width[17]" dtypelist[17] COLON 50 LABEL "Type[17]" SKIP(.2) fieldlist[18] COLON 12 LABEL "Field[18]" labellist[18] COLON 50 LABEL "Label[18]" SKIP(.1) formatlist[18] COLON 12 LABEL "Width[18]" dtypelist[18] COLON 50 LABEL "Type[18]"SKIP(.2) fieldlist[19] COLON 12 LABEL "Field[19]" labellist[19] COLON 50 LABEL "Label[19]" SKIP(.1) formatlist[19] COLON 12 LABEL "Width[19]" dtypelist[19] COLON 50 LABEL "Type[19]" SKIP(.2) fieldlist[20] COLON 12 LABEL "Field[20]" labellist[20] COLON 50 LABEL "Label[20]" SKIP(.1) formatlist[20] COLON 12 LABEL "Width[20]" dtypelist[20] COLON 50 LABEL "Type[20]" SKIP(.2) fieldlist[21] COLON 12 LABEL "Field[21]" labellist[21] COLON 50 LABEL "Label[21]" SKIP(.1) formatlist[21] COLON 12 LABEL "Width[21]" dtypelist[21] COLON 50 LABEL "Type[21]"SKIP(.2) fieldlist[22] COLON 12 LABEL "Field[22]" labellist[22] COLON 50 LABEL "Label[22]" SKIP(.1) formatlist[22] COLON 12 LABEL "Width[22]" dtypelist[22] COLON 50 LABEL "Type[22]"SKIP(.2) fieldlist[23] COLON 12 LABEL "Field[23]" labellist[23] COLON 50 LABEL "Label[23]" SKIP(.1) formatlist[23] COLON 12 LABEL "Width[23]" dtypelist[23] COLON 50 LABEL "Type[23]"SKIP(.2) fieldlist[24] COLON 12 LABEL "Field[24]" labellist[24] COLON 50 LABEL "Label[24]" SKIP(.1) formatlist[24] COLON 12 LABEL "Width[24]" dtypelist[24] COLON 50 LABEL "Type[24]" SKIP(.2) SKIP(.2) WITH FRAME e SIDE-LABELS WIDTH 80 ATTR-SPACE NO-BOX THREE-D /*GUI*/. RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME e = "Temp-Table Field Config 3". RECT-FRAME-LABEL:WIDTH-PIXELS IN FRAME e = FONT-TABLE:GET-TEXT-WIDTH-PIXELS(RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME e + " ",RECT-FRAME-LABEL:FONT). RECT-FRAME:HEIGHT-PIXELS IN FRAME e = FRAME e:HEIGHT-PIXELS - RECT-FRAME:Y IN FRAME e - 2. RECT-FRAME:WIDTH-CHARS IN FRAME e = FRAME e:WIDTH-CHARS - .5. /*GUI*/ FORM RECT-FRAME AT ROW 1.4 COLUMN 1.25 RECT-FRAME-LABEL AT ROW 1 COLUMN 3 NO-LABEL SKIP(.2) fieldlist[25] COLON 12 LABEL "Field[25]" labellist[25] COLON 50 LABEL "Label[25]" SKIP(.1) formatlist[25] COLON 12 LABEL "Width[25]" dtypelist[25] COLON 50 LABEL "Type[25]" SKIP(.2) fieldlist[26] COLON 12 LABEL "Field[26]" labellist[26] COLON 50 LABEL "Label[26]" SKIP(.1) formatlist[26] COLON 12 LABEL "Width[26]" dtypelist[26] COLON 50 LABEL "Type[26]"SKIP(.2) fieldlist[27] COLON 12 LABEL "Field[27]" labellist[27] COLON 50 LABEL "Label[27]" SKIP(.1) formatlist[27] COLON 12 LABEL "Width[27]" dtypelist[27] COLON 50 LABEL "Type[27]" SKIP(.2) fieldlist[28] COLON 12 LABEL "Field[28]" labellist[28] COLON 50 LABEL "Label[28]" SKIP(.1) formatlist[28] COLON 12 LABEL "Width[28]" dtypelist[28] COLON 50 LABEL "Type[28]" SKIP(.2) fieldlist[29] COLON 12 LABEL "Field[29]" labellist[29] COLON 50 LABEL "Label[29]" SKIP(.1) formatlist[29] COLON 12 LABEL "Width[29]" dtypelist[29] COLON 50 LABEL "Type[29]"SKIP(.2) fieldlist[30] COLON 12 LABEL "Field[30]" labellist[30] COLON 50 LABEL "Label[30]" SKIP(.1) formatlist[30] COLON 12 LABEL "Width[30]" dtypelist[30] COLON 50 LABEL "Type[30]"SKIP(.2) fieldlist[31] COLON 12 LABEL "Field[31]" labellist[31] COLON 50 LABEL "Label[31]" SKIP(.1) formatlist[31] COLON 12 LABEL "Width[31]" dtypelist[31] COLON 50 LABEL "Type[31]"SKIP(.2) fieldlist[32] COLON 12 LABEL "Field[32]" labellist[32] COLON 50 LABEL "Label[32]" SKIP(.1) formatlist[32] COLON 12 LABEL "Width[32]" dtypelist[32] COLON 50 LABEL "Type[32]"SKIP(.2) SKIP(.2) WITH FRAME f SIDE-LABELS WIDTH 80 ATTR-SPACE NO-BOX THREE-D /*GUI*/. RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME f = "Temp-Table Field Config 4". RECT-FRAME-LABEL:WIDTH-PIXELS IN FRAME f = FONT-TABLE:GET-TEXT-WIDTH-PIXELS(RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME f + " ",RECT-FRAME-LABEL:FONT). RECT-FRAME:HEIGHT-PIXELS IN FRAME f = FRAME f:HEIGHT-PIXELS - RECT-FRAME:Y IN FRAME f - 2. RECT-FRAME:WIDTH-CHARS IN FRAME f = FRAME f:WIDTH-CHARS - .5. /*GUI*/ FORM RECT-FRAME AT ROW 1.4 COLUMN 1.25 RECT-FRAME-LABEL AT ROW 1 COLUMN 3 NO-LABEL SKIP(.2) /*GUI*/ cimstr1 COLON 12 LABEL "CIM-STRING" SKIP(1) WITH FRAME z SIDE-LABELS WIDTH 80 ATTR-SPACE NO-BOX THREE-D /*GUI*/. RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME z = "CIMLOAD Stream String". RECT-FRAME-LABEL:WIDTH-PIXELS IN FRAME z = FONT-TABLE:GET-TEXT-WIDTH-PIXELS(RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME z + " ",RECT-FRAME-LABEL:FONT). RECT-FRAME:HEIGHT-PIXELS IN FRAME z = FRAME z:HEIGHT-PIXELS - RECT-FRAME:Y IN FRAME z - 2. RECT-FRAME:WIDTH-CHARS IN FRAME z = FRAME z:WIDTH-CHARS - .5. /*GUI*/ FORM RECT-FRAME AT ROW 1.4 COLUMN 1.25 RECT-FRAME-LABEL AT ROW 1 COLUMN 3 NO-LABEL SKIP(.2) /*GUI*/ cimstr2 COLON 12 LABEL "CIM-STRING" SKIP(1) WITH FRAME P SIDE-LABELS WIDTH 80 ATTR-SPACE NO-BOX THREE-D /*GUI*/. RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME P = "CIMLOAD Stream String(TOGBX CHECKED)". RECT-FRAME-LABEL:WIDTH-PIXELS IN FRAME P = FONT-TABLE:GET-TEXT-WIDTH-PIXELS(RECT-FRAME-LABEL:SCREEN-VALUE IN FRAME P + " ",RECT-FRAME-LABEL:FONT). RECT-FRAME:HEIGHT-PIXELS IN FRAME P = FRAME P:HEIGHT-PIXELS - RECT-FRAME:Y IN FRAME P - 2. RECT-FRAME:WIDTH-CHARS IN FRAME P = FRAME P:WIDTH-CHARS - .5. /*GUI*/ mainloop: REPEAT WITH FRAME a ON ENDKEY UNDO mainloop,LEAVE mainloop: UPDATE xxcimtype VALIDATE(xxcimtype NE "","CIM-TYPE cannot be blank!") HELP "Please enter the CIM-TYPE ID" WITH FRAME a EDITING: /* FIND NEXT/PREVIOUS RECORD */ &IF DEFINED(TESTMODE) > 0 &THEN {us/mf/mfnp.i xxqcfg_mstr xxcimtype "xxqcfg_type = 'GUICIMLCSET' AND xxqcfg_id" xxcimtype xxqcfg_id xxqcfg_type} &ELSE {mfnp.i xxqcfg_mstr xxcimtype "xxqcfg_type = 'GUICIMLCSET' AND xxqcfg_id" xxcimtype xxqcfg_id xxqcfg_type} &ENDIF IF recno <> ? THEN DO: /*DO i = 1 TO 7: ASSIGN labellist[i] = ENTRY(i,xxqcfg_chr16) formatlist[i] = DECIMAL(ENTRY(i,xxqcfg_chr17)) visiblelist[i] = LOGICAL(ENTRY(i,xxqcfg_chr18)). END. */ DISP xxqcfg_id @ xxcimtype xxqcfg_chr10 @ menuname xxqcfg_chr11 @ viewname xxqcfg_chr12 @ contrname xxqcfg_chr01 @ clsname xxqcfg_chr02 @ frametitle xxqcfg_chr03 @ bptitle xxqcfg_chr04 @ datelab xxqcfg_log02 @ togbx xxqcfg_log03 @ showdate xxqcfg_log04 @ showtogbx xxqcfg_log05 @ retainlog xxqcfg_log06 @ loglevel xxqcfg_chr05 @ togbxlab xxqcfg_chr07 @ dfcimexec xxqcfg_chr08 @ togbxmsgf xxqcfg_chr09 @ togbxmsgt xxqcfg_chr21 @ strvalist xxqcfg_chr22 @ invchar xxqcfg_int02 @ strexnum xxqcfg_chr20 @ otherparams WITH FRAME a. recno = ?. END. END. /* EDITING */ IF NOT xxcimtype BEGINS 'xx' THEN DO: msgtxt = "CIM-TYPE should begin with 'xx' prefix". &IF DEFINED(TESTMODE) > 0 &THEN {us/bbi/pxmsg.i &MSGTEXT=msgtxt &ERRORLEVEL=4} &ELSE {pxmsg.i &MSGTEXT=msgtxt &ERRORLEVEL=4} &ENDIF UNDO,RETRY. END. IF SEARCH(clsname + ".cls") = ? AND SEARCH(clsname + ".r") = ? THEN DO: msgtxt = "MODEL-PROGRAM " + clsname + ".cls" + " does not exist". &IF DEFINED(TESTMODE) > 0 &THEN {us/bbi/pxmsg.i &MSGTEXT=msgtxt &ERRORLEVEL=4} &ELSE {pxmsg.i &MSGTEXT=msgtxt &ERRORLEVEL=4} &ENDIF UNDO,RETRY. END. RUN dispset. SET dfcimexec contrname HELP "F6=Re-compile Menu Program F7=Preview the Menu Program" /*viewname*/ GO-ON ("F6" "F7") WITH FRAME a. IF LASTKEY = KEYCODE("F6") /*手动重新编译*/ THEN DO: UPDATE menuname HELP "Press Key INSERT to Compile Menu Program" GO-ON("insert") WITH FRAME a. IF LASTKEY = KEYCODE("insert") THEN RUN compile-rcode(xxcimtype). END. IF LASTKEY = KEYCODE("F7") /*预览*/ THEN DO: MESSAGE "Preview ?" VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO UPDATE choice. IF choice THEN DO: &IF DEFINED(TESTMODE) > 0 &THEN {us/bbi/gprun.i ""gpwinrun.p"" "(menuname,'Menu Preview')"} &ELSE {gprun.i ""gpwinrun.p"" "(menuname,'Menu Preview')"} &ENDIF END. END. IF dfcimexec EQ '' THEN DO: msgtxt = "EXEC-PROGRAM can't be blank". &IF DEFINED(TESTMODE) > 0 &THEN {us/bbi/pxmsg.i &MSGTEXT=msgtxt &ERRORLEVEL=4} &ELSE {pxmsg.i &MSGTEXT=msgtxt &ERRORLEVEL=4} &ENDIF UNDO,RETRY. END. FIND FIRST mnd_det WHERE mnd_exec = dfcimexec NO-LOCK NO-ERROR. IF NOT AVAILABLE mnd_det THEN DO: msgtxt = "EXEC-PROGRAM does not exist in menu system". &IF DEFINED(TESTMODE) > 0 &THEN {us/bbi/pxmsg.i &MSGTEXT=msgtxt &ERRORLEVEL=4} &ELSE {pxmsg.i &MSGTEXT=msgtxt &ERRORLEVEL=4} &ENDIF UNDO,RETRY. END. ELSE IF frametitle EQ '' THEN frametitle = mnd_label. IF contrname EQ '' THEN DO: msgtxt = "CONTROLLER-PROGRAM can't be blank". &IF DEFINED(TESTMODE) > 0 &THEN {us/bbi/pxmsg.i &MSGTEXT=msgtxt &ERRORLEVEL=4} &ELSE {pxmsg.i &MSGTEXT=msgtxt &ERRORLEVEL=4} &ENDIF NEXT-PROMPT contrname WITH FRAME a. UNDO,RETRY. END. loop-b: REPEAT ON ENDKEY UNDO loop-b,LEAVE loop-b: SET frametitle bptitle datelab showdate loglevel retainlog togbxlab showtogbx togbx togbxmsgf togbxmsgt strvalist invchar strexnum otherparams GO-ON ("F5" "CTRL-D") WITH FRAME a. IF LASTKEY = KEYCODE("F5") OR LASTKEY = KEYCODE("CTRL-D") THEN DO: MESSAGE "Confirm to delete?" VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO UPDATE choice. IF choice THEN DO: FOR FIRST xxqcfg_mstr WHERE xxqcfg_type = "GUICIMLCSET" AND xxqcfg_id = xxcimtype EXCLUSIVE-LOCK: DELETE xxqcfg_mstr. MESSAGE "Deleted". END. END. NEXT mainloop. END. /* totwidth = 0. DO i = 1 TO EXTENT(formatlist): IF visiblelist[i] = NO THEN NEXT. totwidth = totwidth + formatlist[i]. END. IF totwidth NE {&WIDTHLMT} THEN DO: MESSAGE 'The Total Width should be {&WIDTHLMT}' VIEW-AS ALERT-BOX WARNING. /*宽度总和得是56?*/ UNDO loop-b,RETRY loop-b. END. */ FIND FIRST xxqcfg_mstr WHERE xxqcfg_type = "GUICIMLCSET" AND xxqcfg_id = xxcimtype NO-ERROR. IF NOT AVAILABLE xxqcfg_mstr THEN DO: CREATE xxqcfg_mstr. ASSIGN xxqcfg_type = "GUICIMLCSET" xxqcfg_id = xxcimtype xxqcfg_userid = global_userid xxqcfg_create = NOW. END. ASSIGN xxqcfg_chr01 = clsname xxqcfg_chr02 = frametitle xxqcfg_chr03 = bptitle xxqcfg_chr04 = datelab xxqcfg_log02 = togbx xxqcfg_log03 = showdate xxqcfg_log04 = showtogbx xxqcfg_log05 = retainlog xxqcfg_log06 = loglevel xxqcfg_chr05 = togbxlab /*xxqcfg_chr06 = labellist[1]*/ xxqcfg_chr07 = dfcimexec xxqcfg_chr08 = togbxmsgf xxqcfg_chr09 = togbxmsgt xxqcfg_chr10 = menuname xxqcfg_chr11 = viewname xxqcfg_chr12 = contrname xxqcfg_chr21 = strvalist xxqcfg_chr22 = invchar xxqcfg_int02 = strexnum /*New-added*/ xxqcfg_chr20 = otherparams. IF AVAILABLE xxqcfg_mstr OR NEW xxqcfg_mstr THEN DO: DO i = 1 TO EXTENT(fieldlist): ASSIGN fieldlist[i] = "" dtypelist[i] = "" formatlist[i] = 0 labellist[i] = "". END. DO i = 1 TO 7: visiblelist[i] = LOGICAL(ENTRY(i,xxqcfg_chr18)) NO-ERROR. IF ERROR-STATUS:ERROR OR visiblelist[i] = ? THEN visiblelist[i] = YES. END. DO i = 1 TO NUM-ENTRIES(xxqcfg_chr15): ASSIGN fieldlist[i] = ENTRY(i,xxqcfg_chr15) labellist[i] = ENTRY(i,xxqcfg_chr16) dtypelist[i] = ENTRY(i,xxqcfg_chr19) formatlist[i] = DECIMAL(ENTRY(i,xxqcfg_chr17)) NO-ERROR. END. ASSIGN cimstr1 = xxqcfg_chr13 cimstr2 = xxqcfg_chr14. END. IF AVAILABLE xxqcfg_mstr THEN RELEASE xxqcfg_mstr. MESSAGE "SETTINGS SAVED". UPDATE fieldlist [1 FOR 8] labellist [1 FOR 8] formatlist [1 FOR 8] visiblelist [1 FOR 7] dtypelist [1 FOR 8] WITH FRAME c. UPDATE fieldlist [9 FOR 8] labellist [9 FOR 8] formatlist [9 FOR 8] dtypelist [9 FOR 8] WITH FRAME d. UPDATE fieldlist [17 FOR 8] labellist [17 FOR 8] formatlist [17 FOR 8] dtypelist [17 FOR 8] WITH FRAME e. UPDATE fieldlist [25 FOR 8] labellist [25 FOR 8] formatlist [25 FOR 8] dtypelist [25 FOR 8] WITH FRAME f. DO i = 1 TO EXTENT(fieldlist): IF fieldlist[i] EQ '' THEN LEAVE. IF dtypelist[i] EQ '' THEN dtypelist[i] = 'character'. /*默认*/ IF dtypelist[i] NE '' THEN DO: IF LOOKUP(dtypelist[i],'character,date,integer,datetime,logical,decimal') = 0 THEN DO: msgtxt = "Data Type: " + dtypelist[i] + ' is invalid'. &IF DEFINED(TESTMODE) > 0 &THEN {us/bbi/pxmsg.i &MSGTEXT=msgtxt &ERRORLEVEL=4} &ELSE {pxmsg.i &MSGTEXT=msgtxt &ERRORLEVEL=4} &ENDIF END. END. END. UPDATE cimstr1 HELP "Var: effdate is used for the DATE LABEL when it's available" WITH FRAME z. IF showtogbx THEN UPDATE cimstr2 HELP "Var: effdate is used for the DATE LABEL when it's available" WITH FRAME p. FIND FIRST xxqcfg_mstr WHERE xxqcfg_type = "GUICIMLCSET" AND xxqcfg_id = xxcimtype NO-ERROR. IF AVAILABLE xxqcfg_mstr THEN DO: ASSIGN xxqcfg_chr15 = fieldlist[1] xxqcfg_chr16 = labellist[1] xxqcfg_chr17 = STRING(formatlist[1]) xxqcfg_chr18 = STRING(visiblelist[1]) xxqcfg_chr19 = dtypelist[1]. DO i = 2 TO 7: xxqcfg_chr18 = xxqcfg_chr18 + "," + STRING(visiblelist[i]). END. DO i = 2 TO EXTENT(fieldlist): IF fieldlist[i] EQ '' AND i > 7 THEN LEAVE. ASSIGN xxqcfg_chr15 = xxqcfg_chr15 + "," + fieldlist[i] xxqcfg_chr16 = xxqcfg_chr16 + "," + labellist[i] xxqcfg_chr17 = xxqcfg_chr17 + "," + STRING(formatlist[i]) xxqcfg_chr19 = xxqcfg_chr19 + "," + dtypelist[i]. END. ASSIGN xxqcfg_chr13 = cimstr1 xxqcfg_chr14 = cimstr2. MESSAGE "FIELD SETTINGS SAVED". END. IF AVAILABLE xxqcfg_mstr THEN RELEASE xxqcfg_mstr. END. /*loop-b*/ END. /*main-loop*/ /* PROCEDURE checkcimstr: /*不用检查 因为是可以输入常量的*/ DEFINE INPUT PARAMETER ecimstr AS CHARACTER NO-UNDO. DEFINE VARIABLE m AS INTEGER NO-UNDO. DEFINE VARIABLE linestr AS CHARACTER NO-UNDO. DEFINE VARIABLE n AS INTEGER NO-UNDO. IF ecimstr NE '' THEN DO m = 1 TO NUM-ENTRIES(ecimstr,CHR(10)): linestr = ENTRY(m,ecimstr,CHR(10)). IF linestr NE '' THEN DO n = 1 TO NUM-ENTRIES(linestr,' '): IF ENTRY(n,linestr,' ') EQ '-' THEN NEXT. END. END. END PROCEDURE. */ PROCEDURE dispset. FIND FIRST xxqcfg_mstr WHERE xxqcfg_type = "GUICIMLCSET" AND xxqcfg_id = xxcimtype NO-LOCK NO-ERROR. IF AVAILABLE xxqcfg_mstr THEN DO: ASSIGN clsname = xxqcfg_chr01 menuname = xxqcfg_chr10 viewname = xxqcfg_chr11 contrname = xxqcfg_chr12. IF menuname = '' THEN ASSIGN menuname = xxcimtype + "ldc.p". /*如果为空 则出现默认*/ DISPLAY clsname menuname xxqcfg_chr11 @ viewname xxqcfg_chr12 @ contrname xxqcfg_chr02 @ frametitle xxqcfg_chr03 @ bptitle xxqcfg_chr04 @ datelab xxqcfg_log02 @ togbx xxqcfg_log03 @ showdate xxqcfg_log04 @ showtogbx xxqcfg_log05 @ retainlog xxqcfg_log06 @ loglevel xxqcfg_chr05 @ togbxlab xxqcfg_chr07 @ dfcimexec xxqcfg_chr08 @ togbxmsgf xxqcfg_chr09 @ togbxmsgt xxqcfg_chr21 @ strvalist xxqcfg_chr22 @ invchar xxqcfg_int02 @ strexnum xxqcfg_chr20 @ otherparams WITH FRAME a. END. ELSE DO: ASSIGN menuname = xxcimtype + "ldc.p". DISPLAY dfcimexec clsname menuname contrname viewname "" @ frametitle "" @ bptitle "" @ datelab showdate retainlog showtogbx togbx "" @ togbxlab "" @ togbxmsgf "" @ togbxmsgt "" @ strvalist "" @ invchar 0 @ strexnum "" @ otherparams WITH FRAME a. /*{mfmsg.i 1 1}*/ END. END PROCEDURE. PROCEDURE compile-rcode: DEFINE INPUT PARAMETER insname AS CHARACTER NO-UNDO. /*实例名*/ &IF DEFINED(TESTMODE) = 0 &THEN DEFINE VARIABLE tempfile AS CHARACTER NO-UNDO. DEFINE VARIABLE guipath AS CHARACTER NO-UNDO. DEFINE VARIABLE j AS INTEGER NO-UNDO. DO j = 1 TO NUM-ENTRIES(PROPATH): /*程序所在的目录*/ IF ENTRY(j,PROPATH) MATCHES("*\" + {&RCODEPATH}) THEN DO: ASSIGN guipath = ENTRY(j,PROPATH). LEAVE. END. END. ASSIGN tempfile = {&TEMPPATH} + insname + 'ldc.p'. OUTPUT TO VALUE(tempfile). PUT UNFORMATTED "~{mfdeclre.i~}" SKIP. PUT UNFORMATTED "DEFINE VARIABLE " + insname + " AS " + clsname + " NO-UNDO." SKIP. PUT UNFORMATTED insname + " = NEW " + clsname + "(global_domain,global_user_lang_dir,global_userid," + QUOTER(insname) + ")." SKIP. PUT UNFORMATTED '~{gprun.i ""' + contrname + '"" "(INPUT "' + QUOTER(insname) + '",INPUT ' + insname + ')"~}.' SKIP. PUT UNFORMATTED "DELETE OBJECT " + insname + "." SKIP. PUT UNFORMATTED insname + " = ?." SKIP. OUTPUT CLOSE. COMPILE VALUE(tempfile) SAVE INTO VALUE(guipath + "\" + REPLACE(global_user_lang_dir,"/","\") + "xx"). OS-DELETE VALUE(tempfile) NO-ERROR. FOR FIRST xxqcfg_mstr WHERE xxqcfg_type = "GUICIMLCSET" AND xxqcfg_id = xxcimtype: ASSIGN xxqcfg_chr11 = ''. END. IF AVAILABLE xxqcfg_mstr THEN RELEASE xxqcfg_mstr. MESSAGE "MENU PROGRAM COMPILED,CONTINUE TO SET?" VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO UPDATE choice. IF choice THEN DO: ASSIGN CLIPBOARD:VALUE = insname + 'ldc.p'. {gprun.i ""gpwinrun.p"" "('mgmemt.p','MENU SYSTEM MAINT')"} END. &ENDIF END PROCEDURE.

3.在Procedure Editor 里运行程序(或编译后挂菜单)

202509091

GUI CIMLOAD-ID: 自定义ID名    EXEC-PRO:原始程序名 例子里是ardrmt.p

MODEL/MENU-PROGRAM 默认   CONTR-PROGRAM: xxcimlcgeneral.p

其余各项参数按需求设置

202509092

此界面设置读取数据临时表的字段名称 标签 类型等,供生成模板和读取数据使用

202509093

依据Cimload的格式需求,把之前定义的字段填入组成字符串流

202509094

通过预览按钮可以进行导入界面的预览和测试,完成后可以就设置菜单并使用

TIPS:在预览模式里测试导入,显示成功也会回滚(事务控制)

4.其余程序代码

/*------------------------------------------------------------------------
    File        : xxcimlcgeneral.p
    Purpose     : FOR CIMLOAD COMMON USE

    Syntax      : 

    Description : 

    Author(s)   : 
    Created     : Sat Oct 29 12:54:11 CST 2016
    Notes       : 
  ----------------------------------------------------------------------*/

{mfdtitle.i}

DEFINE INPUT PARAMETER xxcimtype AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER l AS Icimode NO-UNDO.
DEFINE VARIABLE c AS cimframe NO-UNDO.
/* ***************************  Main Block  *************************** */
c = NEW cimframe(INPUT l).
FOR FIRST xxqcfg_mstr WHERE xxqcfg_type = "GUICIMLCSET" AND xxqcfg_id = xxcimtype AND xxqcfg_chr11 EQ '': 
    ASSIGN xxqcfg_chr11 = ENTRY(1,c:tostring(),"_") + '.cls'.
END.
IF AVAILABLE xxqcfg_mstr THEN RELEASE xxqcfg_mstr.

FIND FIRST xxqcfg_mstr WHERE xxqcfg_type = "GUICIMLCSET" AND xxqcfg_id = xxcimtype NO-LOCK NO-ERROR.
IF AVAILABLE xxqcfg_mstr THEN DO:
    ASSIGN 
    c:frametitle = xxqcfg_chr02
    c:bptitle = xxqcfg_chr03
    c:datelab = xxqcfg_chr04
    c:togbx = xxqcfg_log02
    c:showdate = xxqcfg_log03
    c:showtogbx = xxqcfg_log04
    c:togbxlab = xxqcfg_chr05
    c:togbxmsgf = xxqcfg_chr08
    c:togbxmsgt = xxqcfg_chr09
    c:labellist = xxqcfg_chr16
    c:formatlist = xxqcfg_chr17
    c:visiblelist = xxqcfg_chr18.
    l:setlogmode(xxqcfg_log05).
    l:setloglevel(xxqcfg_log06).
    /*更新类名*/
END.
ELSE MESSAGE "This Cimload Menu was not set up" VIEW-AS ALERT-BOX WARNING.

batchrun = YES.
c:waitset().    /*程序驻留 wait to windows close*/
batchrun = NO.
DELETE OBJECT c.
c = ?.

 

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