Load databases onCreateReport event programmatically

Stimulsoft Reports.JAVA discussion
Post Reply
Binara Goonawaradana
Posts: 3
Joined: Sat Jun 24, 2017 7:23 am

Load databases onCreateReport event programmatically

Post by Binara Goonawaradana »

Hi,

I am trying to attach to two databases when onCreateReport event triggered. Inside that event i'm making rest call to get data and register with report. but those databases wont appear on designer->dictionary section.Is it possible make async operation inside onCreateReport event???

this is my sample code.

Code: Select all

		var dataSources = [{
				name: 'photos', 
				url: "https://jsonplaceholder.typicode.com/photos"
			},{
				name: 'comments', 
				url: "https://jsonplaceholder.typicode.com/comments"
			}
		]

		var HttpClient = function() {
		    this.get = function(aUrl, aCallback) {
		        var anHttpRequest = new XMLHttpRequest();
		        anHttpRequest.onreadystatechange = function() { 
		            if (anHttpRequest.readyState == 4 && anHttpRequest.status == 200)
		                aCallback(anHttpRequest.responseText);
		        }

		        anHttpRequest.open( "GET", aUrl, true );            
		        anHttpRequest.send( null );
		    }
		}

			designer.onCreateReport = function (event) {
				event.report.dictionary.databases.clear()

				dataSources.forEach(function (dataSrc) {
					(function (r, d) {
						var request = new HttpClient();
						request.get(d.url, function (data) {
							var dataSet = new Stimulsoft.System.Data.DataSet(d.name);
							 dataSet.readJson(data);
							 r.regData(d.name, d.name, dataSet);
							 r.dictionary.connect(false);
							 r.dictionary.synchronize();
						});
					})(event.report, dataSrc);
				});
}
Alex K.
Posts: 6488
Joined: Thu Jul 29, 2010 2:37 am

Re: Load databases onCreateReport event programmatically

Post by Alex K. »

Hello,

Please try to check the following code:

Code: Select all

designer.onCreateReport = function (event, callback) {
                event.async = true;
                event.report.dictionary.databases.clear()

                var count = dataSources.length;
                dataSources.forEach(function (dataSrc) {
                    (function (r, d) {
                        var request = new HttpClient();
                        request.get(d.url, function (data) {
                            count--;
                            var dataSet = new Stimulsoft.System.Data.DataSet(d.name);
                            dataSet.readJson(data);
                            r.regData(d.name, d.name, dataSet);
                            r.dictionary.connect(false);
                            r.dictionary.synchronize();
                            if (count == 0) callback(event);
                        });
                    })(event.report, dataSrc);
                });
            }
Thank you.
Binara Goonawaradana
Posts: 3
Joined: Sat Jun 24, 2017 7:23 am

Re: Load databases onCreateReport event programmatically

Post by Binara Goonawaradana »

It worked perfectly. Thank you in advance.
Alex K.
Posts: 6488
Joined: Thu Jul 29, 2010 2:37 am

Re: Load databases onCreateReport event programmatically

Post by Alex K. »

Hello

We are always glad to help you!
Please let us know if you need any additional help.

Thank you.
Post Reply