TIPTOP系统函数cl_show_array()

来源:互联网 发布:python 字符串组合 编辑:程序博客网 时间:2024/05/21 10:53

TIPTOP系统函数cl_show_array()

       在TIPTOP系统中设有这样的一个方法cl_show_array(),这个方法的主要作用是开窗呈现一个动态数组中的内容,主要用于我们在对单身里面多条数据进行逐一判断,最终将单身里面有错误的信息,在不写任何开窗代码的情况下,使用这个cl_show_array()将错误信息组合罗列在弹窗里面,外加了一个导出excel的功能.废话不多说直接写段代码测试一下,编写一个名为f4.4gl文件,然后上传编译,42m目录下面使用命令 fglrun cxm_f4.42m执行,弹出结果.

【注:因为是测试,所以这里面有些系统自带函数注释掉一些,然后添加了两个比较重要的函数FUNCTION cl_set_comp_att_text(ps_fields,ps_att_value)(动态设定栏位标题)FUNCTION cl_set_comp_visible(ps_fields,pi_visible)(动态隐藏栏位),这两个方法里面做了一些小小的改动】

代码如下:

 

   代码下载地址f4.4gl : http://pan.baidu.com/share/link?shareid=87582&uk=4060653789

 

--------------------华--------------------丽--------------------分--------------------割--------------------线--------------------

 

MAIN  DEFINE test1,test2  STRING  DEFINE r DYNAMIC ARRAY OF RECORD         key INTEGER,         lastname CHAR(20)        END RECORD   LET r[1].key = 1   LET r[1].lastname = 'Condor1'   LET r[2].key = 2   LET r[2].lastname = 'Condor2'   LET r[3].key = 3   LET r[3].lastname = 'Condor3'   LET test1 = "|",'Item' CLIPPED   LET test1=test1.trim(),"|",'Content' CLIPPED   LET test2 = '测试数据!' CLIPPED   CALLcl_show_array(base.typeinfo.create(r),test2,test1)  // base.typeinfo.create(r)数组内容,test2窗口标题,test1栏位标/                                                                                             //题(注意栏位标题的格式以”|”将其分开,因为后面的代码里面会以”|”来截取                                                                                  //)END MAIN FUNCTIONcl_show_array(pnode_array,ps_win_title,ps_title_str)   DEFINE  pnode_array      om.DomNode   DEFINE  ps_win_title     STRING   DEFINE  ps_title_str     STRING   DEFINE  lnode_record     om.DomNode   DEFINE  llst_fields      om.NodeList   DEFINE  lnode_field      om.DomNode   DEFINE  llst_rec_fields  om.NodeList   DEFINE  li_child_cnt     SMALLINT   DEFINE  li_rec_cnt       INTEGER   DEFINE  lr_array         DYNAMIC ARRAY OFRECORD               field1        STRING,               field2        STRING,               field3        STRING,               field4        STRING,               field5        STRING,               field6        STRING,               field7        STRING,               field8        STRING,               field9        STRING,               field10       STRING                             END RECORD   DEFINE  ls_visible_str   STRING   DEFINE  li_i             SMALLINT   DEFINE  li_j             SMALLINT   DEFINE  ls_i             STRING   DEFINE  lst_title_names base.StringTokenizer   DEFINE  ls_title         STRING      DEFINE  g_max_rec        INTEGER   DEFINE  lwin_curr          ui.Window     LETg_max_rec = 10                // 这个g_max_rec在global是有定义的,这里因为只是做简单测试赋值一固定值10   IF pnode_array IS NULL THEN      RETURN   ELSE      LET li_rec_cnt =pnode_array.getChildCount()      LETlnode_record = pnode_array.getFirstChild()   END IF    IF lnode_record IS NULL THEN      RETURN   ELSE       LET llst_rec_fields =lnode_record.selectByTagName("Field")      LET li_child_cnt =llst_rec_fields.getLength()     END IF    FOR li_i = 1 TO li_rec_cnt       IF li_i > g_max_rec THEN         -- CALL cl_err( '', 9035, 0 )       //系统自带错误提示的方法注释          EXIT FOR       END IF        IF li_i = 1 THEN          LET lnode_record =pnode_array.getFirstChild()       ELSE          LET lnode_record =lnode_record.getNext()       END IF        LET llst_fields =lnode_record.selectByTagName("Field")       FOR li_j = 1 TO llst_fields.getLength()           LET lnode_field =llst_fields.item(li_j)            CASE li_j              WHEN 1                 LET lr_array[li_i].field1 =lnode_field.getAttribute("value")              WHEN 2                 LET lr_array[li_i].field2 =lnode_field.getAttribute("value")              WHEN 3                 LET lr_array[li_i].field3 =lnode_field.getAttribute("value")              WHEN 4                 LET lr_array[li_i].field4 =lnode_field.getAttribute("value")              WHEN 5                 LET lr_array[li_i].field5 =lnode_field.getAttribute("value")              WHEN 6                 LET lr_array[li_i].field6 =lnode_field.getAttribute("value")              WHEN 7                 LET lr_array[li_i].field7 =lnode_field.getAttribute("value")              WHEN 8                 LET lr_array[li_i].field8 =lnode_field.getAttribute("value")              WHEN 9                 LET lr_array[li_i].field9 =lnode_field.getAttribute("value")              WHEN 10                 LET lr_array[li_i].field10 =lnode_field.getAttribute("value")           END CASE       END FOR   END FOR    OPEN WINDOW cl_show_array_w AT 1,1 WITH FORM"lib/42f/cl_show_array"      ATTRIBUTE(STYLE="frm_list")   -- CALL cl_ui_init()                     //系统自带的方法注释     -- CALL cl_chg_win_title(ps_win_title)  //系统自带方法注释,换成下面的两句更改窗口标题   LET lwin_curr = ui.window.getCurrent()   CALL lwin_curr.setText(ps_win_title)     DISPLAY li_rec_cnt TO FORMONLY.cnt   --CALLcl_set_act_visible("accept,cancel",FALSE)  //系统自带隐藏按钮代码注释   DISPLAY ARRAY lr_array TO s_array.*ATTRIBUTE(COUNT=g_max_rec,UNBUFFERED)      BEFORE DISPLAY         FOR li_i = li_child_cnt + 1 TO 10             LET ls_i = li_i             LET ls_visible_str =ls_visible_str,"field",ls_i             IF li_i != 10 THEN                LET ls_visible_str =ls_visible_str,","             END IF         END FOR         CALLcl_set_comp_visible(ls_visible_str,FALSE) //隐藏掉不需要栏位          LET lst_title_names =base.StringTokenizer.create(ps_title_str,"|")         LET li_i = 1         WHILE lst_title_names.hasMoreTokens()            LET ls_title =lst_title_names.nextToken()            LET ls_title = ls_title.trim()             CASE li_i               WHEN 1                  CALL cl_set_comp_att_text("field1",ls_title)  //动态设定栏位标题               WHEN 2                  CALLcl_set_comp_att_text("field2",ls_title)               WHEN 3                  CALLcl_set_comp_att_text("field3",ls_title)               WHEN 4                  CALLcl_set_comp_att_text("field4",ls_title)               WHEN 5                  CALLcl_set_comp_att_text("field5",ls_title)               WHEN 6                  CALLcl_set_comp_att_text("field6",ls_title)               WHEN 7                  CALLcl_set_comp_att_text("field7",ls_title)               WHEN 8                  CALLcl_set_comp_att_text("field8",ls_title)               WHEN 9                  CALLcl_set_comp_att_text("field9",ls_title)               WHEN 10                  CALLcl_set_comp_att_text("field10",ls_title)            END CASE            LET li_i = li_i + 1         END WHILE       ON ACTION exporttoexcel    // 汇出excel的方法注释        #IF cl_chk_act_auth() THEN mark byFUN-650020           --CALLcl_export_to_excel(ui.Interface.getRootNode(),base.TypeInfo.create(lr_array),'','')        #END IF       ON ACTION exit         EXIT DISPLAY      #TQC-660079...............begin      ON ACTION cancel         LET INT_FLAG=0         EXIT DISPLAY      #TQC-660079...............end   END DISPLAY   --CALLcl_set_act_visible("accept,cancel",TRUE)  //隐藏按钮方法注释    CLOSE WINDOW cl_show_array_wEND FUNCTIONFUNCTIONcl_set_comp_att_text(ps_fields, ps_att_value) //动态设定栏位标题   DEFINE  ps_fields          STRING,            ps_att_value       STRING   DEFINE  lst_fields        base.StringTokenizer,            lst_string         base.StringTokenizer,            ls_field_name      STRING,            ls_field_value     STRING,            ls_win_name        STRING   DEFINE  lnode_root         om.DomNode,            lnode_win          om.DomNode,            lnode_pre          om.DomNode,            llst_items         om.NodeList,            li_i               SMALLINT,            lnode_item         om.DomNode,            ls_item_name       STRING,            lnode_item_child   om.DomNode,            ls_item_pre_tag    STRING,            ls_item_tag_name   STRING   DEFINE  g_chg              DYNAMIC ARRAYOF RECORD               item            STRING,               value           STRING                               END RECORD   DEFINE  lwin_curr          ui.Window             IF (ps_fields IS NULL) THEN      RETURN   ELSE      LET ps_fields = ps_fields.toLowerCase()   END IF     LET lwin_curr = ui.Window.getCurrent()   LET lnode_win = lwin_curr.getNode()   LET ls_win_name = lnode_win.getAttribute("name")    LET llst_items =lnode_win.selectByPath("//Form//*")      LET lst_fields =base.StringTokenizer.create(ps_fields, ",")   LET lst_string =base.StringTokenizer.create(ps_att_value,",")   WHILE lst_fields.hasMoreTokens() ANDlst_string.hasMoreTokens()      LET ls_field_name =lst_fields.nextToken()      LET ls_field_value =lst_string.nextToken()      LET ls_field_name = ls_field_name.trim()       IF ls_field_name.equals(ls_win_name) THEN         CALL lnode_win.setAttribute("text",ls_field_value)      END IF       FOR li_i = 1 TO llst_items.getLength()         LET lnode_item = llst_items.item(li_i)         LET ls_item_name =lnode_item.getAttribute("colName")          IF (ls_item_name IS NULL) THEN            LET ls_item_name =lnode_item.getAttribute("name")             IF (ls_item_name IS NULL) THEN               CONTINUE FOR            END IF         END IF               IF(ls_item_name.equals(ls_field_name)) THEN            LET ls_item_tag_name = lnode_item.getTagName()            IFls_item_tag_name.equals("TableColumn") OR              ls_item_tag_name.equals("Window")OR              ls_item_tag_name.equals("Button") THEN   #FUN.570234 Add By Lifeng               CALLlnode_item.setAttribute("text",ls_field_value.trim())  #FUN-530037            ELSE               LET lnode_pre =lnode_item.getPrevious()               LET ls_item_pre_tag =lnode_pre.getTagName()               IFls_item_pre_tag.equals("Label") THEN                  CALL lnode_pre.setAttribute("text",ls_field_value.trim())#FUN-530037               END IF            END IF            EXIT FOR         END IF      END FOR   END WHILEEND FUNCTIONFUNCTIONcl_set_comp_visible(ps_fields, pi_visible) //动态设定栏位标题隐藏   DEFINE  ps_fields       STRING,            pi_visible      SMALLINT   DEFINE  lst_fields     base.StringTokenizer,            ls_field_name   STRING    DEFINE  lnode_root      om.DomNode,            llst_items      om.NodeList,            li_i            SMALLINT,            lnode_item      om.DomNode,            lnode_prev      om.DomNode,            ls_item_name   STRING,            ls_prev_name    STRING,                         #No:FUN-570225            ls_item_tag     STRING,            ls_prev_tag     STRING   DEFINE  lwin_curr       ui.Window,            lfrm_curr       ui.Form   DEFINE  lnode_frm       om.DomNode   DEFINE  ls_formName     STRING   DEFINE  li_idx          SMALLINT   DEFINE  li_gav_cnt      SMALLINT   DEFINE  lc_cust_flag    VARCHAR(1)   DEFINE  ls_gav09        VARCHAR(1)    --LIKE gav_file.gav09   DEFINE   ls_notNull      STRING,            ls_required     STRING   DEFINE  ls_gav01        VARCHAR(20),  --LIKE gav_file.gav01,            ls_gav02        VARCHAR(20)   --LIKE gav_file.gav02           --   #FUN-640184--   IF g_bgjob = 'Y'--      AND g_gui_type NOT MATCHES"[13]"  THEN   #TQC-710024 add--      RETURN--   END IF--   #END FUN-640184    IF (ps_fields IS NULL) THEN      RETURN   ELSE      LET ps_fields = ps_fields.toLowerCase()   END IF    LET lwin_curr = ui.Window.getCurrent()   LET lfrm_curr = lwin_curr.getForm()   LET lnode_frm = lfrm_curr.getNode()   LET lnode_root = ui.Interface.getRootNode()   #No:MOD-750003 --start--#  LET llst_items =lnode_root.selectByPath("//Form//*")       LET llst_items =lnode_frm.selectByPath("//Form//*")   #No:MOD-750003 ---end---   LET lst_fields =base.StringTokenizer.create(ps_fields, ",")    # FUN-4B0078    LET ls_formName = lnode_frm.getAttribute("name")   LET li_idx =ls_formName.getIndexOf("T", 1)   IF li_idx != 0 THEN      LET ls_formName =ls_formName.subString(1, li_idx - 1)   END IF   LET ls_gav01 = ls_formName   -- SELECT COUNT(*) INTO li_gav_cnt FROMgav_file  -- WHERE gav01 = ls_gav01 AND gav08 = 'Y'   IF li_gav_cnt > 0 THEN      LET lc_cust_flag = "Y"   ELSE      LET lc_cust_flag = "N"   END IF   # ---    WHILE lst_fields.hasMoreTokens()       LET ls_field_name =lst_fields.nextToken()      LET ls_field_name = ls_field_name.trim()      LET ls_gav02 = ls_field_name            FOR li_i = 1 TO llst_items.getLength()         LET lnode_item = llst_items.item(li_i)         LET ls_item_name =lnode_item.getAttribute("colName")               IF (ls_item_name IS NULL) THEN            LET ls_item_name =lnode_item.getAttribute("name")                  IF (ls_item_name IS NULL) THEN               CONTINUE FOR            END IF         END IF               IF(ls_item_name.equals(ls_field_name)) THEN            LET ls_item_tag =lnode_item.getTagName()                        IF(ls_item_tag.equals("Group") OR               ls_item_tag.equals("Grid") OR               ls_item_tag.equals("Folder") OR               ls_item_tag.equals("Page") OR                ls_item_tag.equals("Label")OR      #FUN-550113               ls_item_tag.equals("Button")) THEN  #隐藏GROUP,BUTTON这类的元件               IF (pi_visible) THEN                  CALLlfrm_curr.setElementHidden(ls_field_name,0)                 ELSE                  CALLlfrm_curr.setElementHidden(ls_field_name,1)               END IF               EXIT FOR            END IF                  IF (pi_visible) THEN               CALLlfrm_curr.setFieldHidden(ls_field_name,0)                    IF (ls_item_tag.equals("FormField"))THEN                  LET lnode_prev =lnode_item.getPrevious()                  IF lnode_prev IS NOT NULLTHEN                     LET ls_prev_tag =lnode_prev.getTagName()                     LET ls_prev_name =lnode_prev.getAttribute("name")  #No:FUN-570225                     #No:FUN-570225 --start--                     IF ls_prev_tag ="Button" AND lnode_prev.getAttribute("tag") = "+"THEN                        CALLlnode_prev.setAttribute("hidden",0)                        LET lnode_prev = lnode_prev.getPrevious()                        IF lnode_prev IS NOTNULL THEN                           LET ls_prev_tag =lnode_prev.getTagName()                        END IF                     END IF                     #No:FUN-570225 ---end---                     IF(ls_prev_tag.equals("Label")) AND                         (ls_prev_name NOTMATCHES "dummy*" OR ls_prev_name IS NULL) THEN   #No:FUN-570225                        CALLlnode_prev.setAttribute("hidden",0)                     END IF                  END IF               END IF            ELSE                #FUN-4B0078  #MOD-4C0124               CALLlfrm_curr.setFieldHidden(ls_field_name,1)               IF(ls_item_tag.equals("FormField")) THEN                  LET lnode_prev =lnode_item.getPrevious()                  IF lnode_prev IS NOT NULLTHEN                     LET ls_prev_tag =lnode_prev.getTagName()                     LET ls_prev_name =lnode_prev.getAttribute("name")  #No:FUN-570225                     #No:FUN-570225 --start--                     IF ls_prev_tag ="Button" AND lnode_prev.getAttribute("tag") = "+"THEN                        CALLlnode_prev.setAttribute("hidden",1)                        LET lnode_prev =lnode_prev.getPrevious()                        IF lnode_prev IS NOTNULL THEN                           LET ls_prev_tag =lnode_prev.getTagName()                        END IF                     END IF                     #No:FUN-570225 ---end---                     IF (ls_prev_tag.equals("Label"))AND                         (ls_prev_name NOTMATCHES "dummy*" OR ls_prev_name IS NULL) THEN   #No:FUN-570225                        CALLlnode_prev.setAttribute("hidden",1)                     END IF                  END IF               END IF            END IF                  EXIT FOR         END IF      END FOR   END WHILEEND FUNCTION


 


 

 

--------------------华--------------------丽--------------------分--------------------割--------------------线--------------------

代码最终效果图如下:

 

 

 

 

 

 

 

原创粉丝点击