码迷,mamicode.com
首页 > 其他好文 > 详细

OAF与XML Publisher集成(转)

时间:2016-08-24 11:05:47      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

原文地址:OAF与XML Publisher集成

有两种方式,一种是用VO与XML Publisher集成,另一种是用PL/SQL与XML Publisher集成

用VO与XML Publisher集成 

用VO生成数据.AM里调用 

在application module新增方法:

import oracle.jbo.XMLInterface;
import oracle.xml.parser.v2.XMLNode;
public XMLNode getReportXMLNode(String keyId)
{
  ChgDisPrintTmpVOImpl vo = getChgDisPrintTmpVO1();
  vo.executeQuery();
  XMLNode xmlNode = ((XMLNode) vo.writeXML(4, XMLInterface.XML_OPT_ALL_ROWS));
  return xmlNode;
}

用CO调用方法

增加一个funciton

public void PrintPDF(OAPageContext pageContext, OAWebBean webBean, XMLNode xmlNode, String keyId)
  {
    HttpServletResponse response = (HttpServletResponse) pageContext.getRenderingContext().getServletResponse();
    String changeOrderType = pageContext.getParameter("ChangeOrderType");
    // Set the Output Report File Name and Content Type
    String contentDisposition = "attachment;filename=Distribution" + keyId + ".pdf";
    response.setHeader("Content-Disposition", contentDisposition);
    response.setContentType("application/pdf");
    try
    {
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
      xmlNode.print(outputStream);
      //xmlNode.print(System.out);
      ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
      OADBTransactionImpl oaTrans =
        (OADBTransactionImpl) pageContext.getApplicationModule(webBean).getOADBTransaction();
      String templateName = "XVK_CHANGEMEMO_TEMPLATE_ENG";
 
      TemplateHelper.processTemplate(oaTrans.getAppsContext(), "XVK", templateName, "zh", "CN", inputStream,
                                     TemplateHelper.OUTPUT_TYPE_PDF, null, response.getOutputStream());
 
      response.getOutputStream().flush();
      response.getOutputStream().close();
    }
    catch (Exception e)
    {
      response.setContentType("text/html");
      throw new OAException(e.getMessage(), OAException.ERROR);
    }
 
    pageContext.setDocumentRendered(false);
  }

修改CO processFormRequest事件

public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
{
  String event = pageContext.getParameter(EVENT_PARAM);
 
if("print".equals(event))
{
      String KeyId = pageContext.getParameter("KeyId");
      parameters = new Serializable[] { KeyId };
      XMLNode xmlNode = (XMLNode) am.invokeMethod("getReportXMLNode ", parameters);
      PrintDisPDF(pageContext, webBean, xmlNode, KeyId);
  }
}

 

用PL/SQL与XML Publisher集成 

用PL/SQL方法实例

PROCEDURE print_payment_request(p_payment_request_id IN NUMBER,
                                x_out_xml            OUT CLOB) IS
BEGIN
    dbms_lob.createtemporary(x_out_xml,
                             TRUE);
    l_temp_str := <?xml version="1.0" encoding="UTF-8"?> || chr(10) || <HEADERDATA> || chr(10);
    dbms_lob.writeappend(lob_loc => x_out_xml,
                         amount  => length(l_temp_str),
                         buffer  => l_temp_str);
    l_temp_str := l_temp_str || <MATERIALS> || r_h.materials || </MATERIALS> || chr(10);
    l_temp_str := </HEADERDATA>;
    dbms_lob.writeappend(lob_loc => x_out_xml,
                         amount  => length(l_temp_str),
                         buffer  => l_temp_str);
END;

AM调用方法

public CLOB getPaymentRequestXMLClob(String paymentRequestId)
{
  Number reqId = null;
  CLOB tempClob = null;
  OADBTransaction oaDbTrans = getOADBTransaction();
  OracleCallableStatement stmt = null;
  try
  {
    reqId = new Number(paymentRequestId);
    String strSQL =
      "BEGIN xvk_contract_reports_pkg.print_payment_request(p_payment_request_id=> :1,x_out_xml=>:2); END;";
    stmt = (OracleCallableStatement) oaDbTrans.createCallableStatement(strSQL, 1);
    stmt.setNUMBER(1, reqId);
    stmt.registerOutParameter(2, Types.CLOB);
    stmt.execute();
    tempClob = stmt.getCLOB(2);
    stmt.close();
  }
  catch (Exception exception1)
  {
    throw OAException.wrapperException(exception1);
  }
 
  return tempClob;
}

CO调用方法

public void PrintPDF(OAPageContext pageContext, OAWebBean webBean, CLOB xmlClob)
{
  HttpServletResponse response = (HttpServletResponse) pageContext.getRenderingContext().getServletResponse();
  // Set the Output Report File Name and Content Type
  String contentDisposition = "attachment;filename=PaymentRequest.pdf";
  response.setHeader("Content-Disposition", contentDisposition);
  response.setContentType("application/pdf");
  try
  {
    Reader inputReader = xmlClob.getCharacterStream();
    OADBTransactionImpl oaTrans =
      (OADBTransactionImpl) pageContext.getApplicationModule(webBean).getOADBTransaction();
    String templateName = "XVK_CONTRACT_PAYMENT_REQUEST";
    TemplateHelper.processTemplate(oaTrans.getAppsContext(), "XVK", templateName, "zh", "CN", inputReader,
                                   TemplateHelper.OUTPUT_TYPE_PDF, null, response.getOutputStream());
 
    response.getOutputStream().flush();
    response.getOutputStream().close();
  }
  catch (Exception e)
  {
    response.setContentType("text/html");
    throw new OAException(e.getMessage(), OAException.ERROR);
  }
 
  pageContext.setDocumentRendered(false);
}

修改CO事件 processFormRequest

String event = pageContext.getParameter(EVENT_PARAM);
 
if("print".equals(event)) {
    String paymentRequestId = pageContext.getParameter("paymentRequestId");
    Serializable[] param = {paymentRequestId};
    CLOB tempClob = (CLOB) am.invokeMethod("getPaymentRequestXMLClob",param);
    PrintPDF(pageContext, webBean ,tempClob);
  }

 

OAF与XML Publisher集成(转)

标签:

原文地址:http://www.cnblogs.com/huanghongbo/p/5802018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!