Jump to content
We've recently updated our Privacy Statement, available here ×

mpenningroth

Members
  • Posts

    56
  • Joined

  • Last visited

mpenningroth's Achievements

Enthusiast

Enthusiast (6/14)

  • First Post Rare
  • Collaborator Rare
  • Conversation Starter Rare
  • Week One Done
  • One Month Later

Recent Badges

0

Reputation

  1. Hi, Our company is using the buildomatic scripts to build the main war. We then have some other scripts that deal with some of our modifications especially in the area of context.xml , web.xml, database creation, database loading, and importing resources. For development I have been using netbeans 6.9 and just opening the maven projects. There are a couple of poms that will not open because they reference some buildomatic properties. i just hard coded those if I needed to work with that project. Also I do not use netbeans to launch the webapp, I just launch my tomcta with debug settings and the attach the debugger to the running tomcat.
  2. Here is how we do this in a <textField> element <hyperlinkReferenceExpression><![CDATA["flow.html?_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/O2C_Order_Detail&title=Order Detail&hidden_CompanyID="+$P{CompanyID}+"&hidden_FiscalVariant="+$P{FiscalVariant}+"&hidden_Year="+$P{Year}+"&hidden_Period="+$P{Period}+"&hidden_CustomerCode="+$P{CustomerCode}+"&hidden_Order="+$F{[Order].[Order]}]]></hyperlinkReferenceExpression> <hyperlinkTooltipExpression><![CDATA["Click to go to Order Detail report."]]></hyperlinkTooltipExpression>
  3. I cut the code below from one of our reports that use a 3d chart. The first hyperlink is for the background . We used sub-datasets to link individual graph items to another object (dashboard in our case, but you could also link to a report). Other hyperlinks then are available for the individual items on the chart. (In this case the chart data is mapped to the field $F{[Fiscal Period].[Fiscal Period]} , when the user clicks on the bar for the specific fiscal period, the hyperlink sends the paramater for that fiscal period to the dashboard Hope this gives you some ideas... (Oh be careful in iReport, if you save a report with tooltips and load them to the server, the tooltips get lost.... Code: <stackedBar3DChart> <chart isShowLegend="false" hyperlinkType="Reference" hyperlinkTarget="Blank" > <reportElement x="0" y="145" width="211" height="102" key="element-15"/> <box></box> <hyperlinkReferenceExpression><![CDATA["flow.html?_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Ratio_Calculation&title=Cash Flow Ratio Calculation Summary&hidden_CompanyID="+$P{CompanyID}+"&hidden_Year="+$P{Year} +"&hidden_Period="+$P{Period}]]></hyperlinkReferenceExpression> <hyperlinkTooltipExpression><![CDATA["Click to go to the Cash Flow Ratio Calculation Summary dashboard."]]></hyperlinkTooltipExpression> </chart> <categoryDataset> <dataset > <datasetRun subDataset="Fixed Charge Coverage Ratio"> <parametersMapExpression><![CDATA[new java.util.HashMap($P{REPORT_PARAMETERS_MAP})]]></parametersMapExpression> <datasetParameter name="CompanyID"> <datasetParameterExpression><![CDATA[$P{CompanyID}]]></datasetParameterExpression> </datasetParameter> <datasetParameter name="Year"> <datasetParameterExpression><![CDATA[$P{Year}]]></datasetParameterExpression> </datasetParameter> <datasetParameter name="Period"> <datasetParameterExpression><![CDATA[$P{Period}]]></datasetParameterExpression> </datasetParameter> </datasetRun> </dataset> <categorySeries> <seriesExpression><![CDATA["bad"]]></seriesExpression> <categoryExpression><![CDATA[$F{[Fiscal Period].[Fiscal Period]}]]></categoryExpression> <valueExpression><![CDATA[com.cincom.bi.Chart.bad( $F{[Measures].[Ratio, Fixed Charge Coverage]}, $F{[Measures].[Min, Ratio Fixed Charge Coverage]}, $F{[Measures].[Max, Ratio Fixed Charge Coverage]}, $F{[Measures].[Divide, Ratio Fixed Charge Coverage]})]]></valueExpression> <itemHyperlink hyperlinkType="Reference" hyperlinkTarget="Blank"> <hyperlinkReferenceExpression><![CDATA["flow.html?_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Ratio_Calculation&title=Cash Flow Ratio Calculation Summary&hidden_CompanyID="+$P{CompanyID}+"&hidden_Year="+$F{[Measures].[Year]} +"&hidden_Period="+$F{[Fiscal Period].[Fiscal Period]}]]></hyperlinkReferenceExpression> <hyperlinkTooltipExpression><![CDATA[msg("Fixed Charge Coverage Ratio for fiscal year " + $F{[Measures].[Year]} + ", period "+$F{[Fiscal Period].[Fiscal Period]}+ " is {0}",$F{[Measures].[Ratio, Fixed Charge Coverage]}.setScale(2,2)) +". Click to go to the Cash Flow Ratio Calculation Summary dashboard."]]></hyperlinkTooltipExpression> </itemHyperlink> </categorySeries> <categorySeries> <seriesExpression><![CDATA["ok"]]></seriesExpression> <categoryExpression><![CDATA[$F{[Fiscal Period].[Fiscal Period]}]]></categoryExpression> <valueExpression><![CDATA[com.cincom.bi.Chart.ok( $F{[Measures].[Ratio, Fixed Charge Coverage]}, $F{[Measures].[Min, Ratio Fixed Charge Coverage]}, $F{[Measures].[Max, Ratio Fixed Charge Coverage]}, $F{[Measures].[Divide, Ratio Fixed Charge Coverage]})]]></valueExpression> <itemHyperlink hyperlinkType="Reference" hyperlinkTarget="Blank"> <hyperlinkReferenceExpression><![CDATA["flow.html?_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Ratio_Calculation&title=Cash Flow Ratio Calculation Summary&hidden_CompanyID="+$P{CompanyID}+"&hidden_Year="+$F{[Measures].[Year]} +"&hidden_Period="+$F{[Fiscal Period].[Fiscal Period]}]]></hyperlinkReferenceExpression> <hyperlinkTooltipExpression><![CDATA[msg("Fixed Charge Coverage Ratio for fiscal year " + $F{[Measures].[Year]} + ", period "+$F{[Fiscal Period].[Fiscal Period]}+ " is {0}",$F{[Measures].[Ratio, Fixed Charge Coverage]}.setScale(2,2)) +". Click to go to the Cash Flow Ratio Calculation Summary dashboard."]]></hyperlinkTooltipExpression> </itemHyperlink> </categorySeries> <categorySeries> <seriesExpression><![CDATA["exceeds expectations"]]></seriesExpression> <categoryExpression><![CDATA[$F{[Fiscal Period].[Fiscal Period]}]]></categoryExpression> <valueExpression><![CDATA[com.cincom.bi.Chart.exceeds( $F{[Measures].[Ratio, Fixed Charge Coverage]}, $F{[Measures].[Min, Ratio Fixed Charge Coverage]}, $F{[Measures].[Max, Ratio Fixed Charge Coverage]}, $F{[Measures].[Divide, Ratio Fixed Charge Coverage]})]]></valueExpression> <itemHyperlink hyperlinkType="Reference" hyperlinkTarget="Blank"> <hyperlinkReferenceExpression><![CDATA["flow.html?_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Ratio_Calculation&title=Cash Flow Ratio Calculation Summary&hidden_CompanyID="+$P{CompanyID}+"&hidden_Year="+$F{[Measures].[Year]} +"&hidden_Period="+$F{[Fiscal Period].[Fiscal Period]}]]></hyperlinkReferenceExpression> <hyperlinkTooltipExpression><![CDATA[msg("Fixed Charge Coverage Ratio for fiscal year " + $F{[Measures].[Year]} + ", period "+$F{[Fiscal Period].[Fiscal Period]}+ " is {0}",$F{[Measures].[Ratio, Fixed Charge Coverage]}.setScale(2,2)) +". Click to go to the Cash Flow Ratio Calculation Summary dashboard."]]></hyperlinkTooltipExpression> </itemHyperlink> </categorySeries> <categorySeries> <seriesExpression><![CDATA["Default"]]></seriesExpression> <categoryExpression><![CDATA[$F{[Fiscal Period].[Fiscal Period]}]]></categoryExpression> <valueExpression><![CDATA[com.cincom.bi.Chart.def( $F{[Measures].[Ratio, Fixed Charge Coverage]}, $F{[Measures].[Min, Ratio Fixed Charge Coverage]}, $F{[Measures].[Max, Ratio Fixed Charge Coverage]}, $F{[Measures].[Divide, Ratio Fixed Charge Coverage]})]]></valueExpression> <itemHyperlink hyperlinkType="Reference" hyperlinkTarget="Blank"> <hyperlinkReferenceExpression><![CDATA["flow.html?_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Ratio_Calculation&title=Cash Flow Ratio Calculation Summary&hidden_CompanyID="+$P{CompanyID}+"&hidden_Year="+$F{[Measures].[Year]} +"&hidden_Period="+$F{[Fiscal Period].[Fiscal Period]}]]></hyperlinkReferenceExpression> <hyperlinkTooltipExpression><![CDATA[msg("Fixed Charge Coverage Ratio for fiscal year " + $F{[Measures].[Year]} + ", period "+$F{[Fiscal Period].[Fiscal Period]}+ " is {0}",$F{[Measures].[Ratio, Fixed Charge Coverage]}.setScale(2,2)) +". Click to go to the Cash Flow Ratio Calculation Summary dashboard."]]></hyperlinkTooltipExpression> </itemHyperlink> </categorySeries> </categoryDataset> <bar3DPlot > <plot backcolor="#CCCCCC" > <seriesColor seriesOrder="0" color="#BB2200"/> <seriesColor seriesOrder="1" color="#EEEE00"/> <seriesColor seriesOrder="2" color="#66EE00"/> <seriesColor seriesOrder="3" color="#0033FF"/></plot> <categoryAxisFormat> <axisFormat > <labelFont> <font fontName="Verdana" pdfFontName="Helvetica" size="8" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" isPdfEmbedded="false" pdfEncoding="Cp1252"/> </labelFont> <tickLabelFont> <font fontName="Verdana" pdfFontName="Helvetica" size="8" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" isPdfEmbedded="false" pdfEncoding="Cp1252"/> </tickLabelFont> </axisFormat> </categoryAxisFormat> <valueAxisFormat> <axisFormat > <labelFont> <font fontName="Verdana" pdfFontName="Helvetica" size="9" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" isPdfEmbedded="false" pdfEncoding="Cp1252"/> </labelFont> <tickLabelFont> <font fontName="Verdana" pdfFontName="Helvetica" size="9" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" isPdfEmbedded="false" pdfEncoding="Cp1252"/> </tickLabelFont> </axisFormat> </valueAxisFormat> </bar3DPlot> </stackedBar3DChart>
  4. Dashboards don't support tabs, but you can add a menu to the main header and link sub menu items to dashboards, reports and/or analysis view if you want. Take a look at WEB-INF/class/JI-Menu.xml we modified that for particular role to add a drop down menu that allows easy navigation to a variery of dashboards. I think we also tweaked a style sheet to to show headings for links with now actions since the menus system only easily supports on level of sub-menus. See the xml sample below, the menu "CBI Financials" will only show up for users in the ROLE_CBI_FINANCIALS role. As mentioned, we changed the style sheet so that a menu item with no url displays with a dufferent color. This allows us to group items together under a heading. This sample just shows launcing dashboards, but you can put any url you want. (Reports, analysis views, docs, external links, etc) Hope this helps Code: <!-- Menu items for CBI Financials --> <!-- Links to dashboards and analysis views --> <menu-item name="CBI Financials"> <roles> <role>ROLE_CBI_FINANCIALS</role> </roles> <sub-items> <menu-item name="Cash Flow"> <roles> <role>ROLE_CBI_FINANCIALS</role> </roles> </menu-item> <menu-item name=" Dashboard" url="/flow.html" servletParams="_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Dashboard"> <roles> <role>ROLE_CBI_FINANCIALS</role> </roles> </menu-item> <menu-item name=" Account Detail" url="/flow.html" servletParams="_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Account_Detail"> <roles> <role>ROLE_CBI_FINANCIALS</role> </roles> </menu-item> <menu-item name=" Stmt Summary" url="/flow.html" servletParams="_flowId=dashboardRuntimeFlow&dashboardResource=/CBI_Financials/Dashboards/CF_Statement_Summary"> <roles> <role>ROLE_CBI_FINANCIALS</role> </roles> </menu-item>
  5. I recommend that you get and study the iReport plugin code. It uses webservices to get the jrxml and also to execute reports (on the server). If you want to execute the report locally, you should be able to get the jrxml from the server but I am not sure how you would deal with the datasource connections etc. Does the job have to be run locally? Your cron job could execute the reports on the server and get the ouput and store it somewhere on the client machine. iReport has some samples of this. We have modified the server to add a web server function that will flush the cache. We have also added an OUTPUT_NONE type for a report so that the results are ignored. We then use these to to seed the mondrian cache after we run an incremental etl job that updates our data warehouse. The following code is a simple job that can be used to run a number of report units (or all report units under a specific folder). Note thes use some additions we made as noted above, but the webservice code may be of use... Code:package com.cincom.cbiserveradmin;import com.jaspersoft.jasperserver.irplugin.JServer;import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.*;import java.util.ArrayList;import java.util.ListIterator;import java.util.List;/** * * @author mpenningroth */public class SeedMondrianCache { static String userName = "****"; static String pw = "******"; static String url = "http://localhost:8080/CincomBIServer"; static String service = "/services/repository"; static boolean flushIt = false; static ArrayList<String> resourceList = new ArrayList<String>(); static ArrayList<ResourceDescriptor> reportList = new ArrayList<ResourceDescriptor>(); static JServer server = new JServer(); static ResourceDescriptor rd = new ResourceDescriptor(); static long totalTime = 0; static long startTime = 0; static long endTime = 0; static long reportTime; static Argument arg = new Argument(Argument.RUN_OUTPUT_FORMAT,Argument.RUN_OUTPUT_FORMAT_NONE); static ArrayList argList = new ArrayList(); static java.util.HashMap pm = new java.util.HashMap(); static boolean verbose = false; static void runReport(ResourceDescriptor theRes) { try { if (theRes.getWsType().equals(ResourceDescriptor.TYPE_REPORTUNIT)) { startTime = System.currentTimeMillis(); if (verbose) { System.out.println("running report: "+theRes.getUriString()); } server.getWSClient().runReport(theRes, pm, argList); endTime = System.currentTimeMillis(); reportTime = endTime - startTime; totalTime += reportTime; if (verbose) { System.out.println(theRes.getUriString()+" execute time:"+reportTime); } } } catch (Exception e) { e.printStackTrace(); return; } } static void runReports(ResourceDescriptor theRes) { try { if (theRes.getWsType().equals(ResourceDescriptor.TYPE_FOLDER)) { if (verbose) { System.out.println("processing folder: "+theRes.getUriString()); } List resList = server.getWSClient().list(theRes); if (resList != null && resList.size() >0) { ListIterator li = resList.listIterator(); while (li.hasNext()) { rd = (ResourceDescriptor)li.next(); if (rd.getWsType().equals(ResourceDescriptor.TYPE_FOLDER)) { runReports(rd); } else if (rd.getWsType().equals(ResourceDescriptor.TYPE_REPORTUNIT)) { runReport(rd); } } } } } catch (Exception e) { e.printStackTrace(); return; } } public static void main(String[] args) { // defaults if (args.length > 0) { for (int argIx = 0; argIx < args.length; argIx++) { if (args[argIx].equals("-user")) { userName = args[++argIx]; } else if (args[argIx].equals("-pw")) { pw = args[++argIx]; } else if (args[argIx].equals("-url")) { url = args[++argIx]; } else if (args[argIx].equals("-flush")) { flushIt = true; } else if (args[argIx].equals("-verbose")) { verbose = true; } else { String theArg = args[argIx]; if (theArg.indexOf(" ") >0) { String[] resArray=theArg.split(" "); for (int i=0;i<resArray.length;i++) { if (resArray[i].length()>0) { resourceList.add(resArray[i]); } } } else { resourceList.add(args[argIx]); } } } } else { System.out.println("usage: com.cincom.cbiserveradmin.SeedMondrianCache [options] <resource>+>"); System.out.println("\t where [options] are 0 or more of the following:"); System.out.println("\t\t -user <username> default is ****"); System.out.println("\t\t -pw <password> default is ****"); System.out.println("\t\t -url <server url> default is http://localhost:8080/CincomBIServer"); System.out.println("\t\t -flush means to flush the cache first"); System.out.println("\t\t -verbose means to send messages to System console"); System.out.println("\t where <resource> are 1 or more resources seperated by blank(s) to execute. These should be ReportUnits"); System.out.println("\t or folders. If folder then all reports in the folder (and child folders)will be executed."); return; } argList.add(arg); if (verbose) { System.out.println("user: "+userName); System.out.println("url: "+url); System.out.println("flushIt: "+flushIt); System.out.println("resource count:"+resourceList.size()); for (int i=0;i<resourceList.size();i++) { System.out.println("resource["+i+"]: "+resourceList.get(i)); } } if (flushIt || resourceList.size()>0) { server.setUsername(userName); server.setPassword(pw); server.setUrl(url+"/services/repository"); if (flushIt) try { if (verbose) { System.out.println("flushing analysis cache"); } server.getWSClient().flushAnalysisCache(rd); } catch (Exception e) { e.printStackTrace(); return; } for (ListIterator<String> si=resourceList.listIterator(); si.hasNext();) { rd.setUriString(si.next()); try { ResourceDescriptor theRes = server.getWSClient().get(rd, null); if (theRes.getWsType().equals(ResourceDescriptor.TYPE_FOLDER)) { runReports(theRes); } else if (theRes.getWsType().equals(ResourceDescriptor.TYPE_REPORTUNIT)) { runReport(theRes); } } catch (Exception e) { e.printStackTrace(); return; } } if (verbose) { System.out.println("total time: "+totalTime); } } }}
  6. I am really not sure what you need. I am using tomcat 5.5 on windows. I copied the startup.bat file in the tomcat\bin directory to startup_debug.bat. I then modified the line that read call "%EXECUTABLE%" start %CMD_LINE_ARGS% to be: call "%EXECUTABLE%" jpda run %CMD_LINE_ARGS% I setup netbeans projects for the various jaspeserver jar files I wanted to debug. I found it easier to copy all the jars from the jasperserver/WEB-INF/lib folder to one place so that I could use those jars for the compile dependencies. Once you build the jar you want to debug, replace the newly built jar with the one in your web-inf/lib folder. (jasperserver-war-3.1.0.jar for example) . Then bring up tomcat using the startup_debug.bat file . This will launch tomcat with hooks for debugging. Then in netbeans, you can use the debug menu item to attach the debugger to the running tomcat. I am sure you can do something similar in eclipse. Set you breakpoints and just use the browser or whatever client you want that hits the jasperserver webapp. Hope this helps.
  7. If you have an export from the export tool you can use the import. It should update the permissions
  8. You may try to add the jdbc driver jar file to the common/lib directory for tomcat. You may also need to add a resource reference in the web.xml file to the jndi resource.
  9. I just bring my app server up with debug settings and use the ide to attach the debugger to the app server. I have been using netbeans and that works ok for the most part. There are a couple of jars that I have to resort to maven build because I havent taken the time to integrate aspectj into the build.
  10. I have a dashboard that displays several reports. This works fine when I deploy on tomcat, but when I deploy on websphere all the report frames are displaying as if theye were in a main report. Each frame shows the jasperserver main menu bar, image etc. It is really ugly.) Any clues how I can solve this ? I experimented with adding the decorate=no to the url but had no luck.
  11. You are quite welcome. Yes I have also noticed that you need to recycle your app server in order to see changes to XMLA definitions exposed. Maybe a change listener would be in order. I have not used Simba ODBO in quite a while and I no longer have a license. You should give the Jaspersoft ODBO Connect a try if you can. Regards, Mark
  12. Could you export your xmla definition resource and your connection resource that it references. Here is one that works for me with my datasource. This is the defeinition that exposes the CBI_Financials catalog to XMLA <?xml version="1.0" encoding="UTF-8"?> <mondrianXmlaDefinition> <folder>/CBI_Financials/OLAP_Connections</folder> <name>CBI_Financials_XMLA_DEFINITION</name> <version>0</version> <label>CBI_Financials_XMLA_DEFINITION</label> <description>Exposes The CBI_Financials Schema to XMLA Clients</description> <creationDate>2009-10-13T16:25:15.299-04:00</creationDate> <catalog>CBI_Financials</catalog> <mondrianConnection> <uri>/CBI_Financials/OLAP_Connections/CBI_Financials_Mondrian_Connection</uri> </mondrianConnection> </mondrianXmlaDefinition> The catalog name (CBI_Financials in this example) will then become the datasource that is used in an xmla connection. It will look like "Provider=Mondrian;DataSource=CBI_Financials" Hope this helps!
  13. JS cannot support all ODBO Drivers because some ODBO drivere are specific to an analysis engine. (SSAS for Microsoft for example, there are many more.) Some ODBO drivers are written to use XMLA protocol. (Simba, Jaspersoft ODBO Connect, and others), these in theory should work with any analysis engine that support XMLA, BUT not all XMLA implementations are equal. Microsoft for example has extended the XMLA spec with additions for SSAS. I have used JS ODBO Connect to access SSAS, Pentaho, and of course Jasperserver. (BTW If the analysis server comes with an ODBO driver, I would use that one first.) In your previous post on this subject, you were asked if you have ever gotten an XMLA client to connect to your JS, and I believe there were some issues. You will have no chance of getting any XMLA based ODBO driver to access JS until this is configure properly. I recommend you use Wharehouse Explorer as an XMLA client to ensure that all your xmla definitions are working before you try an ODBO driver. You can get that here: http://sourceforge.net/projects/whex/ I have seen problems using an XMLA connection with jpivot analysis views, so I usually I am not sure whether or not JS Pro comes with ODBO Connect. Do you have a support agreement with Jaspersoft? If so you may want to get some help at least with the xmla configuration.
  14. I have a set of report units that use the olap query executor that I would like to run when tomcat starts up. I want to do this so that the analysis cache will be seeded. I have modified the web services to add a flushCache and runReport operation that I am able to use on a system that is up and running, but I would like to seed the analysis cache at tomcat startup. I was wondering where in the server initialization logic I could do this. I am willing to change code but I am not sure where the change should be made. Any ideas? Thanks!
  15. There is nothing special about that folder. You can place the resources in any folder you choose. I think the only "special" folder other than the root is the location for adhoc report templates
×
×
  • Create New...