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_w
END FUNCTION
FUNCTIONcl_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 WHILE
END FUNCTION
FUNCTIONcl_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 WHILE
END FUNCTION
--------------------华--------------------丽--------------------分--------------------割--------------------线--------------------
代码最终效果图如下: