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

Tom C

Jaspersoft Staff
  • Posts

    453
  • Joined

  • Last visited

 Content Type 

Profiles

Forum

Events

Featured Visualizations

Knowledge Base

Documentation (PDF Downloads)

Blog

Documentation (Test Area)

Documentation

Dr. Jaspersoft Webinar Series

Security Advisories

Downloads

Everything posted by Tom C

  1. ProblemWhen upgrading JasperReports Server (JRS) from 7.2 to 7.5 using js-upgrade-samedb script as described in TIBCO JasperReports® Server Upgrade Guide Software Release 7.5 document, CHAPTER 3 "UPGRADING FROM 7.2 TO 7.5", user might encounter build failure with PostgreSQL constraints. CauseThe failure is caused by user's current JRS 7.2 deployment that was also using js-upgrade-samedb script to upgrade from JRS 7.1.0 to 7.2.0 path. JRS 7.2 introduced new PostgreSQL constraints for repository tables that JRS 7.2 upgrade "update in place" process failed to create. As a result, when JRS 7.5 js-upgrade-samedb script is trying to drop those constraints, the build process failed. ResolutionTo work around this defect, user can use js-upgrade-newdb script as described in TIBCO JasperReports® Server Upgrade Guide Software Release 7.5 document, CHAPTER 4 "UPGRADING FROM 6.4 - 7.1 TO 7.5" to carry out JRS 7.2 to 7.5 upgrade. Should user prefer to use js-upgrade-samedb script for update in place process perhaps due to performance concern for large repository content migration, user can edit upgrade-postgresql-7.2.0-7.5.0-pro.sql file under jasperreports-server-7.5.0buildomaticinstall_resourcessqlpostgresql directory and comment out the following DB commands: from -- drop foreign key from JIAccessEvent to JIResource and JIUser alter table JIAccessEvent drop constraint FK7caj87u72rymu6805gtek03y8; alter table JIAccessEvent drop constraint FK8lqavxfshc29dnw97io0t6wbf; to -- drop foreign key from JIAccessEvent to JIResource and JIUser -- alter table JIAccessEvent -- drop constraint FK7caj87u72rymu6805gtek03y8; -- alter table JIAccessEvent -- drop constraint FK8lqavxfshc29dnw97io0t6wbf; Save the change, then run js-upgrade-samedb script to complete the upgrade process. ================================================================ TTC-20200219
  2. You got the file not found error: java.io.FileNotFoundException: export_local_14FEB2020_1111.zip (No such file or directory) Check to see where you put this exported JRS 6.1.0 reository zip file and make sure to use full path to reference the location or move it under JRS 7.1.0 folder /jasper_upgrade/jasperreports-server-cp-7.1.0-bin/buildomatic Also make sure its has read access for all users.
  3. ProblemWhen following TIBCO JasperReports® Server Upgrade Guide Software Release 7.5 document, section 4.4.3 "Using the js-export Script to Export Data" to run js-export script js-export.bat --everything --output-zip js-7.1-export.zip --genkey The execution failed with the following error: CauseThis --genkey option for export utility is introduced in TIBCO JasperReports® Server 7.5.0 . Our upgrade document is INCORRECT with regard to the export procedure using this option. We are going to correct this documentation error affecting both community and comercial edition of the document. ResolutionWhen exporting JasperReports® Server 7.1.0 or earlier versions of the repository catalog information, user should run the following command line from their JasperReports Server 7.1.0 installation buildomatic directory: js-export.bat --everything --output-zip js-7.1-export.zip User do not need JasperReports Server 7.1.0 old key to run their repository content import into JasperReports Server 7.5.0. We apologize for the confusion and any trouble this error has caused. TTC-20200217
  4. The --genkey option for export utility is introduced in 7.5.0 . Our upgrade document is misleading and INCORRECT. I am going to file a documentation bug report on this error which affects both community and comercial edition of the document. FYI, only commercial edition is supportable by Tech Support group. In your case, you should run ./js-export.sh --everything --output-zip js-export.zip in JRS 6.4.3 installation. You do not need JRS 6.4.3 old key to run your reposiotry content import into JRS 7.5.0. Hope this helps to clarify the situation and sorry for the confusion this has caused.
  5. I think "js-export-ce" in JRS community upgrade guide is misleading. Try ./js-export.sh in 6.4.3 and ./js-import.sh in 7.5 instead to migrate your repository content. Based on JRS community admin guide, it only has js-export and js-import utilities. https://community.jaspersoft.com/documentation/tibco-jasperreports-server-administrator-guide/v630/import-and-export-through-command https://community.jaspersoft.com/documentation/tibco-jasperreports-server-community-project-administrator-guide/v75-v750/import-and
  6. You can use "No Data" band to display your message if report main data source query produces empty dataset. In the latest 7.5.0 release, you can also display no data message for report sub dataset. For exmaple, you can display no data message in your report table element no data section in 7.5.0 version which you were not able to do in the past.
  7. TIBCO JasperReports® Server 7.5 enforces a new server based keystore to encrypt repository password content. Migrating repository catalog to JasperReports® Server 7.5 therefore needs to convert old generically encrypted password to the new server specific password through JasperReports® Server 7.5.0 import utility. With this change, users should not use js-upgrade-samedb sript to conduct their repository catalog upgrade to JasperReports® Server 7.5. This In Place DB upgrade retains repo content and does not perform password encryption conversion using the new keys. As the result, any users other than superuser will not be able to log into JasperReports® Server 7.5 after the upgrade using js-upgradesamedb script. Repository JDBC data sources will also have connection errors due to the incorrect password. Information provided in TIBCO JasperReports® Server Upgrade Guide Software Release 7.5 document, CHAPTER 3 "UPGRADING FROM 7.2 TO 7.5" should NOT be used to guide user through JasperReports® Server 7.5 upgrade process. Instead, users should follow the procedure in CHAPTER 4 "UPGRADING FROM 6.4 - 7.1 TO 7.5" of the document to carry out their upgrading from 7.2 to 7.5 operation. A defect report has been filed to address this issue and its internal reference number is JS-56970. This warning bulletin only applies to JasperReports® Server 7.5 Upgrade from 7.2 to 7.5 procedure using js-upgradesamedb script. Upgrade process on previous release versions can continue to use the script without restrictions. TTC-20200204-20200428
  8. ProblemWhen running a report in TIBCO JasperReports® Server 7.1 and 7.2 (perhaps in earlier versions as well), if data snapshot is enabled, user might encounter the situation that report input control (IC) parameter default values are not correctly selected. CauseDefault values for report IC in this case are based on data snapshot collected values on the very first report execution after it is deployed in JasperReports Server repository. Any subsequent runs do not alter the input control default values in the snapshot even with snapshot data refresh. The only way to reset report IC default values back to report template defined values is to redeploy the entire report unit to wipe out the snapshot. Reloading template JRXML file has no effect to correct the problem. Work AroundThere is a bug report just filed to correct this defect. We do not however have an ETA on when it will ge fixed at the rpesent time. The internal reference number for the report is JS-56165. The current work around to avoid this problem is, on the very first run of the report unit in JasperReports Server after its deployment, user must use default values to run report in order to create the initial data snapshot for the ICs matching report defined default values. An alternative solution to this problem is to turn off data snapshots at report level. User can add the following property to report template: <property name="net.sf.jasperreports.data.cache.persistable" value="false"/> For more information on data snapshots, please refer to: TIBCO JasperReports® Server Administrator Guide Software Release 7.2 document, section "Enabling Data Snapshots"TTC-20191125-1803595
  9. User can use JasperReports® Server Repository HTTP API to run report from a hyperlink. This HTTP interface can execute reports within JasperReports Server web application using the following URL format: http://<host>:<port>/<context>/flow.html?_flowId=viewReportFlow&reportUnit={repository path to the report unit}&parameter1={user input value} If the report parameter supports multi-select values, user can specify them using the ampersand (&) in the URL; for example: http://<host>:<port>/<context>/flow.html?_flowId=viewReportFlow&reportUnit={repository path to the report unit}&parameter1=1&parameter1=2&parameter1=3 The following report design template (JRXML file) demonstrates how to construct the hyperlink in report to pass multi-selected values. Key considerations in th demo report are: Report parameter for multi-select input control (IC) has a Java type Collection; Java String manipulation is needed to convert IC collection into a string to pass multiple values of the parameter in HTTP API. For example, the IC input is id = [1,2,3] and converted parameter string in the URL is &id=1&id=2&id=3 Report hyperlink type is "Reference" This demo report uses JasperReports Server repository data source to feed its data. Tables jiuser and jitenant are used in the report. Report Design Template:<?xml version="1.0" encoding="UTF-8"?> <!-- Created with Jaspersoft Studio version 7.3.0.final using JasperReports Library version 6.4.0 --> <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="demo report" pageWidth="612" pageHeight="792" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="20f42647-a3ef-4995-b102-05b68a037437"> <property name="com.jaspersoft.studio.data.defaultdataadapter" value="JRSrepo"/> <property name="com.jaspersoft.studio.data.sql.tables" value=""/> <property name="ireport.jasperserver.url" value="http://localhost:8080/jasperserver-pro/"/> <property name="ireport.jasperserver.user" value="superuser"/> <property name="ireport.jasperserver.report.resource" value="/public/TTC/1815754_hyperlink_with_multi_selected_values/demo_report_files/main_jrxml"/> <property name="ireport.jasperserver.reportUnit" value="/public/TTC/1815754_hyperlink_with_multi_selected_values/demo_report"/> <parameter name="userid" class="java.util.Collection" nestedType="java.lang.Long"/> <parameter name="useridList" class="java.lang.String" isForPrompting="false"> <defaultValueExpression> <![CDATA["&userid="+$P{userid}.toString().substring(1,$P{userid}.toString().length()-1).replace(", ","&userid=")]]> </defaultValueExpression> </parameter> <parameter name="iteration" class="java.lang.Integer" isForPrompting="false"> <defaultValueExpression> <![CDATA[0]]> </defaultValueExpression> </parameter> <parameter name="mod" class="java.lang.Integer" isForPrompting="false"> <defaultValueExpression> <![CDATA[5]]> </defaultValueExpression> </parameter> <parameter name="nextIteration" class="java.lang.Integer" isForPrompting="false"> <defaultValueExpression> <![CDATA[$P{iteration}.intValue()+1]]> </defaultValueExpression> </parameter> <parameter name="hyperlink" class="java.lang.String" isForPrompting="false"> <defaultValueExpression> <![CDATA["http://localhost:8080/jasperserver-pro/flow.html?_flowId=viewReportFlow&_flowId=viewReportFlow&ParentFolderUri=/public/TTC/1815754_hyperlink_with_multi_selected_values&reportUnit=/public/TTC/1815754_hyperlink_with_multi_selected_values/demo_report&standAlone=true"+("&userid=".equals($P{useridList})?"":$P{useridList})+"&iteration="+$P{nextIteration}]]> </defaultValueExpression> </parameter> <queryString> <![CDATA[select u.id as id , u.username as username , t.tenantname as organization , t.tenantname||'-'||u.username as orgusername from jiuser u inner join jitenant t on t.id = u.tenantid where $X{IN, u.id, userid} order by u.id]]> </queryString> <field name="id" class="java.lang.Long"> <property name="com.jaspersoft.studio.field.label" value="id"/> <property name="com.jaspersoft.studio.field.tree.path" value="jiuser"/> </field> <field name="username" class="java.lang.String"> <property name="com.jaspersoft.studio.field.label" value="username"/> <property name="com.jaspersoft.studio.field.tree.path" value="jiuser"/> </field> <field name="organization" class="java.lang.String"> <property name="com.jaspersoft.studio.field.label" value="organization"/> <property name="com.jaspersoft.studio.field.tree.path" value="jitenant"/> </field> <field name="orgusername" class="java.lang.String"> <property name="com.jaspersoft.studio.field.label" value="orgusername"/> </field> <title> <band height="80" splitType="Stretch"> <property name="com.jaspersoft.studio.unit.height" value="px"/> <textField> <reportElement x="0" y="0" width="380" height="30" uuid="17237a10-af22-4bc0-8828-8db45b2811c8"/> <textElement> <font size="14" isBold="true"/> </textElement> <textFieldExpression> <![CDATA["Selected User ID ="+$P{userid}+";"]]> </textFieldExpression> </textField> <textField hyperlinkType="Reference"> <reportElement x="0" y="35" width="570" height="30" forecolor="#9900CC" uuid="ff973f83-b930-4992-acf8-3a2e7f279bf9"> <property name="com.jaspersoft.studio.unit.y" value="px"/> </reportElement> <box> <pen lineWidth="0.5"/> <rightPen lineWidth="0.25"/> </box> <textElement> <font size="16"/> </textElement> <textFieldExpression> <![CDATA[$P{useridList}]]> </textFieldExpression> <hyperlinkReferenceExpression> <![CDATA[$P{hyperlink}]]> </hyperlinkReferenceExpression> <hyperlinkTooltipExpression> <![CDATA[$P{hyperlink}]]> </hyperlinkTooltipExpression> </textField> <staticText> <reportElement mode="Opaque" x="380" y="0" width="30" height="30" backcolor="#FF3300" uuid="5889abed-46f0-4697-a9f7-230434899617"> <property name="com.jaspersoft.studio.unit.width" value="px"/> </reportElement> <text><![CDATA[]]></text> </staticText> <staticText> <reportElement mode="Opaque" x="440" y="0" width="30" height="30" backcolor="#FFFF00" uuid="afd31000-b3e4-4402-8632-a4823b8542fc"> <property name="com.jaspersoft.studio.unit.width" value="px"/> <printWhenExpression> <![CDATA[$P{iteration}.intValue()%$P{mod}.intValue()>1]]> </printWhenExpression> </reportElement> <text><![CDATA[]]></text> </staticText> <staticText> <reportElement mode="Opaque" x="470" y="0" width="30" height="30" backcolor="#00CC00" uuid="099c3387-7c30-46bd-97d9-85850c0d87f6"> <property name="com.jaspersoft.studio.unit.width" value="px"/> <printWhenExpression> <![CDATA[$P{iteration}.intValue()%$P{mod}.intValue()>2]]> </printWhenExpression> </reportElement> <text><![CDATA[]]></text> </staticText> <staticText> <reportElement mode="Opaque" x="500" y="0" width="30" height="30" backcolor="#6699FF" uuid="65581bd5-b0b7-4b5d-828d-cff55740f5de"> <property name="com.jaspersoft.studio.unit.width" value="px"/> <printWhenExpression> <![CDATA[$P{iteration}.intValue()%$P{mod}.intValue()>3]]> </printWhenExpression> </reportElement> <text><![CDATA[]]></text> </staticText> <staticText> <reportElement mode="Opaque" x="410" y="0" width="30" height="30" backcolor="#FF9900" uuid="c52bd4df-d242-4dba-b2f7-eb005bfbf614"> <property name="com.jaspersoft.studio.unit.width" value="px"/> <printWhenExpression> <![CDATA[$P{iteration}.intValue()%$P{mod}.intValue()>0]]> </printWhenExpression> </reportElement> <text><![CDATA[]]></text> </staticText> </band> </title> <columnHeader> <band height="35" splitType="Stretch"> <property name="com.jaspersoft.studio.unit.height" value="px"/> <staticText> <reportElement x="0" y="0" width="100" height="30" uuid="e60e17ca-d679-4dd6-a207-d5b894a2f80f"> <property name="com.jaspersoft.studio.spreadsheet.connectionID" value="687b9105-2185-4af7-beec-d5483f4dee2f"/> </reportElement> <textElement> <font size="14" isBold="true"/> </textElement> <text><![CDATA[id]]></text> </staticText> <staticText> <reportElement x="100" y="0" width="200" height="30" uuid="b11ed5f5-1dff-4479-b65c-80e03c383434"> <property name="com.jaspersoft.studio.spreadsheet.connectionID" value="95daa178-d002-4b3d-b366-9457b3d601c3"/> <property name="com.jaspersoft.studio.unit.width" value="px"/> </reportElement> <textElement> <font size="14" isBold="true"/> </textElement> <text><![CDATA[organization]]></text> </staticText> <staticText> <reportElement x="300" y="0" width="200" height="30" uuid="33522021-5ef4-4088-afcd-97b344215ea7"> <property name="com.jaspersoft.studio.spreadsheet.connectionID" value="4a1b4f06-4713-4918-9e2c-123d09d0571a"/> <property name="com.jaspersoft.studio.unit.width" value="px"/> </reportElement> <textElement> <font size="14" isBold="true"/> </textElement> <text><![CDATA[username]]></text> </staticText> </band> </columnHeader> <detail> <band height="35" splitType="Stretch"> <property name="com.jaspersoft.studio.unit.height" value="px"/> <textField> <reportElement x="0" y="0" width="100" height="30" uuid="8b29a03f-2499-4ea7-a5cd-71b844c9c8c8"> <property name="com.jaspersoft.studio.spreadsheet.connectionID" value="687b9105-2185-4af7-beec-d5483f4dee2f"/> </reportElement> <textElement> <font size="14"/> </textElement> <textFieldExpression><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="100" y="0" width="200" height="30" uuid="3e6ad520-9047-4458-a9bb-63e5c1599243"> <property name="com.jaspersoft.studio.spreadsheet.connectionID" value="95daa178-d002-4b3d-b366-9457b3d601c3"/> <property name="com.jaspersoft.studio.unit.width" value="px"/> </reportElement> <textElement> <font size="14"/> </textElement> <textFieldExpression> <![CDATA[$F{organization}]]> </textFieldExpression> </textField> <textField> <reportElement x="300" y="0" width="200" height="30" uuid="8b1f50c5-2457-4bc5-ad1c-0f6197c510ac"> <property name="com.jaspersoft.studio.spreadsheet.connectionID" value="4a1b4f06-4713-4918-9e2c-123d09d0571a"/> <property name="com.jaspersoft.studio.unit.width" value="px"/> </reportElement> <textElement> <font size="14"/> </textElement> <textFieldExpression><![CDATA[$F{username}]]></textFieldExpression> </textField> </band> </detail> <summary> <band height="35" splitType="Stretch"> <property name="com.jaspersoft.studio.unit.height" value="px"/> <textField> <reportElement x="100" y="0" width="400" height="30" uuid="76b87620-58a3-45c6-b443-263dc3401de6"/> <box> <pen lineWidth="0.25"/> </box> <textElement> <font size="14"/> </textElement> <textFieldExpression> <![CDATA["Total Records = "+$V{REPORT_COUNT}+"."]]> </textFieldExpression> </textField> </band> </summary> </jasperReport> Deployed Report Unit User can download the deployed report unit from the attachment below. After importing, user can run this "demo report" under /public/TTC/1815754_hyperlink_with_multi_selected_values/ repository folder. The report hyperlink is the second row in the report title band which user can click on to run report with listed values via HTTP API URL. This report has been tested in JasperReports Server 6.4.0 and 7.2.0. TTC-20191117-1814150-1815754 export-demo.zip
  10. ProblemUser is running REST API request from their application to execute TIBCO JasperReports® Server 7.2.0 report unit or dashboard and got HTTP 400 error: [toc]This site can’t be reached The webpage at http://localhost:8080/jasperserver-pro/rest_v2/reports/user_report.pdf?fullname_1=superuser&fullname_1=reportuser might be temporarily down or it may have moved permanently to a new web address. ERR_INVALID_RESPONSE User has double checked the REST request URL and it does not seem to contain any malformation. CauseWhen user has a report unit deployment with mandatory input control using query generated value(s), if user's REST request has an unmatched parameter value in the data source, such as data source contains values of 1, 2 3 but the request has parameter value of 4, the request will fail REST conversion to Java API in TIBCO JasperReports® Server which will incorrectly throw a hard coded 400 error. SolutionThis defect relates to REST call with "unmatched" parameter values from a foreground request (vs from a report job in background execution) regardless of how the request is made (from a dashboard or a report unit). Ideally, users should get input control values from data source when report is run in the foreground. If this is not always possible due to the size of data resource and "cached data" is used for populating input control values, user will have to wait until this bug is fixed to avoid the HTTP 400 looping error caused by the "mandatory" IC requirement. After the code fix is made, users can simply apply the package without any other efforts and their REST requests should work the same way as if it is run from TIBCO JasperReports® Server web UI, that is if the parameter value has no match in report data source, users should get an empty report; if users have a partial match, report should only list the available entries. It should not give a misleading HTTP 400 error, period. Work AroundIf cached data is not used to feed IC values, in case report data is highly volatile, it is possible that intermediate transaction takes place between input control data is feed and users finish data selections to run report unit. This will cause a mismatched parameter value causing 400 error in REST request. In such a use case scenario, user may intercept this HTTP error in their application, repopulate IC values, and send a message to user with something like "Intermediate transaction occurred. Please reselect parameter values and submit again.". Users would then reselect the IC values and submit the report request again. Alternately, users may intercept this HTTP error in their application, retrieve data source values, drop unmatched selection values, and resubmit the REST request automatically. TTC-20191111
  11. ProblemWhen running a Domain Ad Hoc Report with multiple selected filter values, user got the following error: org.postgresql.util.PSQLException: The column index is out of range: 1, number of columns: 0. at org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java: ............................ CauseThis error comes from PostgreSQL query prepare process and relates to query parameters. The root cause of the error is the multi-selected value list in domain ad hoc view filter contains comma and/or apostrophe (single quote) that PostgreSQL engine is unable to handle, For example, if the filter value consists ['Tibco Software, Inc.', 'Jaspersoft'] query prepare process expects 'Tibco Software' is wrapped around with single quote before the comma that separates the listed values. Since the single quote is missing after "Software", it failed the process causing the error. The same could happen if listed values contain single quote because of missing expected comma after the single quote: ['Today's Date','Sales Total'] ResolutionUser will need to suppress those characters from user's data if the fields will be used as filters to avoid this error. User can define a calculated field with SQL function to remove those characters then inner join it with the table to feed domain. User can then use this calculated field to filter Ad Hoc view data to meet their needs. The only caution is that the "muffled" filter will not be able to tell the difference between values from true table content and a modified one, such as "Tibco Software, Inc." and "Tibco Software Inc.". In most cases, however, this could cause of little concern. ================================================================= TTC-20191030
  12. ProblemUser has created a report in Jaspersoft Studio (JSS) report design tool and tested it without problem. After deploying this report to TIBCO JasperReports® Server with set of input control components, user got the following error when running reports in with input control selections: [toc]org.postgresql.util.PSQLException: The column index is out of range: 1, number of columns: 0. at org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java: ............................ CauseThis error comes from PostgreSQL query prepare process and relates to query parameters. The root cause of the error is the parameter values for the query contains unexpected and incorrect values that PostgreSQL engine is unable to handle. ResolutionUser should review their report designs and pay close attention to any hidden parameters in the report that are used in the report query especially with "placeholder" parameters represented as $P!{} in the query. For example, if user used the following expression in a hidden parameter as: <parameter name="HIDDEN_PARM" class="java.lang.String" isForPrompting="false" evaluationTime="Early"> <defaultValueExpression> <![CDATA[({some conditions based on user input parameter values}? "user_table_colume = 0" : "$X{IN, user_table_colume, USER_INPUT_PARM}"]]> </defaultValueExpression> </parameter> where $P{USER_INPUT_PARM} is a collection type and use this hidden parameter in a report query as: select user_table_colume, ....... from user_table where $P!{HIDDEN_PARM} If the condition is not met as described in the defaultValueExpression at the report execution time, the generated query parameter will contain $X{IN, user_table_colume, USER_INPUT_PARM} The query prepare process is expecting an array of values either as numeric set of [1,2,3......] or as String set of ['TIBCO', 'Jaspersoft', 'Tech Support'.....], etc, hence gets the error. Users must correct their report design to fix the hidden parameter expression to avoid this problem. In this case, since user wants to rely on JasperReports (JR) $X{} syntax to handle collection type matching but is unable to use it in a hidden parameter due to JR limitation, we can change the design approach to use hidden parameter to handle user input parameter as a condition flag in report query. <parameter name="HIDDEN_PARM" class="java.lang.String" isForPrompting="false" evaluationTime="Early"> <defaultValueExpression> <![CDATA[({some conditions based on user input parameter values}? "true" : "false"]]> </defaultValueExpression> </parameter> Then use this flag to set two conditions with mutually exclusive OR to select report data one way or the other. select user_table_colume , ....... from user_table where (user_table_colume = 0 and $P!{HIDDEN_PARM}) or ($X{IN, user_table_colume, USER_INPUT_PARM} and not $P!{HIDDEN_PARM}) With this approach, users should be able to handle report multi-select input control for all values types and avoid the index out of range error. Debugging TipsIf the report design is rather complex and it is hard to spot the offending parameter expressions, user can use the following approach to track down the problem: Create a skeleton report template JRXML file with identical parameter settings; Display those parameters in report title band of the new skeleton report ; Set report to "display all but detail band" "when no data" in report property; In JRS, make a copy of your original report unit that has the error - locate report unit, use "Copy" and "Paste" to make a copy, preferably in a new temp folder for debugging; Edit the debug report unit, and using "Upload a Local File" option in report "Set Up" web UI to browse and upload the skeleton report template JRXML; Set report Data Source to "Do not link a data source" - This is important. We want to run this debug report without execution the report query or we will get the error without producing a report output; Run this report and review report parameter values in the output to help spot parameter used in report query but contains invalid values. ReferencesJR hidden parameter TTC-20191030-1808989
  13. Question:When receiving a high volume of reporting requests, does JRS queue those requests internally? What impact does it have with many report requests on performance bottlenecks and how JRS addresses this issue? Answer: JasperReports Server (JRS) receives report execution requests via web application server. The report threads will run in sequential order for each report in a first in first out FIFO fashion. Web Server can be configured to handle certain number of threads. For example, Tomcat by default set connector maxthreads=200. By default, JRS can have 10 report threads to run at any given time and this is configured by "jasperPrintAccessor" bean setting in applicationContext.xml file. Sub reports can run simultaneously within a report execution. Reports running in the background is handled by quartz job scheduler. By default, its has 2 threadCount with threadPriority set to 3. This is configured in js.quartz.base.properties file. Background report execution has less thread count and lower priority to avoid resource contention and competition with foreground user facing reporting activities. Report data in general is fed from a database where connection pool can be utilized. DB has its own pool size settings to limit the number of concurrent connections. JRS report execution will subject to concurrent connection pool limitation. JRS does not provide a configuration feature to allow users to set priority to a report execution through custom priority or user defined priority. Additional DiscussionJRS as a web application plays limited role in capacity planning in a server environment. User need to consider enabling technology and product such as web server, application server (including clustered server farm), database server, etc, to meet their reporting requirements. Users should have their system administrators, application technicians and support staff, as well as their business users work together and review this issue on a regular basis, to gather useful and accurate information about the report usage patterns, current and future report data size, and resource limits on server hardware, etc to come up with a reasonable capacity planning estimate to aide resource acquisition and implementation to adequately meet their current and future reporting needs. ===================================== TTC-20191030
  14. ProblemUser has upgraded their TIBCO JasperReports® Server to 7.2.0 and everything works but the job scheduler. user got the following error when trying to create a new report job and when any existing job attempt to start. [toc][9/16/19 12:55:47:023 EDT] 000000cf SystemOut O 2019-09-16 12:55:47,022 ERROR LocalDataSourceJobStore,QuartzScheduler_quartzScheduler-fepbatd2.fepoc.com1568048972951_ClusterManager:3863 - ClusterManager: Error managing cluster: Failure obtaining db row lock: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR. org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR. [See nested exception: com.microsoft.sqlserver.jdbc.SQLServerException: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR.] at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:157) at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:113) at org.quartz.impl.jdbcjobstore.JobStoreSupport.doCheckin(JobStoreSupport.java:3245) at org.quartz.impl.jdbcjobstore.JobStoreSupport$ClusterManager.manage(JobStoreSupport.java:3857) at org.quartz.impl.jdbcjobstore.JobStoreSupport$ClusterManager.run(JobStoreSupport.java:3894) Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Line 1: FOR UPDATE clause allowed only for DECLARE CURSOR. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:285) at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteQuery(WSJdbcPreparedStatement.java:1186) at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeQuery(WSJdbcPreparedStatement.java:718) at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:96) ... 4 more CauseUser is using WebSphere to host the JasperReports® Server 7.2.0 with MS SQL as the repository database. The JDBC driver used in the deployment is a native MS SQL driver. All environmental variables are within the supported platform specification. Web Search revealed there're known issues with Quartz scheduler using an older version of MS SQL DB but it does not apply to this use case. Switching to TIBCO JDBC driver which is QA certified for release testing did not resolve the error. The <js-webapp>/WEB-INF/js.quartz.base.properties setting uses default values of: org.quartz.scheduler.instanceId = AUTO org.quartz.jobStore.isClustered = true This user's deployment is indeed in a cluster but only has a single node. We suspect this single node cluster environment might have contributed to the error. ResolutionAfter changing js.quartz.base.properties file setting to: org.quartz.jobStore.isClustered = false the error no longer exists. TTC-20191028
  15. Normally, users use TIBCO JasperReports® Server domain ad hoc view with a predefined data source to feed its data. For example, this JDBC connection used by the domain feeding ad hoc view is configured to point to "localhost" of the JasperReports® Server repository instance: A Domain ad hoc view using this connection displays "superuser"'s fullname from repository user table. By default, the full name is the same as username itself: We can set up a server attribute ("hostname") to reference data source location (URL), for example, as "localhost" then configure domain ad hoc view data source host name using this server attribute to get the "hostname" value: attribute('hostname') After the configuration switch, please make sure to clear JasperReports® Server ad hoc cache before testing ad hoc view again (refer to "Manually Clearing the Cache" at https://community.jaspersoft.com/documentation/tibco-jasperreports-server-administrator-guide/v720/configuring-ad-hoc#Cache_Management ). The result in this case is the same but the connection host name is using attribute from server setting instead hard coded in the data source connection configuration. Since we are using server attribute ("hostname") to reference data source now, we can switch domain ad hoc view data source by simply changing server attribute and have the effect taking place immediately. Please make sure to clear ad hoc cache to force a DB read instead of picking up old data content from the cache. Suppose we have another two JasperReports® Server repository instances and each has its own full name for "superuser" not using default name: infra-platforms-phase2-125-tochen.pfa.jaspersoft.com "supersuer" fullname is "supersuer(phase2-125-tochen)" infra-platforms-phase2-126-tochen.pfa.jaspersoft.com "supersuer" fullname is "supersuer(phase2-126-tochen)" If we set up server attribute "hostname" to point to one of the above JasperReports® Server repository instances, such as infra-platforms-phase2-125-tochen.pfa.jaspersoft.com the domain ad hoc view will pick up superuser's full name from that instance after cache clearing and view refreshing: We can also use organization attribute to switch this domain ad hoc view based on user's tenancy affiliation. Suppose we have two organizations "QA" and "QA2" and each has attribute "hostname" pointing to different data sources If we configure the data source attribute using tennat specific setting, such as attribute('hostname'.'tenant') then when switching users between these two organizations, we can see this domain ad hoc view will display superuser's fullname from different data source based on logged in user's tenancy affiliation: References:TIBCO JasperReports® Server Administrator Guide Software Release 7.2 document section 2.4 "Managing Attributes" https://community.jaspersoft.com/documentation/tibco-jasperreports-server-administrator-guide/v720/managing-attributes TIBCO JasperReports® Server User Guide Software Release 7.2 document section 7.5 "Using Attributes in the Domain Designer" https://community.jaspersoft.com/documentation/tibco-jasperreports-server-user-guide/v720/using-attributes-domain-designer TIBCO JasperReports® Server Administrator Guide Software Release 7.2 document section 8.4.6 "Ad Hoc Cache Management" https://community.jaspersoft.com/documentation/tibco-jasperreports-server-administrator-guide/v720/configuring-ad-hoc#Cache_Management TTC-20191028
  16. When creating a complex DomEL expression for Domain calculated field, it is helpful to use parentheses in complex conditions to clarify the situation. However, excessive parenthesis usage often causes confusion in syntax logic especially when complex DomEL expression is not well formatted in domain designer. Suppose user has a DB function "calc_function" defined in applicationContext-semanticLayer.xml configuration file to return a boolean (true/false) value to indicate whether logged in user has access to specific domain data based on a "record_key" value. User's requirement is to display domain field "record_content" if domain field "record_key" has value and logged in user does have access to domain data based on this "record_key". Otherwise, "record_content" value will get muffled with 'XXXXX' value. User initially coded the domain calculated field expression as: if(not(isNull(record_key) and not (calc_function(record_key))), 'XXXXX', record_content) but this does not work as expected and "record_content" is not masked. When expanding the expression in a well formatted manner, we can easily spot the misplaced parenthese causing incorrect results. Notice the second parenthese in the express is misplaced negating the condition to correctly mask the records. if( not ( isNull(record_key) and not (calc_function(record_key)) ) , 'XXXXX', record_content ) The correct expression should be: if( ( not isNull(record_key) and not (calc_function(record_key)) ) , 'XXXXX', record_content ) After correcting the parenthese placement, the expression works as desired: if((not isNull(record_key) and not (calc_function(record_key))), 'XXXXX', record_content) It is natural for user to utilize parenthesis to break down complex boolean conditions and help to clarify the situation. However, excessive usage of parenthesis can often cause confusion as demonstrated in the example. By taking out those extra parenthesis, it becomes much easier to see the condition logic and understand the expression intention. if( not isNull(record_key) and not calc_function(record_key) , 'XXXXX', record_content ) if(not isNull(record_key) and not calc_function(record_key), 'XXXXX', record_content) In summary, our suggestion in general is, in a complex conditional expressions, users should limit the use of parenthesis to - when grouping "OR" conditions condition_A and condition_B and (condition_C or condition_D) - when negating a compound condition. not (condition_A and condition_B) Notice this is a general best practice recommendation when coming to write boolean expressions, not limited to coding JasperReports Server (JRs) Domain calculated field expressions. ============================================= TTC-20191025-1807238
  17. In TIBCO JasperReports® Server 7.1x, user can change ad hoc chart color palette as the following: Locate defaultPalette.js file under JasperReports® Server 7.1.0 deployment folder: jasperserver-proscriptsbower_componentsbi-adhocsrcadhocapichartadhocToHighchartsAdapterpalette Since 7.2, the path for the file is: jasperserver-proscriptsruntime_dependenciesbi-adhocsrcadhocapichartadhocToHighchartsAdapterpalette In this script file, you can see the default chart color palette is defined as the following: Users can change this color pattern to the one that users want to replace. For example, a rainbow pattern: colors: [ '#0d233a', '#2f7ed8', '#910000', '#8bbc21', '#492970', '#ff7f27', '#ffc90e', '#1aadce', '#c42525', '#158349', '#77a1e5', '#c40062', '#dbaa00', '#4572a7', '#aa4643', '#89a54e', '#80699b', '#74462e', '#c03c03', '#b58c00' ], colors: [ '#FF0000', '#FF2100', '#FF4200', '#FF6300', '#FF8400', '#FFA500', '#FFC600', '#FFE700', '#FFff00', '#DEff00', '#BDff00', '#9Cff00', '#7Bff00', '#5Aff00', '#39ff00', '#18ff00', '#00ff00', '#00ff21', '#00ff42', '#00ff63', '#00ff84', '#00ffA5', '#00ffC6', '#00ffE7', '#00ffff', '#00E7ff', '#00C6ff', '#00A5ff', '#0084ff', '#0063ff', '#0042ff', '#0021ff', '#0000ff', '#1800ff', '#3900ff', '#5A00ff', '#7B00ff', '#9C00ff', '#BD00ff', '#DE00ff', '#FF00ff', '#FF00E7', '#FF00C6', '#FF00A5', '#FF0084', '#FF0063', '#FF0042' ], Test this script change in JasperReports® Server 7.1.0 as the following: Edit js.config.properties file (under WEB-INF directory), change javascript.optimize=true javascript.optimize=false Save the change Restart Server Now users can login to JasperReports® Server to test and observe that ad hoc chart view and report will use this newly modified color pattern. After satisfying with the result, users need to make this script change optimized to improve performance. Please follow the step by step instructions as outlined in TIBCO JasperReports® Server ULTIMATE GUIDE RELEASE 7.1 document, section 5.2.3 "Customizing JavaScript Files" to perform the JavaScript optimization process. After the optimization process is completed, users can change js.config.properties file back to its original setting of javascript.optimize=true save the change, restart server, to make the ad hoc chart color palette customization permanent. Default Ad Hoc Chart Color Pattern: Modified Ad Hoc Chart Color Pattern: TTC-20191016-1796121
  18. Question:Is it possible to migrate TIIBCO JasperReports® Server domains from one repository to another repository in a user specified repository folder designation? Can we use JRS export/import utilities to accomplish this task? Answer:The JasperReports® Server import utility does not have a feature to allow user to specify the destination in the receiving repository for a resource migration. Resource can only be placed under the same repository location relative to the root in the same structure under which the original domain is created. What this means is that suppose users have a domain currently created under the following repository structure: /organizations/organization_1/Domains/Simple_Domain if using standard export/import utilities, this domain will be placed under the exact location in the receiving repository DB: /organizations/organization_1/Domains/Simple_Domain To circumvent this limitation, what users can do is to develop this domain under a "staging" organization, such as /organizations/staging_org/Domains/Simple_Domain then users can use organization export/import utilities to migrate this domain into a different organization in user's repository, for example /organizations/company_org/Domains/Simple_Domain /organizations/company_org/organizations/department_org/Domains/Simple_Domain Please refer to TIBCO JasperReports® Server Administrator Guide Software Release 7.2 document, CHAPTER 7 "IMPORT AND EXPORT" for more information. https://community.jaspersoft.com/documentation/tibco-jasperreports-server-administrator-guide/v720/import-and-export "Exporting From Organizations" https://community.jaspersoft.com/documentation/tibco-jasperreports-server-administrator-guide/v720/import-and-export-through-web-ui "Exporting From the Command Line" (using --organization option) https://community.jaspersoft.com/documentation/tibco-jasperreports-server-administrator-guide/v720/import-and-export-through-command Notice when using organization export utility, users can only select resource type to filter out what they intend to migrate. If wanting to migrate a specific domain from one organization to another organization, users should only deploy this domain and its dependence (data source, security and resource files, topics, ad hoc view and report, etc) in the staging organization, not any other unrelated resources, to carry out the migration to meet their needs. Beside using organization export/import utilities, there's no other choice to change the repository structure for domain migration automatically except to manually rearrange its placement structure (cut and paste resource in the JasperReports® Server repository view to move resource objects around). In summary, the current JasperReports® Server does not have a generic way to meet this user's requirement regardless which method the user attempts to use because of the current product feature limitation. TTC-20191016-1805124
  19. User has created a Domain report with filter values in TIBCO Jaspersoft® Studio 7.3.0 and deployed the report unit in TIBCO JasperReports® Server 7.2.0. This report renders selected filtered data correctly and successfully in TIBCO JasperReports® Server report viewer web UI . When attempting to execute the report using REST V2 report service API (refer to https://community.jaspersoft.com/documentation/tibco-jasperreports-server-rest-api-reference/v720/reports-service), user got a "site can't be reach" error . There's no error in jasperserver.log file. Inspecting localhost_access_log file in apache-tomcatlogs folder, we found the following error with response code 400: 0:0:0:0:0:0:0:1 - - [07/Oct/2019:13:36:11 -0700] "GET /jasperserver-pro/rest_v2/reports/public/TTC/wiki/20191007/Domain_Demo_Report.pdf?standAlone=true&j_username=superuser&j_password=superuser&Organization=1&User=1 HTTP/1.1" 400 368 0:0:0:0:0:0:0:1 - - [07/Oct/2019:13:36:11 -0700] "GET /jasperserver-pro/rest_v2/reports/public/TTC/wiki/20191007/Domain_Demo_Report.pdf?standAlone=true&j_username=superuser&j_password=superuser&Organization=1&User=1 HTTP/1.1" 400 368 0:0:0:0:0:0:0:1 - - [07/Oct/2019:13:36:17 -0700] "GET /jasperserver-pro/rest_v2/reports/public/TTC/wiki/20191007/Domain_Demo_Report.pdf?standAlone=true&j_username=superuser&j_password=superuser&Organization=1&User=1 HTTP/1.1" 400 368 Notice this HTTP GET request is looping. Further investigation revealed report parameter User was set to an incorrect value &User=1. Because parameter User is implemented as a mandatory input control multi-select query item, user must select a value from the query result set to run this report. If report is run from a REST V2 request with a User parameter value not matching items from the query result set, TIBCO JasperReports® Server treats this as if no value is selected and asks report originator to provide the mandatory and valid value to proceed. However, TIBCO JasperReports® Server REST V2 report service has parameter value injected through request URL which is not interactive with report requester. This caused a request loop with "error invalid response" code. We have reported this use case scenario to the development team and will fix this defect in the future release of TIBCO JasperReports® Server. For the mean time, user needs to be aware of this odd situation and make sure injected selection value in REST V2 request URL contains correct information to avoid this problem. TTC-20191007
  20. In older and no longer supported version of TIBCO JasperReports® Server v5.5, when user had a domain containing table entries that did not have a Java data type mapping (for instance, PostgreSQL uuid data type), as long as not using those fields in the domain, it should work fine with Domain ad hoc view and report. After upgrading to TIBCO JasperReports® Server version 7.2.0 and importing those domains into new repository, if user needs to add new or edit existing calculated fields to the domain in domain designer, TIBCO JasperReports® Server will fail the calculated field validate with an unknown error in the web UI. There's no error on the server side. Notice this will occur despite those fields never being used in the domain. In such case, user will need to export domain schema in domain designer and manually add data type to the schema. For example: from <jdbcQuery id="JoinTree_1" datasourceId="CareAdvance"> <fieldList> .......... <field id="first_id" type="undefined" /> .......... <field id="third_id" type="undefined" /> .......... </fieldList> .......... </jdbcQuery> to <jdbcQuery id="JoinTree_1" datasourceId="CareAdvance"> <fieldList> .......... <field id="first_id" type="java.math.BigDecimal" /> .......... <field id="third_id" type="java.math.BigDecimal" /> .......... </fieldList> .......... </jdbcQuery> save the change and load this modified schema xml file back to domain in TIBCO JasperReports® Server 7.2.0 domain designer. Now user should be able to validate this domain's calculated field without the "unknown error". TTC-20191004-1799395
  21. Our user had reported that they have problem running particular reports in TIBCO JasperReports® Server 7.1.1 with a 502 Gateway error. This error only shows up in the report viewer web UI. There's no error found in apache-tomcat log files nor in jasperserver.log file. Analyzing user's report execution in browser debugger, we discovered the report execution has the following POST requests sent out: Input Control on p_xxx: Tue, 24 Sep 2019 12:52:41 GMT OK 200 Input Control on p_yyy: Tue, 24 Sep 2019 12:52:46 GMT OK 200 "zzz" report execution: Tue, 24 Sep 2019 12:56:37 GMT ERROR 502 User's gateway server choked with a 502 error when processing report execution request. After this 502 error, we see the following requests are sent out again, automatically: Input Control on p_yyy: Tue, 24 Sep 2019 12:56:54 GMT OK 200 "zzz" report execution: Tue, 24 Sep 2019 12:57:29 GMT OK 200 From the above information, we suspect what happened was that report execution took four plus minutes to render when 502 error occurred on the gateway server and subsequent execution finished in less than one minute, because resultant data set/report print object was still in the session thus was used to run direct HTML export that took less time, and report was rendered successfully. Based on the above conclusion, we suggested user to ask their server administrator to review their gateway server log file and see what error code they can find to help pin point the 502 error. It is highly possible, based on the error pattern as we observed, that the is a gateway server timeout issue. After conducting the server investigation, user confirmed that their Citrix ADC load balancer idle session timeout setting is not long enough to handle large report execution thus triggered the 502 gateway error. TTC-20191004-1803015
  22. IssueWhen running TIBCO JasperReports® Server installation script js-install, user got the following error: [select-sql] Failed to connect: [TibcoSoftware][Oracle JDBC Driver]ORA-12660: Encryption or crypto-checksumming parameters incompatible. Oracle 12660 error indicates the hand shake between two nodes of Oracle connection for encryption or crypto-checksumming did not happen due to incompatible request types. As it turns out, user had enabled the database encryption recently and add EncryptionLevel=required...... to data source connection URL. SolutionThe easiest way to inject this "EncryptionLevel=required......" connection setting is to edit db.template.properties file under buildomaticconf_sourcedboracle folder, and append user's setting directly to js.jdbcUrl=jdbc:tibcosoftware:oracle://${dbHost}:${dbPort};${dbSidOrServiceNameProp} In this case, the setting is: js.jdbcUrl=jdbc:tibcosoftware:oracle://${dbHost}:${dbPort};${dbSidOrServiceNameProp};EncryptionLevel=required...... Although re-run the js-install scripts should automatically update configuration settings from user's previous run, user should run following scripts after making template and master file changes to explicitly regenerate their configuration to clear the configuration template files in buildomatic/build_conf/default directory and to re-build installation configuration settings: cd <js-install>/buildomatic js-ant clean-config js-ant gen-config After the above change, user is able to run js-install successfully and start the server with a repository DB connection using required encryption setting. TTC-20190927-1802815
  23. Why my Audit Report shows no data?Only with an audit feature enabled license, and only after configuration change to enable audit feature, TIBCO JasperReports® Server will start collecting audit event data. Only after that point, users can run audit report to review JasperReports® Server events. To verify the license currently used in user's JasperReports® Server deployment, please read this wiki article: What Type of JasperReports Server Pro License Do I have? The feature we are looking for is AUD. If users had customized JasperReports® Server web page, the "About....." feature might get muffled and not available. In such case, user can do the following to obtain supported features information from their JasperReports® Server instance: Login to JasperReports® Server as superuser;Run diagnostic report under PublicDiagnostic repository folder;Review report output for SupportedFeatures attribute under "About" section roughly half way in the report output. Again, the feature we are looking for is AUD. By default, Audit feature is not enabled. Users will need to configure .../WEB-INF/js.config.properties file as the following to turn on Audit: feature.audit_monitoring.enabled=true audit.records.enabled=true monitoring.records.enabled=true Users need to restart server after the configuration change to start collecting Audit data. Only after this point, user can see audit event records in the report. For configuration information, please refer to TIBCO JasperReports® Server 7.1.0 Admin Guide section "Configuring Auditing and Monitoring": https://community.jaspersoft.com/documentation/tibco-jasperreports-server-administrator-guide/v71/configuring-auditing-and-monitoring Why don't I see "login" column in Audit table to show logged-in user information? The "login" event is recorded in Audit record as an event type, not a column name. Please refer to JasperReports® Server 7.1.0 Admin Guide section "Auditing and Monitoring Events" for detail: https://community.jaspersoft.com/documentation/tibco-jasperreports-server-administrator-guide/v71/auditing-and-monitoring-events Notice JasperReports® Server events information as documented in JasperReports® Server Admin Guide are collected in chronological order. Each event can trigger multiple event records being generated, such as report execution with information relating to input control query, report query, and other execution statistics. Can I use a single-tenancy license with Audit feature in a JasperReports® Server instance with multi-tenancy repository structure, and vice versa?JasperReports® Server commercial edition always stores resource contents in an organization structure AKA tenancy structure. Shared resources are placed under Public repository folder for everyone to access regardless its tenancy affiliation. A multi-tenant license will allow users to create, manage, and delete resources from all organizations. A single tenant license on the other hand can access resources from all organizations but can only create, manage, and delete resources under default organization_1. In another word, JasperReports® Server using single tenant license can access repository resource that has multi-tenancy content (built by and inherited from multi-tenant JasperReports® Server instance). However, it will not be able to manage and modify tenancy content outside organization_1.JRS using single tenant license can only place users under root or default organization_1 subject to the permission of logged in users. A license with Audit feature should be able handle single and multi-tenancy repository content regardless whether the license tenancy feature matches the repository structure or not. Audit is a separate JasperReports® Server license feature independent from tenancy feature. TTC-20190925
  24. ProblemUser has reported that in TIBCO JasperReports® Server 7.2.0, when using a date filter in an ad hoc view, we are able to enter relative date (such as MONTH-120) and get the correct filtered data displayed in the view. When deploying this view in a dashboard, however, the date filter will fail with "invalid" value error when relative date MONTH-120 is used. CauseCode review has revealed that in JasperReports Server JavaScripts "InputControlStateModel.js" (deployed under /scripts/runtime_dependencies/bi-control/src/bi/control/model), it has the the statement if (dataType.type === "datetime") { var localizedTimestamp = dateUtils.isoTimestampToLocalizedTimestamp(value); value = value.replace("T", " "); ............ } When 'MONTH' or 'QUARTER' is used in the filter, it becomes will replace 'MON H' or 'QUAR ER' thus will fail the validation. ResolutionWe already have a bug report filed to address this defect. The internal reference number for the bug is JS-34742. Until a fix is made in future product release package, user can modify "InputControlStateModel.js" with the following code change to solve the problem: if (dataType.type === "datetime") { var localizedTimestamp = dateUtils.isoTimestampToLocalizedTimestamp(value); if (!dateUtils.isRelativeTimestamp(value)) { value = value.replace("T", " "); } ............ } NoteSpecial thank goes to our user Josip for his diligent work to help identify product defect and provide coding fix. TTC-20190731-1789081
  25. ProblemA TIBCO JasperReports® Server user has created a Domain security file to secure row level data but he was not able to upload this security XML file to the domain. Our user is "not getting any error" but the security file "is not uploading", according to the user. CauseA browser debugging tool (hit F12 in FireFox, for instance) revealed that user is getting a 403 error. Further analysis pin pointed to JasperReports® Server createSLDatasourceFlow request was being blocked in the network with a HTTP 403 error. Request Headers :method POST :authority server.userware.net :scheme https :path /jasperserver-pro/flow.html?_flowId=createSLDatasourceFlow&OWASP_CSRFTOKEN=xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx content-length 1497 ------------------------------------------------------------------------------------------------ referer https://server.userware.net/jasperserver-pro/flow.html?_flowId=createSLDatasourceFlow&ParentFolderUri=%2Forganizations%2FPMP%2Forganizations%2FTTC%2FDomains&uri=%2Forganizations%2CHEN%2Forganizations%2FTTC%2FDomains%2FTTC_Audit_Domain accept-encoding gzip, deflate, br accept-language en-US,en;q=0.9 ------------------------------------------------------------------------------------------------ cookie userLocale=en_US; userTimezone=America/Kentucky/Louisville; JSESSIONID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ------------------------------------------------------------------------------------------------ Response Headers status 403 server awselb/2.0 ResolutionThis error is caused by AWS HTTPS to HTTP redirect in user's JasperReports Server deployment environment. After user's system admin changes the configuration to allow JasperReports Server web flow to go through their gate way, user is able to upload the security file in the designer. The following is the list of web flow URLs used by JasperReports Server that user's network admin needs to make sure to allow users' access on the web. home page: http://localhost:8089/jasperserver-pro/flow.html?_flowId=homeFlowrepository view: http://localhost:8089/jasperserver-pro/flow.html?_flowId=searchFlowreport view (for execution): http://localhost:8089/jasperserver-pro/flow.html?_flowId=viewReportFlow&_flowId=viewReportFlow&ParentFolderUri=......&reportUnit=......&standAlone=truedomain view: http://localhost:8089/jasperserver-pro/flow.html?_flowId=createSLDatasourceFlow&ParentFolderUri=......domain designer: http://localhost:8089/jasperserver-pro/flow.html?_flowId=createSLDatasourceFlow&OWASP_CSRFTOKEN=..........adhoc view: http://localhost:8089/jasperserver-pro/flow.html?_flowId=adhocFlow&ParentFolderUri=......&resource=......adhoc designer: http://localhost:8089/jasperserver-pro/flow.html?_flowId=adhocFlow&_eventId=initForExistingReport&_flowExecutionKey=e16s1&viewReport=TTC-20190719-1782954
×
×
  • Create New...