EBS 个性化:Custom.pll调用并发请求

相比表单界面设置个性化触发调用请求(https://blog.csdn.net/weixin_42683386/article/details/114025737),CUSTOM.PLL还可以调用fnd_function.execute弹出请求Form界面;或者调用Editor_Pkg.Report自动检视输出结果。

主要代码:

--注意:代码中用到了app_special2,所以需要加载APPCORE2.pll库
--如果使用 EDITOR_PKG.report自动检视输出结果,则需要加载FNDCONC.pll库
PROCEDURE event(event_name VARCHAR2) is
    form_name  VARCHAR2(30) := name_in('system.current_form'); 
    block_name VARCHAR2(30) := name_in('system.cursor_block'); 
BEGIN
    --个性化调用请求打印采购合同
    IF event_name = 'WHEN-NEW-FORM-INSTANCE' THEN
       IF form_name = 'POXPOEPO' THEN
           --添加菜单
           app_special2.instantiate('SPECIAL45', '打印采购合同', NULL, TRUE); 
           app_special2.enable('SPECIAL45', property_on);
       END IF; 
    END IF;
    
    IF event_name = 'SPECIAL45' THEN
        IF (form_name = 'POXPOEPO' AND block_name = 'PO_HEADERS') THEN
            DECLARE
                ln_person_id  NUMBER;
                lb_boolean    BOOLEAN DEFAULT FALSE; 
                l_org_id      NUMBER;
                ln_request_id NUMBER;

            BEGIN
                --根据库存组织id反求OU
                l_org_id := name_in('PARAMETER.ORG_ID'); 
                
                BEGIN
                  SELECT ood.operating_unit INTO l_org_id
                    FROM org_organization_definitions ood 
                    WHERE ood.organization_id = l_org_id; 
                  EXCEPTION
                    WHEN OTHERS THEN l_org_id := NULL;
                END;
                
                lb_boolean := fnd_request.add_layout
                        ('XXE',         --template_appl_name
                         'JCNPOVATTAX', --template_code:XML,not executable
                         'en',          --template_language
                         'US',          --template_territory
                         'PDF');        --output format 

                IF lb_boolean THEN
                --给并发请求的业务实体赋值 
                fnd_request.set_org_id(l_org_id); --调用报表
                
                ln_request_id := FND_request.SUBMIT_request
                         ('XXE',         --application
                          'JCNPOVATTAX', --program:HUH采购合同
                          NULL, 
                          NULL, 
                          false, 
                          name_in('PO_HEADERS.SEGMENT1',  --PO
                          name_in('PO_HEADERS.SEGMENT1',  
                          NULL,
                          l_org_id,          --Org:HGZ
                          CHR(0)
                          ,''
                          ,''
                          ,''
                          ... ...
                          ); 
               
               COMMIT; 
               -- 弹出请求窗口
               fnd_function.execute(function_name => 'FND_FNDRSRUN'
                                   ,open_flag     => 'Y' 
                                   ,session_flag  => 'Y' 
                                   ,other_params  => 'CONCURRENT_PROGRAM_NAME="JCNPOVATTAX" PROGRAM_APPL_SHORT_NAME="XXE" DODT_REQ_ID="' ||
                                       to_char(ln_request_id) || '"'); 
               END IF; 
          END; 
       END IF;
    END IF; 
END event;

弹出请求窗口也可换成调用Editor_Pkg.Report直接输出请求结果。

                    ln_request_id := FND_request.SUBMIT_request
                         ('XXE',         --application
                          'JCNPOVATTAX', --program:HUH采购合同
                          NULL, 
                          NULL, 
                          false, 
                          name_in('PO_HEADERS.SEGMENT1',  --PO
                          name_in('PO_HEADERS.SEGMENT1',  
                          NULL,
                          l_org_id,          --Org:HGZ
                          CHR(0)
                          ,''
                          ,''
                          ,''
                          ... ...
                          ); 
               
               COMMIT; 
               
    If l_Request_Id Is Null Or
       l_Request_Id = 0 Then
      Return;
    End If;
  
    fnd_message.set_string('请求提交成功,请稍等!请求ID:'||l_Request_Id);
    fnd_message.show;
  
    --更改鼠标式样:漏斗鼠标(忙状态)
    SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'BUSY');  
    --显示进度条窗口,并设置进度为0 
    APP_WINDOW.PROGRESS(0);
  
    l_request_flag := Fnd_Concurrent.Wait_For_Request(l_Request_Id
                                                    ,1
                                                    ,0
                                                    ,x_Phase
                                                    ,x_Status
                                                    ,x_Dev_Phase
                                                    ,x_Dev_Status
                                                    ,x_Message);

  If x_Dev_Phase = 'COMPLETE' and x_Dev_Status = 'NORMAL' Then
      Editor_Pkg.Report(l_Request_Id,'Y'); --使输出的报表pdf文件在浏览器中显示。
  Else
      Fnd_File.Put_Line(1,Rpad('x_phase',20,' ') || '=' || x_Phase);
      Fnd_File.Put_Line(1,Rpad('x_status=',20 ,' ') || '=' || x_Status);
      Fnd_File.Put_Line(1,Rpad('x_dev_phase=',20,' ') || '=' || x_Dev_Phase);
      Fnd_File.Put_Line(1,Rpad('x_dev_status=',20 ,' ') || '=' || x_Dev_Status);
      Fnd_File.Put_Line(1,Rpad('x_message=',20 ,' ') || '=' || x_Message);
      Fnd_File.Put_Line(1,'Warning : Starting journal print report failure! It did not running in 120 seconds, its request_id is ' ||
                        To_Char(l_Request_Id) || ' please check it.');
  End If;
  
      SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'DEFAULT');  
      APP_WINDOW.PROGRESS(1); --显示进度条窗口,并设置进度为1(100%)  
  
  Else
      fnd_message.set_string('请先查找出采购单再点击按钮打印!');
      fnd_message.show;
  End If;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值