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

gnatali

Members
  • Posts

    34
  • Joined

  • Last visited

gnatali's Achievements

Contributor

Contributor (5/14)

  • Week One Done
  • One Month Later
  • One Year In
  • First Post Rare
  • Collaborator Rare

Recent Badges

0

Reputation

  1. This should be solved with the newer versions, (1.0+). Please make sure you follow the installation guide for community: (This step is required only for Community Edition): open the file [JRS_DIR]WEB-INFapplicationContext-WebServiceDataSource.xmlGo to line 49 of the xml file, inside the bean addQueryLanguage change the property beanName from queryLanguagesPro to queryLanguagesCeSave the xml file
  2. TIBCO Jaspersoft® Studio SVN plugin is based on subeclipse Video Tutorials [toc on_off::hide=1]Accessing Subclipse online documentation from TIBCO Jaspersoft StudioOpening perspective, adding repository, checkout project, simple show historyAdding a project to an existing repository. Initial import of the projectSynchronization, commit of a simple report and related resourcesSynchronization and update from headResolving conflicts and merge operationUseful External DocumentationSubclipse Usage TipsSubversion/Subclipse Tutorial
  3. Release NotesWorks on TIBCO JasperReports® Server, Community Edition : fixed a bug that was preventing the plugin to work on TIBCO JasperReports® Server, Community EditionNew Samples to guide you in advaced use cases:SubReport using the same result (Only one webservice call is made)Movie/Tv Series Sample: this sample use parametrized webservice query, this feature let you create a very flexible query that depends on parameters.A better Exception logging will help you understand easier what webservice call caused the exception In TIBCO Jaspersoft® Studio : added warning when response of the webservice is different than 200. In this case Jaspersoft Studio will show a dialog with the result of webservice call so you can better understand what was the issue with your webservice call (Screenshot 1) Ability to parse date and numeric fields from a string value specifying the pattern at report level: added 2 Parameters that will contain the String pattern to be used in the parsing:REPORT_DATE_FIELDS_PATTERN : Parameter name of the parameter that will contains the pattern to format datesREPORT_NUMBER_FIELDS_PATTERN : Parameter name of the parameter that will contains the pattern to format numbersScreenshotsScreenshot 1 VideosSamples : Find Movie/TV Series Report
  4. Hi, looks like the quey is wrong, What version are you using (both jrs and webservice datasource)? Can you post the query? There is a dedicated tab in the query editor in Studio that will show you the Query Otherwise you can find it in the jrxml Thanks G
  5. You can do that using the WebService Datasource. you find all the details in the project page: http://community.jaspersoft.com/project/web-service-data-source Please take the time to add a review of this project if you find it useful, the more feedback we get the better we can improve Thanks G
  6. Hi Stefan, the instructions were not designed for a docker installation. The backup is just there to make sure people are aware that they have to be careful with what they do in that folder :) I believe the issue you are facing is related to this bug: http://community.jaspersoft.com/web-service-data-source/issues/6661 Can you please double check the logs file and let me know if this is the case? I am planning on fixing this bug soon Thanks G
  7. Command Line Installer (Windows)TIBCO Jaspersoft® Studio installer can be executed via command line. Command Line installation supports also an Unattended Mode (Silent Mode) . [toc]Options for command line InstallerOption DescriptionOptionNotesSilent Mode (Optional) /SThis option will tell the installer to run in silent mode, no prompt will be required from userLicense Path (Optional)/LICENSEThe License path is optional, the license at the path defined will be copied into the installation folder of TIBCO Jaspersoft® Studio with the name TIBCOJaspersoft-JSS.license. If this option is specified it must be before the /D optionDestination Directory (Mandatory)/DThe Path where TIBCO Jaspersoft® Studio should be installed to. Sample Install CommandAssuming the following: Installer Path: JASPERSOFTInstallerTIBCOJaspersoftStudioPro-6.3.0.final-windows-installer-x86_64.exe License File (downloaded from support portal): C:JaspersoftMy Licensesjasperserver.license Desired destination Folder : C:SWJASPERSOFTJSS630 The install command will be: \JASPERSOFT\Installer\TIBCOJaspersoftStudioPro-6.3.0.final-windows-installer-x86_64.exe /S /LICENSE=C:\Jaspersoft\My Licenses\jasperserver.license /D=C:\SW\JASPERSOFT\JSS\630 License File locationThis is valid only for the Commercial version of TIBCO Jaspersoft® Studio. You can also put the license directly in the installation folder , using the following name: TIBCOJaspersoft-JSS.license. The installer will look for the license following this flow: (Optional) If the command is executed including the /LICENSE option the license at specified path will be copied into the Installation folder with name: TIBCOJaspersoft-JSS.license. The license will be checked in the installation folder with name TIBCOJaspersoft-JSS.license. If no license is present the 30day evaluation license will be used.
  8. Sure! You find all the details at this page: http://www.jaspersoft.com/contact-us Thanks G
  9. gnatali

    Parameter Contributors

    Parameter ContributorWhat's for?With parameter contributor, you can take some parameters, play with them, and put back in the map some other parameters, or replace values of existing ones. Sample Use CaseLet's say that your report is displaying the grades for a given student. In your DB structure grades are kept in the table grades only for 1 year after the student got the degree. So you don't know which table you should get the list of grades from. What you want is to fire a query with the student name (or id or whatever) to get the year of degree. Then if this year is (llower than) < currentYear - 1 the table you are interested in is historical_grades otherwise is grades. Parameter Contributor can help you with that... how? Let's have a look!! Grade List ReportOur Grade list Report is fairly simple, it has a parameter STUDENT_ID and a parameter GRADES_TABLE_NAME. The GRADES_TABLE_NAME param is not prompted to the user, it will be populated by our parameter contributor. In our query we'll use it after the from clause: SELECT * FROM $P!{GRADES_TABLE_NAME} WHERE STUDENT_ID = $P{STUDENT_ID} (Have you noticed the different usage of the 2 parameters in the query? this is not related to the Parameter Contributor: parameters included with $P! will not be wrapped by quotes in SQL, but just injected in the sql query.) This is all we need here, the magic will happen in the parameter Contributor! How can I include a new Parameter Contributor?Parameter contributors are a JR extension point, so they are added as extensions. Short answer is : with a jar. Long answer is: we should have a look on what is inside this jar :) The key elements in a parameterContributor are: Parameter Contributor (s ... you may have more than one contributor)contains your business logic, is where the magic happenshas a method contributeParameters(Map<String, Object> parameters) . Here you have access to report parameters and you can add yours to the parameters map.must implement net.sf.jasperreports.engine.ParameterContributorParameter Contributor Factory:describe the list of contributors that you wish to add.must implement net.sf.jasperreports.engine.ParameterContributorFactoryExtension Registry Factory:will create the registry with your extensions to be loaded. In this case will just cointain our Parameter Contributor FactoryIs the one referenced from the jasperreports_extension.properties filemust implement: net.sf.jasperreports.extensions.ExtensionsRegistryFactoryjasperreports_extension.properties:You may have seen this already in other docs. Is the standard way to register extensions in JasperReports Library.Is a properties file, so you'll find key=value structurekey: if you are registering a parameter contributor the prefix must be net.sf.jasperreports.extension.registry.factory.parameter.contributor . Followed by a name you like. should be unique in jasperContextvalue : the class name of our Extension Registry Factorynet.sf.jasperreports.extension.registry.factory.parameter.contributor.grades.table=com.jaspersoft.parameter.contributor.GradesTableNameParameterContributorExtensionsRegistryFactoryGradesTableNameParameterContributorHere you can can find the jar with the source included (parameterContributor_GradesTable_java17_jrs601.jar ). Have a look in the code will be easier than read a periphrasis here. As we said the business logic is in: com.jaspersoft.parameter.contributor.GradesTableNameParameterContributor package com.jaspersoft.parameter.contributor; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Calendar; import java.util.Map; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRParameter; import net.sf.jasperreports.engine.ParameterContributor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author Gianluca Natali */ public class GradesTableNameParameterContributor implements ParameterContributor { protected final Log logger = LogFactory .getLog(GradesTableNameParameterContributor.class); public static final String STUDENT_ID_PARAM = "STUDENT_ID"; public static final String GRADES_TABLE_NAME_PARAM = "GRADES_TABLE_NAME"; @Override public void contributeParameters(Map<String, Object> parameters) throws JRException { /* The contributor is not report dependent. So it will be executed for all your reports. * Here I check the presence of the parameter I use as flag. If is not there I will do nothing. */ //This is the parameter inputed by the user String studentIdParam = (String) parameters.get(STUDENT_ID_PARAM); if (studentIdParam == null) { return; } // Retrieving the connection from report parameters Connection reportConnection = (Connection) parameters.get(JRParameter.REPORT_CONNECTION); // Fire the query to find the student Student student = findStudent(studentIdParam, reportConnection); // Here my business logic to retrieve the table name int currentYear = Calendar.getInstance().get(Calendar.YEAR); boolean isInHistoric = student.getYearOfDegree() < currentYear - 1; String gradesTableName = isInHistoric ? "historical_grades " : "grades"; // Adding the grades table name to the parameters map parameters.put(GRADES_TABLE_NAME_PARAM, gradesTableName); } @Override public void dispose() { // Here you can dispose elements used from the contributor. this will be // called after the report is filled. As example you could close a jdbc // connection opened in the contributeParameters method } protected Student findStudent(String studentId, Connection connection) { String query = "SELECT full_name, degree_year, student_id FROM students where student_id=?"; Student student = null; /*Retrieving the student from db. check the jar for details*/ return student; } protected class Student { /*Student object definition. check the jar for details */ } } parametercontributor_gradestable_java17_jrs601.jar
  10. This page contains a list of common issues / misconfigurations using the Jaspersoft WebService Datasource . For additional information on this project please refer to the project's Home Page WebService Request IssuesIllegal Character in RequestIf you are passing in the Url some special chars (like a json string...) you will get the error below. Such character will have to be escaped, this is done automatically if you use the GET Parameters content type in the Webservice Query as explained in the Webservice Datasource Documentation net.sf.jasperreports.engine.JRException: Error creating request at com.jaspersoft.webservice.data.util.WebServiceConnector.createRequestForWs(WebServiceConnector.java:174) at com.jaspersoft.webservice.data.util.WebServiceConnector.callWS(WebServiceConnector.java:133) at com.jaspersoft.studio.data.webservice.designer.DesignerWidget.getTreeInputFile(DesignerWidget.java:388) at com.jaspersoft.studio.data.webservice.designer.FieldsArea.loadViewer(FieldsArea.java:175) at com.jaspersoft.studio.data.webservice.designer.FieldsArea.access$0(FieldsArea.java:154) at com.jaspersoft.studio.data.webservice.designer.FieldsArea$1.widgetSelected(FieldsArea.java:133) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769) at org.eclipse.jface.window.Window.runEventLoop(Window.java:827) at org.eclipse.jface.window.Window.open(Window.java:803) at com.jaspersoft.studio.property.dataset.dialog.DatasetAction.run(DatasetAction.java:82) at org.eclipse.jface.action.Action.runWithEvent(Action.java:473) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:595) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:511) at org.eclipse.jface.action.ActionContributionItem$6.handleEvent(ActionContributionItem.java:462) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:654) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:598) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) at com.jaspersoft.studio.pro.rcp.JSSProApplication.start(JSSProApplication.java:112) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608) at org.eclipse.equinox.launcher.Main.run(Main.java:1515) Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 40: http://yourDomain.com/rest/?queryString={"jsonParam":{"jsonKey": "jsonVal"}} at java.net.URI.create(URI.java:852) at org.apache.http.client.fluent.Request.Get(Request.java:79) at com.jaspersoft.webservice.data.util.WebServiceConnector.createGetRequest(WebServiceConnector.java:254) at com.jaspersoft.webservice.data.util.WebServiceConnector.createRequestForWs(WebServiceConnector.java:164) ... 44 more
  11. For additional information on this project please refer to the project's Home Page. This page contains documentation of the Jaspersoft WebService Datasource. Usage in Jaspersoft® Studio Create a new Data Adapter of type WebServiceAfter installing the plugin a new Data Adapter Type will be available [toc]Configuring the Data AdapterThe properties needed are: NameServer URI: the first part or URI address, consider the same Data Adapter can be used to call different weservices, so this should include only the unmodifiable part of URL, but there is no check or rule governing thisConnection Type: possible Values are : POST, GET, Elastic Search ConnectionLanguage: is the language used to decode the response from the webservice, possible values are: xml or jsonAuthentication: the authentication methor required by the Webservice. You can extend this list via add ons to the pluginnonebasic: username and passwordGoogle Authentication: Google API key, this authentication method was build as a sample for extending the Webservice DataAdapterExample: Using the WebserviceDatasource in ReportsBy default the Query Language when you create a report using a Webservice DataAdapter is WebServiceQuery. When using the WebServiceQuery Language you will get a dedicated UI on the Dataset and Query Dialog in Jaspersoft Studio The configuration Have 3 different Views: Request: configure the Request to be sent to your WebserviceFields: Configure how the result from the Webservice call should be mapped to FieldsSource: At the end all the configurations in the first 2 steps is translated into a query in json format, you can always access the source itself and apply changes manually if needed. This query can also be copied and used in an Input Control Query in JasperReports Server. So your IC will be populated from WebService, in a breeze. Query - Request ConfigurationThe Configuration of the Request is the core of the query, so it may seem a bit complex at a first look. Let's describe each component: Query Language: WebServiceQueryBase URL: this url will be concatenated to the base URI we defined in the Data Adapter. As per our sample the OpenWeatherMap expose many APIs, each of this api have a different url, but the root uri is the same (the site domain). So the Base URL would be the 2nd half of the URL excluding the parameters (see image below)Content Type & Content of Request: what is the Content type requested by the webservice API? possible values are:XML: This will Show a text area to inout the Content of the Request, here you can paste your xmlJSON: This will Show a text area to inout the Content of the Request, here you can paste your JSONGET Parameters: for GET Request parameters are passed in the URL. Often the parameters contain special characters (as example when a parameter is expressed in json...) that will have to be escaped. This is done automatically, you will just have to add the parameters using the Add Button, insert Parameter Name and Value (see image below).TIP: You can also Drag&Drop A parameter from the parameters area at the bottom!Headers: Some APIs require you to pass some parameters in the header (as example an authentication key). You can do this easily using the dedicated areaValid for Any content Described above : as other query Languages in Jaspersoft you can use parameters inside the query "Everywhere". Sometimes you will be able to do it in this UI using the $P syntax, otherwise you can always switch to the source Tab and do it there. Drag&Drop of Parameters from the bottom area should always give you a shortcut Query - Fields ConfigurationAfter configuring the request is time to Map the result to Fields! To do That switch to the Fields tab and click the button "Get Server Response" . This will execute the request you just configured and will show you a UI to select the fields from the Result. We reused the existent dataAdapters XML and JSON as a base so you will recognize here a similar interface for selecting the fields. Also here Drag&Drop will help you in speeding up the configuration The Actions Required Are: Get Server ResponseDouble click the Root node (for the loop)Drag&Drop the fields from the left area (json/xml) to the right Fields ListClick Read FieldsOpen Data Preview Tab to check if your fields are correctly extracted Now you can Design you report using fields/parameters/variables, as usual :) String Pattern for Date and Numeric fieldsIn version 1.0 we introduced support for a String pattern to parse Date and Numeric fields from the json response. Just define the following parameters in your report to specify your desidered pattern: REPORT_DATE_FIELDS_PATTERN : Parameter name of the parameter that will contains the pattern to format datesExample: use the string pattern "yyyy-MM-dd HH:mm:ss" if your json field is in the format: "2015-11-17 03:08:39"REPORT_NUMBER_FIELDS_PATTERN : Parameter name of the parameter that will contains the pattern to format numbers SubReport and Additional DatasetsAny datasource that is not JDBC or JNDI powered suffer the same issue: there is no connection to be passed to the sub report/ subdataset. That's why when you specify Use same connection as parent you will experience errors in runTime. No worries, here we'll explain you how to address this problem! While working with subReport you may have different requirements: you have a main dataset and an additional dataset, that use 2 different webservice callyou have a main resultset that you wish to loop, and for each row you want to execute a new query (webservice call)you have a main resultset that you wish to loop, and for each row you want reuse the same json as the parent but with a different json queryMultiple datasets, Multiple queriesIn this scenario we'll use Data Adapters to fix the connection we want to use for each dataset. You can create DataAdapters in Studio and then publish them to the server. In your report dataset (the main report properties if you are configuring a subreport, the dataset properties if you are configuring an additional dataset) you can specify the default data adapter. Select this from the Studio workspace or the jrs repository. You can also point directly to the resource using the full path like this: "repo:/public/Samples/wsDatasource/Resources/Datasources/DataAdapter/NY_ES_DataAdapter". In the subreport configuration (or the dataset) specify not to use any connection at all (leave blank both the connection expression and the datasource expression. The only thing we'll have to do is passing some mandatory parameters for internal webservice datasource to work properly : uriKeyauthTypeKeyauthParametersKeylanguageKeyverbKeyYou can also pass directly the whole parametersMap for your convenience. Multiple datasets, Exactly the same json (only one webservice call)This is a very common usecase. JSON has a flexible structure and support hierarchies of objects, and arrays, so some times a single json returned from a Webservice is all we need to fill our report AND subreports. In this usecase what we want is: Our master report execute the webservice call, get the json, configure the json path and fields mapping for the main report needthe master will call the subreport passing the json already extracted and specifying a different json path for the root node and the fields mapthe subreport will no longer need a query and will just expect the fields from the json passed by the master reportGood news: This feature is part of the Webservice Datasource! You can pass the datasource from master to subreport (or dataset) specifying a Datasource expression. In this expression we'll use the clone method on the datasource: ((com.jaspersoft.webservice.data.query.IWSDataSource)$P{REPORT_DATA_SOURCE}).clone(jsonRootNode,subFieldsMap) the clone method support 2 parameters, you can execute it passing: zero parameter .clone() : the subreport will get exactly the same resultset, same json, same json root path and fields... not very useful eh? 1 parameter .clone(jsonRootNode): you can specify a different rootPath for the json file, the fields map will stay the same 2 parameters .clone(jsonRootNode,subFieldsMap) : you can specify both a new root path for the json AND a new mapping for the json fields. This is probably the most common usecase. You find a sample and more details at this pageUsage in JasperReports® ServerUsing WebService Datasource with Adhoc Samples : Find Movie/TV Series Report
  12. This page contains step by step instructions to install the WebService Datasource in JasperReports® Server and Jaspersoft® Studio. For additional information on this project please refer to the Project Home Page. Download WebService DatasourceExtract the zip downloaded from the Project's Release Area. Update: using version 1.5 on JasperReports® Server v6.4, only the zip Jaspersoft Web Service Data Source v1.5 was needed in the following steps The unzipped folder will be referenced as [WS_DS_DIR] from now on. Install Jaspersoft Studio PluginLocalize your Jaspersoft Studio Installation directory. We'll reference it as [JSS_DIR] from now onOpen the folder [WS_DS_DIR]JSSCopy the jar files in this folderOpen the folder [JSS_DIR]pluginspaste the previously copied jars(The above didn't work with standalone Jaspersoft Studio 6.4.0 and 6.5.1 on windows 10. What did work was putting the jar files into [JSS_DIR]dropinseclipseplugins as per this stackoverflow self answered question ) Install in JasperReports ServerLocalize your JasperReports Server web application folder. We'll reference it as [JRS_DIR] from now onOpen the folder [WS_DS_DIR]JRSWEB-INFCopy all the folder's contentStop your web server running JasperReports ServerOpen the folder [JRS_DIR]WEB-INFBackup this folder before executing next step! (this is not mandatory, but recommended)paste the previously copied files. Please note that it is not supposed to override any existing file.(This step is required only for Community Edition):open the file [JRS_DIR]WEB-INFapplicationContext-WebServiceDataSource.xmlGo to line 49 of the xml file, inside the bean addQueryLanguage change the property beanName from queryLanguagesPro to queryLanguagesCeStart your web server running JRSImport Samples in JasperReports Server repositoryNote: I found that the Jaspersoft Studio instructions above did not work for me (version 6.4.3). As mentioned in this Stack Overflow article (https://stackoverflow.com/questions/42116973/enable-jasper-studio-webservice-plugin), one way to get this to work is to add the three .jar files from /jrs into the jaspersoftstudio/dropins folder instead. In my case, I had also installed the ElasticJasper plugin (/blog/elasticsearch-and-jasper-reports-finally-together) and I had to uninstall that plugin completely before I was able to get the Web Service adapter to show. So, the alternate instructions are: Localize your Jaspersoft Studio Installation directory. We'll reference it as [JSS_DIR] from now onOpen the folder [WS_DS_DIR]JSSCopy the jar files in this folderOpen the folder [JSS_DIR]dropinspaste the previously copied jarsrestart Jaspersoft Studio
  13. Hi Erik, what font are you using? It may be a font that you have only in your local Studio but it is not available in the browser. If this is the case you can solve it using Font Extensions http://community.jaspersoft.com/wiki/custom-font-font-extension
  14. This is now possible using Web Service Datasource http://community.jaspersoft.com/project/web-service-data-source This Community project implement a Custom Datasource, built using the latest Custom Datasource framework (leveraging Data Adapters internally). It is also working inside JasperReports Server: You can use it to fill Query based Input Controls, as well as Ad Hoc Reporting (for Commercial version) using it through Topic. Thanks
  15. This is now possible using Web Service Datasource http://community.jaspersoft.com/project/web-service-data-source This Community project implement a Custom Datasource, built using the latest Custom Datasource framework (leveraging Data Adapters internally). It is also working inside JasperReports Server: You can use it to fill Query based Input Controls, as well as Ad Hoc Reporting (for Commercial version) using it through Topic. Thanks
×
×
  • Create New...