相比表单界面设置个性化触发调用请求(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;