需求: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的参数就是,个性化的中设置的变元。
建议呢!每个自定义代码都加上加上作者的注释,包括作者、用途、及时间。
Add new code
-
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');
-
-
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');
-
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);
-
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.设置菜单项执行动作
规则、条件
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/269025/viewspace-1809370/
,如需转载,请注明出处,否则将追究法律责任。