Form 个性化-调用自定义程序库(实现:提交请求,自动输出请求结果)

来源:互联网 发布:软件需求十步走 编辑:程序博客网 时间:2024/06/05 18:04

需求:PO发放界面,原有的菜单【查看文档】,标准输出的报表及数据源XML无法明细到Distribution。

解决思路:客制明细报表,并挂请求,PO发放界面,利用个性化,新增一个菜单项【查看文档-客制】,该菜单项来执行请求并将请求结果自动呈现给用户。

  Form 个性化中,内置的Action提供一种名为:“调用自定义程序库”,其实就是CUSTOM.pll,这个文件。

 当项目中不允许需改标准Form,且利用个性化又无法达到需求目的的时候,CUSTOM.pll,就是个很好的帮手。灵活性很大,但是也有缺点。缺点后面再说。


1.下载CUSTOM.pll文件。

用FTP工具,切换到路径$AU_TOP/resource/目录下,并下载CUSTOM.pll.

2.编辑CUSTOM.pll,新增自己的CODE。

用Form Builder打开CUSTOM.pll文件

此处需要注意的是,CUSTOM.pll其实就是一个package,Event就是自定义程序库的入口程序,其Event_Name的参数就是,个性化的中设置的变元。

建议呢!每个自定义代码都加上加上作者的注释,包括作者、用途、及时间。


此次新增的代码为:

Procedure Run_Blanket_Release_Pdf Is    v_Po_Header_Id      Number(30) := Name_In('PO_RELEASES.PO_HEADER_ID');    v_Release_Id        Number(30) := Name_In('PO_RELEASES.PO_RELEASE_ID');    v_Org_Id            Number(30) := Name_In('PO_RELEASES.ORG_ID');    l_Request_Id        Number;    l_Bl_Result         Boolean;    v_Layout            Boolean;    x_Phase             Varchar2(100);    x_Status            Varchar2(100);    x_Dev_Phase         Varchar2(100);    x_Dev_Status        Varchar2(100);    x_Message           Varchar2(100);    v_Template          Varchar2(100);    v_Organization_Code Varchar2(10);  Begin    If v_Org_Id Is Not Null Then      Begin        Select Organization_Code          Into v_Organization_Code          From Org_Organization_Definitions t         Where t.Operating_Unit = v_Org_Id;      Exception        When Others Then          Fnd_Message.Set_String('异常错误,报表输出失败!');          Fnd_Message.Error;          Return;      End;    End If;    If v_Organization_Code = 'SZ' Then      v_Template := 'CUXPOR046_BLK_REL_SZ';    Else      v_Template := 'CUXPOR046_BLK_REL_TS';    End If;      v_Layout := Fnd_Request.Add_Layout('PO'                                      ,v_Template                                      ,Null                                      ,Null                                      ,'PDF');      l_Request_Id := Fnd_Request.Submit_Request('PO'                                              ,'CUXPOR046_BLK'                                              ,''                                              ,''                                              ,False                                              ,v_Po_Header_Id                                              ,v_Release_Id                                              ,''                                              ,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_Bl_Result := 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%)    End Run_Blanket_Release_Pdf;
pll里面代码可以自由发挥了,其实跟写Form一样。

如果需要带入参数,可以用 Name_In来取Form上面的值,如:

v_Po_Header_Id      Number(30) := Name_In('PO_RELEASES.PO_HEADER_ID');

由于我的代码中使用到 Editor_Pkg.Report过程,这个过程是在FNDCONC.pll中,所以我们需要把FNDCOC库添加到CUSTOM下面才可以使用。

如果本地resource没有,我们要从服务器上下载,也是在$AU_TOP/resource/目录下。

下载后,附加动作如下:



3.上传并编译CUSTOM.pll

将编辑好的CUSTOM.pll文件保存,并上传至$AU_TOP/resource/目录下,覆盖。

编译pll.

cd $AU_TOP/resource/

frmcmp_batch module_type=LIBRARY module=CUSTOM userid=apps/apps


以上所用版本为R12。

如果是11i,编译命令如下:

f60gen module_type=LIBRARY module=CUSTOM userid=apps/apps

4.设置个性化

在 PO发放界面的个性化上面新增2个规则

1.新增菜单项

先设置规则,及条件,如图:



2.设置菜单项执行动作

规则、条件


活动设置


5.验证个性化及自定义程序


注意的是, 调用自定义程序库,必须重新登录EBS才能生效!OK搞定!


缺点:

1.版本控制麻烦,每个程序新增功能前都必须下载最新的CUSTOM.pll,而且必须得知会所有程序员。

2.CUSTOM.pll为公用的程序库,如果发生未知异常,且编译时不体现的话,全部的Form都可能受到影响。


欢迎补充。。。。欢迎拍砖!

原创粉丝点击