最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

T100手册 表格式双档(有查询页签)(azzq171)

后端代码 bron1984 2425浏览

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)