PostRank

2008/10/31

如何修改XML报表默认输出格式的设置

摘自:網路

完成XML报表的制作挂到系统中后, 默认的输出格式是PDF,想要修改的话还要点击'Option'按钮到另一个界面上去修改,客户不胜其烦,我们也很恼火直骂Oracle的娘。好在群众的智慧是无限的,在同事Allen和ERP100斑竹Phoenix的帮助下,找到了解决方法,效果不错。

方法一 Report Builder + XML 实现
Step(1) 在Report Bulder中添加Number类型参数P_CONC_REQUEST_ID;

Step(2) 修改Befor Report Trigger,添加以下代码。
--update layout
UPDATE fnd_conc_pp_actions
SET argument5='RTF'
WHERE concurrent_request_id=:P_CONC_REQUEST_ID
AND action_type=6;
注:此处将输入格式设置为Word,若想设成Excel或Html,可将'RTF'替换成'EXCEL'或'HTML'

方法二 PL/SQL Store Procedure + XML 实现;
Procedure XML_PRINT(Errbuf Out Varchar2,Retcode Out Varchar2) Is
ctx dbms_xmlgen.ctxhandle;
c_result clob;
b Varchar2(5000);
Type ref_cursor Is Ref Cursor;
v_source ref_cursor;
c_long Number;
c_int Int;
Begin
--设置XML报表模认输出格式
UPDATE_XML_OUTPUT_FORMAT ;
--定义数据,数据集必须为游标变量
Open v_source For
Select HEADER_ID DN_HEADER_ID ,
SOLD_TO_ORG_ID PICK_SEQUENCE_ID ,
CUST_PO_NUMBER PS_HEADER_BATCH_NUM ,
ORG_ID BATCH_ID ,
SOLD_TO_ORG_ID DELIVERY_ID ,
ORDER_NUMBER DN_NUMBER ,
BOOKED_FLAG PRINTED_FLAG
From OE_ORDER_HEADERS_ALL
where rownum < 15;
--定义XML CLOB文件
ctx := dbms_xmlgen.newContext(v_source);
-- generate the CLOB as a result.
c_Result := dbms_xmlgen.getXML(ctx);
--以文本形式输出XML文件
c_long := length(c_result);
c_int := c_long/50-0.5;
For a In 1..c_int+1 Loop
b := dbms_lob.substr(c_result,50,(a-1)*50+1);
fnd_file.PUT(fnd_file.OUTPUT,b);
--dbms_output.put_line(b);
End Loop;
dbms_xmlgen.closeContext(ctx);
Close v_source;
End xml_print;

注:这是斑竹Phoenix提供的用PL/SQL Store Procedure产生XML数据的方法,简单实用。


Procedure UPDATE_XML_OUTPUT_FORMAT Is
pragma autonomous_transaction;
BEGIN
UPDATE fnd_conc_pp_actions
SET argument5='RTF'
WHERE concurrent_request_id= fnd_profile.value('CONC_REQUEST_ID')
AND action_type=6;
COMMIT ;
END ;

沒有留言: