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 Description:Customers often want to define the behavior of the Back button within JasperReports Server's pages. After browsing from login to a report, the back button will typically return a user to their Repository view. This can be customized. Resolution:An example customization is to make the back button route a user to the Library page instead of the Repository view in JasperReports Server v5.2. This can be done by making changes to the file /webapps/jasperserver-pro/flows/viewReportFlow.xml: Before Changes:<end-state id="done" view="flowRedirect:searchFlow?lastMode=true" /> <end-state id="backToListOfReports" view="flowRedirect:searchFlow?lastMode=true" /> After Changes:<end-state id="done" view="flowRedirect:searchFlow?mode=library" /> <end-state id="backToListOfReports" view="flowRedirect:searchFlow?mode=library" /> Ref. Case #00041405
  2. To find error messages within Jaspersoft Studio you can view the workspace log within Studio, or browse directly to the file in your file system. To browse directly to the file, it is typically found within the home directory for your user running Studio in <HOME>JaspersoftWorkspace.metadata and is named .log On Windows this <HOME> location usually matches the %UserProfile% environment variable. For example in Windows 7 this is <root>Users<username>, in Windows XP this is <root>Documents and Settings<username>In most Unix systems this <HOME> location matches the $HOME environment variable, often <root>/home/<username>, /home/<username>, or /users/<username>, etc.For MAC-OS, try /Users/<username>, or see the $HOME environment variable.To view the log within Studio choose, Windows -> Show View -> Other -> General -> Error log: The result of the above action will be a new window pane, like the pane in the bottom right corner of the screenshot below. You can right-click the individual worklog messages and choose Event Details for info, or choose open log to view the entire log within Studio in the main, central pain as shown in the screenshot below. You can also right-click within the message pane and choose Export Log to save that log elsewhere for portability.
  3. Changed Priority from High to Normal Changed Reproducibility from Always to Unable to Reproduce Changed Resolution from Open to Unable to Reproduce Changed Assigned User from - to @User_306070 While experimenting further with studio, I realized that my tomcat instance had hung-up due to another problem.... bouncing tomcat resolved any 'get metadata' issues that i previously witnessed.
  4. Issue Description:iReport Designer v4.5.1/ Jaspersoft Studio Professional 8.2 and greater offers a JSON Datasource. Below are some ideas for getting started with JSON datasources for your report. [toc]We'll use a sample of a single record, like: { "item" : [{ "value" : 895, "text" : "test" }] }[/code]Resolution:In the "JSON file" field you must browse locally or via shares to a text file containing your json data. Choose "Use the report JSON Expression when filling the report" to be able to specify your query within the individual report. In iReport's "report query", choose json in the drop-down. For our sample, try a query like: <queryString language="json"> <![CDATA[item]]></queryString>[/code]Next you need to manually create fields, matching the names of our json data, then treat this like any other report source: <field name="value" class="java.lang.Integer"> <fieldDescription> <![CDATA[value]]> </fieldDescription></field><field name="text" class="java.lang.String"> <fieldDescription> <![CDATA[text]]> </fieldDescription></field>[/code]As for query syntax, currently we only support only simple (single) filtering criteria with these operators: <, <=, >, >=, == and !=. An example query with an operator to return only the line we've specified via an Input Control might be : <queryString language="json"> <![CDATA[item(value == $P{myValueInput})]]></queryString>[/code]Ref. Case #00033486
  5. Issue Description:Upon executing a MongoDBQuery, you encounter an error: "Error: no such cmd: aggregate" Using shell instead of iReport, you'd also get the same error, like: [toc]com.mongodb.CommandResult$CommandFailure: command failed [aggregate]: { "serverUsed" : "<server address>" , "errmsg" : "no such cmd: aggregate" , "bad cmd" : { "aggregate" : .... };[/code]Resolution:You are using a version of MongoDB older than 2.2, so the aggregrate framework is not yet supported. From shell you can check your version with the command: > db.runCommand( {buildInfo: 1} )[/code]Ref. Case #00035314
  6. Issue Description:If your MongoDB query returns a structure containing an array, you cannot dynamically pull individual items out of the array with the typical dot notation. [toc]Take the following structure as an example: db.greg1.save ( { 'name' : 'Rasheed Wallace', socialLinks : [ { 'id' : 'xyz', 'network' : 'Twitter' } ,{ 'id' : 'qrs', 'network' : 'Facebook'} ] } ) Resolution:In mongoDB versions 2.2 and higher you can use the unwind command: http://docs.mongodb.org/manual/reference/aggregation/unwind/ To unwind the array from the sample above, try the following as your MongoDBQuery in iReport Designer: { runCommand : { aggregate : 'greg1' , pipeline : [ { $project : { name : 1, socialLinks : 1 }} ,{ $unwind : '$socialLinks'} ] } } This runcommand returns three fields: name, socialLinks.network, socialLinks.id . In mongoDB versions prior to 2.2 you can treat the array as a java.util.Collection object and pass it to a "net.sf.jasperreports.engine.data.JRMapCollectionDataSource" for use as a table or lists components dataset (other ideas like this here http://mdahlman.wordpress.com/2012/02/03/collections-in-reports-on-mongodb/) Finally a more difficult option is to create your own map-reduce functions. For shell syntax see: http://docs.mongodb.org/manual/core/map-reduce/. We have samples for calling the map-reduce function within iReport Designer here: Jaspersoft MongoDB Query Language (Map Reduce) & (Map Reduce Sample Query) Ref. Case #00035314
  7. Issue Question: Using HTML5 charts in JasperReports version 5.x., how do I color my chart series based upon the values in my dataset without ordering my query? For example, an answer of "no" should be RED, "yes" should be green, like: Resolution: You can set series color as an axis level property, then in the Advanced Properties of your measure, add a Series Property Contributor with the name "color", which is the highcharts series property name, and specify a bucket property value of [axis level name].[property name]. See the attached example, hc_series_color.jrxml, suitable for version 5.1 or higher, and reference our sample "foodmart" database as your datasource. hc_series_color.jrxml.txt Ref. Case #00034523 hc_series_color.jrxml
  8. Issue Description:Html5 chart Tooltips values can be formatted using highchart's functions. Following is an example of such tooltip formatting directly via javascript calls (unrelated to JasperReports Server): http://jsfiddle.net/gh/get/jquery/1.7.2/highslide-software/highcharts.com/tree/master/samples/highcharts/tooltip/formatter-simple/ Resolution:Since JasperReports Server version 5.1, you can take advantage of these highcharts functions to impact things like tooltips as well as datalabels. First, add this line to WEB-INFclassesjasperreports.properties and restart the server: com.jaspersoft.jasperreports.highcharts.function.properties.allowed=true[/code]Then specify javascript function as strings within your expressions for advanced properties, like tooltip.formatter or plotOptions.pie.dataLabels.formatter. The resulting jrxml would be like: <hc:chartProperty name="plotOptions.pie.dataLabels.formatter"> <hc:propertyExpression> <![CDATA["function() {return '<b>something bold</b>: '+this.point.y;}"]]> </hc:propertyExpression></hc:chartProperty><hc:chartProperty name="tooltip.formatter"> <hc:propertyExpression> <![CDATA["function() {return 'something with percent char: '+this.point.y+'%';}"]]> </hc:propertyExpression></hc:chartProperty>[/code]label_formatter.jrxml attached using sugarcrm datasource. Note that JasperReports Server v5.5 contains a bug (35210 ) which effects the behavior of these functions. The cumulative hotfix patch for JasperReports Server v5.5, available upon request from support, will resolve the bug (note that hotfixes are available for customers with Premiun Subscription only). Reference:http://api.highcharts.com/highcharts#plotOptions.pie.dataLabelshttp://api.highcharts.com/highcharts#tooltip.formatterRef. Case #00034325
  9. Issue Description:A customer wants to hide the Library Icon conditionally based on a user's role. Resolution:To hide the library icon for all users you'll need to modify the decorator in /WEB-INF/decorators/decorator.jsp. Find and remove the tags: [toc]<li id="main_library" tabIndex="-1" class="leaf"> <p class="wrap button"> <span class="icon"></span> <spring:message code="menu.library"/> </p></li>[/code]The above would hide for all users. To conditionally show the icon to a particular role, wrap the above tags with our js:authorize tag, like: <js:authorize ifAllGranted="ROLE_SUPERUSER"> <li id="main_library" tabIndex="-1" class="leaf"> <p class="wrap button"> <span class="icon"></span> <spring:message code="menu.library"/> </p> </li></js:authorize>[/code]This was originally created for 5.1, but it still applies in 5.5 as well. Reference:Chapter "11.7 Customizing Menus" in our JasperReports Server Ultimate Guide v5 in our Documents Area Ref. Case #00032944
  10. For timeseries standard charts, a timePeriod XML attribute exists which allows you to specify the dataset's time period, like year, hour, millisecond, but the default masks in jfreechart can give you varying data formats depending on your time range. To force a format, modify the jrxml directly with iReport or Studio. You can add a child element of <timeSeriesPlot> which is timeAxisFormat who has a child axisFormat. axisFormat takes a ticklabelMask attribute in the pattern of java.text.SimpleDateFormat, like: <timeAxisFormat> <axisFormat tickLabelMask="dd-MM-yyyy:HH:mm:ss" /></timeAxisFormat> ReferencesSchema Reference for axisFormat_tickLabelMask
  11. Issue Description:After connecting to the server, 5.0.2 ETL Studio presented the message "License Token will expire in 8 days" though the license wasn't set for expiration until many months later. Upon trying to re-add the license the Talend Administration Center (TAC) will hang during version check, and the Studio will error with the message "License Token Invalid". The Studio/Eclipse .log has a stacktrace containing: [toc]!MESSAGE 2013-05-29 15:41:51,283 WARN org.talend.commons.exception.CommonExceptionHandler - token.invalid!STACK 0 org.talend.commons.exception.PersistenceException: token.invalid at org.talend.repository.remoteprovider.ServletUtil.handleError(Unknown Source) at org.talend.repository.remoteprovider.AdministratorClient.getText(Unknown Source) Resolution:Periodically (every few months) ETL installs will attempt to automatically validate or renew a license token by connecting to servers at Talend. If for some reason this renewal fails, the above issues will occur. To resolve them use the “generate validation token” button in TAC via the google Chrome browser: If problems occur during the token generation request contact Jaspersoft Technical Support so we can ask Talend to manually create a token. Ref. Case #00034477
  12. Issue Description:A proxy can be placed between our application and your jdbc driver to capture exact sql statements being sent to your server, and to log their execution time. This is helpful in determining performance, and helpful in determining final, full queries that may normally be logged in a parameterized form, hiding actual values. Resolution:Several JDBC proxy driver's exist that provide insight into database activity by intercepting JDBC calls and logging that information. One example is log4jdbc, available at https://code.google.com/p/log4jdbc/. You can use this proxy driver by downloading their jar, setting this jar as the driver for our database connections, then modifying our log4j.properties file to instruct certain values within their driver to create log statements in our own logfiles. Try these steps: First, download log4jdbc4-1.2.jar and add it to WEB-INF/lib (This driver has opensource dependencies, log4j and slf4j, which are already shipped within our lib). Second, add a statement to your WEB-INF/log4j.properties file: “log4j.logger.jdbc.sqltiming=INFO,fileout” Note that fileout is defined within our out-of-box properties file as the main jasperserver logfile. Next you need to associate the log4jdbc driver with your connection, JNDI or JDBC: JNDIModify the jndi resource in META_INF/context.xml for which you'd like enhanced sql logging. For example, to log timing of calls to our foodmart database, modify the 'jdbc/foodmart' definition: Set driverClassName="net.sf.log4jdbc.DriverSpy"Add "jdbc:log4" as prefix to the pre-existing url, like url="jdbc:log4jdbc:mysql://localhost:3306/foodmart?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&autoReconnectForPools=true" JDBCTo proxy direct jdbc connections as datasources, just modify the driver and url appropriately: That's it. You can restart, then look for snippets in your WEB-INF/jasperserver.log containing jdbc.sqltiming, like: 2013-Apr-26 15:09:03,330 jdbc.sqltiming INFO insert into JIAuditEvent (username, tenant_id, event_date, resource_uri, resource_type, event_type, request_type) values ('superuser', 'organizations', '2013-04-26 15:09:02', NULL, '', 'switchUser', 'GUI') {executed in 2 msec} 2013-Apr-26 15:09:22,013 jdbc.sqltiming INFO SELECT TRIGGER_NAME, TRIGGER_GROUP, NEXT_FIRE_TIME, PRIORITY FROM QRTZ_TRIGGERS WHERE SCHED_NAME = 'quartzScheduler' AND TRIGGER_STATE = 'WAITING' AND NEXT_FIRE_TIME <= 1366988991272 AND (NEXT_FIRE_TIME >= 1366988361388) ORDER BY NEXT_FIRE_TIME ASC, PRIORITY DESC {executed in 1 msec} Note that log4jdbc will automatically attempt to load most common jdbc drivers, but for something more obscure, please review their documentation to learn how to pass properties which define more obscure drivers (jars) which should be loaded. Ref. Case #00032787
  13. [toc on_off::hide=1] In JasperReports Server v5.0.x, the following error can occur when upgrading your repository or importing to a new server: No matching JNDI property found for 'jdbc/___' in fallback properties Issue Description:When importing a repository exported from JasperReports Server v4.5.1 into JasperReports Server v5.0.1 a customer ran into a problem marked by the following log output from js-import: Starting processing of AdhocReportUnit objects which are not referenced from dashboard Number of objects to process 213 Processing: /organizations/organization_1/User_Reports/ReportXYZ Error while executing query net.sf.jasperreports.engine.JRException: com.jaspersoft.jasperserver.api.JSException: No matching JNDI property found for 'jdbc/mydatasource' in fallback properties. at com.jaspersoft.ji.adhoc.strategy.StrategyAwareDomainQueryExecuter.createDatasource(StrategyAwareDomainQueryExecuter.java:159) ...... The datasource with jndi name "jdbc/mydatasource" is defined in the context.xml file, and any Server UI Datasources referencing this jndi connection will pass connection tests without error. Explanation/Resolution:When importing a repository (via js-import) which contains resources that use a jndi-based datasource, an error will occur if you have not manually added the new jndi config info to the buildomatic files. An enhancement request has been filed but you can workaround this problem by editing the file buildomaticbuild_confdefaultjs.jdbc.properties to add the JNDI config information, like the following: # jndi settings for corporate oracle dev database mydatasource.jdbc.driverClassName=oracle.jdbc.OracleDriver mydatasource.jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:db_dev mydatasource.jdbc.username=muiser mydatasource.jdbc.password=mypass mydatasource.jndi=jdbc/mydatasource Ref. Case #00031917
  14. Issue:In JasperReports 5.0.1 you can make many changes to chart properties based upon the highcharts API (http://api.highcharts.com). For example, after perusing the following API documentation, we know it is possible to make the x-Axis Label rotate by 90 degrees: http://api.highcharts.com/highcharts#xAxis.labels.rotation Resolution:To achieve rotation of your x-Axis label within iReport, in "Edit chart properties" choose "Show Advanced Options". In the "Show Advanced Options" dialog you can add: Property Name = xAxis.labels.rotation Value/Expression = 90 The resulting jrxml is: Ref. Case #00031218
  15. Issue:In JBoss 5.1. upon executing any OLAP View, including the sample 'Profile View', the application server hangs entirely. With INFO level loging the WEB-INFlogsjasperserver.log indicates that the execution reaches the following log statement, but never progresses: 13:29:52,878 INFO [RendererTag] enter /performance/views/Profile_view/toolbar Analysis in JConsole shows heap memory usage spiking and remaining high despite standard JAVA_OPT recommendations from install guide. A jmap heap dump shows that org.jboss.classloader.spi.base.BaseClassLoader has a “domains” member retaining an extraordinary amout of memory. Resolution:The problem was a classloading conflict within JBoss configuration. Modifying JBoss's jboss-classloading.xml file as follows resolved the issue: <classloading domain="jasperserver-pro" export-all="NON_EMPTY" import-all="true" name="jasperserver-pro.war" parent-domain="DefaultDomain" xmlns="urn:jboss:classloading:1.0"></classloading> Ref. Case #00030563
  16. Issue:After install, when attempting to start the studio, an error occurs and a dialog box refers you to the log file. The workspace.metadatalog file contains "java.lang.RuntimeException: No application id has been found." Resolution:This can occur when when an older VM is being used to execute the ETL studio/workbench. Your JVM version is found in the log. Check your machine and ensure no other JVM's could be getting picked up onto your runtime path and ensure your JVM is compatible with your ETL software. Another reason this can occur is if you installed a license from an different version (for example using a 5.0.2 license on 5.1.2 software). Fetch the correct license from your support portal, then delete the 'license' file within the root directory of your studio, for example5.1.2studioJETL-r90681-V5.1.2 Ref. Case #00030565
  17. Issue Description:For convenience, it is possible to use a custom bean definitions file as an alternative to setting overrides directly within JasperReports Server's various bean definition files. Some customers would like this approach as a way to simplify the tracking of their changes. Resolution:Our bean definition post processor can be used to make the overrides. Below is an example for overriding the default FileVirtualizerFactory configured in applicationContext.xml. The original snippet associated with FileVirtualizerFactory in applicationContext.xml is: <!--report virtualizers--> <bean class="com.jaspersoft.jasperserver.api.engine.common.service.impl.FileVirtualizerFactory" id="fileVirtualizerFactory"> <property name="maxSize" value="300" /> <property name="directory" value="${java.io.tmpdir}" /> </bean> To override, first create a new xml file with a perinent name, like applicationContext-my-customizations.xml (example attached). Then simply add the following, with your own useful documentation, of course: <bean class="com.jaspersoft.jasperserver.api.engine.common.service.impl.SwapFileVirtualizerFactory" id="myFileVirtualizerFactory"> <property name="tempDirectory" value="${java.io.tmpdir}" /> </bean> <bean class="com.jaspersoft.jasperserver.api.common.util.spring.BeanDefinitionOverrider" lazy-init="false"> <property name="originalBeanName" value="fileVirtualizerFactory" /> <property name="overridingBeanName" value="myFileVirtualizerFactory" /> <property name="mergeProperties" value="false" /> </bean> Ref. Case #00030558 applicationcontext-my-customizations.xml
  18. Issue:[toc on_off::hide=1] A variable can be populated with JAVA System properties, default JasperReports properties and configurable values from WEB-INFclassesjasperreports.properties Resolution:Example 1, a value specified in your jasperreports.properties file: [CDATA[new String (net.sf.jasperreports.engine.util.JRProperties.getProperty("net.sf.jasperreports.band.split.type"))]][/code]In newer versions, the api has changed, so try a syntax like: [CDATA[new String (net.sf.jasperreports.engine.JRPropertiesUtil.getInstance(DefaultJasperReportsContext.getInstance()).getProperty("net.sf.jasperreports.export.csv.exclude.origin.keep.first.band.1"))]][/code]Example 2, a common JAVA System property within your application server's JVM: [CDATA[new String(System.getProperty("user.dir")) ]][/code]Example 3, a value from a property listed within the jrxml itself: [CDATA[$P{JASPER_REPORT}.getProperty("com.jaspersoft.studio.data.defaultdataadapter")]][/code]
  19. Our security framework relies on regular expressions for validation rules which restrict certain inputs and values. The validation rules can be modified and tools exist to help developers test the regular expressions with their necessary inputs. One useful tool is http://www.regexplanet.com/advanced/java/index.html. Here we highlight an example usage. Below is a commonly used validation rule which ensures only sanctioned, secure SQL statements are allowed into the application for execution. Validator.ValidSQL=^s*((?i)select)s+[^;]+$ To test via the regexplanet.com site, enter your expression into the "Regular Expression:" field. When you enter the string, you must exclude any escaping backslashs which are present because these are strings passed to our java application, so try: ^s*((?i)select)s+[^;]+$ Next list various inputs, sql statements in this case, which you feel are potentially problematic. These can be things you want to ensure are excluded, or they can be input values from your legacy system that you want to ensure match our validation rules: Lastly, hit the test button to find your results. If your required input value does not match, then you need to modify the regular expression. Our example here uses SQL statements, but this applies to any of the validation rules used throughout our validation.properties configuration file. Note that the results page outputs the "Java string" as it would need to be formatted in the valiation.properties file. For more information on the security framework see article: Jaspersoft 4.5.0 Security Changes and Configuration Ref. Case #00029994
  20. Issue:[toc on_off::hide=1]Instructions for JasperReports Server v4.7 localization (JasperReports Server Adminstrator Guide) are missing information regarding settings for date input controls, also known as datepickers. Resolution:JasperReports Server v4.7 uses a third party library for date input controls and it handles internationalization/localization differently than the rest of our UI. Instead of the new values being specified in the /WEB-INF/bundles directory they are now specified in the /webapp/scripts/jquery/js directory. To add language-specific settings for a new locale, you must create a new jquery.ui.datepicker-yourLocale.js file. For example, the filename for a Norwegian locale would be jquery.ui.datepicker-no.js. Ref. Case #00029470
  21. Issue: Http url query string parameters, like firstname & hobby in the following url, can be used in JasperReports Server reports, even as inputs to the query-based input controls: http://myserver.com/testpage.html?firstname=greg&hobby=fun Resolution: This example uses the foodmart sample database tables shipped with JasperReports Server. This example was created in 4.7.1. Define the parameter for use within your JRXML: <parameter name="position_param" class="java.lang.String"/> For testing, my input parameter is in my main report query: select * from employee where position_title = $P{position_param} limit 5 Within the web UI of your report, in the "Controls and Resources" page create the first input control with these characteristics: Name is foo, single value, invisible or visible, text is the datatype. Use these characteristics for your second input control created in the "Controls and Resources" page: Name it position_param (name obviously has to match what we created in jrxml), singe select query, mandatory checkbox, and In the query use: select position_title from employee where position_title = $P{foo}. Ensure position_title is returned in the values. On the "Controls and Resources page ensure the "always prompt" is unchecked. Execute your reports url with the query param &foo=President, for example, using a report name "urlparam" residing in your Public folder: http://localhost:8070/jasperserver-pro/flow.html?_flowId=viewReportFlow&standAlone=true&_flowId=viewReportFlow&ParentFolderUri=%2Fpublic&reportUnit=%2Fpublic%2Furlparam&foo=President Attached is a js-export zip which can be imported. You'll need to ensure the datasource is correct and run as superuser. Ref. Case #00029184
  22. Issue:Using an expression as the value of a text field that is within a Table component will break the interactivity of the component. The snippet below is an example of such an expression for a detailCell of a column: <jr:detailCell height="20" rowSpan="1"> <textField> <reportElement x="0" y="0" width="195" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{Category} == "Ninja" ? "Sword" : $F{Category}]]></textFieldExpression> </textField></jr:detailCell>The result is that the sort menu flyout isn't functional. Resolution:You cannot use an expression in a field that will be interactive. The expressions in text fields are not evaluated at "data source processing time". We can only sort data coming from the data source, not data coming from the text field itself. Expressions in text fields are evaluated at report rendering time, and at that point it is basically too late to do any sorting. If you want to sort on complex expressions, you need to create a variable and put your expression into it. We are able to sort on variables because they are evaluated during data source processing. <textFieldExpression><![CDATA[$V{varCategory}]]></textFieldExpression> Ref. Case #00029210
  23. As of 4.7.1, the REST service allows a job to specify output to remote files through FTP. This FTP output will be in addition to the regular repository output, so output will be written to both. To specify parameters (server, path, user, password, etc), add the outputFTPInfo element to the XML job descriptor. Example: <job> <reportunituri>/reports/samples/AllAccounts</reportunituri> <label>MyJob</label> <description>MyJob description</description> <baseoutputfilename>WeeklyAccountsReport</baseoutputfilename> <repositorydestination> <folderuri>/reports/samples</folderuri> <outputdescription> <overwritefiles>true</overwritefiles> <sequentialfilenames>false</sequentialfilenames> <outputftpinfo> <servername>ftpserver.example.com</servername> <username>ftpUser</username> <password>ftpPassword</password> <folderpath>/Shared/Users/ftpUser</folderpath> </outputftpinfo> </outputdescription></repositorydestination> <outputformats> <outputformat>XLS</outputformat> <outputformat>PDF</outputformat> </outputformats> ... </job>
×
×
  • Create New...