Page 1 of 1

Load databases onCreateReport event programmatically

Posted: Sat Jun 24, 2017 7:50 am
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);
				});
}

Re: Load databases onCreateReport event programmatically

Posted: Wed Jun 28, 2017 6:32 am
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.

Re: Load databases onCreateReport event programmatically

Posted: Wed Jun 28, 2017 6:05 pm
by Binara Goonawaradana
It worked perfectly. Thank you in advance.

Re: Load databases onCreateReport event programmatically

Posted: Wed Jun 28, 2017 7:16 pm
by Alex K.
Hello

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

Thank you.