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

T100手册 单档(arti305)

后端代码 bron1984 5905浏览

3.1 单文件表格模型

单档样板﹝pattern﹞只能支持单一的主表,另外可支持多个子表,但是子表与主表间的关联必须是『1对1』的连结。

形成单文件的主表,表格型态建议须为『M.主檔』或『B.基础数据文件』。因为这两类表格均有可以记录维护数据的共享字段设计。

3.2 单档参考画面

单文件数据浏览页签﹝视需求设定﹞ / 单档输入主页签

开发时,就可以依据需求,设定是否需要『资料浏览区块』页签。

数据浏览页签左侧的『查询方案』、『相关作业』、『系统公告』等区块,均由系统程序统一控管,开发过程中不需额外进行处理﹝程序代码段落由样板产生﹞。

3.3 单文件程序流程

3.4 分段程序流程

3.4.1共享及模块变量宣告

程序注记段落

01 {<section id=”arti305.description” >}

02 #+ Version..: T100-ERP-1.00.00(SD版次:2,PR版次:2) Build-000060

03 #+ Filename…: arti305

04 #+ Description: 流通商品分群维护作业

05 #+ Creator….: 01752(2013/11/05)

06 #+ Modifier…: 01752(2014/07/24) -SD/PR- 01752(2014/07/24)

07 #+ Buildtype..: 应用 i01 样板自动产生

08 #+ 以上段落由子样板a00产生

09 {</section>}

引入及全局变量设定

11 {<section id=”arti305.global” >}

12 #应用 i01 样板自动产生(Version:16)

13 IMPORT os

14 #add-point:增加汇入项目

15 程序中若需使用JAVA或Genero原生lib均须在此处设置IMPORT

16 #end add-point

17 SCHEMA ds

18 GLOBALS “../../cfg/top_global.inc” # cfg/top_global.inc中存放了所有T100系统中所需使用的变量,于此处引入

说明:

在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 单身资料最大笔数上限 … 等等。

19 #add-point:增加汇入变量文件

20 部分大型程序需要拥有自己的inc参数配置文件,可以自行于此处汇入

21 #end add-point

22 #单头 type 宣告

23 PRIVATE TYPE type_g_imck_m RECORD #程序需使用的全局变量,变量数据从画面字段取出,不可增减

24 imck001 LIKE imck_t.imck001,

25 …

26 END RECORD

27 #模块变量(Module Variables)

28 DEFINE g_imck_m type_g_imck_m #单头变量宣告

29 …

30 DEFINE g_browser DYNAMIC ARRAY OF RECORD #查询方案用数组

31 b_statepic LIKE type_t.chr50,

32 b_imck001 LIKE imck_t.imck001

33 END RECORD #變數定義時若需要參照資料型態,但屬於formonly欄位,則參照type_t

34 #单头多语言用

35 DEFINE g_master_multi_table_t RECORD

36 DEFINE g_wc STRING #储存查询条件

37 DEFINE gwin_curr ui.Window #Current Window

38 DEFINE gfrm_curr ui.Form #Current Form

39 #add-point:传入参数说明(global.argv)

40 程序中若需要自行增加要用的全局变量则可于此处设定

# Form和current window都有指定全域物件,因此可以直接使用物件操作

41 #end add-point

42 #add-point:传入参数说明(global.argv)

43 自动补入 azzi900的参数定义说明特别写法

44 #argv[1] imaa_t.imaa002

45 #argv[2] type_t.chr1 #测试用参数

46 #end add-point

47 {</section>}

3.4.2主程序

01 {<section id=”arti305.main” >}

02 #+ 此段落由子样板a26产生

03 #OPTIONS SHORT CIRCUIT

04 #+ 作业开始

10 MAIN

11 #add-point:main段define

12 所有FUNCTION开始处均有预设add-point提供置放本区需要的变量设定(标准区用),后续不再呈现

13 #end add-point

14 #add-point:main段define

15 所有FUNCTION开始处均有预设add-point提供置放本区需要的变量设定(客制区用),后续不再呈现

16 #end add-point

17 OPTIONS

18 INPUT NO WRAP

19 DEFER INTERRUPT

20

21 #设定SQL错误记录方式 (模块内定义有效)

22 WHENEVER ERROR CALL cl_err_msg_log #當程式運行中遭遇不可預期的錯誤時將錯誤資訊寫入Log檔內

 

23 #依模块进行系统初始化设定(系统设定)

24 CALL cl_ap_init(“art”,””) #系統初始化:紀錄相關的資訊(例如程式開啟時間、使用者名稱等資訊)

25 #LOCK CURSOR (identifier)

26 #add-point:SQL_define

27 若不愿使用产生器产出的LOCK CURSOR,则此处可以使用mark=y标记

28 #end add-point

29 LET g_forupd_sql = ” SELECT … WHERE imckent= ? AND imck001=? FOR UPDATE”

30 #add-point:SQL_define

31 当使用mark=y标记时,必须从此处设定您所需要的LOCK CURSOR

32 #end add-point

33 LET g_forupd_sql = cl_sql_forupd(g_forupd_sql) #转换不同数据库语法

34 LET g_forupd_sql = cl_sql_add_mask(g_forupd_sql) #遮蔽特定资料

35 DECLARE arti305_cl CURSOR FROM g_forupd_sql # LOCK CURSOR

41 LET g_sql = ” SELECT UNIQUE t0.imck001,…”

42 PREPARE arti305_master_referesh FROM g_sql

43 IF g_bgjob = “Y” THEN

44 #add-point:Service Call

45 若程序为背景作业,则在此处定义其行为

46 #end add-point

47 ELSE

48 #画面开启 (identifier)

49 OPEN WINDOW w_arti305 WITH FORM cl_ap_formpath(“art”,g_code)

50 #画面资料初始化

51 CALL cl_ui_init() #根據該程式的設定進行畫面初始化, 並匯入ToolBar, TopMenu的資訊

子畫面顯示標題也需要呼叫

52 #程序初始化

53 CALL arti305_init()

54 #进入选单 Menu (=”N”)

55 CALL arti305_ui_dialog()

56 #add-point:画面关闭前

57 画面关闭前如果有需要相关的处理,请增加于此处

58 #end add-point

59 #画面关闭

60 CLOSE WINDOW w_arti305

61 END IF

62 CLOSE arti305_cl

63 #add-point:作业离开前

64 程序关闭前如果有需要相关的处理,请增加于此处

65 #end add-point

66 #离开作业

67 CALL cl_ap_exitprogram(“0”) #程式結束時需呼叫cl_ap_exitprogram, 紀錄所需的相關資訊

68 END MAIN

69 {</section>}

3.4.3 _init初始化

01 {<section id=”arti305.init” >}

02 #+ 程序数据初始化 程式所需的相關初始化皆定義於此(combobox設定、變數設定、畫面設定等)

03 PRIVATE FUNCTION arti305_init()

10 #定义combobox状态

11 CALL cl_set_combo_scc_part(‘imckstus’,’17’,’N,Y’) #此为产生器依据画面数据产出

15 LET g_error_show = 1

16 LET gwin_curr = ui.Window.getCurrent()

17 LET gfrm_curr = gwin_curr.getForm()

18 #add-point:画面资料初始化

19 #end add-point

20 #根据外部参数进行搜寻

21 CALL arti305_default_search()

22 END FUNCTION

23 {</section>}

3.4.4 _default_search 执行后首次查询数据

01 {<section id=”arti305.default_search” >}

02 #+ 外部参数搜寻

#程式啟動時須先經過此段落, 若有外部參數或預設的查詢方案時則帶出相關資料, 若無則不做任何處理

03 PRIVATE FUNCTION arti305_default_search()

04 DEFINE li_idx LIKE type_t.num10

05 IF cl_null(g_order) THEN

06 LET g_order = “ASC”

07 END IF

#根據外部參數組合g_wc, 若沒有傳遞參數則取出該程式的預設查尋方案, 若無設定查詢方案則回傳1=2 (不搜尋任何資料)

08 #根据外部参数(g_argv)组合wc

09 IF NOT cl_null(g_argv[01]) THEN

10 LET ls_wc = ls_wc, ” imck001 = ‘”, g_argv[01], “‘ AND ”

11 END IF

12 #add-point:default_search段after sql

13

14 #end add-point

15 IF NOT cl_null(ls_wc) THEN

16 #若有外部参数则根据该参数组合

17 LET g_wc = ls_wc.subString(1,ls_wc.getLength()-5)

18 LET g_default = TRUE

19 ELSE

20 #若无外部参数则预设为 1=2

21 LET g_default = FALSE

22 #预设查询条件

23 LET g_wc = cl_qbe_get_default_qryplan()

24 IF cl_null(g_wc) THEN

25 LET g_wc = ” 1=2″

26 END IF

27 END IF

30 IF g_wc.getIndexOf(” 1=2″, 1) THEN

31 LET g_default = TRUE

32 END IF

33 END FUNCTION

34 {</section>}

3.4.5 _ui_dialog操作功能选单

01 {<section id=”arti305.ui_dialog” >}

02 #+ 选单功能实际执行处

03 PRIVATE FUNCTION arti305_ui_dialog()

04 DEFINE li_exit LIKE type_t.num5 #判别是否为离开作业

05 DEFINE ls_wc STRING #wc用

06 DEFINE la_param RECORD #程序串查用变量

07 prog STRING, #串查程序名称

08 param DYNAMIC ARRAY OF STRING #传递变数

09 END RECORD

10 DEFINE ls_js STRING #转换后的json字符串

21 LET li_exit = FALSE

22 LET g_current_row = 0

23 LET g_current_idx = 1

26 #若有外部参数查询, 则直接显示数据(隐藏查询方案)

27 IF g_default THEN

28 CALL gfrm_curr.setElementHidden(“mainlayout”,0)

29 CALL gfrm_curr.setElementHidden(“worksheet”,1)

30 LET g_main_hidden = 0

31 ELSE

32 CALL gfrm_curr.setElementHidden(“mainlayout”,1)

33 CALL gfrm_curr.setElementHidden(“worksheet”,0)

34 LET g_main_hidden = 1

35 END IF

41 #进入程序时默认执行的动作

42 CASE g_actdefault

43 WHEN “insert”

44 IF cl_auth_chk_act(“insert”) THEN

45 CALL azzi020_insert()

46 END IF

47 #add-point:action default自定义

48 若需要带参数,指定进来程序就要做某某工作时,可以于此处设定action

49 #end add-point

根據g_main_hidden決定進入menu段落或dailog段落, 內部的行為相同, 但dialog段增加了display array (browser)

50 END CASE

61 #add-point:ui_dialog段before dialog

62 开始进入选单前的前置处理

63 #end add-point

64 WHILE li_exit = FALSE

65 IF g_action_choice = “logistics” THEN

當使用者進行營運據點切換時會離開dialog並重新進入, 視同重啟程式, 清空畫面上已經查詢條件等資訊

66 #清除画面及相关资料

67 CLEAR FORM

68 CALL g_browser.clear()

69 INITIALIZE g_imck_m.* TO NULL

70 LET g_wc = ‘ 1=2’

71 LET g_action_choice = “”

72 CALL arti305_init ()

73 END IF

74 #确保g_current_idx位于正常区间内

避免過程中的段落導致筆數落在不正常的區間內, 重新給予指標內容

75 #小于,等于0则指到第1笔

76 IF g_current_idx <= 0 THEN

77 LET g_current_idx = 1

78 END IF

79 CALL lib_cl_dlg.cl_dlg_before_display()

此處包含了許多系統標準ACTION, accept(確定), cancel(放棄), insert(新增), modify(修改), query(查詢), delete(刪除),

reproduce(複製), first(上一筆),

next(下一筆) … 等等

80 CALL cl_notice()

81

82 IF g_main_hidden = 0 THEN

83 MENU

84 BEFORE MENU

85 CALL arti305_browser_fill(g_wc,””)

86 CALL cl_navigator_setting(g_current_idx, g_current_cnt)

87 #还原为原本指定笔数

88 #当每次点任一笔数据都会需要用到

89 IF g_browser_cnt > 0 THEN

90 CALL arti305_fetch(“”)

91 END IF

92 #add-point:ui_dialog段 before menu

93 在对话框之内的控制区块,每一块后方都会给予add-point

94 #end add-point

96

96 #状态代码切换

97 ON ACTION statechange

99 CALL arti305_statechange()

100 LET g_action_choice=”statechange”

透過include的方式引入標準action,此處與下個段落中的dialog皆包含了三個段落的標準action

101 #第一笔资料

102 ON ACTION first

103 CALL arti305_fetch(“F”)

104 LET g_current_row = g_current_idx

105 #主选单用ACTION

dialog與menu段主要差異為多了display array的段落(顯示瀏覽頁籤), 其餘內容皆相同

106 &include “main_menu_exit_menu.4gl”

107 &include “relating_action.4gl”

108 #交谈指令共享ACTION

109 &include “common_action.4gl”

110 END MENU

111 ELSE

112 DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)

113 #左侧浏览页签

114 DISPLAY ARRAY g_browser TO s_browse.* ATTRIBUTE(COUNT=g_rec_b)

115 BEFORE ROW

116 #回归旧笔数位置 (回到当时异动的笔数)

117 LET g_current_idx = DIALOG.getCurrentRow(“s_browse”)

118 IF g_current_idx = 0 THEN

119 LET g_current_idx = 1

120 END IF

121 LET g_current_row = g_current_idx #目前指标

122 LET g_current_sw = TRUE

確保進到瀏覽頁籤時可以回到上一次指定的筆數

123 CALL cl_show_fld_cont()

124 #当每次点任一笔数据都会需要用到

125 CALL arti305_fetch(“”)

126 END DISPLAY

127

128 BEFORE DIALOG

129 #先填充browser数据

130 CALL arti305_browser_fill(g_wc,””)

131

132 #当每次点任一笔数据都会需要用到

133 IF g_browser_cnt > 0 THEN

134 CALL arti305_fetch(“”)

135 END IF

136

137 #查询方案用

138 SUBDIALOG lib_cl_dlg.cl_dlg_qryplan

139 SUBDIALOG lib_cl_dlg.cl_dlg_relateapps

略 其他部分与MENU段相同

144 &include “main_menu_exit_dialog.4gl”

145 END DIALOG

146 END IF

147 END WHILE

148 END FUNCTION

149 {</section>}

3.4.6 _browser_fill浏览页签数据填充

01 {<section id=”arti305.browser_fill” >}

撈取單頭資料時一律先透過browser_fill 將資料填入 g_browser中

02 #+ 浏览页签数据填充(一般单文件)

03 PRIVATE FUNCTION arti305_browser_fill(p_wc,ps_page_action)

04 DEFINE p_wc STRING

11 LET p_wc = p_wc.trim() #当查询按下放弃 g_wc = ” ” 所以要清掉空白

12 IF cl_null(p_wc) THEN #p_wc 查询条件

根據使用者下達的條件, 撈取符合條件的資料總筆數並顯示在畫面上, 若超過最大顯示筆數則提示使用者

13 LET p_wc = ” 1=1 ”

14 END IF

15 #add-point:browser_fill段wc控制

16 where条件 (p_wc) 的手工调整

17 #end add-point

18 LET g_sql = ” SELECT COUNT(*) FROM imck_t …”

19 ” WHERE “,

20 p_wc CLIPPED, cl_sql_add_filter(“gzwk_t”)

21 #add-point:browser_fill段cnt_sql

22 如果有需要自行重新拟定计算笔数的SQL指令,可以由此处更新

23 #end add-point

24 PREPARE header_cnt_pre FROM g_sql

25 EXECUTE header_cnt_pre INTO g_browser_cnt

26 FREE header_cnt_pre

27 #若超过最大显示笔数

28 IF g_browser_cnt > g_max_browse THEN

29 IF g_error_show = 1 THEN

30 INITIALIZE g_errparam TO NULL

31 LET g_errparam.extend = g_browser_cnt

32 LET g_errparam.code = 9035

33 LET g_errparam.popup = TRUE

34 CALL cl_err()

35 END IF

36 END IF

41 IF cl_null(g_add_browse) THEN

42 #清除画面

43 CLEAR FORM

44 INITIALIZE g_gzwk_m.* TO NULL

45 CALL g_browser.clear()

46 LET g_cnt = 1

47 LET ls_wc = p_wc

48 ELSE

根據使用者下達的條件, 組合出撈取瀏覽頁籤資料的SQL, 其中包含了主table及相關的reference

49 LET ls_wc = g_add_browse

50 LET g_cnt = g_current_idx

51 END IF

61 LET g_sql = ” SELECT t0.gzwkstus,t0.gzwk001,t0.gzwk002,t0.gzwk003″,

62 ” FROM gzwk_t t0 “,

63 ” WHERE “, ls_wc, cl_sql_add_filter(“gzwk_t”)

64 #add-point:browser_fill段fill_wc

65

66 #end add-point

67 LET g_sql = g_sql, ” ORDER BY “,l_searchcol,” “,g_order

68 #add-point:browser_fill段before_pre

69

70 #end add-point

71 #LET g_sql = cl_sql_add_tabid(g_sql,”gzwk_t”) #WC重组

72 LET g_sql = cl_sql_add_mask(g_sql) #遮蔽特定资料

73 PREPARE browse_pre FROM g_sql

74 DECLARE browse_cur CURSOR FOR browse_pre

75 FOREACH browse_cur INTO g_browser[g_cnt].b_statepic,g_browser[g_cnt].b_imck001

76 IF SQLCA.sqlcode THEN

略 错误讯息

81 END IF

根據狀態碼的內容調整瀏覽頁籤顯示的圖片, 此處顯示的為狀態碼小圖示(與單頭主頁的圖示不同)

82 #browser段落显示图片

83 CASE g_browser[g_cnt].b_statepic

84 WHEN “N”

85 LET g_browser[g_cnt].b_statepic = “stus/16/inactive.png”

86 END CASE

若筆數超出最大筆數上限則中斷資料撈取, 確保撈取的資料不超過該程式限制的筆數上限

91 LET g_cnt = g_cnt + 1

92 IF g_cnt > g_max_rec THEN

93 EXIT FOREACH

94 END IF

95 END FOREACH

96 #清空g_add_browse, 并指定指针位置

97 IF NOT cl_null(g_add_browse) THEN

98 LET g_add_browse = “”

99 CALL g_curr_diag.setCurrentRow(“s_browse”,g_current_idx)

00 END IF

01 IF cl_null(g_browser[g_cnt].b_gzwk001) THEN

02 CALL g_browser.deleteElement(g_cnt)

03 END IF

04 LET g_header_cnt = g_browser.getLength()

05 LET g_current_cnt = g_browser.getLength()

06 LET g_rec_b = g_browser.getLength()

07 LET g_cnt = 0

若使用者所指定的條件無法符合的資料時則關閉特定action的功能

08 DISPLAY g_browser_cnt TO FORMONLY.b_count

09 DISPLAY g_browser_cnt TO FORMONLY.h_count

10 CALL azzi020_fetch(“”)

11 FREE browse_pre

12 #若无数据则关闭相关功能

13 IF g_browser_cnt = 0 THEN

14 CALL cl_set_act_visible(“statechange,modify,delete,reproduce”, FALSE)

15 ELSE

16 CALL cl_set_act_visible(“statechange,modify,delete,reproduce”, TRUE)

17 END IF

18 END FUNCTION

19 {</section>}

3.4.7 _fetch 数据笔数查询与数据抓取

01 {<section id=”arti305.fetch” >}

根據傳入的狀態顯示對應的資料筆數, F(第一筆), N(下一筆), P(上一筆), L(最後筆), /(指定筆)

02 #+ 指定PK后抓取单头其他数据

03 PRIVATE FUNCTION arti305_fetch(p_fl)

11 #根据传入的条件决定抓取的资料

12 CASE p_fl

13 WHEN “F”

14 LET g_current_idx = 1

15 WHEN “/”

16 #询问要指定的笔数

17 IF (NOT g_no_ask) THEN

18 CALL cl_getmsg(“fetch”, g_lang) RETURNING ls_msg

19 LET INT_FLAG = 0

20 PROMPT ls_msg CLIPPED,”: ” FOR g_jump

21 &include “common_action.4gl” #交谈指令共享ACTION

22 END PROMPT

23 IF INT_FLAG THEN

24 LET INT_FLAG = 0

25 EXIT CASE

26 END IF

27 END IF

28 IF g_jump > 0 THEN

29 LET g_current_idx = g_jump

30 END IF

31 LET g_no_ask = FALSE

32 END CASE

33 LET g_browser_cnt = g_browser.getLength()

34 #浏览页笔数显示

35 #避免超出browser数据笔数上限

36 IF g_current_idx > g_browser.getLength() THEN

37 LET g_current_idx = g_browser.getLength()

38 END IF

39 # 设定browse索引

40 CALL cl_navigator_setting(g_browser_idx, g_browser_cnt)

41 #代表没有数据, 无需做后续数据捞取之动作

42 IF g_current_idx = 0 THEN

43 RETURN

44 END IF

45 #根据选定的笔数给予key域值

46 LET g_imck_m.imck001 = g_browser[g_current_idx].b_imck001

47 #读取单头所有字段数据

48 EXECUTE arti305_master_referesh USING g_imck_m.imck001 INTO g_imck_m.imck001,…

49 #屏蔽相关处理

撈取的資料會先進行備份, 並傳入對應的遮罩函式中處理, 並回傳處理後的結果, 再備份遮罩後的結果

50 LET g_imck_m_mask_o.* = g_imck_m.*

51 CALL arti305_imck_t_mask()

52 LET g_imck_m_mask_n.* = g_imck_m.*

53 #根据资料状态切换action状态

54 CALL cl_set_act_visible(“statechange,modify,delete,reproduce”, TRUE)

55 CALL azzi020_set_act_visible()

56 CALL azzi020_set_act_no_visible()

57 #保存单头旧值

58 LET g_imck_m_t.* = g_imck_m.*

59 LET g_imck_m_o.* = g_imck_m.*

60 #重新显示

61 CALL arti305_show()

62 END FUNCTION

63 {</section>}

3.4.8 _show 数据显示

01 {<section id=”arti305.show” >}

02 #+ 数据显示

03 PRIVATE FUNCTION arti305_show()

11 #在browser 移动上下笔可以连动切换数据

12 CALL cl_show_fld_cont()

若有自定義的reference, 於此處撈取(例如此處的imck105_ref為自定義function)

13 CALL arti305_set_pk_array()

14 #显示followup图标

15 CALL cl_user_overview_set_follow_pic()

16 #读入ref值(单头)

17 #add-point:show段reference

18 程序内REFERENCE字段SQL填写位置

19 #end add-point

根據當下的狀態碼轉換成對應的圖片, 並顯示到畫面上的狀態碼圖示上

20 #将数据输出到画面上

21 DISPLAY BY NAME g_imck_m.imck001,…

31 #显示状态(stus)图片

32 CASE g_imck_m.imckstus

33 WHEN “N”

34 CALL gfrm_curr.setElementImage(“statechange”, “stus/32/inactive.png”)

35 END CASE

36 END FUNCTION

37 {</section>}

3.4.9 _set_pk_array 设定PK数据提供相关文件使用

將該支程式的key欄位名稱與內容傳入g_pk_array中, 以便於後續相關lib的使用

01 {<section id=”arti305.set_pk_array” >}

02 #+ 给予pk_array内容

03 PRIVATE FUNCTION arti305_set_pk_array()

04 CALL g_pk_array.clear()

05 LET g_pk_array[1].values = g_imck_m.imck001

06 LET g_pk_array[1].column = ‘imck001’

07 END FUNCTION

08 {</section>}

3.4.10 _query 数据查询

01 {<section id=”arti305.query” >}

02 #+ 数据查询QBE功能准备

03 PRIVATE FUNCTION arti305_query()

11 LET INT_FLAG = 0

進入資料查詢段時先將左側的瀏覽頁籤摺疊

12 LET ls_wc = g_wc

13 #切换画面

14 IF g_main_hidden THEN

15 CALL gfrm_curr.setElementHidden(“mainlayout”,0)

16 CALL gfrm_curr.setElementHidden(“worksheet”,1)

17 LET g_main_hidden = 0

18 END IF

19 CALL g_browser.clear()

20 #browser panel折迭

31 INITIALIZE g_imck_m.* TO NULL

32 ERROR “”

33 DISPLAY ” ” TO FORMONLY.b_count

34 DISPLAY ” ” TO FORMONLY.h_count

Query時進入construct段落由使用者輸入定義的條件

35 CALL arti305_construct()

36 IF INT_FLAG THEN

37 #取消查询

41 ELSE

根據使用者所定義的條件重新進行資料撈取, 並填充到g_browser中

42 LET g_current_row = 1

43 LET g_current_cnt = 0

44 END IF

45 #根据条件重新抓取资料

46 LET g_error_show = 1

47 CALL arti305_browser_fill(g_wc,”F”) #移到第一页

48 #储存WC信息

將該次查詢的條件存入資料庫中,提供使用者取用

49 CALL cl_dlg_save_user_latestqry(“(“||g_wc||”)”)

50 IF g_browser.getLength() = 0 THEN

61 ELSE

62 CALL arti305_fetch(“F”)

使用者下達的查詢條件若找的到資料則取出第一筆並顯示於畫面上

63 END IF

64 LET g_wc_filter = “”

65 END FUNCTION

66 {</section>}

3.4.11 _construct QBE数据查询

01 {<section id=”arti305.construct” >}

02 #+ QBE数据查询

Construct段資料初始化, 包含給予開窗查詢時Lib所需的相關預設值

03 PRIVATE FUNCTION arti305_construct()

11 #清空画面&资料初始化

12 CLEAR FORM

13 INITIALIZE g_gzwk_m.* TO NULL

14 INITIALIZE g_wc TO NULL LET g_current_row = 1

15 LET g_qryparam.state = “c”

16 DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)

17 #屏幕上取条件

此處包含了所有能夠提供給使用者下達查詢條件的欄位, 包含了主table欄位以及多語言欄位

18 CONSTRUCT BY NAME g_wc ON imck001, …

21 #公用字段开窗相关处理

22 AFTER FIELD imckcrtdt

23 CALL FGL_DIALOG_GETBUFFER() RETURNING ls_result

24 IF NOT cl_null(ls_result) THEN

25 IF NOT cl_chk_date_symbol(ls_result) THEN

26 LET ls_result = cl_add_date_extra_cond(ls_result)

27 END IF

此段落針對公用欄位construct進行特殊處理(例如時間相關的欄位在輸入後會經過轉換成資料庫可辨識的格式)

28 END IF

29 CALL FGL_DIALOG_SETBUFFER(ls_result)

31 END CONSTRUCT

進入dialog前先進行QBE相關的資料初始化(cl_qbe_init)

32 BEFORE DIALOG

33 CALL cl_qbe_init()

34 ON ACTION accept

35 ACCEPT DIALOG

36 ON ACTION cancel

37 LET INT_FLAG = 1

38 EXIT DIALOG

39 #查询方案列表

40 ON ACTION qbe_select

41 LET ls_wc = “”

42 CALL cl_qbe_list(“c”) RETURNING ls_wc

43 #条件储存为方案

44 ON ACTION qbe_save

45 CALL cl_qbe_save()

46 #交谈指令共享ACTION

47 &include “common_action.4gl”

48 CONTINUE DIALOG

49 END DIALOG

50 END FUNCTION

51 {</section>}

3.4.12 _insert 资料新增

01 {<section id=”arti305.insert” >}

02 #+ 资料新增

03 PRIVATE FUNCTION arti305_insert()

04 CLEAR FORM #清画面字段内容

05 INITIALIZE g_imck_m.* LIKE imck_t.* #DEFAULT 设定

06 LET g_imck001_t = NULL

07 CALL s_transaction_begin()

08 WHILE TRUE

新增前給予資料預設值, 此處分為一般欄位及共用欄位

09 #公用字段给值

10 LET g_imck_m.imckownid = g_user

11 #一般字段给值

12 LET g_imck_m.imck108 = “1”

13 #add-point:单头默认值

14 有需要给予初始值的部分,均在此处设定

15 #end add-point

16 #显示状态(stus)图片

17 CASE g_gzwk_m.gzwkstus

18 WHEN “N”

19 CALL gfrm_curr.setElementImage(“statechange”, “stus/32/open.png”)

進入資料輸入段, 並給予狀態a, 表示進行的為新增, 狀態u代表修改, 狀態r代表複製

21 END CASE

22 #数据输入

23 CALL arti305_input(“a”)

31 IF INT_FLAG THEN

32 #若取消则还原数据

40 CALL azzi020_show()

根據新增的資料組合WC, 並重新撈取該筆資料到g_browser中(增加到最末筆), 此處須注意的是新增的資料與原本資料的排序方式將有所不同(複製段的處理同新增段)

41 RETURN

42 END IF

43 LET g_rec_b = 0

44 EXIT WHILE

45 END WHILE

46 #根据资料状态切换action状态

47 CALL cl_set_act_visible(“statechange,modify,delete,reproduce”, TRUE)

48 CALL azzi020_set_act_visible()

49 CALL azzi020_set_act_no_visible()

50 #将新增的资料并入搜寻条件中

51 LET g_imck001_t = g_imck_m.imck001

52 LET g_state = “insert”

53 #组合新增数据的条件

54 LET g_add_browse = ” imckent = ‘” ||g_enterprise|| “‘ AND”,

55 ” imck001 = ‘”, g_imck_m.imck001 CLIPPED, “‘ ”

56 #填到最后面

57 LET g_current_idx = g_browser.getLength() + 1

58 CALL arti305_browser_fill(“”,””)

59 DISPLAY g_browser_cnt TO FORMONLY.h_count #总笔数

60 DISPLAY g_current_idx TO FORMONLY.h_index #当下笔数

61 CALL cl_navigator_setting(g_current_idx, g_browser_cnt)

62 EXECUTE arti305_master_referesh USING g_imck_m.imck001 INTO g_imck_m.imckunit,…

63

64 #将数据显示到画面上

65 DISPLAY BY NAME g_imck_m.imckunit,…

66

67 #功能已完成,通报讯息中心

68 CALL arti305_msgcentre_notify(”)

69 END FUNCTION

67 {</section>}

3.4.13 _input 数据输入

01 {<section id=”arti305.input” >}

02 #+ 数据输入

03 PRIVATE FUNCTION arti305_input(p_cmd)

將單頭資料顯示到畫面上, 包含共用欄位的資訊

04 DEFINE p_cmd LIKE type_t.chr1

11 #切换至输入画面

12 IF g_main_hidden THEN

13 CALL gfrm_curr.setElementHidden(“mainlayout”,0)

14 CALL gfrm_curr.setElementHidden(“worksheet”,1)

15 LET g_main_hidden = 0

16 END IF

17 #将数据输出到画面上

18 DISPLAY BY NAME g_imck_m.imck001,…

19 CALL cl_set_head_visible(“”,”YES”)

20 #a-新增,r-复制,u-修改

21 IF p_cmd = ‘r’ THEN

對於單檔結構而言, 複製的動作與新增相同, 差異只有複製時保留了key欄位以外的所有欄位內容

22 #此段落的r动作等同于a

23 LET p_cmd = ‘a’

24 END IF

25 LET l_insert = FALSE

26 LET g_action_choice = “”

27 LET g_qryparam.state = “i”

根據輸入的狀態關閉或開啟欄位的編輯功能, 預設在修改時關閉key欄位的編輯功能

28 #控制key字段可否输入

29 CALL arti305_set_entry(p_cmd)

30 CALL arti305_set_no_entry(p_cmd)

31 DISPLAY BY NAME g_imck_m.imck001,…

32 DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)

33 #单头段

34 INPUT BY NAME g_imck_m.imck001,… ATTRIBUTE(WITHOUT DEFAULTS)

根據設定的ACTION, 會自動產出對應的框架, 並且所有ACTION執行前會先經過身分驗證是否允許執行

41 #+ 此段落由子样板a43产生

42 ON ACTION update_item

43 LET g_action_choice=”update_item”

44 IF cl_auth_chk_act(“update_item”) THEN

45 #add-point:ON ACTION update_item

46 在此处开发个别action功能内容

47 #END add-point

48 END IF

进入input段前先开启transaction, 并备份相关的单头变数

51 BEFORE INPUT

52 IF s_transaction_chk(“N”,0) THEN

53 CALL s_transaction_begin()

54 END IF

55 #其他table数据备份(确定是否更改用)

56 LET g_master_multi_table_t.imckl001 = g_imck_m.imck001

61 #此段落由子样板a01产生

62 BEFORE FIELD imck001

根據欄位需求, 進行欄位管控, 可分為BEFORE FIELD, ON CHANGE, AFTER FILED, ON ACTION CONTROLP

63 #add-point:BEFORE FIELD gzwk002

64 所有区块个别均给定add-point

65 #END add-point

71 AFTER INPUT

72 #若点选cancel则离开dialog

73 IF INT_FLAG THEN

74 EXIT DIALOG

75 END IF

根據p_cmd判斷當下的行為是新增(a)或修改(u), 並進行不同的處理段落

76 IF p_cmd <> “u” THEN

77 #当p_cmd不为u代表为新增/复制

78 LET l_count = 1

79 #确定新增的数据不存在(不重复)

80 SELECT COUNT(*) INTO l_count FROM imck_t

81 WHERE imckent = g_enterprise AND imck001 = g_imck_m.imck001

82 IF l_count = 0 THEN

83 #将新增的单头数据写入数据库

84 INSERT INTO imck_t (imckent,…) VALUES (g_enterprise,…)

85 #若写入错误则提示错误讯息并返回输入页面

86 IF SQLCA.sqlcode THEN

91 NEXT CURRENT

92 END IF

93 #数据多语言用-增/改

01 CALL s_transaction_end(‘Y’,’0′)

02 ELSE

03 #数据重复出现

11 CALL s_transaction_end(‘N’,’0′)

12 END IF

13 ELSE

資料修改之前先將遮罩後的欄位進行還原, 並免覆蓋正常的資料內容, 之後再進行寫入

14 #修改状态时

15

16 #将屏蔽字段还原

17 CALL arti305_imck_t_mask_restore(‘restore_mask_o’)

18 UPDATE imck_t SET (imck001,…) = (g_imck_m.imck001,…)

19 WHERE imckent = g_enterprise AND imck001 = g_imck001_t

20 CASE

21 WHEN SQLCA.sqlerrd[3] = 0 #更新不到的处理

25 WHEN SQLCA.sqlcode #其他错误

更新資料後再進將資料進行遮蔽, 確保資料顯示時已完成遮罩處理

31 OTHERWISE

32 #将屏蔽字段进行遮蔽

33 CALL arti305_imck_t_mask_restore(‘restore_mask_n’)

34 #纪录数据更动

35 LET g_log1 = util.JSON.stringify(g_imck_m_t)

36 LET g_log2 = util.JSON.stringify(g_imck_m)

37 IF NOT cl_log_modified_record(g_log1,g_log2) THEN

紀錄修改前與修改後的單頭資訊並寫入資料庫, 未來若有資料修改上的疑慮可透過工具查看修改log

38 CALL s_transaction_end(‘N’,’0′)

39 ELSE

40 CALL s_transaction_end(‘Y’,’0′)

41 END IF

42 END CASE

一般標準輸入時有提供:controlf﹝線上求助文件﹞、controls﹝單頭折疊﹞等功能

43 END IF

44 END INPUT

51 ON ACTION accept

52 ACCEPT DIALOG

53 #放弃输入

54 ON ACTION cancel #按下放弃 (ESC)

56 ON ACTION close #在dialog 右上角 (X)

57 ON ACTION exit #按下toolbar的离开

58 #交谈指令共享ACTION

59 &include “common_action.4gl”

60 CONTINUE DIALOG

61 END DIALOG

62 END FUNCTION

63 {</section>}

3.4.14 _modify 数据修改

01 {<section id=”arti305.modify” >}

02 #+ 数据修改

03 PRIVATE FUNCTION arti305_modify()

04 #先确定key值无遗漏

05 IF g_gzwk_m.gzwk001 IS NULL

06 THEN

07 INITIALIZE g_errparam TO NULL

08 LET g_errparam.extend = “”

09 LET g_errparam.code = “std-00003”

10 LET g_errparam.popup = FALSE

11 CALL cl_err()

12 RETURN

13 END IF

14 ERROR “”

15 #备份key值

16 LET g_imck001_t = g_imck_m.imck001

17 CALL s_transaction_begin()

18 #先lock资料

19 OPEN arti305_cl USING g_enterprise,g_imck_m.imck001

21 #显示最新的数据

22 EXECUTE arti305_master_referesh USING g_imck_m.imck001 INTO g_imck_m.imck001,…

23 #数据被他人LOCK, 或是sql执行时出现错误

進入修改段前先撈取最新的資料, 並鎖定該筆資料, 若鎖定時出現錯則提示錯誤訊息

24 IF SQLCA.sqlcode THEN

31 CLOSE azzi020_cl

32 CALL s_transaction_end(‘N’,’0′)

33 RETURN

34 END IF

35 #显示数据

36 CALL arti305_show()

將修改者改為目前使用者, 並帶出姓名, 同時將修改時間改為當下的時間

 

41 WHILE TRUE

42 LET g_imck_m.imck001 = g_imck001_t

43 #写入修改者/修改日期信息

44 LET g_imck_m.imckmodid = g_user

45 LET g_imck_m.imckmoddt = cl_get_current()

46 LET g_imck_m.imckmodid _desc = cl_get_username(g_imck_m.imckmodid)

47 #add-point:modify段修改前

48 修改前就要填入的默认值,设定于此处

49 #end add-point

50 #数据输入

51 CALL arti305_input(“u”)

52 #add-point:modify段修改后

53 修改后若有需要总和处理或是串接其他输入组件,设定于此处

54 #end add-point

61 #若有modid跟moddt则进行update

62 UPDATE imck_t SET (imckmodid,imckmoddt) = (g_imck_m.imckmodid, g_imck_m.imckmoddt)

63 WHERE imckent = g_enterprise AND imck001 = g_imck001_t

64 EXIT WHILE

當完成修改動作時, 更新資料修改者與資料修改日期欄位

65 END WHILE

66 #根据资料状态切换action状态

67 CALL cl_set_act_visible(“statechange,modify,delete,reproduce”, TRUE)

68 CALL azzi020_set_act_visible()

69 CALL azzi020_set_act_no_visible()

70 #组合新增数据的条件

71 LET g_add_browse = ” “,

72 ” gzwk001 = ‘”, g_gzwk_m.gzwk001 CLIPPED, “‘ ”

73 #填到对应位置

74 CALL azzi020_browser_fill(g_wc,””)

75 CLOSE arti305_cl

76 CALL s_transaction_end(‘Y’,’0′)

77 #功能已完成,通报讯息中心

78 CALL arti305_msgcentre_notify(”)

79 LET g_worksheet_hidden = 0

80 END FUNCTION

71 {</section>}

3.4.15 _reproduce 数据复制

01 {<section id=”arti305.reproduce” >}

02 #+ 数据复制

03 PRIVATE FUNCTION arti305_reproduce()

04 DEFINE l_newno LIKE imck_t.imck001

進行複製前先檢查所有key欄位皆有值, 否則提示錯誤訊息並返回

05 DEFINE l_oldno LIKE gzwk_t.gzwk001

06 DEFINE l_master RECORD LIKE gzwk_t.*

11 #备份key值

12 LET g_gzwk001_t = g_gzwk_m.gzwk001

13 #清空key值

14 LET g_imck_m.imck001 = “”

呼叫管控輸入欄位控制的兩個function, 此處的控制段視同新增

15 CALL arti305_set_entry(“a”)

16 CALL arti305_set_no_entry(“a”)

17 #公用字段新增给值

18 LET g_imck_m.imckownid = g_user

19 LET g_gzwk_m.gzwkmodid = “”

20 LET g_gzwk_m.gzwkmoddt = “”

21 LET g_gzwk_m.gzwkstus = “N”

22 CALL s_transaction_begin()

根據個別程式進行複製時預設資料的設定, 此段的預設值可能與新增段的預設值有所差異

23 #add-point:复制输入前

24 复制前若需要给定相关的默认值,可以在此指定

25 #end add-point

31 #数据输入

32 CALL arti305_input(“r”)

33 IF INT_FLAG THEN

34 LET INT_FLAG = 0

35 RETURN

36 END IF

37 CALL s_transaction_end(‘Y’,’0′)

38 #根据资料状态切换action状态

39 CALL cl_set_act_visible(“statechange,modify,delete,reproduce”, TRUE)

40 CALL azzi020_set_act_visible()

41 CALL azzi020_set_act_no_visible()

42 #将新增的资料并入搜寻条件中

43 LET g_state = “insert”

44 LET g_gzwk001_t = g_gzwk_m.gzwk001

45 #组合新增数据的条件

46 LET g_add_browse = ” “,

47 ” gzwk001 = ‘”, g_gzwk_m.gzwk001 CLIPPED, “‘ ”

48 #填到最后面

49 LET g_current_idx = g_browser.getLength() + 1

50 CALL azzi020_browser_fill(“”,””)

51 END FUNCTION

52 {</section>}

3.4.16 _delete 数据删除

01 {<section id=”arti305.delete” >}

02 #+ 数据删除

03 PRIVATE FUNCTION arti305_delete()

04 DEFINE l_var_keys DYNAMIC ARRAY OF STRING

進行刪除前先檢查所有key欄位皆有值, 否則提示錯誤訊息並返回

05 #先确定key值无遗漏

11 CALL s_transaction_begin()

先進行資料鎖定, 確認是否有其他人正鎖定該筆資料

21 OPEN azzi020_cl USING g_gzwk_m.gzwk001

22 #显示最新的数据

23 EXECUTE arti305_master_referesh USING g_imck_m.imck001 INTO g_imck_m….

重新撈取資料, 確保呈現到畫面上的資料為最新的內容

31 #将最新数据显示到画面上

32 CALL arti305_show()

33 #确认资料是否删除

34 IF cl_ask_delete() THEN

35 #add-point:单头删除前

36 单头删除前的检查段落

37 #end add-point

38 #删除相关文件

39 CALL arti305_set_pk_array()

40 CALL cl_doc_remove()

41 #删除表数据

42 DELETE FROM gzwk_t WHERE gzwk001 = g_gzwk_m.gzwk001

43 #多语言数据删除

44 #add-point:单头删除后

45 单头删除后,若有关联数据要一起砍除,由此设定

46 #end add-point

47 CLEAR FORM

48 CALL azzi020_ui_browser_refresh()

刪除該筆資料後確認g_browser內是否還有其他資料, 若有則取出被刪除資料的前一筆內容, 若無, 則清空畫面所有資訊

49 #确保画面上保有数据

50 IF g_browser_cnt > 0 THEN

51 CALL arti305_fetch(“P”)

53 ELSE

53 CLEAR FORM

54 END IF

55 END IF

56 CLOSE arti305_cl

57 CALL s_transaction_end(‘Y’,’0′)

58 END FUNCTION

59 {</section>}

3.4.17 _ui_browser_refresh 浏览页签数据重新显示

01 {<section id=”arti305.ui_browser_refresh” >}

02 #+ 浏览页签数据重新显示

03 PRIVATE FUNCTION arti305_ui_browser_refresh()

04 DEFINE l_i LIKE type_t.num10

確認當下被刪除的資料, 並將該資料從瀏覽頁籤的陣列中刪除, 確保畫面資料的一致性

08 FOR l_i =1 TO g_browser.getLength()

09 IF g_browser[l_i].b_imck001 = g_imck_m.imck001 THEN

10 CALL g_browser.deleteElement(l_i)

11 END IF

12 END FOR

根據刪除後的資料狀況判定, 如果刪除後畫面無任何資料則關閉特定按鈕的功能並清空畫面資料

14 #若无数据则关闭相关功能

15 IF g_browser_cnt = 0 THEN

16 CALL cl_set_act_visible(“statechange,…”, FALSE)

17 CALL cl_navigator_setting(0,0)

18 CLEAR FORM

19 ELSE

20 CALL cl_set_act_visible(“mainhidden”, TRUE)

21 END IF

22 END FUNCTION

23 {</section>}

3.4.18 _set_entry 单头字段开启

01 {<section id=”arti305.set_entry” >}

02 #+ 单头字段开启设定

03 PRIVATE FUNCTION arti305_set_entry(p_cmd)

根據傳入的動作(a為新增,u為修改)決定要開啟編輯的欄位, 預設為key欄位

04 DEFINE p_cmd LIKE type_t.chr1

05 IF p_cmd = “a” THEN

06 CALL cl_set_comp_entry(“imck001”,TRUE)

07 END IF

08 END FUNCTION

09 {</section>}

3.4.19 _set_no_entry 单头字段关闭

01 {<section id=”arti305.set_no_entry” >}

02 #+ 单头字段关闭设定

03 PRIVATE FUNCTION arti305_set_no_entry(p_cmd)

04 DEFINE p_cmd LIKE type_t.chr1

11 IF p_cmd = ‘u’ AND g_chkey = ‘N’ THEN

12 CALL cl_set_comp_entry(“imck001”,FALSE)

根據傳入的動作決定要關閉編輯的欄位, 預設為key欄位

13 END IF

21 END FUNCTION

22 {</section>}

3.4.20 _statechange 状态代码异动

01 {<section id=”arti305.state_change” >}

02 #+ 确认码变更

03 PRIVATE FUNCTION arti305_statechange()

隱藏當下的狀態, 顯示其他的狀態至選單中, 並根據使用者選擇的狀態進行處理

04 DEFINE lc_state LIKE type_t.chr5

05

06 CALL s_transaction_begin()

07

08 OPEN arti305_cl USING g_enterprise,g_imck_m.imck001

09 IF STATUS THEN

10 INITIALIZE g_errparam TO NULL

21 RETURN

22 END IF

23 #显示最新的数据

24 EXECUTE arti305_master_referesh USING g_imck_m.imck001 INTO …

31 MENU “” ATTRIBUTES (STYLE=”popup”)

32 BEFORE MENU

33 HIDE OPTION “approved”

34 HIDE OPTION “rejection”

35 CASE g_imck_m.imckstus

36 WHEN “N”

37 HIDE OPTION “inactive”

38 WHEN “Y”

39 HIDE OPTION “active”

40 END CASE

41 #add-point:menu前

42 开始维护前,如果有额外需要处理﹝或不显示的﹞,可由此处隐藏

43 #end add-point

44 ON ACTION inactive

45 IF cl_auth_chk_act(“open”) THEN

46 LET lc_state = “N”

47 #add-point:action控制

48 如果状态变更时,有需要额外处理或连动的原件,设定于此处

49 #end add-point

50 END IF

51 EXIT MENU

61 END MENU

62 IF (lc_state <> “N” AND lc_state <> “Y”) OR cl_null(lc_state) THEN

63 RETURN

64 END IF

65 UPDATE imck_t SET imckstus = lc_state

66 WHERE imckent = g_enterprise AND imck001 = g_imck_m.imck001

67 IF SQLCA.sqlcode THEN

71 ELSE

72 #根据选择的状态显示图片

73 CASE lc_state

74 WHEN “N”

75 CALL gfrm_curr.setElementImage(“statechange”, “stus/32/inactive.png”)

根據所選擇的狀態顯示對應的圖片到畫面上(此處為主頁面的狀態碼圖示)

81 END CASE

82 LET g_imck_m.imckstus = lc_state

83 DISPLAY BY NAME g_imck_m.imckstus

84 END IF

85

86 CLOSE arti305_cl

87 CALL s_transaction_end(‘Y’,’0′)

88

89 #功能已完成,通报讯息中心

90 CALL arti305_msgcentre_notify(lc_state)

91

92 END FUNCTION

93 {</section>}

3.4.21 mask_functions屏蔽处理

遮罩相關的處理函式皆在mask.4gl中, 此4gl透過azzi850遮罩設定產出, 路徑為”com/inc/erp/模組別”底下, 該檔案無法編輯, 且在每次程式產生時會自動產生

01 {<section id=”arti305.mask_functions” >}

02 &include “erp/art/arti305_mask.4gl”

03 {</section>}

3.4.22 _msgcentre_notify 通报讯息中心

01 PRIVATE FUNCTION arti305_msgcentre_notify(lc_state)

02 DEFINE lc_state LIKE type_t.chr5

03

04 INITIALIZE g_msgparam TO NULL

05 #action-id与状态填写

06 IF g_action_choice = “statechange” THEN

07 LET g_msgparam.state = g_action_choice,”:”,lc_state

08 ELSE

09 LET g_msgparam.state = g_action_choice

10 END IF

11

12 #PK数据填写

13 CALL arti305_set_pk_array()

14 #单头数据填写

15 LET g_msgparam.data[1] = util.JSON.stringify(g_imck_m)

20 #呼叫讯息中心传递本关完成讯息

21 CALL cl_msgcentre_notify()

22 END FUNCTION

转载请注明:赫非域 » T100手册 单档(arti305)