zoukankan      html  css  js  c++  java
  • Form个性化调用Procedure

    在标准Form中提交客户化请求,通过使用Form的个性化,完全可以实现这个需求。下面这个例子是在发票界面上打印付款申请,使用工具栏上活动--打印付款申请提交请求。
    首先创建菜单按钮,这个就不赘述了,触发器事件选择WHEN-NEW-FORM-INSTANCE


    其次,响应打印按钮 ,这里使用执行过程这个内置项来调用请求,调用的过程代码如下

    1. PROCEDURE submit_pay_request( p_org_id          IN VARCHAR2,  
    2.   
    3.                               p_invoice_id_list IN VARCHAR2)  
    4.   
    5. IS  
    6.   
    7.   l_success              BOOLEAN;  
    8.   
    9.   l_request_number  NUMBER;  
    10.   
    11.   l_errbuf                 VARCHAR2(2000);  
    12.   
    13.   e_exception           EXCEPTION;  
    14.   
    15. BEGIN  
    16.   
    17.   l_success := fnd_request.add_layout('XXBG','XXBGREQP','zh','CN','PDF');  
    18.   
    19.     
    20.   
    21.   IF p_invoice_id_list <> '()' THEN  
    22.   
    23.     IF l_success THEN  
    24.   
    25.       fnd_request.set_org_id(to_number(p_org_id));  
    26.   
    27.       -- 提交打印付款申请请求  
    28.   
    29.      l_request_number :=   
    30.   
    31.                 fnd_request.submit_request(   
    32.   
    33.                        'XXBG',  
    34.   
    35.                        'XXBGREQP',  
    36.   
    37.                        '',  
    38.   
    39.                        '',  
    40.   
    41.                        FALSE,  
    42.   
    43.                        p_invoice_id_list,  
    44.   
    45.                        CHR(0), '''''''''''''''',  
    46.   
    47.                        '''''''''''''''''''',  
    48.   
    49.                        '''''''''''''''''''',  
    50.   
    51.                        '''''''''''''''''''',  
    52.   
    53.                        '''''''''''''''''''',  
    54.   
    55.                        '''''''''''''''''''',  
    56.   
    57.                        '''''''''''''''''''',  
    58.   
    59.                        '''''''''''''''''''',  
    60.   
    61.                        '''''''''''''''''''',  
    62.   
    63.                        '''''''''''''''''''');  
    64.   
    65.       IF l_request_number = 0 THEN  
    66.   
    67.         l_errbuf := 'Submit Request Failure';  
    68.   
    69.         RAISE e_exception;  
    70.   
    71.       ELSE  
    72.   
    73.         COMMIT;  
    74.   
    75.       END IF;  
    76.   
    77.         
    78.   
    79.     ELSE  
    80.   
    81.       l_errbuf := 'Add Template Failure';  
    82.   
    83.       RAISE e_exception;  
    84.   
    85.     END IF;  
    86.   
    87.   ELSE  
    88.   
    89.     l_errbuf := 'Please Choice an invoice';  
    90.   
    91.     RAISE e_exception;  
    92.   
    93.   END IF;  
    94.   
    95. EXCEPTION  
    96.   
    97.   WHEN e_exception THEN  
    98.   
    99.     raise_application_error(-20002, l_errbuf);  
    100.   
    101.   WHEN OTHERS THEN  
    102.   
    103.     raise_application_error(-20001, SQLERRM);  
    104.   
    105. END;  

    在个性化中,添加响应按钮事件,事件触发器就是第一步中添加的菜单项了,本例中为SPECIAL45。在活动中,选择类型为内置,内置类型--执行过程,变元为
    ='XXBG_AP_UTL.submit_pay_request('''||:INV_SUM_FOLDER.ORG_ID||''','||'''('||:INV_SUM_FOLDER.INVOICE_ID||')'')'
    这里需要特别解释一下变元,在个性化中,其实认为变元是一串字符串。这里变元可以分为两种,
    第一种,不带“=”的字符串,这种方法在个性化申请后,便已经绑定了执行的语句,任何时候执行的语句都是固定的,例如变元中填写XXBG_AP_UTL.insert_log(1, 'AP_INVOICE') (注意,外层无需加''),那么在个性化申请后,我们点击菜单项的按钮永远都是执行过程XXBG_AP_UTL.insert_log(1, 'AP_INVOICE'),这种方法适合简单的执行过程。
    第二种,带“=”的变元,当字符串使用了“=“,那么就代表这个字符串还包含了一些动态的参数,Form个性化申请后不绑定该字符串而是在执行时动态解析。本例中由于使用到了发票界面的invoice_id和org_id,所以使用第二种方式。



    最后,再加一个功能,弹出请求窗口。



    保存,申请个性化,再看效果

    FORM_PERSONALIZE_PROCEDURE4.png



    使用执行过程的个性化来实现上述需求,有一个小缺陷,就是无法精确的定位到某一个特定请求,因为reques_number无法通过过程传回,我尝试讲procedure增加一个out参数将改参数传回给form上的global变量,但是无论用什么方式都成功不了,不知道哪位高手有研究过这个问题,麻烦告知一下。
    另外一个我觉得不足的是关于过程的消息处理,使用这个个性化在消息处理上捉襟见肘,只有几个可用的方法。所以,我使用了另外一个Form个性化方法来解决这两个问题,也就是下一篇要介绍的--”自定义程序库“

  • 相关阅读:
    PTA A1005&A1006
    PTA A1003&A1004
    PTA A1001&A1002
    MOOC web前端开发笔记(二)
    MOOC web前端开发笔记(一)
    MOOC C++笔记(三):类和对象提高
    MOOC C++笔记(二):类和对象基础
    MOOC C++笔记(一):从C到C++
    linux command tee
    modbus数据格式(一)
  • 原文地址:https://www.cnblogs.com/liuweicong39/p/2771231.html
Copyright © 2011-2022 走看看