报表查询——自动刷新数据,双击明细打开关联作业

 

 

这次的范例是(cxmq100);

目的:实现报表数据自动刷新,双击明细数据打开相关的查询作业;

1)在MAIN前进行客制变量定义:

#add-point:自定義模組變數-客製(Module Variable) name="global.variable_customerization"

TYPE type_g_input RECORD
    refresh        LIKE type_t.num10,
    autoRefresh     LIKE type_t.chr1
END RECORD

DEFINE    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 = 1
   LET 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 INPUT
            ON idle  5
               if g_input.autoRefresh = "Y" then
                   IF g_time1 IS NULL THEN
                      LET g_time1 = cl_get_current()
                   END IF
                   #去掉“-”,“:”和空格,得到2个数字做大小比较,不要求得到准确的秒数差
                   LET g_time2 = g_time1
                   LET 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_hhmmss
                   LET 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 THEN
                      IF g_seconds >= g_total THEN    #自动刷新设为60秒
                         CALL cxmq100_b_fill()
                         LET g_seconds = 0
                      END IF
                      LET 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 = 0
                      LET g_time1 = cl_get_current()            
                   END IF
               end if
               
            AFTER FIELD refresh
               IF NOT cl_null(g_input.refresh) THEN
                  Let g_total = g_input.refresh * 60 
               END IF    
         END INPUT
         #end add-point

ON 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_detail
            LET g_action_choice="modify_detail"
            IF cl_auth_chk_act("modify_detail") THEN
               IF g_detail_idx>=1 THEN
                  CALL cxmq100_qrystr(g_xmabuc_d[g_detail_idx].xmabucdocno) 
               END IF
            END 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.num5
   DEFINE ls_js      STRING
   DEFINE la_param   RECORD
          prog       STRING,
          actionid   STRING,
          background LIKE type_t.chr1,
          param      DYNAMIC ARRAY OF STRING
          END RECORD
   #抓取單據別
   {
   LET l_slip = ''
   LET l_prog = ''
   IF NOT cl_null(p_docno) THEN
      CALL s_aooi200_get_slip(p_docno) RETURNING l_success,l_slip
      IF NOT cl_null(l_slip) THEN
         #抓取程式名稱
         SELECT oobx004 INTO l_prog
           FROM oobx_t
          WHERE oobxent = g_enterprise
            AND oobx001 = l_slip
      END IF
      IF NOT cl_null(l_prog) THEN
         INITIALIZE la_param.* TO NULL
         LET la_param.prog     = l_prog
         LET la_param.param[1] = p_docno
         LET ls_js = util.JSON.stringify(la_param)
         CALL cl_cmdrun(ls_js)
      END IF
   END IF
   }
   IF NOT cl_null(p_docno) THEN
         INITIALIZE la_param.* TO NULL
         LET la_param.prog     = "cxmt631"
         LET la_param.param[1] = p_docno
         LET ls_js = util.JSON.stringify(la_param)
         CALL cl_cmdrun(ls_js)
   END IF
END FUNCTION

注意上面使用了{}注释的内容在这个范例中不适用;

 

下方代码,双击单身明细,打开cxmt631作业:

IF NOT cl_null(p_docno) THEN
         INITIALIZE la_param.* TO NULL
         LET la_param.prog     = "cxmt631"
         LET la_param.param[1] = p_docno
         LET ls_js = util.JSON.stringify(la_param)
         CALL cl_cmdrun(ls_js)
   END IF

转载于:https://www.cnblogs.com/xiaoli9627/p/6836734.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值