报表查询——自动刷新数据,双击明细打开关联作业
生活随笔
收集整理的這篇文章主要介紹了
报表查询——自动刷新数据,双击明细打开关联作业
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
?
這次的范例是(cxmq100);
目的:實現報表數據自動刷新,雙擊明細數據打開相關的查詢作業;
1)在MAIN前進行客制變量定義:
#add-point:自定義模組變數-客製(Module Variable) name="global.variable_customerization"TYPE type_g_input RECORDrefresh LIKE type_t.num10,autoRefresh LIKE type_t.chr1 END RECORDDEFINE g_input type_g_input #INPUT條件DEFINE g_seconds LIKE type_t.num10 DEFINE g_time1 DATETIME YEAR TO SECOND DEFINE g_time2 STRING DEFINE g_time3 STRING DEFINE l_hhmmss STRING DEFINE g_total LIKE type_t.num10 #end add-point
2)在cxmq100_init()中將客制變量進行初始化賦值:
#add-point:畫面資料初始化 name="init.init"LET g_input.refresh = 1LET g_input.autoRefresh = 'Y'LET g_total = g_input.refresh * 60 LET g_seconds = 0#end add-point
3)在?cxmq100_ui_dialog() 中DIALOG?ATTRIBUTES(UNBUFFERED,FIELD?ORDER?FORM)下置入INPUT指令,讓用戶輸入數據,并在此實現自動刷新數據的功能:
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)#add-point:input段落 name="ui_dialog.input"INPUT g_input.refresh,g_input.autoRefresh FROM refresh,autoRefresh ATTRIBUTE(WITHOUT DEFAULTS)BEFORE INPUTON idle 5if g_input.autoRefresh = "Y" thenIF g_time1 IS NULL THENLET g_time1 = cl_get_current()END IF#去掉“-”,“:”和空格,得到2個數字做大小比較,不要求得到準確的秒數差LET g_time2 = g_time1LET g_time2 = s_chr_minus(g_time2,'-',0)LET g_time2 = s_chr_minus(g_time2,':',0)LET g_time2 = s_chr_atrim(g_time2)LET l_hhmmss = g_time2.substring(9,10)*3600+g_time2.substring(11,12)*60+g_time2.substring(13,14)LET g_time2 = g_time2.substring(1,8),l_hhmmssLET g_time3 = cl_get_current()LET g_time3 = s_chr_minus(g_time3,'-',0)LET g_time3 = s_chr_minus(g_time3,':',0)LET g_time3 = s_chr_atrim(g_time3)LET l_hhmmss = g_time3.substring(9,10)*3600+g_time3.substring(11,12)*60+g_time3.substring(13,14)LET g_time3 = g_time3.substring(1,8),l_hhmmss#DISPLAY 'g_time2 =',g_time2 #預埋調試用,可放開看時間調試#DISPLAY 'g_time3 =',g_time3#display '3-2 =',g_time3 - g_time2 #這個2是容許誤差2秒,2秒內的誤差都不會觸發重計倒計時,這是因為服務器有時候會很卡、停頓,尤其是網絡的延遲,這些都會造成誤差,如果特別卡,可以適當放大秒數誤差,但是會造成必須操作X秒以上才會觸發重計的現象IF g_time3 - g_time2 < 2 THENIF g_seconds >= g_total THEN #自動刷新設為60秒CALL cxmq100_b_fill()LET g_seconds = 0END IFLET g_time1 = cl_get_current()LET g_seconds = g_seconds + 1#DISPLAY g_seconds ELSE #DISPLAY 'cl_get_current() =',cl_get_current() 預埋調試用,可放開看時間調試#DISPLAY 'g_time1 =',g_time1#DISPLAY 'cl_get_current() - g_time1 =',cl_get_current() - g_time1 #LET g_seconds = 0LET g_time1 = cl_get_current() END IFend ifAFTER FIELD refreshIF NOT cl_null(g_input.refresh) THENLet g_total = g_input.refresh * 60 END IF END INPUT#end add-pointON IDLE 5 表示空閑時間5秒執行;
AFTER FIELD refresh 表示用戶在輸入完指定的字段動作完畢后,計算機會處理AFTER FIELD下的程序段;
?
4)實現雙擊明細數據打開相關查詢作業的功能:
①依然在cxmq100_ui_dialog() 下先把doubleClick的action事件【modify_detail】客制好:
#主選單用ACTION&include "main_menu_exit_dialog.4gl"&include "relating_action.4gl"#交談指令共用ACTION&include "common_action.4gl"#add-point:查詢方案相關ACTION設定前 name="ui_dialog.set_qbe_action_before"ON ACTION modify_detailLET g_action_choice="modify_detail"IF cl_auth_chk_act("modify_detail") THENIF g_detail_idx>=1 THENCALL cxmq100_qrystr(g_xmabuc_d[g_detail_idx].xmabucdocno) END IFEND IF#end add-point明細單號xmabucdocno作為PK傳入cxmq100_qrystr函數;
?
5)?cxmq100_qrystr(p_docno)函數:
PRIVATE FUNCTION cxmq100_qrystr(p_docno)DEFINE p_docno LIKE xmdk_t.xmdkdocno#DEFINE l_slip LIKE oobal_t.oobal002#DEFINE l_prog LIKE oobx_t.oobx004#DEFINE l_success LIKE type_t.num5DEFINE ls_js STRINGDEFINE la_param RECORDprog STRING,actionid STRING,background LIKE type_t.chr1,param DYNAMIC ARRAY OF STRINGEND RECORD#抓取單據別{LET l_slip = ''LET l_prog = ''IF NOT cl_null(p_docno) THENCALL s_aooi200_get_slip(p_docno) RETURNING l_success,l_slipIF NOT cl_null(l_slip) THEN#抓取程式名稱SELECT oobx004 INTO l_progFROM oobx_tWHERE oobxent = g_enterpriseAND oobx001 = l_slipEND IFIF NOT cl_null(l_prog) THENINITIALIZE la_param.* TO NULLLET la_param.prog = l_progLET la_param.param[1] = p_docnoLET ls_js = util.JSON.stringify(la_param)CALL cl_cmdrun(ls_js)END IFEND IF}IF NOT cl_null(p_docno) THENINITIALIZE la_param.* TO NULLLET la_param.prog = "cxmt631"LET la_param.param[1] = p_docnoLET ls_js = util.JSON.stringify(la_param)CALL cl_cmdrun(ls_js)END IF END FUNCTION注意上面使用了{}注釋的內容在這個范例中不適用;
?
下方代碼,雙擊單身明細,打開cxmt631作業:
IF NOT cl_null(p_docno) THENINITIALIZE la_param.* TO NULLLET la_param.prog = "cxmt631"LET la_param.param[1] = p_docnoLET ls_js = util.JSON.stringify(la_param)CALL cl_cmdrun(ls_js)END IF轉載于:https://www.cnblogs.com/xiaoli9627/p/6836734.html
總結
以上是生活随笔為你收集整理的报表查询——自动刷新数据,双击明细打开关联作业的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 六. 异常处理7.throw:异常的抛出
- 下一篇: 【硬盘整理】使用UltimateDefr