SlideShare a Scribd company logo
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
REPORTING
I USE ADF, WHAT ABOUT REPORTS ?
ORACLE REPORTS DEVELOPER
CREATING ORACLE REPORTS

•   Example:

    – Employees per Department Report

    – Parameter P_DEPARTMENT_ID
HOW TO CALL THE REPORT ?
USING ORACLE REPORTS

•   Use Case : Invoke the report for the currently selected
    Department in an ADF table
PREPARING THE CALL

           •   Create a bean and method to invoke the report

<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>




           •   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=“;
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();
        }
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>




            •   ……. 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>
SHOWING THE ORACLE REPORT

•   ….. and the result…..
CAN I USE FMW REPORTING TOOLS ?
ORACLE BI PUBLISHER
ORACLE BI PUBLISHER
ORACLE BI PUBLISHER
ORACLE BI PUBLISHER
PREPARING THE CALL

           •   Create a bean and method to invoke the report

 <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>




           •   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>";
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());
……..
CALL AND SHOW THE REPORT

            •   Call ………

<af:commandToolbarButton text="Run BI Publisher Report" id="cb3“
                actionListener="#{oracleReportBean.startBiReport}">
       <af:showPopupBehavior popupId=":::showBiRpt" triggerType="click"/>
</af:commandToolbarButton>




            •   ……. 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>
SHOWING THE BI PUBLISHER REPORT
ARE THERE OPEN SOURCE TOOLS ?
JASPER REPORTS
JASPER REPORTS - IREPORT
JASPER REPORT QUERY
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
PREPARING JDEVELOPER AND ADF

•   Make sure to add Jasper libraries to ADF project
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>
CALLING THE JASPER REPORT

         •   How to invoke the Jasper report ?
              – Get a handle to your template

 InputStream is = new FileInputStream (
        new File("C:/ReportingTools/myReports/MyFirstReport.jrxml"));

              – Define the file that will hold the generated report


OutputStream os=new FileOutputStream(
                        new File(this.filepath+this.reportname));

              – Optionally fill parameters


 Map parameters = new HashMap();
         parameters.put("P_DEPARTMENT_ID", getDepartmentId());
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>
JASPER REPORTING

       •   Invoke the report ………
JasperDesign jasperDesign = JRXmlLoader.load(is);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

JasperPrint jasperPrint =
                JasperFillManager.fillReport(jasperReport, parameters, conn);

JasperExportManager.exportReportToPdfStream(jasperPrint, os);




       •   ……. And Show the result


  JasperViewer.viewReport(jasperPrint, false);
JASPER REPORTING

•   ….. And the result….
I DONT WANT MY OWN REPORTSERVER
REPORTING FROM THE CLOUD
DOCMOSIS REPORTING
CREATING TEMPLATES
UPLOAD TO THE CLOUD
CALLING THE CLOUD FROM ADF

•   Setup a connection

•   Build the request

•   Write request to outputstream
PREPARING THE CALL

           •   Create a bean and method to invoke the report

 <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>




           •   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;
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");
CONSTRUCTING THE CALL

           •   Adding the Data

// now add the data specifically for this template
       sb.append("<datan");
       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");
CALL AND SHOW THE REPORT

            •   Call ………

 <af:commandToolbarButton text="Run docmosis Report" id="cb5"
                      actionListener="#{docmosisReportBean.runDocmosisReport}">
       <af:showPopupBehavior popupId=":::showDocmosisReport"
                             triggerType="action"/>
</af:commandToolbarButton>



            •   ……. 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>
SHOWING THE RESULT
REPORTING; YOUR OPTIONS
COMMON FEATURES
PRO’S AND CON’S ?
ARE THERE OTHER ALTERNATIVES?
MORE REPORTING IN THE FMW TRACK
RESOURCES

•   OTN – Reports :
    http://www.oracle.com/technetwork/middleware/reports/overvie
    w/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
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

More Related Content

PPTX
Relojes y terminales
PPTX
Topologia fisica barramento
PPTX
Repaso Examen Arquitectura de Computadoras
PPT
ITE v5.0 - Chapter 11
DOCX
Ejemplos de llamadas al sistema
PDF
Introdução ao SNMP
PDF
Formal Languages and Automata Theory unit 5
DOCX
Arquitectura de Von Neumann
Relojes y terminales
Topologia fisica barramento
Repaso Examen Arquitectura de Computadoras
ITE v5.0 - Chapter 11
Ejemplos de llamadas al sistema
Introdução ao SNMP
Formal Languages and Automata Theory unit 5
Arquitectura de Von Neumann

Viewers also liked (16)

PDF
Building a custom Oracle ADF Component
PDF
Guidelines for moving from Oracle Forms to Oracle ADF and SOA
PPTX
AMIS OOW Review 2012- Deel 1 - Lucas Jellema & Paul Uijtewaal
PDF
PDF
Running ADF Faces on Tablets and Mobile Phones
PDF
ADF Worst Practices (UKOUG Tech2013)
PDF
EM12c: Capacity Planning with OEM Metrics
PDF
Programming-best practices( beginner) ADF_fusionapps
PDF
18 Invaluable Lessons About ADF-JSF Interaction
PPTX
Oracle ADF Case Study
PPT
Talking Services with Oracle ADF and Oracle SOA Suite
PPT
Oracle ADF Overview
PPT
Working with Portlets in ADF and Webcenter
PDF
Oracle ADF Task Flows for Beginners
PDF
JHeadstart Forms2ADF Generator – Migrating from Oracle Forms to a Best-Practi...
PPTX
ADF in action 1.2
Building a custom Oracle ADF Component
Guidelines for moving from Oracle Forms to Oracle ADF and SOA
AMIS OOW Review 2012- Deel 1 - Lucas Jellema & Paul Uijtewaal
Running ADF Faces on Tablets and Mobile Phones
ADF Worst Practices (UKOUG Tech2013)
EM12c: Capacity Planning with OEM Metrics
Programming-best practices( beginner) ADF_fusionapps
18 Invaluable Lessons About ADF-JSF Interaction
Oracle ADF Case Study
Talking Services with Oracle ADF and Oracle SOA Suite
Oracle ADF Overview
Working with Portlets in ADF and Webcenter
Oracle ADF Task Flows for Beginners
JHeadstart Forms2ADF Generator – Migrating from Oracle Forms to a Best-Practi...
ADF in action 1.2
Ad

Similar to Reporting solutions for ADF Applications (20)

PPTX
Flask – Python
PDF
How to execute an oracle stored procedure with nested table as a parameter fr...
DOCX
Lab manual asp.net
PDF
ASP.NET Overview - Alvin Lau
PDF
Burn down the silos! Helping dev and ops gel on high availability websites
PDF
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
PDF
AnkaraJUG Kasım 2012 - PrimeFaces
PPTX
Implementation of GUI Framework part3
PPTX
Analytics Metrics delivery and ML Feature visualization: Evolution of Data Pl...
PPTX
Dive into DevOps | March, Building with Terraform, Volodymyr Tsap
PPT
Spring batch
PPTX
Advance Sql Server Store procedure Presentation
PPTX
Sql storeprocedure
PDF
Bring the light in your Always FREE Oracle Cloud
PDF
E2 appspresso hands on lab
PDF
E3 appspresso hands on lab
PDF
2013 Collaborate - OAUG - Presentation
PDF
Spring Batch in Code - simple DB to DB batch applicaiton
PPT
GHC Participant Training
PPTX
Azure Day Reloaded 2019 - ARM Template workshop
Flask – Python
How to execute an oracle stored procedure with nested table as a parameter fr...
Lab manual asp.net
ASP.NET Overview - Alvin Lau
Burn down the silos! Helping dev and ops gel on high availability websites
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
AnkaraJUG Kasım 2012 - PrimeFaces
Implementation of GUI Framework part3
Analytics Metrics delivery and ML Feature visualization: Evolution of Data Pl...
Dive into DevOps | March, Building with Terraform, Volodymyr Tsap
Spring batch
Advance Sql Server Store procedure Presentation
Sql storeprocedure
Bring the light in your Always FREE Oracle Cloud
E2 appspresso hands on lab
E3 appspresso hands on lab
2013 Collaborate - OAUG - Presentation
Spring Batch in Code - simple DB to DB batch applicaiton
GHC Participant Training
Azure Day Reloaded 2019 - ARM Template workshop
Ad

More from Getting value from IoT, Integration and Data Analytics (20)

PPTX
AMIS Oracle OpenWorld en Code One Review 2018 - Blockchain, Integration, Serv...
PPTX
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 2: Custom Application ...
PPTX
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 2: SaaS
PPTX
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Data
PPTX
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Cloud Infrastructure
PPTX
10 tips voor verbetering in je Linkedin profiel
PPTX
Iot in de zorg the next step - fit for purpose
PPTX
Iot overview .. Best practices and lessons learned by Conclusion Conenct
PPTX
IoT Fit for purpose - how to be successful in IOT Conclusion Connect
PPTX
Industry and IOT Overview of protocols and best practices Conclusion Connect
PPTX
IoT practical case using the people counter sensing traffic density build usi...
PPTX
Introduction overviewmachinelearning sig Door Lucas Jellema
PPTX
Oracle OpenWorld 2017 Review (31st October 2017 - 250 slides)
PPTX
Ethereum smart contracts - door Peter Reitsma
PPTX
Blockchain - Techniek en usecases door Robert van Molken - AMIS - Conclusion
PPTX
kennissessie blockchain - Wat is Blockchain en smart contracts @Conclusion
PPTX
Internet of Things propositie - Enterprise IOT - AMIS - Conclusion
PDF
Omc AMIS evenement 26012017 Dennis van Soest
AMIS Oracle OpenWorld en Code One Review 2018 - Blockchain, Integration, Serv...
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 2: Custom Application ...
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 2: SaaS
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Data
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Cloud Infrastructure
10 tips voor verbetering in je Linkedin profiel
Iot in de zorg the next step - fit for purpose
Iot overview .. Best practices and lessons learned by Conclusion Conenct
IoT Fit for purpose - how to be successful in IOT Conclusion Connect
Industry and IOT Overview of protocols and best practices Conclusion Connect
IoT practical case using the people counter sensing traffic density build usi...
Introduction overviewmachinelearning sig Door Lucas Jellema
Oracle OpenWorld 2017 Review (31st October 2017 - 250 slides)
Ethereum smart contracts - door Peter Reitsma
Blockchain - Techniek en usecases door Robert van Molken - AMIS - Conclusion
kennissessie blockchain - Wat is Blockchain en smart contracts @Conclusion
Internet of Things propositie - Enterprise IOT - AMIS - Conclusion
Omc AMIS evenement 26012017 Dennis van Soest

Recently uploaded (20)

DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Empathic Computing: Creating Shared Understanding
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
Cloud computing and distributed systems.
PDF
Electronic commerce courselecture one. Pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Machine learning based COVID-19 study performance prediction
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
The AUB Centre for AI in Media Proposal.docx
Advanced methodologies resolving dimensionality complications for autism neur...
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Reach Out and Touch Someone: Haptics and Empathic Computing
Empathic Computing: Creating Shared Understanding
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Mobile App Security Testing_ A Comprehensive Guide.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
NewMind AI Weekly Chronicles - August'25 Week I
Encapsulation_ Review paper, used for researhc scholars
Cloud computing and distributed systems.
Electronic commerce courselecture one. Pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
20250228 LYD VKU AI Blended-Learning.pptx
Per capita expenditure prediction using model stacking based on satellite ima...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Understanding_Digital_Forensics_Presentation.pptx
Machine learning based COVID-19 study performance prediction
Agricultural_Statistics_at_a_Glance_2022_0.pdf

Reporting solutions for ADF Applications

  • 1. 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
  • 3. I USE ADF, WHAT ABOUT REPORTS ?
  • 5. CREATING ORACLE REPORTS • Example: – Employees per Department Report – Parameter P_DEPARTMENT_ID
  • 6. HOW TO CALL THE REPORT ?
  • 7. USING ORACLE REPORTS • Use Case : Invoke the report for the currently selected Department in an ADF table
  • 8. PREPARING THE CALL • Create a bean and method to invoke the report <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> • 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=“;
  • 9. 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(); }
  • 10. 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> • ……. 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>
  • 11. SHOWING THE ORACLE REPORT • ….. and the result…..
  • 12. CAN I USE FMW REPORTING TOOLS ?
  • 17. PREPARING THE CALL • Create a bean and method to invoke the report <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> • 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>";
  • 18. 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()); ……..
  • 19. CALL AND SHOW THE REPORT • Call ……… <af:commandToolbarButton text="Run BI Publisher Report" id="cb3“ actionListener="#{oracleReportBean.startBiReport}"> <af:showPopupBehavior popupId=":::showBiRpt" triggerType="click"/> </af:commandToolbarButton> • ……. 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>
  • 20. SHOWING THE BI PUBLISHER REPORT
  • 21. ARE THERE OPEN SOURCE TOOLS ?
  • 23. JASPER REPORTS - IREPORT
  • 25. 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
  • 26. PREPARING JDEVELOPER AND ADF • Make sure to add Jasper libraries to ADF project
  • 27. 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>
  • 28. CALLING THE JASPER REPORT • How to invoke the Jasper report ? – Get a handle to your template InputStream is = new FileInputStream ( new File("C:/ReportingTools/myReports/MyFirstReport.jrxml")); – Define the file that will hold the generated report OutputStream os=new FileOutputStream( new File(this.filepath+this.reportname)); – Optionally fill parameters Map parameters = new HashMap(); parameters.put("P_DEPARTMENT_ID", getDepartmentId());
  • 29. 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>
  • 30. JASPER REPORTING • Invoke the report ……… JasperDesign jasperDesign = JRXmlLoader.load(is); JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn); JasperExportManager.exportReportToPdfStream(jasperPrint, os); • ……. And Show the result JasperViewer.viewReport(jasperPrint, false);
  • 31. JASPER REPORTING • ….. And the result….
  • 32. I DONT WANT MY OWN REPORTSERVER
  • 36. UPLOAD TO THE CLOUD
  • 37. CALLING THE CLOUD FROM ADF • Setup a connection • Build the request • Write request to outputstream
  • 38. PREPARING THE CALL • Create a bean and method to invoke the report <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> • 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;
  • 39. 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");
  • 40. CONSTRUCTING THE CALL • Adding the Data // now add the data specifically for this template sb.append("<datan"); 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");
  • 41. CALL AND SHOW THE REPORT • Call ……… <af:commandToolbarButton text="Run docmosis Report" id="cb5" actionListener="#{docmosisReportBean.runDocmosisReport}"> <af:showPopupBehavior popupId=":::showDocmosisReport" triggerType="action"/> </af:commandToolbarButton> • ……. 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>
  • 46. ARE THERE OTHER ALTERNATIVES?
  • 47. MORE REPORTING IN THE FMW TRACK
  • 48. RESOURCES • OTN – Reports : http://www.oracle.com/technetwork/middleware/reports/overvie w/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
  • 49. 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