1. 查询类双档(无查询页签)表格模型
Q类类双档样板﹝pattern﹞只能支持单一的主表,另外可支持多个单头子表。
2. 查询类双档(无查询页签)参考画面
此样板无查询页签功能。
左图是有设定单身主表及单身子表的范例画面,右图则为单一主表的范例画面。
双文件维护作业 4-1
此样板无查询页签功能。
左图是有设定单身主表及单身子表的范例画面,右图则为单一主表的范例画面。 |
ERP T100
3. 查询类双文件程序流程
4. 分段程序流程
4.1共享及模块变量宣告
程序注记段落
01 {<section id=”azzq950.description” >}
02 #应用 a00 样板自动产生(Version:1)
03 #+ Version..: T100-ERP-1.00.00(SD版次:3,PR版次:3) Build-000071
04 #+
05 #+ Filename…: azzq950
06 #+ Description: 背景排程查询作业
07 #+ Creator….: 00824(2014-05-02 14:20:00)
08 #+ Modifier…: 01856(2014-08-13 16:01:58) -SD/PR- 01856(2014-08-13 16:04:59)
09 {</section>}
引入及全局变量设定
10 {<section id=”azzq950.global” >}
11 IMPORT os
架构与维护作业开发手册 4-2
12 IMPORT util
13 #add-point:增加汇入项目
14 程序中若需要使用 JAVA或 Genero原生 lib均须在此处设置 IMPORT
15 #end add-point
cfg/top_global.inc中存放了所
有系统中所需使用的变量,于此
处引入
16 SCHEMA ds
17 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 单身资料最大笔数上限 … 等等。
18 #add-point:增加汇入变量文件
19 部分大型程序需要拥有自己的 inc参数配置文件,可以自行于此处汇入
20 #end add-point
21
22 #单身 type 宣告
23 PRIVATE TYPE type_g_gzpc_d RECORD
程序需使用的全局变量,变量数据
24
25
sel LIKE type_t.chr1,
gzpc000 LIKE gzpc_t.gzpc000,
…
从画面字段取出,不可增减
40
END RECORD
41 PRIVATE TYPE type_g_gzpc2_d RECORD
42
43
gzpd003 LIKE gzpd_t.gzpd003,
gzpd011 LIKE gzpd_t.gzpd011,
…
60
END RECORD
61 #模块变量(Module Variables)
62 DEFINE g_gzpc_d DYNAMIC ARRAY OF type_g_gzpc_d
双文件维护作业 4-3
63 DEFINE g_gzpc2_d
DYNAMIC ARRAY OF type_g_gzpc2_d
略
70 #add-point:定义模块变量(Module Variable)
71 程序中若需要自行增加要用的全局变量则可于此处设定
72 #end add-point
Form和 current window都有指定
全局对象,因此可以直接使用对象
73 #add-point:传入参数说明(global.argv)
74 #end add-point
75 {</section >}
4.2主程序
01 {<section id=”arti305.main” >}
02 #+ 此段落由子样板 a26产生
03 #OPTIONS SHORT CIRCUIT
04 #+ 作业开始
05 MAIN
#add-point:main段 define
每一个 FUNCTION开始处均有预设 add-point提供置放本区需要的变量设定,后续不再呈现
#end add-point
OPTIONS
INPUT NO WRAP
DEFER INTERRUPT
#设定 SQL错误记录方式 (模块内定义有效)
当程序运行中遭遇不可预期的错误
WHENEVER ERROR CALL cl_err_msg_log
时将错误信息写入 Log文件内
#依模块进行系统初始化设定(系统设定)
系统初始化:纪录相关的信息(例如
程序开启时间、用户名称等信息)
CALL cl_ap_init(“azz”,””)
查询类程序不会有 UPDATE动作,因此不需要针对数据做锁定,
但因与单据类程序共享子样板,所以此段程序代码仍会产生,可忽略此段 SQL(第 20 ~ 49行)
#LOCK CURSOR (identifier)
#add-point:SQL_define
若不愿使用产生器产出的 LOCK CURSOR,则此处可以使用 mark=y标记。
#end add-point
LET g_forupd_sql = ” “,
” FROM “,
” ”
架构与维护作业开发手册 4-4
#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 azzq950_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 azzq950_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 azzq950_bcl CURSOR FROM g_forupd_sql
#遮蔽特定资料
IF g_bgjob = “Y” THEN
#add-point:Service Call
画面关闭前如果有需要相关的处理,请增加于此处
#end add-point
ELSE
#画面开启 (identifier)
OPEN WINDOW w_azzq950 WITH FORM cl_ap_formpath(“azz”,g_code)
#浏览页签数据初始化
根据该程序的设定进行画面初始化, 并
CALL cl_ui_init()
#程序初始化
汇入 ToolBar, TopMenu的信息
子画面显示标题也需要呼叫 cl_ui_init
CALL azzq950_init()
#进入选单 Menu (=”N”)
CALL azzq950_ui_dialog()
双文件维护作业 4-5
#add-point:画面关闭前
程序关闭前如果有需要相关的处理,请增加于此处
#end add-point
#画面关闭
CLOSE WINDOW w_azzq950
END IF
CLOSE azzq950_cl
#add-point:作业离开前
#end add-point
程序结束时需呼叫
CALL cl_ap_exitprogram(“0″)
cl_ap_exitprogram, 纪录所需的信息
75 END MAIN
76 {</section>}
4.3 _init初始化
程序所需的相关初始化皆定义于此
(combobox设定、变量设定、画面设定
等)
01 {<section id=”azzq950.init” >}
02 #+ 画面资料初始化
03 PRIVATE FUNCTION azzq950_init()
#add-point:init段 define
#end add-point
LET g_error_show = 1
LET g_wc_filter = ” 1=1″
LET g_wc_filter_t = ” 1=1″
CALL cl_set_combo_scc(‘b_gzpc003′,’66’)
CALL cl_set_combo_scc(‘b_gzpc004′,’65’)
CALL cl_set_combo_scc(‘b_gzpd007′,’64’)
#add-point:画面资料初始化
定义 combobox状态,此为产生器依据画
面资料产出
#end add-point
CALL azzq950_default_search()
16 END FUNCTION
17 {</section>}
架构与维护作业开发手册 4-6
4.4 _default_search 执行后首次查询数据
01 {<section id=”azzq950.default_search” >}
02 PRIVATE FUNCTION azzq950_default_search()
#+ 组承接外部参数时数据库字段对应条件(单身)
IF NOT cl_null(g_argv[01]) THEN
LET g_wc = g_wc, ” gzpc000 = ‘”, g_argv[01], “‘ AND ”
END IF
IF NOT cl_null(g_wc) THEN
根据外部参数组合 g_wc,若没有传递
参数则回传 1=2 (不搜寻任何数据)
LET g_wc = g_wc.subString(1,g_wc.getLength()-5)
ELSE
#预设查询条件
LET g_wc = ” 1=2″
END IF
14 END FUNCTION
15 {</section>}
4.5 _ui_dialog操作功能选单
此段落主要是依据使用者所下的查询
条件,将数据显示在画面上,以及布
置用户可操作的功能选单。
01 {<section id=”azzq950.ui_dialog” >}
02 #+ 功能选单
03 PRIVATE FUNCTION azzq950_ui_dialog()
略
此处包含了许多系统标准 ACTION,
query(查询), filter(数据二次筛选),
exporttoexcel(汇出 Excel),
LET gwin_curr = ui.Window.getCurrent()
LET gfrm_curr = gwin_curr.getForm()
LET g_action_choice = ” ”
datarefresh(重新整理) … 等等
CALL cl_set_act_visible(“accept,cancel”, FALSE)
#add-point:ui_dialog段 before dialog
开始进入选单前的前置处理
#end add-point
IF NOT cl_null(g_wc) AND g_wc != ” 1=2″ THEN
LET g_detail_idx = 1
依外部参数组合条件 g_wc,判断应直
接进行数据填充(_b_fill段) 或是
让使用者下查询条件(_query段)
LET g_detail_idx2 = 1
CALL azzq950_b_fill()
ELSE
双文件维护作业 4-7
CALL azzq950_query()
END IF
WHILE TRUE
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
DISPLAY ARRAY g_gzpc_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_gzpc_d.getLength() TO FORMONLY.h_count
为避免点选单身主表的数据时,影
LET lc_action_choice_old = g_action_choice
LET g_action_choice = “fetch”
CALL azzq950_fetch()
响到单身子表数据选取的执行效
能,会依据 g_action_choice 的资
料,来判断单身子表是否需要做
SQL 字符串重组的动作
LET g_action_choice = lc_action_choice_old
LET g_master_idx = l_ac
#add-point:input段 before row
在对话框之内的控制区块,每一区块后方都会给予 add-point
#end add-point
END DISPLAY
DISPLAY ARRAY g_gzpc2_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
DISPLAY g_detail_idx2 TO FORMONLY.idx
DISPLAY g_gzpc2_d.getLength() TO FORMONLY.cnt
END DISPLAY
架构与维护作业开发手册 4-8
ON ACTION query
LET g_action_choice=”query”
IF cl_auth_chk_act(“query”) THEN
CALL azzq950_query()
END IF
ON ACTION filter
提供对已经查询出来的数据进行
二次筛选的动作
LET g_action_choice=”filter”
CALL azzq950_filter()
EXIT DIALOG
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_gzpc_d)
LET g_export_id[1] = “s_detail1”
LET g_export_node[2] = base.typeInfo.create(g_gzpc2_d)
LET g_export_id[2] = “s_detail2″
CALL cl_export_to_excel_getpage()
CALL cl_export_to_excel()
END IF
略
105
END DIALOG
略
125
END WHILE
126 END FUNCTION
127 {</section>}
4.6 _query数据查询
01 {<section id=”azzq950.query” >}
02 PRIVATE FUNCTION azzq950_query()
03
DEFINE ls_wc
LIKE type_t.chr500
略
10
11
LET INT_FLAG = 0
双文件维护作业 4-9
CLEAR FORM
部分字段仅供数据显示用,因
此在下查询条件时会先将字段
做隐藏
CALL gfrm_curr.setFieldHidden(“formonly.sel”, TRUE)
CALL gfrm_curr.setFieldHidden(“formonly.statepic”, TRUE)
CALL g_gzpc_d.clear()
LET g_wc_filter = ” 1=1″
LET g_qryparam.state = “c”
LET g_detail_idx = 1
LET g_detail_idx2 = 1
变数值初始化
#wc备份
LET ls_wc = g_wc
LET g_master_idx = l_ac
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
#单身根据 table分拆 construct
CONSTRUCT g_wc_table ON gzpc000,gzpc001,gzpa002,gzpc003,gzpc002,gzpc006
FROM s_detail1[1].b_gzpc000,s_detail1[1].b_gzpc001,s_detail1[1].b_gzpa002,
s_detail1[1].b_gzpc003,s_detail1[1].b_gzpc002,s_detail1[1].b_gzpc006
BEFORE CONSTRUCT
#add-point:cs段 more_construct
#end add-point
BEFORE FIELD b_gzpc000
#add-point:BEFORE FIELD b_gzpc000
每个字段都会布置 BEFORE
#END add-point
FIELD、AFTER FIELD、ON ACTION
这三个区块,以供使用者依据
AFTER FIELD b_gzpc000
需求调整
#add-point:AFTER FIELD b_gzpc000
#END add-point
ON ACTION controlp INFIELD b_gzpc000
#add-point:ON ACTION controlp INFIELD b_gzpc000
#END add-point
略
76
END CONSTRUCT
架构与维护作业开发手册 4-10
CONSTRUCT g_wc2_table2 ON gzpd003,gzpd011,gzpd004,gzpd007,gzpd008,gzpd010,
gzpd005,gzpd009,gzpd006,gzpd012
FROM s_detail2[1].b_gzpd003,s_detail2[1].b_gzpd011,s_detail2[1].b_gzpd004,
s_detail2[1].b_gzpd007,s_detail2[1].b_gzpd008,s_detail2[1].b_gzpd010,
s_detail2[1].b_gzpd005,s_detail2[1].b_gzpd009,s_detail2[1].b_gzpd006,
s_detail2[1].b_gzpd012
BEFORE CONSTRUCT
#add-point:cs段 more_construct
#end add-point
略
END CONSTRUCT
ON ACTION accept
ACCEPT DIALOG
ON ACTION cancel
LET INT_FLAG = 1
EXIT DIALOG
END DIALOG
略
LET g_error_show = 1
CALL azzq950_b_fill()
LET l_ac = g_master_idx
略
根据所下达的查询条件进行资料筛
选,并填充单身信息
CALL gfrm_curr.setFieldHidden(“formonly.sel”, FALSE)
CALL gfrm_curr.setFieldHidden(“formonly.statepic”, FALSE)
167 END FUNCTION
168 {</section>}
将一开始隐藏的字段显示出来,否
则数据显示时会看不到这两个字段
的资料
双文件维护作业 4-11
4.7 _b_fill数据填充
01 {<section id=”azzq950.b_fill” >}
02 PRIVATE FUNCTION azzq950_b_fill()
03
DEFINE ls_wc
STRING
略
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
LET g_sql = “SELECT UNIQUE ”,gzpc000,gzpc001,”,gzpc003,gzpc004,gzpc002,gzpc006″,
” FROM gzpc_t”,
” LEFT JOIN gzpd_t ON gzpdent = gzpcent AND gzpc000 = gzpd001″,
” WHERE gzpcent= ? AND 1=1 AND “, ls_wc,cl_sql_add_filter(“gzpc_t”)
在查询数据时,会依据「azzi800 使用者
LET g_sql = g_sql, cl_sql_add_filter(“gzpc_t”),
数据设定作业」及「azzi850 职能角色与
” ORDER BY gzpc_t.gzpc000″
权限设定作业」中设定部门及个人权限
#add-point:b_fill段 sql_after
过滤可查询的数据
如果有需要重新调整 SQL指令,可以由此处更新
#end add-point
LET g_sql = cl_sql_add_mask(g_sql)
PREPARE azzq950_pb FROM g_sql
针对使用者设定要加密的特定字段资
料做遮蔽
DECLARE b_fill_curs CURSOR FOR azzq950_pb
OPEN b_fill_curs USING g_enterprise
CALL g_gzpc_d.clear()
字段数据加密可于「azzi850
职能角色与
权限设定作业」中的 字段授权 页签
”
“
中设定
LET g_cnt = l_ac
LET l_ac = 1
架构与维护作业开发手册 4-12
FOREACH b_fill_curs INTO g_gzpc_d[l_ac].sel,g_gzpc_d[l_ac].gzpc000,g_gzpc_d[l_ac].gzpc001,
…
略
#add-point:b_fill段数据填充
如果有需要做其他资料填充,可以由此处更新
SELECT gzpa002 INTO g_gzpc_d[l_ac].gzpa002 FROM gzpa_t
WHERE gzpa001 = g_gzpc_d[l_ac].gzpc001
将设定为 reference 字段的相关数据取
#end add-point
出。因_detail_show()是各层单身共享,为
顾及执行效能,以传入参数判断要执行的
CALL azzq950_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()
当数据量太大,若每次查询时都无限制的
捞取数据,会影响程序执行效能,因此有
单身最大笔数的限制,让使用者可依据系
统数据做适度的调整。
END IF
EXIT FOREACH
END IF
LET l_ac = l_ac + 1
END FOREACH
单身最大笔数可于「aoos010企业层级参
数维护作业」中设定
LET g_error_show = 0
CALL g_gzpc_d.deleteElement(g_gzpc_d.getLength())
#add-point:b_fill段数据填充(其他单身)
若有其他单头主表需要做资料填充,可以由此处更新
#end add-point
LET g_detail_cnt = g_gzpc_d.getLength()
DISPLAY g_detail_cnt TO FORMONLY.h_count
略
单身主表填充完成后,会继续进行单身子
表的填充,并以单身主表当下选择的数据
带出单身子表的内容
90
91
92
IF g_gzpc_d.getLength() > 0 THEN
CALL azzq950_fetch()
END IF
93 END FUNCTION
94 {</section>}
双文件维护作业 4-13
4.7 _fetch单身子表数据填充
01 {<section id=”azzq950.fetch” >}
此 FUNCTION 段主要是处理单身子表的资
料填充部分。
02 PRIVATE FUNCTION azzq950_fetch()
略
单身子表会将单身主表的数据当作捞取
资料的条件值之一,进而取得相关的资料
CALL g_gzpc2_d.clear()
LET li_ac = l_ac
#为避免影响执行效能,若是按上下笔就不重组 SQL
IF g_action_choice <> “fetch” OR cl_null(g_action_choice) THEN
LET g_sql = “SELECT UNIQUE gzpd003,gzpd011,gzpd004,”,gzpd007,gzpd008,gzpd010,”,
gzpd005,gzpd009,”,gzpd006,gzpd012 FROM gzpd_t”,
” WHERE gzpdent=? AND gzpd001=?”
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 gzpd_t.gzpd003″
#add-point:单身填充前
如果有需要重新调整 SQL指令,可以由此处更新
#end add-point
LET g_sql = cl_sql_add_mask(g_sql)
PREPARE azzq950_pb2 FROM g_sql
#遮蔽特定资料
DECLARE b_fill_curs2 CURSOR FOR azzq950_pb2
END IF
取单身子表的资料时,也会将单身主表的
数据当成条件值之一
OPEN b_fill_curs2 USING g_enterprise,g_gzpc_d[g_detail_idx].gzpc000
LET l_ac = 1
FOREACH b_fill_curs2 INTO g_gzpc2_d[l_ac].gzpd003,g_gzpc2_d[l_ac].gzpd011,
…
略
#add-point:b_fill段数据填充
如果有需要做其他资料填充,可以由此处更新
#end add-point
将设定为 reference 字段的相关数据取
CALL azzq950_detail_show(“‘2′”)
出。其中传入参数为’2’,表示要取单身
略
子表的相关资料
65
END FOREACH
架构与维护作业开发手册 4-14
#add-point:单身填充后
若有其他单头子表需要做资料填充,可以由此处更新
#end add-point
CALL g_gzpc2_d.deleteElement(g_gzpc2_d.getLength())
单身总笔数显示
LET g_detail_cnt2 = g_gzpc2_d.getLength()
DISPLAY g_detail_cnt2 TO FORMONLY.cnt
IF g_detail_cnt2 > 0 THEN
LET g_detail_idx2 = 1
DISPLAY g_detail_idx2 TO FORMONLY.idx
ELSE
LET g_detail_idx2 = 0
DISPLAY ‘ ‘ TO FORMONLY.idx
END IF
略
90 END FUNCTION
91 {</section>}
4.8 _detail_show单身相关数据显示
01 {<section id=”azzq950.detail_show” >}
当画面字段是设定 reference 型态,当成
是组合时,会将取字段相关数据的动作在
此统一处理。
02 PRIVATE FUNCTION azzq950_detail_show(ps_page)
03
DEFINE ps_page
STRING
略
为避免影响执行效能,会将单身主表及单
身子表的部份分开处理
#读入 reference值
IF ps_page.getIndexOf(“‘1′”,1) > 0 THEN
#带出公用字段 reference值 page1
若字段代号是 ownid、owndp、crtid、
crtdp、crtdt、modid、moddt、cnfid、cnfdt、
pstid、pstdt、stus 结尾的字段属公用字段
#add-point:show段单身 reference
#end add-point
END IF
公用字段在画面规格产生时,会自动在栏
位旁再加上一个 reference 字段,但若非
公用字段,则需自行于规格设计器定义
reference 字段及相关设定
IF ps_page.getIndexOf(“‘2′”,1) > 0 THEN
#带出公用字段 reference值 page2
双文件维护作业 4-15
#add-point:show段单身 reference
INITIALIZE g_ref_fields TO NULL
LET g_ref_fields[1] = g_gzpc2_d[l_ac].gzpd004
CALL ap_ref_array2(g_ref_fields,”SELECT gzzal003 … “,””) RETURNING g_rtn_fields
LET g_gzpc2_d[l_ac].gzpd004_desc = ”, g_rtn_fields[1] , ”
DISPLAY BY NAME g_gzpc2_d[l_ac].gzpd004_desc
略
45
46
#end add-point
END IF
47 END FUNCTION
48 {</section>}
4.9 _filter数据过滤(数据二次筛选)
01 {<section id=”azzq950.filter” >}
提供用户依据之前查询出来的数据,做更小范围的数据筛
02 PRIVATE FUNCTION azzq950_filter()
选的功能
略
每次使用 filter 时会将查询条件储存至变量中,在下一次进
行 filter 时会将前一次过滤的条件显示于画面上,且此次筛
选的条件,也会加注在该字段的标题字段上。
但须注意的是若进行 filter 功能后重新 Query 则会清空 filter
先前的条件
10
11
12
13
LET l_ac = 1
LET g_detail_idx = 1
LET g_detail_idx2 = 1
略
CALL gfrm_curr.setFieldHidden(“formonly.sel”, TRUE)
CALL gfrm_curr.setFieldHidden(“formonly.statepic”, TRUE)
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 gzpc000,gzpc001,gzpa002,gzpc003,gzpc002,gzpc006
FROM s_detail1[1].b_gzpc000,s_detail1[1].b_gzpc001,
s_detail1[1].b_gzpa002,s_detail1[1].b_gzpc003,
s_detail1[1].b_gzpc002,s_detail1[1].b_gzpc006
BEFORE CONSTRUCT
架构与维护作业开发手册 4-16
DISPLAY azzq950_filter_parser(‘gzpc000’) TO s_detail1[1].b_gzpc000
…
略
END CONSTRUCT
略
END DIALOG
略
CALL azzq950_filter_show(‘gzpc000′,’b_gzpc000’)
略
CALL azzq950_b_fill()
CALL gfrm_curr.setFieldHidden(“formonly.sel”, FALSE)
CALL gfrm_curr.setFieldHidden(“formonly.statepic”, FALSE)
73 END FUNCTION
74 {</section>}
4.10 _filter_parser字段解析
针对使用者要做二次筛选的字段及所
下的条件进行解析,并组合成 SQL 条件
字符串,以供后续处理时使用
01 {<section id=”azzq950.filter_parser” >}
02 PRIVATE FUNCTION azzq950_filter_parser(ps_field)
03
DEFINE ps_field STRING
略
一般条件解析
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
双文件维护作业 4-17
LET ls_var = g_wc_filter.subString(li_tmp,li_tmp2)
LET ls_var = cl_replace_str(ls_var,’%’,’*’)
END IF
RETURN ls_var
30 END FUNCTION
31 {</section>}
4.11 _filter_show标题字段显示搜寻条件
01 {<section id=”azzq950.filter_show” >}
依据使用者下的二次筛选条件,将
此条件值,加注在字段标题上
02 PRIVATE FUNCTION azzq950_filter_show(ps_field,ps_object)
03
DEFINE ps_field
STRING
略
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 = azzq950_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)
26 END FUNCTION
27 {</section>}
架构与维护作业开发手册 4-18
转载请注明:赫非域 » T100手册 表格式双档(无查询页签)(azzq950)