На той странице где вы
хотите вызвать отчет, и где вы знаете параметры этого отчета "рисуете"
кнопку или ссылку(более предпочтительно т.к. можно указать чтоб
открылась в новом окне, очень актуально для отчетов). В качестве target у
кнопки или ссылки указываете на свою собственную пустую страницу,
сделать ее можно за 1 минуту.
На этой странице ничего нет кроме контроллера с методом processRequest приблизительно такого содержания (внимание - в 12-й версии addLayout требует 6 параметров, а не 5, как в 11 версии) :
На этой странице ничего нет кроме контроллера с методом processRequest приблизительно такого содержания (внимание - в 12-й версии addLayout требует 6 параметров, а не 5, как в 11 версии) :
public void processRequest(OAPageContext pageContext, OAWebBean webBean) { super.processRequest(pageContext, webBean); OAApplicationModule am = pageContext.getApplicationModule(webBean); int xxRequestId = 0; // Считываем входные параметры String xxp_kvpid = pageContext.getParameter("p_kvpid"); String xxp_loanId = (String)pageContext.getParameter("p_loanId"); // Заполняем, вычисляем параметры необходимые для запуска конкарента String xxp_type = null; String applnName = "PER"; String cpName = null; String LayName = null; String cpDesc = null; Vector cpArgs = null; String xxDate = null; String xxp_number = null; String xxp_summa = null; String xxp_code = null; String xxp_date = null; if (xxp_kvpid != null) { xxp_date = (String)pageContext.getParameter("p_date"); java.util.Date d1 =(java.util.Date) pageContext.getOANLSServices().stringToDate(xxp_date,"dd-MMM-yyyy"); xxDate = new SimpleDateFormat("yyyy/MM/dd").format(d1); xxp_number = pageContext.getParameter("p_number"); xxp_summa = pageContext.getParameter("p_summa"); xxp_code = pageContext.getParameter("p_code"); xxp_type = "G"; if ("P".equals(xxp_code.substring(0,1)) ) { xxp_type = "P";} } // Запускаем конкарент try { OADBTransaction tx = am.getOADBTransaction(); java.sql.Connection pConncection = tx.getJdbcConnection(); ConcurrentRequest cr = new ConcurrentRequest(pConncection); if (xxp_kvpid != null) { cpName = "XXKVP_KO1"; // Краткое название конкарента LayName = "XXKVP_KO1"; // код шаблона XML if ("G".equals(xxp_type)) { cpName = "XXKVP_KO2"; LayName = "XXKVP_KO2"; } // Заполняем параметры конкарента cpArgs = new Vector(6); cpArgs.addElement(xxDate); cpArgs.addElement(xxp_kvpid); cpArgs.addElement(xxp_type); cpArgs.addElement(xxp_number); cpArgs.addElement(xxp_summa); cpArgs.addElement(xxp_code); } else { cpName = "XXKVP_DOG_LOAN"; // Краткое название конкарента LayName = "XXKVP_DOG_LOAN"; // код шаблона XML // Заполняем параметры конкарента cpArgs = new Vector(1); cpArgs.addElement(xxp_loanId); } try { // Добавление шаблона (для отчетов XML Publisher) cr.addLayout("PER",LayName,"ru","RU","PDF"); } catch(Exception e) {throw new OAException("addLayout -" + e.getMessage(), (byte)0); } // Непосредственно запуск конкарента xxRequestId = cr.submitRequest(applnName, cpName, cpDesc, null, false, cpArgs); tx.commit(); // xxRequestId - id конкарента } catch(RequestSubmissionException e) { throw new OAException("RequestSubmissionException " + e.getMessage(), (byte)0); } // Ждем завершения конкарента через пакет fnd_concurrent.wait_for_request OAException oaexception = null; String Stmt = "declare var_wait boolean; var_phase varchar2(80); var_status varchar2(80); var_dev_phase varchar2(80); var_dev_status varchar2(80); var_message varchar2(80); begin var_wait := fnd_concurrent.wait_for_request( request_id => " + xxRequestId + ",interval => 5 ,max_wait => 0,phase => var_phase,status => var_status,dev_phase => var_dev_phase,dev_status => var_dev_status,message => var_message ); end;"; OAApplicationModule MyApplicationModule = pageContext.getRootApplicationModule(); OADBTransaction oadbtransaction = MyApplicationModule.getOADBTransaction(); OracleCallableStatement MyOraCallableStmt; try { MyOraCallableStmt = (OracleCallableStatement)oadbtransaction.createCallableStatement(Stmt, 1); MyOraCallableStmt.execute(); } catch(Exception exception1) { oaexception = OAException.wrapperException(exception1); throw OAException.wrapperException(exception1); } try { MyOraCallableStmt.close(); } catch(Exception exception) { throw OAException.wrapperException(exception); } // Дождались окончания конкарента и переходим на страницу отображения результатов конкарента с передачей параметра какой конкарент нужно отобразить pageContext.forwardImmediately("OA.jsp?_rc=FNDCPREQUESTVIEWPAGE&_ri=0&OUTPUT=Y&REQUESTID=" + xxRequestId, null, (byte)0, null, null, false, "N"); }
__________________________________________________________
Чтобы другим не наступать на грабли и не гадать как этот javascript прилаживать к OAF, роя интернет. Выкладываю что у меня получилось. Получилось у меня и через кнопку и по линку. Через кнопку, получилось используя javascript. Вот пример кода: public void processFormRequest(OAPageContext pageContext, OAWebBean webBean) { super.processFormRequest(pageContext, webBean); if (pageContext.getParameter("bPrint") != null) { String lookupType = pageContext.getParameter("LookupType"); StringBuffer l_buffer = new StringBuffer(); StringBuffer l_buffer1 = new StringBuffer(); l_buffer.append("javascript:var mywin = openWindow(top, '"); l_buffer1.append("/xxlookup/oracle/apps/fnd/lookups/webui/xxConcurent"); l_buffer1.append("&retainAM=Y"); l_buffer1.append("&LookupType="+lookupType); String url = "/OA_HTML/OA.jsp?page="+l_buffer1.toString(); OAUrl popupUrl = new OAUrl(url, OAWebBeanConstants.ADD_BREAD_CRUMB_SAVE ); String strUrl = popupUrl.createURL(pageContext); l_buffer.append(strUrl.toString()); l_buffer.append("', 'ReportWindow', {width:800, height:600},false,'dialog',null);"); pageContext.putJavaScriptFunction("RepLookup",l_buffer.toString()); } } Где xxConcurent - это страничка (создавал в JDevelopere, как New -> OACompanets -> Page) LookupType - это параметр который забираю с текущей странички Для линка просто сам формирую дестинэйшин: public void processRequest(OAPageContext pageContext, OAWebBean webBean) { super.processRequest(pageContext, webBean); OALinkBean linkBean = (OALinkBean) webBean.findIndexedChildRecursive("lPrint");//first get the LinkBean linkBean.setAttributeValue(linkBean.DESTINATION_ATTR, "OA.jsp?page=/xxlookup/oracle/apps/fnd/lookups/webui/xxConcurent&retainAM=Y&LookupType="+ (String)pageContext.getParameter("LookupType")); } Ну и в свойствах у Линка стоит Target Frame = _blank Надеюсь кому-нибудь будет полезным.
Этот комментарий был удален автором.
ОтветитьУдалить