reporting solutions for adf applications
DESCRIPTION
Deze presentatie is gegeven tijdens de KScope conferentie 2012Spreker: Luc BorsTitel: An ADF Special ReportOnderwerp: Fusion Middleware - Subonderwerp: ADFOracle ADF is zeer geschikt voor het bouwen van enterprise applicaties. ADF heeft echter geen ingebouwde oplossingen voor het maken van rapportages. Door het inbouwen van rapportage mogelijkheden is het niet nodig om externe rapportage tooling op te starten. Met één druk op de knop worden de rapportages getoond en krijg je snel inzicht in bedrijfskritische gegevens. In deze sessie leer je hoe je dit kunt oplossen door het gebruik van open source rapportage-tools en tools van Oracle.TRANSCRIPT
![Page 1: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/1.jpg)
A SPECIAL REPORT Reporting solutions for ADF Applications
Luc Bors Oracle Certified ADF Implementation Specialist
AMIS Services, The Netherlands Oracle ADF Specialized Partner
Monday, June 25, 2012 ODTUG KScope 12 San Antonio, Texas, USA
![Page 2: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/2.jpg)
REPORTING
![Page 3: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/3.jpg)
I USE ADF, WHAT ABOUT REPORTS ?
![Page 4: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/4.jpg)
ORACLE REPORTS DEVELOPER
![Page 5: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/5.jpg)
CREATING ORACLE REPORTS
• Example:
– Employees per Department Report
– Parameter P_DEPARTMENT_ID
![Page 6: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/6.jpg)
HOW TO CALL THE REPORT ?
![Page 7: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/7.jpg)
USING ORACLE REPORTS
• Use Case : Invoke the report for the currently selected
Department in an ADF table
![Page 8: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/8.jpg)
PREPARING THE CALL
• Create a bean and method to invoke the report
• Provide report parameters
String oraReportServerUrl = "http://192.168.2.8:8889/reports/rwservlet?";
String reportNameParam ="report=";
String reportDestypeParam = "destype=";
String reportPDesformatParam = "desformat=";
String reportUseridParam = "userid=“;
<managed-bean id="__13">
<managed-bean-name id="__14">oracleReportBean</managed-bean-name>
<managed-bean-class id="__15">
com.blogspot.lucbors.reporting.view.orarep.OracleReportBean
</managed-bean-class>
<managed-bean-scope id="__16">request</managed-bean-scope>
</managed-bean>
![Page 9: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/9.jpg)
CONSTRUCTING THE CALL
• Construct Report Server URL; Including the parameters public void runOracleReport(ActionEvent actionEvent) {
String departmentParam = "p_department_id=";
StringBuffer totalCallUrl = new StringBuffer();
totalCallUrl.append(getOraReportServerUrl());
totalCallUrl.append(getReportNameParam().concat("employees.rdf")+"&");
totalCallUrl.append(getReportDestypeParam().concat("cache")+"&");
totalCallUrl.append(getReportPDesformatParam().concat("html")+"&");
totalCallUrl.append(getReportUseridParam().concat("hr/hr@xe")+"&");
totalCallUrl.append(departmentParam.concat(getDepartmentId()));
setOraReportUrl(totalCallUrl.toString());
}
public String getDepartmentId() {
DCIteratorBinding it = ADFUtils.findIterator("SalaryOverview1Iterator");
oracle.jbo.domain.Number deptId =
(oracle.jbo.domain.Number)it.getCurrentRow().getAttribute("DepartmentId");
return deptId.toString();
}
![Page 10: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/10.jpg)
CALL AND SHOW THE REPORT
• Call ………
• ……. And Show the report
<af:popup id="showOraRpt" animate="default">
<af:panelWindow id="pw3" modal="true"
title="External Internet Info in a Modal Popup"
contentHeight="625" contentWidth="700" resize="on">
<af:inlineFrame id="if3" shortDesc="This is an inline frame"
source="#{oracleReportBean.oraReportUrl}"
styleClass="AFStretchWidth"
inlineStyle="height:600px;">
</af:inlineFrame>
</af:panelWindow>
<af:commandToolbarButton text="Run Oracle Report" id="cb3“
actionListener="#{oracleReportBean.runOracleReport}">
<af:showPopupBehavior popupId=":::showOraRpt" triggerType="click"/>
</af:commandToolbarButton>
![Page 11: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/11.jpg)
SHOWING THE ORACLE REPORT
• ….. and the result…..
![Page 12: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/12.jpg)
CAN I USE FMW REPORTING TOOLS ?
![Page 13: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/13.jpg)
ORACLE BI PUBLISHER
![Page 14: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/14.jpg)
ORACLE BI PUBLISHER
![Page 15: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/15.jpg)
ORACLE BI PUBLISHER
![Page 16: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/16.jpg)
ORACLE BI PUBLISHER
![Page 17: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/17.jpg)
PREPARING THE CALL
• Create a bean and method to invoke the report
• Provide report parameters
private static final String RAPPORT_SERVER_HOST_PARAM =
"http://192.168.56.101:7001/xmlpserver/~weblogic/";
private static final String RAPPORT_GENERAL_USER_PARAM = "<UN>";
private static final String RAPPORT_GENERAL_PASSWORD_PARAM = "<PW>";
<managed-bean id="__13">
<managed-bean-name id="__14">biPublisherBean</managed-bean-name>
<managed-bean-class id="__15">
com.blogspot.lucbors.reporting.view.orarep.BiPublisherBean
</managed-bean-class>
<managed-bean-scope id="__16">request</managed-bean-scope>
</managed-bean>
![Page 18: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/18.jpg)
CONSTRUCTING THE CALL
• Construct Report Server URL; Including the parameters
public void startBiReport(ActionEvent event)
{
StringBuffer reportUrl = new StringBuffer();
reportUrl.append(getRapportServerHost());
reportUrl.append("/"+"EmployeesPerDepartment"+".xdo");
// add standard params
addStandardParams(rapport,reportUrl);
// add report-specific params
addReportParams(rapport, reportUrl);
sLog.fine("Rapport start URL: "+reportUrl);
setReportUrl(reportUrl.toString());
……..
![Page 19: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/19.jpg)
CALL AND SHOW THE REPORT
• Call ………
• ……. And Show the report
<af:popup id="showBiRpt" animate="default">
<af:panelWindow id="pw3" modal="true"
title="External Internet Info in a Modal Popup"
contentHeight="625" contentWidth="700" resize="on">
<af:inlineFrame id="if3" shortDesc="This is an inline frame"
source="#{<…BI report source>}"
styleClass="AFStretchWidth"
inlineStyle="height:600px;">
</af:inlineFrame>
</af:panelWindow>
<af:commandToolbarButton text="Run BI Publisher Report" id="cb3“
actionListener="#{oracleReportBean.startBiReport}">
<af:showPopupBehavior popupId=":::showBiRpt" triggerType="click"/>
</af:commandToolbarButton>
![Page 20: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/20.jpg)
SHOWING THE BI PUBLISHER REPORT
![Page 21: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/21.jpg)
ARE THERE OPEN SOURCE TOOLS ?
![Page 22: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/22.jpg)
JASPER REPORTS
![Page 23: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/23.jpg)
JASPER REPORTS - IREPORT
![Page 24: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/24.jpg)
JASPER REPORT QUERY
![Page 25: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/25.jpg)
CREATING JASPER REPORTS
• Jasper iReport as design tool
– Select a report template
– Create a new report based on a query
– Add parameters
– Test report in iReport
![Page 26: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/26.jpg)
PREPARING JDEVELOPER AND ADF
• Make sure to add Jasper libraries to ADF project
![Page 27: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/27.jpg)
PREPARING THE CALL
• Create a bean and method to invoke the report
<managed-bean id="__13">
<managed-bean-name id="__14">jasperReportBean</managed-bean-name>
<managed-bean-class id="__15">
com.blogspot.lucbors.reporting.view.orarep.JasperReportBean
</managed-bean-class>
<managed-bean-scope id="__16">request</managed-bean-scope>
</managed-bean>
![Page 28: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/28.jpg)
CALLING THE JASPER REPORT
• How to invoke the Jasper report ?
– Get a handle to your template
– Define the file that will hold the generated report
– Optionally fill parameters
InputStream is = new FileInputStream (
new File("C:/ReportingTools/myReports/MyFirstReport.jrxml"));
OutputStream os=new FileOutputStream(
new File(this.filepath+this.reportname));
Map parameters = new HashMap();
parameters.put("P_DEPARTMENT_ID", getDepartmentId());
![Page 29: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/29.jpg)
CALL AND SHOW THE REPORT
• Call ………
<af:commandToolbarButton text="Run Oracle Report" id="cb3“
actionListener="#{oracleReportBean.runOracleReport}">
<af:showPopupBehavior popupId=":::showOraRpt" triggerType="click"/>
</af:commandToolbarButton>
![Page 30: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/30.jpg)
JASPER REPORTING
• Invoke the report ………
• ……. And Show the result
JasperDesign jasperDesign = JRXmlLoader.load(is);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
JasperPrint jasperPrint =
JasperFillManager.fillReport(jasperReport, parameters, conn);
JasperExportManager.exportReportToPdfStream(jasperPrint, os);
JasperViewer.viewReport(jasperPrint, false);
![Page 31: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/31.jpg)
JASPER REPORTING
• ….. And the result….
![Page 32: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/32.jpg)
I DONT WANT MY OWN REPORTSERVER
![Page 33: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/33.jpg)
REPORTING FROM THE CLOUD
![Page 34: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/34.jpg)
DOCMOSIS REPORTING
![Page 35: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/35.jpg)
CREATING TEMPLATES
![Page 36: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/36.jpg)
UPLOAD TO THE CLOUD
![Page 37: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/37.jpg)
CALLING THE CLOUD FROM ADF
• Setup a connection
• Build the request
• Write request to outputstream
![Page 38: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/38.jpg)
PREPARING THE CALL
• Create a bean and method to invoke the report
• Provide report parameters
private static final String DWS_RENDER_URL =
"https://dws.docmosis.com/services/rs/render";
private static final String ACCESS_KEY = “<your acces key>";
private static final String OUTPUT_FORMAT = "pdf";
private static final String OUTPUT_FILE = "myWelcome." + OUTPUT_FORMAT;
<managed-bean id="__13">
<managed-bean-name id="__14">docmosisReportBean</managed-bean-name>
<managed-bean-class id="__15">
com.blogspot.lucbors.reporting.view.docmosis.DocmosisReportBean
</managed-bean-class>
<managed-bean-scope id="__16">request</managed-bean-scope>
</managed-bean>
![Page 39: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/39.jpg)
CONSTRUCTING THE CALL
• Construct Report Server URL; Including the parameters
private static String buildRequestForEmployee() {
// the name of the template in our cloud account we want to use
String templateName = "/KScopeDemoTemplate.doc";
StringBuilder sb = new StringBuilder();
// Start building the instruction
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sb.append("<render \n");
sb.append("accessKey=\"").append(ACCESS_KEY).append("\" ");
sb.append("templateName=\"").append(templateName).append("\" ");
sb.append("outputName=\"").append(OUTPUT_FILE).append("\">\n");
![Page 40: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/40.jpg)
CONSTRUCTING THE CALL
• Adding the Data
// now add the data specifically for this template
sb.append("<data\n");
sb.append(" date=\"").append(new Date()).append("\"\n");
sb.append(" title=\"Creating documents with Docmosis from ADF \">\n");
String[] messages = {
"Reporting from ADF Applications - What are the Options? John Flack",
"ADF Data Visualization Tips & Techniques. Chris Muir",
"How to Bring Common UI Patterns to ADF. Luc Bors",
"and many many more......"};
for (int i = 0; i < messages.length; i++) {
sb.append("<suggestions msg=\"").append(messages[i]).append("\"/>\n");
}
sb.append("</data>\n");
sb.append("</render>\n");
![Page 41: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/41.jpg)
CALL AND SHOW THE REPORT
• Call ………
• ……. And Show the report
<af:popup id="showDocmosisReport" animate="default">
<af:panelWindow id="pw2" modal="true" title="The report"
contentHeight="625" contentWidth="700" resize="on">
<af:inlineFrame id="if2" shortDesc="This is an inline frame“
source="/showpdfservlet?name=#{docmosisReportBean.docmosisreportname}"
styleClass="AFStretchWidth"
inlineStyle="height:600px;"></af:inlineFrame>
</af:panelWindow>
</af:popup>
<af:commandToolbarButton text="Run docmosis Report" id="cb5"
actionListener="#{docmosisReportBean.runDocmosisReport}">
<af:showPopupBehavior popupId=":::showDocmosisReport"
triggerType="action"/>
</af:commandToolbarButton>
![Page 42: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/42.jpg)
SHOWING THE RESULT
![Page 43: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/43.jpg)
REPORTING; YOUR OPTIONS
![Page 44: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/44.jpg)
COMMON FEATURES
![Page 45: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/45.jpg)
PRO’S AND CON’S ?
![Page 46: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/46.jpg)
ARE THERE OTHER ALTERNATIVES?
![Page 47: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/47.jpg)
MORE REPORTING IN THE FMW TRACK
![Page 48: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/48.jpg)
RESOURCES
• OTN – Reports : http://www.oracle.com/technetwork/middleware/reports/overview/index.html
• OTN – BI Publisher : http://www.oracle.com/technetwork/middleware/bi-publisher/overview/index.html
• Jasper : http://jasperforge.org/projects/jasperreports
• Docmosis : https://www.docmosis.com/
• OS Reporting overview : http://java-source.net/open-source/charting-and-reporting
• AMIS tech blog : http://technology.amis.nl
• ADF-EMG site : http://groups.google.com/group/adf-methodology/web/adf-reporting?pli=1
![Page 49: Reporting solutions for ADF Applications](https://reader036.vdocuments.site/reader036/viewer/2022081801/54c0e7564a795978508b45a0/html5/thumbnails/49.jpg)
A SPECIAL REPORT Reporting solutions for ADF Applications
Luc Bors Oracle Certified ADF Implementation Specialist
AMIS Services, The Netherlands Oracle ADF Specialized Partner
Monday, June 25, 2012 ODTUG KScope 12 San Antonio, Texas, USA