• INPUT和CONSTRUCT指令——范例报表查询,作用让用户输入数据,自动生成SQL的WHERE条件,带开窗查询


    INPUT指令

    说明:
    1. 当程序执行到INPUT指令时,会将控制权交给用户,让用户输入数据。
    2. 用户输入完字段的数据,会将数据回传给程序中的变量接收。
    3. 只要执行到INPUT的指令,程序会将每个字段Default为NULL。

      反之不需要将每个字段的值都变为NULL的话,需添加(WITHOUT DEFAULTS) 

    范例(cxrq005):

    1、首先在MAIN函数前定义客制变量,用来接收用户数据;

    #add-point:自定義模組變數-客製(Module Variable) name="global.variable_customerization"
    
    TYPE type_g_input RECORD
            xrsduc010 STRING,
            xrsduc010_desc STRING,
            xrsduc010_desc_1 STRING
    END RECORD
    
    DEFINE g_input      type_g_input
    
    #end add-point  

    以上这些变量,均对应规格上的控件代号进行定义;

    2、在cxrq005 _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.xrsduc010 FROM xrsduc010 ATTRIBUTES(WITHOUT DEFAULTS)  
             
               ON ACTION controlp INFIELD xrsduc010
               INITIALIZE g_qryparam.* TO NULL
               LET g_qryparam.state = 'c'               #c-多选,i-单选
               LET g_qryparam.reqry = FALSE
               LET g_qryparam.default1 = g_input.xrsduc010       #給予default值
               LET g_qryparam.arg1 = g_site
               CALL  cq_pmab001_2()                                #呼叫開窗
               DISPLAY g_qryparam.return1  TO xrsduc010      #將開窗取得的值回傳到變數
               #DISPLAY g_qryparam.return2 TO xrsduc010_desc
               #DISPLAY g_qryparam.return3 TO xrsduc010_desc_1
               
             END INPUT
             #end add-point  

    如有多个控件的输入控制权需要交给用户来输入,依次在INPUT指令中输入接收数据的变量和控件代号即可。

    CONSTRUCT指令

    此指令可让用户在画面上输入查询条件(通称Query By Example;QBE),以取得用户的查询范围数据。用户的查询数据会组成一串WHERE指令(参下页批注),并置入设定好的变量中。若使用者未输入任何条件,即按下『确定』离开CONSTRUCT,系统也会自动于此变量中补入『1=1』

    范例同上:

    1、同上;

    接收WHERE指令的变量最好使用STRING类型;

    2、在cxrq005 _ui_dialog()函数中的DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)领域下自定义CONSTRUCT:

             #add-point:construct段落 name="ui_dialog.construct"
             CONSTRUCT BY NAME g_input.xrsduc010 ON xrsduc010 
                ON ACTION controlp INFIELD xrsduc010
                       INITIALIZE g_qryparam.* TO NULL
                       LET g_qryparam.state = 'c'
                       LET g_qryparam.reqry = FALSE
                       LET g_qryparam.default1 = g_input.xrsduc010       #給予default值
                       LET g_qryparam.arg1 = g_site
                       CALL  cq_pmab001_2()                                #呼叫開窗
                       DISPLAY g_qryparam.return1  TO xrsduc010      #將開窗取得的值回傳到變數
                       #DISPLAY g_qryparam.return2 TO xrsduc010_desc
                       #DISPLAY g_qryparam.return3 TO xrsduc010_desc_1
                       
                    NEXT FIELD xrsduc010 
                    
             END CONSTRUCT
             #end add-point 

    域名和变量名称相同时: CONSTRUCT BY NAME char_variable ON column_list

    反之:CONSTRUCT char_variable ON column_list FROM field_list

    说明:
     char_variable为接取用户输入数据的字符串变量(建议以STRING格式变量接取)
     column_list为对应到表格(TABLE)的域名清单(逗号隔开)
     field_list为画面(WINDOW或是FORM)上的字段代码清单(逗号隔开)

    注:INPUT的数据输入后,其值是分散于个变量中,若要以INPUT指令来接取用户所输入的查询条件,则必需以一连串复杂的字符串组合指令来组出查询指令所需要的WHERE条件。而CONSTRUCT的优点在:系统会自动判别用户输入条件并组合,后续只要将之与SELECT等指令组合即可,可降低设计的复杂度。

  • 相关阅读:
    《图解HTTP》读书笔记
    【译】关于vertical-align你应知道的一切
    【移动端debug-5】可恶的1px万能实现方案
    《编写高质量代码改善JavaScript程序的188个建议》读书笔记
    【移动端debug-4】iOS下setTimeout无法触发focus事件的解决方案
    一张图看懂Function和Object的关系及简述instanceof运算符
    三张图搞懂JavaScript的原型对象与原型链
    一张图看懂encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的区别
    图解call、apply、bind的异同及各种实战应用演示
    centos vm 桥接 --网络配置
  • 原文地址:https://www.cnblogs.com/xiaoli9627/p/6836157.html
Copyright © 2020-2023  润新知