6.1 QBE查询类双文件表格模型
Q类双档样板﹝pattern﹞只能支持单一的主表,另外可支持多个单头子表。
6.2 QBE查询类双档参考画面
此样板具备查询页签功能。
可提供使用者下查询条件的字段都必须布置于查询页签中,浏览页签纯粹用来做数据显示用。
查询页签可布置于画面左侧或是上方。
左图是有设定单身主表及单身子表的范例画面,右图则为单一主表的范例画面。
6.3 查询类双文件程序流程
6.4 分段程序流程
6.4.1共享及模块变量宣告
程序注记段落
01 {<section id=”azzq171.description” >}
02 #应用 a00 样板自动产生(Version:1)
03 #+ Version..: T100-ERP-1.00.00(SD版次:2,PR版次:2) Build-000086
04 #+
05 #+ Filename…: azzq171
06 #+ Description: library函式说明查询作业
07 #+ Creator….: 00824(2014-02-27 10:39:22)
08 #+ Modifier…: 00824(2014-08-14 09:51:39) -SD/PR- 00824(2014-08-14 09:58:04)
09 {</section>}
引入及全局变量设定
10 {<section id=”azzq171.global” >}
11 #应用 q01 样板自动产生(Version:6)
架构与维护作业开发手册 4-2
12 IMPORT os
13 IMPORT util
14 IMPORT FGL lib_cl_dlg
15 #add-point:增加汇入项目
16 程序中若需要使用 JAVA或 Genero原生 lib均须在此处设置 IMPORT
17 #end add-point
cfg/top_global.inc中存放了所
有系统中所需使用的变量,于此
处引入
18 SCHEMA ds
19 GLOBALS “../../cfg/top_global.inc”
说明:
在 top.global下设定的变量有许多是在程序执行时常会引用或变动的。以下列出较为常用的相关变数,详细
定义部分请参照系统说明。
g_enterprise 目前的企业代码,将限制用户所能阅读的数据内容
g_prog 目前执行的作业编号,用于变换画面显示数据与产生系统信息,不可变更
g_code 目前执行的程序代码(4gl)名称,不可变更
g_user 目前用户代码,将纪录用户的操作历程与权限控制,不可变更
g_qryparam 动态开窗查询函式数据传递变量,使用开窗功能时须先给予相关变量
g_dlang 目前用户所选取的数据多语言语系代码,可透过工具进行语系设定
g_site 目前的营运据点名称,可透过切换读取不同据点的数据
g_errparam错误代码传递变量,透过此变量可控制错误代码的显示内容与模式
除上列外还有:
g_bgjob 该支程序是否以背景模式执行,g_today 今日日期,g_max_browse 浏览页签数据最大笔数上限,
g_max_rec 单身资料最大笔数上限 … 等等。
20 #add-point:增加汇入变量文件
21 部分大型程序需要拥有自己的 inc参数配置文件,可以自行于此处汇入
22 #end add-point
23
24 #单身 type 宣告
25 PRIVATE TYPE type_g_gzwa_d RECORD
程序需使用的全局变量,变量数据
从画面字段取出,不可增减
26
27
sel LIKE type_t.chr1,
gzwa001 LIKE gzwa_t.gzwa001,
…
31
END RECORD
32 PRIVATE TYPE type_g_gzwa2_d RECORD
gzwb006 LIKE gzwb_t.gzwb006,
…
END RECORD
双文件维护作业 4-3
ERP T100
42 #模块变量(Module Variables)
43 DEFINE g_gzwa_d
DYNAMIC ARRAY OF type_g_gzwa_d
…
52
53 #add-point:自定义模块变量-标准(Module Variable)
54 程序中若需要自行增加要用的全局变量则可于此处设定
55 DEFINE g_qbe RECORD
在自定义模块变量时,区分了标准
与客制两个区块,为避免混用造成
后续问题,在程序产生器中会控制
在所在区域才能新增或修改该区域
的自定义变量
gzwa001
LIKE gzwa_t.gzwa001,
LIKE gzwa_t.gzwa002,
LIKE gzwa_t.gzwa003
gzwa002
gzwa003
END RECORD
60 #end add-point
61 #add-point:自定义模块变量-客制(Module Variable)
62 #end add-point
63
64 #add-point:传入参数说明
65 程序中若需要自行增加要用的全局变量则可于此处设定
66 #end add-point
67
68 {</section>}
6.4.2主程序
01 {<section id=”azzq171.main” >}
02 #应用 a26 样板自动产生(Version:3)
03 #+ 作业开始(主程序类型)
04 MAIN
#add-point:main段 define
每一个 FUNCTION开始处均有预设 add-point提供置放本区需要的变量设定,后续不再呈现
#end add-point
OPTIONS
INPUT NO WRAP
DEFER INTERRUPT
当程序运行中遭遇不可预期的错误
时将错误信息写入 Log文件内
#设定 SQL错误记录方式 (模块内定义有效)
WHENEVER ERROR CALL cl_err_msg_log
52
#依模块进行系统初始化设定(系统设定)
CALL cl_ap_init(“azz”,””)
查询类程序不会有 UPDATE动作,因此不需要针对数据做锁定,
但因与单据类程序共享子样板,所以此段程序代码仍会产生,可忽略此段 SQL(第 21 ~ 50行)
#LOCK CURSOR (identifier)
#add-point:SQL_define
若不愿使用产生器产出的 LOCK CURSOR,则此处可以使用 mark=y标记。
#end add-point
LET g_forupd_sql = ” “,
” FROM “,
” ”
#add-point:SQL_define
当使用 mark=y标记时,必须从此处设定您所需要的 LOCK CURSOR
#end add-point
LET g_forupd_sql = cl_sql_forupd(g_forupd_sql)
LET g_forupd_sql = cl_sql_add_mask(g_forupd_sql)
DECLARE azzq171_cl CURSOR FROM g_forupd_sql
#转换不同数据库语法
#遮蔽特定资料
# LOCK CURSOR
LET g_sql = ” SELECT “,
” FROM t0″,
” WHERE ”
LET g_sql = cl_sql_add_mask(g_sql)
#add-point:SQL_define
#end add-point
#遮蔽特定资料
PREPARE azzq171_master_referesh FROM g_sql
#add-point:main段 define_sql
#end add-point
LET g_forupd_sql = “”
#add-point:main段 define_sql
#end add-point
LET g_forupd_sql = cl_sql_forupd(g_forupd_sql)
LET g_forupd_sql = cl_sql_add_mask(g_forupd_sql)
DECLARE azzq171_bcl CURSOR FROM g_forupd_sql
#遮蔽特定资料
IF g_bgjob = “Y” THEN
#add-point:Service Call
#end add-point
ELSE
#画面开启 (identifier)
OPEN WINDOW w_azzq171 WITH FORM cl_ap_formpath(“azz”,g_code)
#浏览页签数据初始化
根据该程序的设定进行画面初始化, 并
CALL cl_ui_init()
汇入 ToolBar, TopMenu的信息
子画面显示标题也需要呼叫 cl_ui_init
#程序初始化
CALL azzq171_init()
#进入选单 Menu (=”N”)
CALL azzq171_ui_dialog()
#add-point:画面关闭前
程序关闭前如果有需要相关的处理,请增加于此处
#end add-point
#画面关闭
CLOSE WINDOW w_azzq171
END IF
CLOSE azzq171_cl
#add-point:作业离开前
#end add-point
#离开作业
程序结束时需呼叫
CALL cl_ap_exitprogram(“0″)
cl_ap_exitprogram, 纪录所需的信息
78 END MAIN
79 {</section>}
6.4.3 _init初始化
程序所需的相关初始化皆定义于此
(combobox设定、变量设定、画面设定
等)
01 {<section id=”azzq171.init” >}
02 #+ 浏览页签数据初始化
03 PRIVATE FUNCTION azzq171_init()
略
10
11
12
LET g_wc_filter = ” 1=1″
LET g_wc_filter_t = ” 1=1″
LET g_error_show = 1
定义 combobox状态,此为产生器依据
CALL cl_set_combo_scc(‘b_gzwb006′,’58’)
#add-point:画面资料初始化
#end add-point
画面资料产出
CALL azzq171_default_search()
18 END FUNCTION
19 {</section>}
6.4.4 _default_search 执行后首次查询数据
01 {<section id=”azzq171.default_search” >}
02 PRIVATE FUNCTION azzq171_default_search()
略
组承接外部参数时数据库字段对应条件(单身)
IF NOT cl_null(g_argv[01]) THEN
LET g_wc = g_wc, ” gzwa001 = ‘”, g_argv[01], “‘ AND ”
END IF
IF NOT cl_null(g_argv[02]) THEN
LET g_wc = g_wc, ” gzwa002 = ‘”, g_argv[02], “‘ AND ”
END IF
IF NOT cl_null(g_wc) THEN
LET g_wc = g_wc.subString(1,g_wc.getLength()-5)
ELSE
根据外部参数组合 g_wc,若没有传递
参数则回传 1=2 (不搜寻任何数据)
#预设查询条件
LET g_wc = ” 1=2″
END IF
略
30 END FUNCTION
31 {</section>}
6.4.4 _ui_dialog操作功能选单
01 {<section id=”azzq171.ui_dialog” >}
此段落主要是依据使用者所下的查询
条件,将数据显示在画面上,以及布置
用户可操作的功能选单。
02 #+ 选单功能实际执行处
03 PRIVATE FUNCTION azzq171_ui_dialog()
略
11
此处包含了许多系统标准 ACTION,
query(查询), filter(数据二次筛选),
exporttoexcel(汇出 Excel),
CALL cl_set_act_visible(“accept,cancel”, FALSE)
LET li_exit = FALSE
LET gwin_curr = ui.Window.getCurrent()
LET gfrm_curr = gwin_curr.getForm()
LET g_current_row = 0
datarefresh(重新整理) … 等等
LET g_current_idx = 1
LET g_action_choice = ” ”
LET lc_action_choice_old = “”
LET l_ac = 1
做串查功能的字段,会区分为显示用的
字段与查询用的字段,因此须依据目前
的功能分别作字段的隐藏与显示
#add-point:ui_dialog段 before dialog
#end add-point
若有做串查功能,在 CONSTRUCT后,需先将显示字段开启、查询字段隐藏
CALL gfrm_curr.setFieldHidden(‘b_gzwa001’, TRUE)
CALL gfrm_curr.setFieldHidden(‘prog_b_gzwa001’, FALSE)
CALL azzq171_b_fill()
WHILE li_exit = FALSE
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
#add-point:input段落
若有在查询页签中布置 INPUT相关字段,则须在此撰写相关程序段
#end add-point
#add-point:construct段落
若有在查询页签中布置 CONSTRUCT相关字段,则须在此撰写相关程序段
CONSTRUCT BY NAME g_wc ON gzwa001,gzwa002,gzwa003
ON ACTION controlp
CASE
WHEN INFIELD(gzwa001)
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = ‘c’
LET g_qryparam.reqry = FALSE
CALL q_gzza001_1()
#呼叫开窗
DISPLAY g_qryparam.return1 TO gzwa001 #显示到画面上
NEXT FIELD gzwa001
WHEN INFIELD(gzwa002)
略
END CASE
END CONSTRUCT
#end add-point
单身主表数据显示
DISPLAY ARRAY g_gzwa_d TO s_detail1.* ATTRIBUTE(COUNT=g_detail_cnt)
BEFORE DISPLAY
LET g_current_page = 1
BEFORE ROW
LET g_detail_idx = DIALOG.getCurrentRow(“s_detail1”)
LET l_ac = g_detail_idx
取得目前单身所在笔数并显示
DISPLAY g_detail_idx TO FORMONLY.h_index
DISPLAY g_gzwa_d.getLength() TO FORMONLY.h_count
LET g_master_idx = l_ac
为避免点选单身主表的数据
时,影响到单身子表数据选取的
执行效能,会依据
#为避免按上下笔时影响执行效能,所以做一些处理
LET lc_action_choice_old = g_action_choice
LET g_action_choice = “fetch”
g_action_choice 的资料,来判断
单身子表是否需要做 SQL 字符串
重组的动作
CALL azzq171_b_fill2()
LET g_action_choice = lc_action_choice_old
#add-point:input段 before row
在对话框之内的控制区块,每一区块后方都会给予 add-point
#end add-point
END DISPLAY
DISPLAY ARRAY g_gzwa2_d TO s_detail2.*
ATTRIBUTES(COUNT=g_detail_cnt)
BEFORE DISPLAY
单身子表数据显示
LET g_current_page = 2
BEFORE ROW
LET g_detail_idx2 = DIALOG.getCurrentRow(“s_detail2”)
LET l_ac = g_detail_idx2
LET g_detail_idx2 = l_ac
DISPLAY g_detail_idx2 TO FORMONLY.idx
#add-point:input段 before row
#end add-point
END DISPLAY
#add-point:ui_dialog段自定义 display array
#end add-point
BEFORE DIALOG
CALL DIALOG.setSelectionMode(“s_detail1″, 1)
#add-point:ui_dialog段 before dialog
#end add-point
NEXT FIELD gzwa001
AFTER DIALOG
#add-point:ui_dialog段 after dialog
#end add-point
ON ACTION accept
按下确认键后,会依据使用者输入的
查询条件,去组合 SQL 条件,以供后
续筛选资料用
INITIALIZE g_wc_filter TO NULL
IF cl_null(g_wc) THEN
LET g_wc = ” 1=1″
END IF
IF NOT cl_null(g_wc2_table2) AND g_wc2_table2 <> ” 1=1″ THEN
LET g_wc = g_wc, ” AND “, g_wc2_table2
END IF
LET g_wc2 = ” 1=1″
IF NOT cl_null(g_wc2_table2) AND g_wc2_table2 <> ” 1=1″ THEN
LET g_wc2 = g_wc2, ” AND “, g_wc2_table2
END IF
根据所下达的查询条件进行资料筛
选并填充单身信息
CALL azzq171_b_fill()
ON ACTION exporttoexcel #汇出 excel
LET g_action_choice=”exporttoexcel”
IF cl_auth_chk_act(“exporttoexcel”) THEN
CALL g_export_node.clear()
LET g_export_node[1] = base.typeInfo.create(g_gzwa_d)
LET g_export_id[1] = “s_detail1”
LET g_export_node[2] = base.typeInfo.create(g_gzwa2_d)
LET g_export_id[2] = “s_detail2”
#add-point:ON ACTION exporttoexcel
#END add-point
CALL cl_export_to_excel_getpage()
CALL cl_export_to_excel()
END IF
ON ACTION qbehidden
IF g_qbe_hidden THEN
#qbe页签折迭
CALL gfrm_curr.setElementHidden(“qbe”,0)
CALL gfrm_curr.setElementImage(“qbehidden”,”16/mainhidden.png”)
LET g_qbe_hidden = 0
ELSE
#visible
CALL gfrm_curr.setElementHidden(“qbe”,1)
CALL gfrm_curr.setElementImage(“qbehidden”,”16/worksheethidden.png”)
LET g_qbe_hidden = 1
END IF
#hidden
ON ACTION filter
提供对已经查询出来的数据进行二
次筛选的动作
LET g_action_choice=”filter”
CALL azzq171_filter()
#add-point:ON ACTION filter
#END add-point
EXIT DIALOG
略
206
207
END DIALOG
END WHILE
208 END FUNCTION
209 {</section>}
6.4.5 _b_fill单身数据笔数查询与数据抓取
01 {<section id=”azzq171.b_fill” >}
02 #+ 单身数组填充
03 PRIVATE FUNCTION azzq171_b_fill()
略
LET g_detail_idx = 1
LET g_detail_idx2 = 1
IF cl_null(g_wc_filter) THEN
LET g_wc_filter = ” 1=1″
END IF
确认是否有下查询条件,若是没有
则将变数值设为” 1=1″,避免后续
在做 SQL语法组合时有错误
IF cl_null(g_wc) THEN
LET g_wc = ” 1=1″
END IF
IF cl_null(g_wc2) THEN
LET g_wc2 = ” 1=1″
END IF
LET ls_wc = g_wc, ” AND “, g_wc2, ” AND “, g_wc_filter
CALL g_gzwa_d.clear()
略
在查询数据时,会依据「azzi800 使
用者数据设定作业」及「azzi850 职
能角色与权限设定作业」中设定部
门及个人权限过滤可查询的数据
LET g_cnt = l_ac
LET l_ac = 1
b_fill段 sql组成及 FOREACH撰写
LET g_sql = “SELECT UNIQUE ”,gzwa001,”,gzwa002,gzwa003,gzwa005,gzwa006,gzwa007 “,
” FROM gzwa_t”,
” LEFT JOIN gzwb_t ON gzwa001 = gzwb001 AND gzwa002 = gzwb002″,
” WHERE 1=1 AND “, ls_wc
LET g_sql = g_sql, cl_sql_add_filter(“gzwa_t”),
” ORDER BY gzwa_t.gzwa001,gzwa_t.gzwa002″
#add-point:b_fill段 sql_after
针对使用者设定要加密的特定字段
#end add-point
资料做遮蔽
LET g_sql = cl_sql_add_mask(g_sql)
PREPARE azzq171_pb FROM g_sql
#遮蔽特定资料
字段数据加密可于「azzi850 职能角
色与权限设定作业」中的 “字段授
权” 页签中设定
DECLARE b_fill_curs CURSOR FOR azzq171_pb
OPEN b_fill_curs
FOREACH b_fill_curs INTO g_gzwa_d[l_ac].sel,
g_gzwa_d[l_ac].gzwa001,g_gzwa_d[l_ac].gzwa001_desc,
g_gzwa_d[l_ac].gzwa002,g_gzwa_d[l_ac].gzwa003,
g_gzwa_d[l_ac].gzwa005,g_gzwa_d[l_ac].gzwa006,
g_gzwa_d[l_ac].gzwa007
略
b_fill段字段串查功能设定
LET g_hyper_url = azzq171_get_hyper_data(“prog_b_gzwa001”)
LET g_gzwa_d[l_ac].prog_b_gzwa001 =
“<a href = ‘”,g_hyper_url,”‘>”,g_gzwa_d[l_ac].gzwa001,”</a>”
#add-point:b_fill段数据填充
#end add-point
reference
字段的相关数据取出。因
将设定为
_detail_show()是各层单身共享,为顾及执行效
能,以传入参数判断要执行的范围。
CALL azzq171_detail_show(“‘1′”)
此处传入’1’,表示要取单身主表的相关资料
IF l_ac > g_max_rec THEN
IF g_error_show = 1 THEN
INITIALIZE g_errparam TO NULL
LET g_errparam.extend = “”
LET g_errparam.code = 9035
LET g_errparam.popup = TRUE
CALL cl_err()
当数据量太大,若每次查询时都无限制的捞取
数据,会影响程序执行效能,因此有单身最大
笔数的限制,让用户可依据系统数据做适度
的调整。
单身最大笔数可于「aoos010企业层级参数维
护作业」中设定
END IF
EXIT FOREACH
END IF
LET l_ac = l_ac + 1
END FOREACH
略
LET g_detail_cnt = g_gzwa_d.getLength()
DISPLAY g_detail_cnt TO FORMONLY.h_count
LET g_detail_idx = 1
DISPLAY g_detail_idx TO FORMONLY.h_index
LET l_ac = g_cnt
LET g_cnt = 0
略
单身主表填充完成后,会继续进行单身
子表的填充,以单身主表当下选择的资
料带出单身子表的内容
LET l_ac = 1
CALL azzq171_b_fill2()
138 END FUNCTION
139 {</section>}
6.4.6 _b_fill2第二阶单身数据笔数查询与数据抓取
01 {<section id=”azzq171.b_fill2″ >}
此 FUNCTION 段主要是处理单身子表的
02 #+ 单身数组填充 2
数据填充部分。
03 PRIVATE FUNCTION azzq171_b_fill2()
单身子表会将单身主表的数据当作捞取
资料的条件值之一,进而取得相关资料
略
LET li_ac = l_ac
略
为避免影响执行效能,若是按上下笔就不重组 SQL
IF g_action_choice <> “fetch” OR cl_null(g_action_choice) THEN
LET g_sql = “SELECT UNIQUE gzwb006,gzwb007,gzwb008,gzwb009,gzwb010 FROM gzwb_t”,
” WHERE gzwb001=? AND gzwb002=?”
IF NOT cl_null(g_wc2_table2) THEN
LET g_sql = g_sql CLIPPED,” AND “,g_wc2_table2 CLIPPED
END IF
LET g_sql = g_sql, ” ORDER BY gzwb_t.gzwb006,gzwb_t.gzwb007″
#add-point:单身填充前
如果有需要重新调整 SQL指令,可以由此处更新
#end add-point
LET g_sql = cl_sql_add_mask(g_sql)
PREPARE azzq171_pb2 FROM g_sql
#遮蔽特定资料
DECLARE b_fill_curs2 CURSOR FOR azzq171_pb2
取单身子表的资料时,也会将单身主表
的数据当成条件值之一
END IF
OPEN b_fill_curs2 USING g_gzwa_d[g_detail_idx].gzwa001,g_gzwa_d[g_detail_idx].gzwa002
LET l_ac = 1
FOREACH b_fill_curs2 INTO g_gzwa2_d[l_ac].gzwb006,g_gzwa2_d[l_ac].gzwb007,
g_gzwa2_d[l_ac].gzwb008,g_gzwa2_d[l_ac].gzwb009,
g_gzwa2_d[l_ac].gzwb010
略
#add-point:b_fill2段数据填充
如果有需要做其他资料填充,可以由此处更新
#end add-point
将设定为
reference
字段的相关数据取
出。其中传入参数为’2’,表示要取单身
CALL azzq171_detail_show(“‘2′”)
子表的相关资料
略
END FOREACH
CALL g_gzwa2_d.deleteElement(g_gzwa2_d.getLength())
略
单身总笔数显示
LET li_ac = g_gzwa2_d.getLength()
DISPLAY li_ac TO FORMONLY.cnt
LET g_detail_idx2 = 1
DISPLAY g_detail_idx2 TO FORMONLY.idx
略
97 END FUNCTION
98 {</section>}
6.4.7 _detail_show单身相关数据显示
01 {<section id=”azzq171.detail_show” >}
当画面字段是设定 reference 型态,当程
式组合时,会将取字段相关数据的动作在
此统一处理。
02 #+ 显示相关数据
03 PRIVATE FUNCTION azzq171_detail_show(ps_page)
略
为避免影响执行效能,会将单身主表及单
身子表的部份分开处理
#读入 ref值
IF ps_page.getIndexOf(“‘1′”,1) > 0 THEN
#带出公用字段 reference值 page1
#add-point:show段单身 reference
INITIALIZE g_ref_fields TO NULL
LET g_ref_fields[1] = g_gzwa_d[l_ac].gzwa001
CALL ap_ref_array2(g_ref_fields,”SELECT gzdel003 … “,””) RETURNING g_rtn_fields
LET g_gzwa_d[l_ac].gzwa001_desc = ”, g_rtn_fields[1] , ”
DISPLAY BY NAME g_gzwa_d[l_ac].gzwa001_desc
#end add-point
若字段代号是 ownid、owndp、crtid、
crtdp、crtdt、modid、moddt、cnfid、cnfdt、
pstid、pstdt、stus 结尾的字段属公用字段
END IF
IF ps_page.getIndexOf(“‘2′”,1) > 0 THEN
公用字段在画面规格产生时,会自动在栏
位旁再加上一个 reference 字段,但若非
公用字段,则需自行于规格设计器定义
reference 字段及相关设定
#带出公用字段 reference值 page2
#add-point:show段单身 reference
#end add-point
END IF
#add-point:detail_show段之后
#end add-point
34 END FUNCTION
35 {</section>}
6.4.8 _filter 过滤条件功能
提供用户依据之前查询出来的数据,做
更小范围的数据筛选的功能
01 {<section id=”azzq171.filter” >}
02 PRIVATE FUNCTION azzq171_filter()
每次使用 filter 时会将查询条件储存至变
数中,在下一次进行 filter 时会将前一次
过滤的条件显示于画面上,且此次筛选的
条件,也会加注在该字段的标题字段上。
但须注意的是若进行 filter 功能后重新
Query 则会清空 filter 先前的条件
略
LET g_qryparam.state = ‘c’
LET g_detail_idx = 1
LET g_detail_idx2 = 1
LET g_wc_filter_t = g_wc_filter
LET g_wc_t = g_wc
CALL gfrm_curr.setFieldHidden(“formonly.sel”, TRUE)
CALL gfrm_curr.setFieldHidden(“formonly.b_statepic”, TRUE)
若有做串查功能,在 CONSTRUCT前,需先将查询字段开启、显示字段隐藏
CALL gfrm_curr.setFieldHidden(‘prog_b_gzwa001’, TRUE)
CALL gfrm_curr.setFieldHidden(‘b_gzwa001’, FALSE)
LET g_wc = cl_replace_str(g_wc, g_wc_filter, ”)
使用 DIALOG包住 单头 CONSTRUCT及单身 CONSTRUCT
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
#单头
CONSTRUCT g_wc_filter ON gzwa001,gzwa005,gzwa006,gzwa007
FROM s_detail1[1].b_gzwa001,s_detail1[1].b_gzwa005,s_detail1[1].b_gzwa006,
s_detail1[1].b_gzwa007
BEFORE CONSTRUCT
DISPLAY azzq171_filter_parser(‘gzwa001’) TO s_detail1[1].b_gzwa001
…
略
END CONSTRUCT
略
END DIALOG
若有做串查功能,在 CONSTRUCT后,需先将显示字段开启、查询字段隐藏
CALL gfrm_curr.setFieldHidden(‘b_gzwa001’, TRUE)
CALL gfrm_curr.setFieldHidden(‘prog_b_gzwa001’, FALSE)
略
CALL azzq171_filter_show(‘gzwa001′,’b_gzwa001’)
…
略
CALL azzq171_b_fill()
CALL gfrm_curr.setFieldHidden(“formonly.sel”, FALSE)
CALL gfrm_curr.setFieldHidden(“formonly.b_statepic”, FALSE)
103 END FUNCTION
104 {</section>}
6.4.9 _filter_parser 过滤条件功能(条件解析)
01 {<section id=”azzq171.filter_parser” >}
针对使用者要做二次筛选的字段及
02 PRIVATE FUNCTION azzq171_filter_parser(ps_field)
所下的条件进行解析,并组合成
条件字符串,以供后续处理时使用
SQL
略
一般条件解析
LET ls_tmp = ps_field, “='”
LET li_tmp = g_wc_filter.getIndexOf(ls_tmp,1)
IF li_tmp > 0 THEN
LET li_tmp = ls_tmp.getLength() + li_tmp
LET li_tmp2 = g_wc_filter.getIndexOf(“‘”,li_tmp + 1) – 1
LET ls_var = g_wc_filter.subString(li_tmp,li_tmp2)
END IF
模糊条件解析
LET ls_tmp = ps_field, ” like ‘”
LET li_tmp = g_wc_filter.getIndexOf(ls_tmp,1)
IF li_tmp > 0 THEN
LET li_tmp = ls_tmp.getLength() + li_tmp
LET li_tmp2 = g_wc_filter.getIndexOf(“‘”,li_tmp + 1) – 1
LET ls_var = g_wc_filter.subString(li_tmp,li_tmp2)
LET ls_var = cl_replace_str(ls_var,’%’,’*’)
END IF
RETURN ls_var
31 END FUNCTION
32 {</section>}
6.4.10 _filter_show 过滤条件功能(条件显示)
01 {<section id=”azzq171.filter_show” >}
依据使用者下的二次筛选条件,将
此条件值,加注在字段标题上
02 PRIVATE FUNCTION azzq171_filter_show(ps_field,ps_object)
略
LET ls_name = “formonly.”, ps_object
LET lnode_item = gfrm_curr.findNode(“TableColumn”, ls_name)
LET ls_title = lnode_item.getAttribute(“text”)
IF ls_title.getIndexOf(‘※’,1) > 0 THEN
LET ls_title = ls_title.subString(1,ls_title.getIndexOf(‘※’,1)-1)
END IF
显示数据组合
LET ls_condition = azzq171_filter_parser(ps_field)
IF NOT cl_null(ls_condition) THEN
LET ls_title = ls_title, ‘※’, ls_condition, ‘※’
END IF
将数据显示回去
CALL lnode_item.setAttribute(“text”,ls_title)
27 END FUNCTION
28 {</section>}
6.4.11 _get_hyper_data 超链接资料串接
01 {<section id=”azzq171.get_hyper_data” >}
02 #+ 取得单身串查网址(包含程序代号及参数)
Q 类样板有提供使用者设定字段资
料串查的功能,会依据用户在规
格设计器中设定要串查的程序,再
以 Hyperlink 的方式开启该程序
03 PRIVATE FUNCTION azzq171_get_hyper_data(ps_field_name)
DEFINE ps_field_name
DEFINE ps_url
STRING
STRING
STRING
RECORD
prog
DEFINE ls_js
DEFINE la_param
STRING,
param
DYNAMIC ARRAY OF STRING
END RECORD
DEFINE ps_type
LIKE type_t.chr10
#add-point:get_hyper_data段 define-标准
#end add-point
#add-point:get_hyper_data段 define-客制
#end add-point
LET ps_url = NULL
设定要做串查的程序代码
CASE
WHEN ps_field_name = “prog_b_gzwa001”
LET la_param.prog = “azzi901”
设定传入参数,请依序放置于 la_param.param[1]、la_param.param[2]、…
#+ 产生串查功能传入参数部分
LET la_param.param[1] = g_gzwa_d[l_ac].gzwa001
#add-point:传入参数设定
如果有需要做传入参数的调整,可以由此处更新
#end add-point
END CASE
#add-point:传入参数设定后
#end add-point
将数组数据组合成一个 string字符串
LET ls_js = util.JSON.stringify(la_param)
依环境设定决定要走 GDC或 GWC模式
(“”表示会依据目前的环境判断,若有自行定义,会依据所定义的模式去执行)
LET ps_type = “”
#add-point:定义执行模式
#end add-point
呼叫 lib,取得完整的 url信息
CALL cl_ap_url(ps_type,ls_js) RETURNING ps_url
RETURN ps_url
45 END FUNCTION
46 {</section>}
转载请注明:赫非域 » T100手册 表格式双档(有查询页签)(azzq171)