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

ghudson_1

Members
  • Posts

    284
  • Joined

  • Last visited

  • Days Won

    3

 Content Type 

Profiles

Forum

Events

Featured Visualizations

Knowledge Base

Documentation (PDF Downloads)

Blog

Documentation (Test Area)

Documentation

Dr. Jaspersoft Webinar Series

Downloads

Everything posted by ghudson_1

  1. Issue DescriptionThis article pertainwas created for 6.3 and 6.4, but see notes at bottom for a better approach in recent versions. A customer using a reverse proxy noticed that after login, certain http requests from the browser are referencing the internal hostname rather than the external hostname Using browser developer tools, you can watch the Network pane to see the full path of requests. If some are for the correct host, but others are not, test whether the problem only occurs when browsing thru the proxy rather than browsing directly against the appserver. If the problem only occurs thru the proxy an extra configuration might be required. Using the network pane, check the contents of the http request for http://<your host and port>/jasperserver-pro/rest_v2/hypermedia/root. If the contents contain references to the wrong host, review the resolution below Resolutionbackup then edit WEB-INFjs.config.properties, updating the deploy.base.url The default file contains: # Control links in hypermedia documents # for example: deploy.base.url=http://bi.example.com # right now works only for home page # if empty then use request url deploy.base.url= This setting is described in the Admin guide, here: http://community.jaspersoft.com/documentation/tibco-jasperreports-server-community-project-administrator-guide/v640/configuration-0 NOTE: In recent versions, deploy.base.url should be your last approach. A more complete approach is correcting the in-bound http headers from your proxy/loadbalancer, or tweaking the application Server's settings, like Tomcat's proxyHost, scheme, etc see: https://community.jaspersoft.com/wiki/video-reverse-proxies-can-often-cause-csrf-or-block-mixed-content-problems And https://community.jaspersoft.com/documentation/tibco-jasperreports-server-administrator-guide/v720/configuration-using-proxies Ref. Case 01537074
  2. Issue DescriptionPart of creating a MongoDB datasource involves using a schema tool and uploading the resulting file to the repository via 'Add Resource > File > MongoDB JDBC Schema (See Data Sources in Administrator guide) A mysql customer was receiving an error while attempting these steps. Logs showed "java.lang.AssertionError: Last packet not finished" and "Broken Pipe" errors. The customer was using mariaDB jdbc driver, but the mysql driver gave support better clues with a "Packet for query is too large (3021321 > 1048576)" error ResolutionTIBCO JasperReports® Server is trying to upload the file as an individual "blob" or similar and it is too large for out-of-box mysql settings. The workaround is to set a larger 'max_allowed_packet' variable within your database server configuration. This type of message from Mysql is not uncommon, it seen in other "actions" involving large files: Ref. Case 01482430
  3. Issue DescriptionIn TIBCO JasperReports® Server, the MS SqlServer jdbc connection is sending string values as UNICODE even if they are just simple ascii (varchar). This is resulting in a slight performance hindrance in each query execution, which becomes noticeable given the mass number of queries in some production instances. ResolutionWe use Hibernate API for object-relational mapping, for mapping from Java classes to database tables, and mapping from Java data types to SQL data types. This allows TIBCO JasperReports Server to connect to many different database types without having to rewrite code. Hibernate API uses JDBC Prepared Statements instead of directly executing Sql Statements. (partly to reduce execution time). http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html#supply_values_ps Part of Prepared Statements is the populating of parameter values, and it sounds like the mapping for you is trying to send string values as UNICODE even if they are just simple ascii (varchar). The answer either lies in hibernate mappings/config or here: https://blogs.msdn.microsoft.com/sqlcat/2010/04/05/character-data-type-conversion-when-using-sql-server-jdbc-drivers/ Per the above blog link, you can add sendStringParametersAsUnicode=false to the jdbc url / connection string to make the prepared statement send as varchar/ascii instead of unicode Ref. Case 01472009
  4. Issue DescriptionYou might need to learn which reports share a single input control, and this might be difficult to glean in complex repository structures. You can get the input control's id from the name and paths listed in jiresource and jiresourcefolder tables. Then lookup the report's ids via the jireportunitinputcontrol table. Finally, get the report names for the ids from jiresource and jiresourcefolder. ResolutionTo get the reportunitID's (aka reports) using a particular inputcontrol, like one located at /public/Samples/Resources/Input_Controls/YearlyIncome_files, you could do something similar to: select distinct jiresourcefolder.id as folderid, jiresourcefolder.uri, jiresource.name as inputcontrolname, jiresource.id as resourceid, jireportunitinputcontrol.input_control_id as inputcontrolid, jireportunitinputcontrol.report_unit_id as reportunitid from jiresource join jiresourcefolder on jiresourcefolder.id = jiresource.childrenfolder join jireportunitinputcontrol on jireportunitinputcontrol.input_control_id = jiresource.id where jiresourcefolder.URI = '/public/Samples/Resources/Input_Controls/YearlyIncome_files'Then the following will return the report names and location/uris of the reportUnitID you found: select jiresource.name, jiresourcefolder.uri from jiresource join jiresourcefolder on jiresourcefolder.id=jiresource.parent_folder where jiresource.id IN ( select distinct jireportunitinputcontrol.report_unit_id as id from jiresource join jiresourcefolder on jiresourcefolder.id = jiresource.childrenfolder join jireportunitinputcontrol on jireportunitinputcontrol.input_control_id = jiresource.id where jiresourcefolder.URI = '/public/Samples/Resources/Input_Controls/YearlyIncome_files' )The above is just a simple postgres-syntax example to offer your DBA ideas. You could also use the above fields and tables to construct a domain which could return information. Ref. Case 01532178
  5. Issue DescriptionIn TIBCO JasperReports® Server v6.3.0 CSRF protection changed, and there is a known defect that can impact reverse-proxy setups. The first symptom is that certain actions in TIBCO JasperReports Server UI lead back to the home page unexpectedly and that the CSRF token seems to be getting lost or not set as indicated by a runtime, serverside log message like: ERROR CsrfGuard,http-apr-16220-exec-25:44 - potential cross-site request forgery (CSRF) attack thwarted (user:, ip:(null), method:POST, uri:/jasperserver-pro/flow.html, error:required token is missing from the request)[/code]The second symptom which will confirm this problem is seen as a javascript error within browser developer tools (f12 keyboard key), the message states: OWASP CSRFGuard JavaScript was included from within an unauthorized domain[/code]Due to this javascript error, we fail to set the token, and the lack of token results in the runtime error which causes the page redirection to home and the server log entry. Resolutionbackup, then edit the file: webappsjasperserver-proWEB-INFcsrfjrs.csrfguard.js Find this line: if(isValidDomain(document.domain, "%DOMAIN_ORIGIN%")) {[/code]Change it to: if(true) {[/code]The attached js file has this fix applied. It is valid for JasperReports Server v6.4.2. Save and restart. Browsers may cache the "JavaScriptServlet" content, which is how the jrs.csrfguard.js loads in the browser, so you may need to force a browser cache refresh before this update has an effect. Ref. Case 01530101
  6. JRXML reports use Java expressions by default, they aren't using something proprietary. And at the report element level you can also define them to use groovy instead of even javascript. So I recommend you grab a java developer or groovy developer and have them provide you syntax.
  7. HTML export relies on the client-Browser (chrome, firefox, etc) to fetch the true font from the OS. PDF doesn't have this ability, so if you aren't referencing one of the handful of 'CORE' fonts which are part of the PDF Spec/Standard, then you actually embed the ttf in the PDF. Easiest way to do this is via Font extensions, see the font extensions chapter in the Studio User Guide.
  8. Issue DescriptionThe Authentication Cookbook includes a few examples where an ampersand is used within configuration values of customization authentication. If you use the wrong syntax, a runtime error will occur. The jasperserver.log will contain error similar to the following: 17-08-08 13:47:13,989 ERROR ContextLoader,localhost-startStop-1:331 - Context initialization failed g.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 111 in XML document from ServletContext resource [/WEB-INF/applicationCont t-externalAuth-LDAP-mt.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 111; columnNumber: 30; The entity name must immediately follow the '&' in the entity reference. ResolutionYou cannot use '&' character. Since this is an xml document you must use xml-escaped syntax representing this character which is: '&' For example instead of <value>(&(sAMAccountName={0}))</value> use <value>(&(sAMAccountName={0}))</value> References:Ref. Case 01516877
  9. The video below provides some ideas surrounding logging which you can setup in your development or test environment after deploying JasperReports Server. We discuss the logging of Sql Queries, the feature which shows the dynamically generated query within an Ad Hoc at runtime, Tomcat's http request logging, and the Enterprise license-based Audit feature.
  10. Issue DescriptionTypically customers desire to embed their font within their PDF so ensure the look & feel of their PDF matches their desired font in all viewing circumstances, even when end-users don't have that font installed on their client-OS. For management of Fonts with respective to PDF you should use the font-extension feature: http://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v630/fonts But occasionally customer need to embed the font for size-reasons, or they accidentally choose to not embed the font. ResolutionWhen defining your font extension to help define the fonts for your JRXML, you can make a few PDF-specific settings. a) You can set "PDF Font Name" to provide an alternative font are used in PDF files nstead of the font you are defining for the rest of your reports. The options are one of the PRF Standard 'core' fonts. The PDF Standard contains a few 'core' fonts, these are the families of Helvetica, Courier, Symbol, Times Roman, ZapfDingbats, etc. Thes core fonts don't need to be embedded, they are always inherent to PDF files. This is useful if someone wants their .docx and .html exports to use a specific font like Calibri but are okay with PDF using one of the 'core' fonts instead. b) You can choose whether to embed the font or not. As described elsewhere if you reference a font within a PDF but do not embed it, then you are relying on the client-OS to provide the font data (the .ttf files for example). If they are not present, the font will be unreadable. In the below example we're okay with Helvetica being used instead of Arial so we don't need to embed. You can tell whether or not your PDF has font embedded or not by opening the file in Adobe Acrobat, going into File -> Properties (or Control D) and looking for the word "embedded": The above two were created using a blank or empty "PDF Font Name" , so Arial is the referenced font, but obviously the lower image shows no embedding. If you viewed this PDF on a machine which did not have Arial font installed at the OS level if would be unreadable, like: References:http://jasperreports.sourceforge.net/config.reference.html#net.sf.jasperreports.export.xls.workbook.template Ref. Case 01468397
  11. Issue DescriptionIt is possible pass an XML Datasource to a jrxml's Table Component. ResolutionThe JasperReport Samples can be combined to provide information and examples of passing an XmlDatasource to a Table Component. So we'll reference these: Subreport example: http://jasperreports.sourceforge.net/sample.reference/subreport/index.html#subreports XmlDatasource example: http://jasperreports.sourceforge.net/sample.reference/xmldatasource/index.html The files can be used within Studio via File -> New -> Project , browsing to the JasperReports Samples project, then running the report against the "Sample DB" datasource where possible. Table Components, like charts and crosstabs get their data from "datasets". A dataset is similar to a subreport in many ways, so a table and subreport are very similar. The XmlDataSource sample's CustomersReport calls a subreport, so we can use it as the basis for our table. In typical subReport element you define either <connectionExpression> or <dataSourceExpression> to specify the source used to populate the sub. (see Subreport example ) In typical table component you specify the dataset via a datasetRun element, like: <datasetRun subDataset="TableDataset" (for more info on datasets and datasetruns see the JR Ultimate Guide Datasets chapter) But as you've seen in XmlDatasource sample, instead of <connectionExpression> , the Xpath query executor (queryString language="xPath") can expect <subreportParameterExpression>$P{XML_DATA_DOCUMENT} . You can do the same thing with table compoments, skip the datasetRun, and just set subreportParameterExpression>$P{XML_DATA_DOCUMENT} In the attached CustomersXmlMain.jrxml, I edited the XmlDataSource samples main report to remove the subreport and replace it with a table component. To do this I: Ran the table wizard to get basic field layout. Then I grabbed the query from the Xmldatasource example's subreport, OrdersReport.jrxml: <queryString language="xPath"> <![CDATA[/Northwind/Orders[CustomerID='$P{CustomerID}']]]> Created a parameter for the table's dataset Edited the jrxml source, modifying the datasetRun to have three parameters, one for the parameterized query, the others for the Xpath executor: <datasetParameter name="CustomerID"> <datasetParameterExpression> <![CDATA[$F{CustomerID}]]> </datasetParameterExpression> </datasetParameter> <datasetParameter name="XML_DATA_DOCUMENT"> <datasetParameterExpression> <![CDATA[$P{XML_DATA_DOCUMENT}]]> </datasetParameterExpression> </datasetParameter> <datasetParameter name="XML_DATE_PATTERN"> <datasetParameterExpression> <![CDATA["yyyy-MM-dd-HH"]]> </datasetParameterExpression> </datasetParameter> References:http://community.jaspersoft.com/documentation/jasperreports-library-ultimate-guide Ref. Case 01438960 customersxmlmain_0.jrxml
  12. Issue DescriptionSome customers might want to customize the look & feel of the symbol adjacent to series in a chart, like the blue circle seen below: ResolutionYou can find option and examples for manipulating the legend feature of one of the highcharts here:http://api.highcharts.com/highcharts/legend Unfortunately there is no property/option for removing the symbol but there are a few properties which might be interesting - symbolHeight and symbolWidth. The symbolRadius definition here, http://api.highcharts.com/highcharts/legend.symbolRadius , contains examples. Click "Round Labels" and you'll be presented a jsfiddle showing some interesting label manipulation which you can test for yourself. You can essentially remove the symbol by setting height, width and radius to .001 , then hit "RUN" , like: legend: { symbolHeight: .001, symbolWidth: .001, symbolRadius: .001 }, If that trick helps, in studio rightclick your chart -> Edit Chart Properties, expand legend, hit symbols, modify Width, Height, etc. Or just go straight into the jrxml source and add the property directly via tags, like:<hc:chartProperty name="legend.symbolWidth" value=".001"/> If .001 isn't effective, then you can ask your javascript developers to consider customizing the symbol, following this example:http://jsfiddle.net/gh/get/jquery/3.1.1/highcharts/highcharts/tree/master/samples/highcharts/studies/legend-custom-symbol/ Ref. Case 01444497
  13. Issue DescriptionHow to count the number of reports and dashboards that reside within a specific tenant / organization? This will require a SQL query against the repository tables. ResolutionTo count the number of reports and dashboards that reside within a specific tenant/org you'll have match reports/dashboards to folders since resources are identified by the folder they reside in, rather than some tenantID. Underlying reportunits and dashboard are defined in JIResource table which contains field 'parent_folder' which identifies the folder ID they are within. So first you'll need to interrogate the URI field of JIResourceFolder which contains ID and URI. So if I new that the org "Greg" created reports and dashboards within organzations/greg/dailyreports, I'd find the ID via: select id from jiresourcefolder where URI like '%organization/Greg/dailyreports%' Then you could do the following to fetch all reports and dashboards residing in that folder. If the folder ID was 12345: select count(*) from jiresource where parent_folder = 12345 and ( resourcetype = 'com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportUnit' or resourcetype = 'com.jaspersoft.ji.dashboard.DashboardModelResource') For Ad Hoc Views, the resourcetype would be: 'com.jaspersoft.ji.adhoc.AdhocDataView' Note, Reports Saved from Ad Hoc View are the same as regular jrxml-based reports, which is: 'com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportUnit' Ref. Case 01444894
  14. Issue DescriptionSometimes you might notice a duplicate report query is executed when a particular schedule job is executed. There is valid reason for this to occur in certain setups. Datasnapshots might help these scenarios. ResolutionWhen choosing output types for a scheduler job, you might choose types that are paginated as well as non-paginated. If you choose one of each type for the same job, the result will be that the report is filled twice, requiring that the query be executed twice. The JasperReports API marries a compiled .jrxml with a datasource and any parameters/settings (like whether pagination or set or not) then the fill-process occurs, next this pixel-perfect filled report is finally transformed into the specific output type(s). The fill-process needs to repeat if you've selected both paginated and non-paginated output types because the layout is entirely different needing to loop thru the entire dataset two different times. Curious administrators need to beware that to paginate or not can be overridden in a report via IS_IGNORE_PAGINATION param and via jr properties at a report level and server-wide level, like the following which makes normally paginated CSV be not paginated: com.jaspersoft.jrs.export.csv.paginated=false To prevent this duplication effect, one option is to consider data snapshots. A data snapshot can create something similar to a query-cache, which will prevent this phenomena, and you can setup the server to only allow data snapshots for certain reports. But you need to be very careful regarding resource impacts and test fully. Data snapshots are discussed here: http://community.jaspersoft.com/documentation/tibco-jasperreports-server-administrator-guide/v630/enabling-data-snapshots Ref. Case 01455488
  15. Issue DescriptionAs of 6.3.0 Calculated Fields cannot be added to the filter pane, so they cannot be used to filter Ad Hoc View data, but they can be used with Saved Reports from Ad Hoc Views. ResolutionReports saved from Ad Hoc Views which are tabular are based on Table Components, thus contain Jive/Interactivity features like filtering and sorting. Suppose you only want to see rows from your sales table for homes remodeled 5 years ago but you aren't able to create this type of filtering via SQL, thus you must use Calculated Fields. You could use something like the following expression to return the number of yrs since today for a date-time entry in the table: Round(ElapsedYears(Today(), "RemodelDate"), 0) Ensure the Calculate Field is in the columns for your Saved Report. Then click the header for it and choose the "Column Filters" icon, choose "Equals 5" and apply to only show the most recently created entry: References:http://community.jaspersoft.com/documentation/tibco-jasperreports-server-user-guide/v621/interactively-filtering-report-output#running_reports_2536605942_1088794 Ref. Case 01457811
  16. Issue Descriptionjs.quartz.properties defines scheduler misfire policies for the trigger types. The concept of misfire is discussed here in this wiki and in our Admin guide > Configuring the Scheduler > Configuring the Scheduler Misfire Policy. All trigger types are set to SMART_POLICY, but it isn't obvious what SMART_POLICY is or what the other options mean. ResolutionWhat is SMART_POLICY?SMART_POLICY for repeating/simple triggers equates to MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT SMART_POLICY for Calendar triggers equates to MISFIRE_INSTRUCTION_FIRE_ONCE_NOW What are the possible POLICY options?For single job: #MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY #MISFIRE_INSTRUCTION_FIRE_NOW For repeating simple job #MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY #MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT #MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT #MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT #MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNTFor Calendar/Cron job: #MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY #MISFIRE_INSTRUCTION_FIRE_ONCE_NOW #MISFIRE_INSTRUCTION_DO_NOTHING What are the POLICY meanings?Definitions per quartz API: #MISFIRE_INSTRUCTION_FIRE_NOW (default for single simple) Instructs the Scheduler that upon a mis-fire situation, the SimpleTrigger wants to be fired now by Scheduler. #MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY Instructs the Scheduler that the Trigger will never be evaluated for a misfire situation, and that the scheduler will simply try to fire it as soon as it can, and then update the Trigger as if it had fired at the proper time. NOTE: if a trigger uses this instruction, and it has missed several of its scheduled firings, then several rapid firings may occur as the trigger attempt to catch back up to where it would have been #MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT (default for repeating simple) Instructs the Scheduler that upon a mis-fire situation, the SimpleTrigger wants to be re-scheduled to the next scheduled time after 'now' - taking into account any associated Calendar, and with the repeat count set to what it would be, if it had not missed any firings. Does nothing, misfired executions are discarded. Then the scheduler waits for next scheduled interval and goes back to schedule. #MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT Instructs the Scheduler that upon a mis-fire situation, the SimpleTrigger wants to be re-scheduled to the next scheduled time after 'now' - taking into account any associated Calendar, and with the repeat count left unchanged. #MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT Instructs the Scheduler that upon a mis-fire situation, the SimpleTrigger wants to be re-scheduled to 'now' (even if the associated Calendar excludes 'now') with the repeat count left as-is. This does obey the Trigger end-time however, so if 'now' is after the end-time the Trigger will not fire again. NOTE: Use of this instruction causes the trigger to 'forget' the start-time and repeat-count that it was originally setup with #MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT Instructs the Scheduler that upon a mis-fire situation, the SimpleTrigger wants to be re-scheduled to 'now' (even if the associated Calendar excludes 'now') with the repeat count set to what it would be, if it had not missed any firings. This does obey the Trigger end-time however, so if 'now' is after the end-time the Trigger will not fire again. NOTE: Use of this instruction causes the trigger to 'forget' the start-time and repeat-count that it was originally setup with. Instead, the repeat count on the trigger will be changed to whatever the remaining repeat count is #MISFIRE_INSTRUCTION_FIRE_ONCE_NOW (default for calendar/cron) Instructs the Scheduler that upon a mis-fire situation, the CronTrigger wants to be fired now by Scheduler. Immediately executes first misfired execution and discards other (i.e. all misfired executions are merged together). Then back to schedule. No matter how many trigger executions were missed, only single immediate execution is performed. #MISFIRE_INSTRUCTION_DO_NOTHING Instructs the Scheduler that upon a mis-fire situation, the CronTrigger wants to have it's next-fire-time updated to the next time in the schedule after the current time (taking into account any associated Calendar), but it does not want to be fired now. References:http://www.quartz-scheduler.org/api/2.1.7/org/quartz/Ref. Case 01457095
  17. Issue DescriptionVia jasperreports properties it is possible within JasperReports API and JasperReports Server to export a report in xls format into a pre-existing xls worksheet. This is not available for xlsx, only xls. ResolutionThis feature is based upon properties described in the Xls Advanced Features sample for JasperReports, documented here: http://jasperreports.sourceforge.net/sample.reference/xlsfeatures/ Like the other samples, you can install it into Studio as part of the Samples Project by choosing New -> Project, then browsing to the JasperReport Samples project. To run it, create a new csv datasource pointing to the dataCsvDataSource.txt file accompanying the sample, then running the report with this new csv datasource. I tested my own, new values by creating my own, new .xls file, GregBook.xls, which I saved it to the data directory. I was able to achive the feature of adding the report output to the pre-existing GregBook.xls using these properties: <property name="net.sf.jasperreports.export.xls.workbook.template.keep.sheets" value="true"/> <property name="net.sf.jasperreports.export.xls.workbook.template" value="data/GregBook.xls"/> References:http://jasperreports.sourceforge.net/config.reference.html#net.sf.jasperreports.export.xls.workbook.template Ref. Case 00055476
  18. Issue DescriptionBy default the "Output to Repository" field within the scheduling pages will match the location / path of the resource you are attempting to schedule. This is configurable as of 6.3.0. ResolutionYou can configure in two ways. First, here in webappsjasperserver-proWEB-INFapplicationContext-report-scheduling.xml by uncommenting the bottom line and specifying a value then restarting the webapp: <!-- Uncomment next entry and set the required default output folder URI value --> <!-- <entry key="scheduler.job.repositoryDestination.folderURI" value="/job_output" ></entry> --> Second, you can also set a user profile attribute for scheduler.job.repositoryDestination.folderURI to a user-specific value: Ref. Case 01471983
  19. Issue DescriptionWhen attempting to install the Jaspersoft Studio as a plugin (community version only) for Eclipse, either via Eclipse Marketplace or "Install software", there are occassional errors indicating that update files or links are missing. The problems are caused by intermittent hosting issues on sourceforge. ResolutionAs a workaround you can try to install the plugin using the zipped solution we started providing in 6.3.1 version. If you look into the folder presented by link https://sourceforge.net/projects/jasperstudio/files/updatesite/6.3.1/ you will see a full-site.zip file. Download full-site.zip from the link above to a local drive, then in Eclipse choose Help > Install New Software... > Add (button), then hit Archive on the following pop-up and choose the full-site.zip which you downloaded, then follow prompts. Ref Case 01441936
  20. Issue DescriptionStudio version 6.3 includes a feature which helps create a sql query which will mock your source data for the sake of testing and helping the support team reproduce your data-specific problems. During development of report designs, you might encounter a problem requiring trouble-shooting from the support team. When trying to reproduce your problem we typically don't have your datasource, so we cannot run your report without query hacking to match datasets we have readily available. This process is time-consuming since the design problems can hinge upon certain data values or quantities. Using the new feature you can quickly generate a sql query to provide to the support team which will let us run your exact report even though we don't have access to your datasource ResolutionFirst, simplify the number of records required to reproduce your problem, then use a limit statement in your sql query to limit the number of records to the amount necessary. Second, open the "Dataset and Query Dialog", hit "Data preview" at bottom, then "Refresh Data Preview", and rightclick anywhere within the results to select "Export To SQL" : After hitting "Export To SQL" you'll see a sql query generated which you can save as text and attach to the case or copy/paste into a case comment: Finally, consider repeating this step for each of the datasets involved in case your problem involves subdatasets (Table components, etc)
  21. Issue DescriptionThe XMLDataSource and XPATH samples shipped with JasperReports Library provide an example involving a subreport, but how do we use a Table Component instead? ResolutionTable Components, like charts and crosstabs, get their data from "datasets". A dataset is similar to a subreport in many ways, so a table and subreport are very similar. The XmlDataSource sample's CustomersReport calls a subreport, so we can use it as the basis for our table. In typical subReport element you define either <connectionExpression> or <dataSourceExpression> to specify the source used to populate the sub. (see subreport example http://community.jaspersoft.com/wiki/jasperreports-library-samples) In typical table component you specify the dataset via a datasetRun element, like: <datasetRun subDataset="TableDataset"> (for more info on datasets and datasetruns see the JR Ultimate Guide Datasets chapter http://community.jaspersoft.com/documentation/jasperreports-library-ultimate-guide) As you've seen in http://jasperreports.sourceforge.net/sample.reference/xmldatasource/index.html#xmldatasource , instead of <connectionExpression> , the Xpath query executor (queryString language="xPath") can expect <subreportParameterExpression>$P{XML_DATA_DOCUMENT} . You can do the same thing with table compoments, skip the datasetRun, and just set subreportParameterExpression>$P{XML_DATA_DOCUMENT} In the attached CustomersXmlMain.jrxml I edited the XmlDataSource samples main report to remove the subreport and replace it with a table component. To do this I I Ran the table wizard to get basic field layout. Then I grabbed the query from the xmldatasource subreport, OrdersReport.jrxml: <queryString language="xPath"> <![CDATA[/Northwind/Orders[CustomerID='$P{CustomerID}']]]> Created a parameter for the table's dataset Edited the jrxml source, modifying the datasetRun to have three parameters, one for the parameterized query, the others for the Xpath executor: <datasetParameter name="CustomerID"> <datasetParameterExpression> <![CDATA[$F{CustomerID}]]> </datasetParameterExpression> </datasetParameter> <datasetParameter name="XML_DATA_DOCUMENT"> <datasetParameterExpression> <![CDATA[$P{XML_DATA_DOCUMENT}]]> </datasetParameterExpression> </datasetParameter> <datasetParameter name="XML_DATE_PATTERN"> <datasetParameterExpression> <![CDATA["yyyy-MM-dd-HH"]]> </datasetParameterExpression> </datasetParameter> Ref. Case 00072852 customersxmlmain.jrxml
  22. Issue DescriptionRecent JasperReports Server features include a log collector, discussed in the Administration Guide. Via the UI you can set Low, Medium and High level of verbosity or detail. Change change which classes log with different amount of detail within these three levels, you'll need to make a configuration file change. ResolutionThe levels can be tweaked by editing the customerLoggerToLevelMap bean in WEB-INFapplicationContext-diagnosticCollectors-pro.xml . Log Collectors utitlize the same log4j mechanism which is the foundation of logging in other areas of JasperReports Server. So to add or increase a verbosity for a particular class or package, edit the list of "entry" keys within the <util:map> for the level LOW, MEDIUM or HIGH which you wish to change. The base set of logging from the file is seen below: So to make the "MEDIUM" level to output mondrian's mdx at a higher detail or verbosity, edit the pre-existing mondrian.mdx entry to list DEBUG instead of INFO, like: <entry key="mondrian.mdx" value="DEBUG" /> If you wanted MEDIUM to also output data from the Quartz scheduler API, add a new entry element, like org.quartz which will log messages for all classes under the package org.quartz: <entry key="org.quartz" value="DEBUG" /> Save and restart. Ref. Case 00070568
  23. Issue DescriptionYour application server and JasperReport Server (JRS) often make use of the Java Virtual Machine's (JVM) variables and properties which are set as defaults or explictly via arguments. For example, the java.io.tmpdir property will impact the directory used by JRS's caching mechanisms for temporary storage of cache files. Often these properties are set via command line using the JAVA_OPTS argument which is passed to the main java command for your application server. These JVM properties appear in JRS's diagnostic report, but if the server won't start or you cannot run the diagnostic report there are other ways to determine the properties of your appserver's JVM. ResolutionYou can determine the properties and variables of your JVM by determining the process id of java (ps -ef, jps, or task manager), cd'ing to $JAVA_HOME/bin directory, then running jinfo <process id> . Of course you can use grep to find a specific property. Pro tip, you can override properties like java.io.tmpdir via a JVM argument passed into your appserver's JAVA_OPTS during startup, like: -Djava.io.tmpdir=/usr/local/jboss/temp . See the Install Guide section "Setting JVM Options for Application Servers" for more information. Ref. Case 00071274
  24. Issue DescriptionA customer had two html5 highcharts charts in a report, they wanted to be able drive the bottom report by clicking columns on the top chart without re-running the report (and re-running the query) ResolutionThe customer resolved problem via highcharts API's objects, methods and properties. They used the Highcharts.charts array (representing individual chart objects on the page) to access and effect both of the charts by chart.name. They used the plotOptions.series.point.events.click property to "refresh" the bottom chart. They used the series.hide and series.show methods to cause a filtering effect during refresh to show different data per series.name. http://api.highcharts.com/highcharts/Highcharts.charts http://api.highcharts.com/highcharts/plotOptions.series.events.click http://api.highcharts.com/highcharts/Series.hide http://api.highcharts.com/highcharts/Series.show The javascript function they used in the expression is found in the jrxml source tags below: <hc:chartProperty name="plotOptions.series.point.events.click"> <hc:propertyExpression><![CDATA["function(event) { " + " x = Highcharts; " + " for (var i = 0; i < Highcharts.charts.length; i++ ) { " + " var aChart=Highcharts.charts[i]; " + " if ( aChart.name === 'bottomchart' ) { " + " for (var s = 0; i < aChart.series.length; s++) { " + " var aSeries = aChart.series[s]; " + " if (aSeries.name.indexOf(this.category) == -1 ) { " + " aSeries.hide(); " + " } else { " + " aSeries.show(); " + " } " + " } " + " } " + " } " + " }"]]></hc:propertyExpression> </hc:chartProperty This is only an example to help foster ideas for your javascript developer. Ref. Case 00064711
  25. Issue DescriptionA customer ran a report in TIBCO JasperReports® Server which contains an html5 chart. The area representing the chart just showed a "loading" message. Upon checking the browser's developer's tools console pane, the customer found an error message: "net::ERR_BLOCKED_BY_CLIENT" ResolutionThe specific console message typically indicates Adblock, Ghostery, or some other kind of privacy/anti-spyware tool is prohibiting the page from loading all elements. The customer disabled their "Adblock plus addon" for their web browser and the problem was resolved Ref. Case 00071627
×
×
  • Create New...