这次的范例是(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-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_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

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

  1. PBI Report Server 报表页面自动刷新 2步走

    参考 PBI Report Server 报表页面自动刷新 - 知乎 (zhihu.com) 1.按F12调出调试工具,修改刷新按钮的id,改为c 2.打开控制台,输入以下代码运行,完工 setInt ...

  2. echarts 自动刷新_Echarts自动刷新数据

    1.Echarts自动刷新数据 1.Echarts柱状图的正常配置 注:声明了 myChart.test这两个都有用 官方示例中myChart是声明在 function(ec)里面的 var myCh ...

  3. 配置导出MOSS2010列表数据到Excel并根据列表记录自动刷新数据

    第一章 简介 场景描述 根据最近客户的需求,他们需要自动维护MOSS2010列表数据导出到Excel的数据实时同步,就是列表添加记录后,导出的Excel列表自动同步数据过来. 第二章 配置方法 1. ...

  4. html5 轮询自动刷新数据,后台调用exe,前端定时轮询调用结果

    前提 使用asp.net core 2.1 前端使用vue ui使用element-ui 前端发送请求用Axios 新建asp.net core程序 1.jpg 修改Index.html @{ Lay ...

  5. 【electron】打开离线包-双击文件打开关联应用

    1.写入注册表,在安装后执行,卸载后删除注册表 // electron-builder.json 中增加配置,"nsis": {"guid": "co ...

  6. 用excel打造报表查询系统

    网络数据库以及ERP在中小型企业中日益风行,虽然ERP功能强大,但有的ERP报表系统中规范的报表较少,主要提供二次开发接口或通过如CRYSTALREPORT等其他报表工具进行管理,其实我们可以使用Ex ...

  7. python自动化表格截图_python自动化操作——excel刷新数据并截图发送微信

    1 importos2 importwin32gui, win32api, win32con, win32com3 from win32com.client importDispatch4 from ...

  8. python自动化操作——excel刷新数据并截图发送微信

    我真的是服了,一堆复制党到处粘贴,也太肆无忌惮了吧,麻烦尊尊下版权好吗,好歹这也是我辛辛苦苦写出来的......   原封不动的抄,错了的也不知道.真的是搞笑!   1 import os2 impo ...

  9. 141_Power Query之获取钉钉审批流自动刷新Power BI报告

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 钉钉办公给很多企业带来了很多方便,比如审批流线上化,通用化.线上化填写后,数据自动获取又是一个硬伤了,虽然数据可 ...

最新文章

  1. 工程院院士李德毅:认知的三次革命,类脑的五条启发
  2. SAP QM QM11显示Quality Notification List
  3. checkbox管理
  4. iOS上的jQuery.on()冒泡事件绑定 以及 iOS绝对定位元素中的输入框
  5. 局域网中,ip可以访问其他计算机,“网络”中无法发现共享计算机,也无法通过主机名访问。...
  6. 全球与中国Z型斗式提升机市场运营战略分析及未来趋势创新建议报告2022-2027年版
  7. One order search dynamic sql statement生成位置
  8. 怎样将employee 加到Territory里
  9. OpenCV学习笔记(六):非线性滤波-中值、双边:medianBlur(),bilateralFilter()
  10. python生成个性二维码学习笔记
  11. 重建Oracle 11g R2控制台
  12. 制作linux系统镜像U盘启动盘(有效适用)
  13. html 字怎么居中怎么写,html文字居中代码怎么写
  14. Android P 怎样屏蔽HOME键和RECENT键
  15. 创新专题一:省份层面(创新效率、创新能力、投入产出、高质量发展等)
  16. DOTA高考全国卷A卷
  17. 合同管理数据库设计mysql_工程合同管理信息系统的数据设计理念
  18. ssh连接远程服务器报错:ssh_exchange_identification: read: Connection reset by peer
  19. Thinkphp整合微信支付功能
  20. 活动星投票千人共读一本书网络评选微信的投票方式线上免费投票

热门文章

  1. 古典密码算法------替代密码算法
  2. 银屑病相关饮食调研-毛蕊花的药用部位没查清-还需更新
  3. 一种zernike多项式的解释(暂时没有弄完)
  4. kafka的offset笔记
  5. 大数据Notebook调研信息汇总(持续更新中)
  6. Found option without preceding group
  7. 为什么不同的深度学习框架要使用不同的保存格式(转)
  8. Django死活不跳转的问题
  9. stanford python中文分词
  10. 从版本库看开源项目的发展史