With the new scheduling extension and improvements in scripts extension you can easily define periodically running job which will generate a report and send it through email.
The first thing you need to do is create a report template which will be attached to the email. The output from report template can be filled as email body if its output is html or it can be attached to the email if its other format like pdf.
There is no big meaning in emailing reports with static data so you will probably need to fetch some. The most common way to get data in this situation is to use jsreport custom script. The custom script can fetch data from your or any other API using request module. The logic requesting data should be invoked in custom script global function called beforeRender
and can look as following example:
function beforeRender(done) {
require('request')({ url: 'http://domain/api/foo', json:true })(err, body, response) {
request.template.data = body;
done();
}
}
You should create your custom script in jsreport studio and implement similar beforeRender
function.
The second thing custom script can do is send email with output report. To do it you need to create afterRender
global function which will be invoked when the output report is ready to be responded. To actually send email you can use for example SendGrid module:
function afterRender(done) {
var SendGrid = require('sendgrid');
var sendgrid = new SendGrid('username', 'password');
sendgrid.send({ to: '', from: '', subject: '',
html: 'This is your report',
files: [ {filename: 'Report.pdf', content: new Buffer(response.content) }]
}, function(success, message) {
done(success);
});
}
It's time to go back to the report template and associate created script. Now every time you hit Run
button it should preview the report and send the email as well. You should stick here until you are satisfied with the report and email content as well.
The last missing piece is to create a periodically running job rendering previously created report template and sending it through email. This can be easily achieved using scheduling extension. With this extension enabled you should see Create Schedule
action in the jsreport studio. The Schedule
specifies periodical job rendering a report template and requires following attributes to be filled.
*/10 * * * * *
expression specifies 10 seconds interval. Now with the enabled Schedule
you should be receiving emails with the specified period.
jsreport doesn't need to be only passive pdf generator. You can use it as a full reporting server actively downloading data from your API, rendering reports and uploading them to a web service or sending through email. Your system doesn't even need to know jsreport server somewhere exists and whole reporting architecture can be nicely loosely coupled.