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

T100手册 表格式双档(无查询页签)(azzq950)

后端代码 bron1984 2829浏览

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)