Currently we have error handling in case the web service that feeds the pivot is replying with a blank payload (csv in our case).
We did that because a blank payload doesn't mean an error for us. It just means that the database filter we applied didn't return records.
We now have a need to not display an error message at all in case the payload is blank.
How do we do that? We tried suppressing the alert from the code below, and returning true from the onDataError handler, but at that point the default error message from FlexMonster still took over (and that is a monster of a messagebox, with stuff that our users would never understand).
Please help us, this might seem like a little issue but it's becoming a big one for our scenario where we show more than one pivot on the page, and pivot 3 out of 3 is failing, all the way at the bottom of the page. If we don't click on the confirmation alert, even if we bring valid data in the next call, the pivot with data is still behind the prior alert.
onDataError = function (e, idx: number = -1) {
console.log('Data error.');
this.progressSpinnerShown = false;
// Changed below for Test Rule.
//if (e.error === "") {
if (e != undefined && e.error != undefined) {
this.pivot1.flexmonster.alert({
title: "Data Error",
message: (e.error === '' ? "Filter returned no data." : e.error),
type: "error",
buttons: [{
label: "OK",
handler: function() { console.log('Data Error Acknowledged by User'); }
}],
blocking: false
});
}
return true;
//this.updateReportUsage('Error', e.error);
};
Hello, Serban,
Thank you for reaching out to us.
Thank you for reporting about the problem. We have managed to reproduce it on our side.
The fix is going to be provided with a minor update ETA Mar 23. Loading an empty CSV file will entail the display of an empty grid without any alerts. Please let us know if such behavior will be appropriate for you.
As a workaround for now, we recommend using an approach demonstrated in the following code snippet:
pivot.on('dataerror', function () { pivot.on('reportcomplete', function (e) { document.querySelector("#fm-alert-view > div.fm-ui-element.fm-ui.fm-content > div > a").click(); }); });
The dataerror
event is triggered when some error occurred during the loading of data. It covers the case with an empty CSV file as well. As soon as the report is loaded (reportcomplete
event), the "Ok" button on the alert will be programmatically pressed, and the alert will be closed.
We hope it works for you.
Do not hesitate to contact us in case additional questions occur.
Best regards,
Illia
As always, you guys rock!
It's refreshing to see you answer our needs so quickly.
A couple of comments on the observations above:
The console error message is this, for Flexmonster Version 2.8.1 (build 02/24/2020 13:29:30) :
flexmonster.full.js:9 TypeError: Cannot read property 'TC' of null
at r0m.Ll (flexmonster.full.js:9)
at r0m.FC (flexmonster.full.js:9)
at o4w.<anonymous> (flexmonster.full.js:9)
at o4w.L3p.dispatch (flexmonster.full.js:9)
at o4w.mD (flexmonster.full.js:9)
at o4w.$p (flexmonster.full.js:9)
at XMLHttpRequest.xhr.onreadystatechange (flexmonster.full.js:9)
at XMLHttpRequest.wrapFn (zone.js:1281)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
at Object.onInvokeTask (core.js:26247)
The click workaround worked but I had to move the code into the dataError handler, because reportComplete doesn't fire when the blank payload is received.
It's good for now as a workaround, with the exception of a quick flash for the window.
Also, as a comment, for others that read here...it seems idiotic to open the alert box only to click OK after that. First, one can do that selectively, based on different application contexts. Second, if we didn't open the alertbox, the normal FlexMonster error message would still be there. That one flashes on the screen, too, by the way.
Hello, Serban.
Thank you for your feedback.
We are happy to hear that you have managed to find a temporary workaround.
As for the error in the console, we have noticed it as well. Both an alert issue and the mentioned exception are going to be fixed.
Talking about the flag allowing to show the error alert in case the received data set appeared empty, we would like to kindly draw your attention to the showEmptyData
property of the options
object. Setting its value to true
allows achieving such behavior for CSV files with only the header specified. It is going to do the same with empty CSV files with a specified minor release.
More about options
object and its properties can be found by the link.
flexmonster.on('reportcomplete', () => {
if (flexmonster.getAllHierarchies().length == 0)
flexmonster.alert({
title: 'The data set is empty',
type: 'error'
...
})
});
Also, we will consider adding the possibility to enable such an alert for JSON data sets. As for now, our team recommends using the following workaround:
You are welcome to check out an example demonstrating an approach described in the code snippet above.
It uses the getAllHierarchies
API call in order to trigger the alert. In case the data set is empty, the getAllHierarchies
returns an empty array. More information about the method itself in our documentation.
We hope it works for you.
Please contact us in case of additional questions.
Best regards,
Illia
Hi Serban,
We are happy to let you know that loading empty CSV/JSON data was made consistent.
This is available in the 2.8.3 version of Flexmonster: https://www.flexmonster.com/release-notes/
Now an empty grid will be displayed if an empty JSON object (“” or “[]”) is passed to Flexmonster.
You are welcome to update the component: https://www.flexmonster.com/doc/updating-to-the-latest-version/
Please feel free to reach out to us if you have any questions we can help you with.
Best regards,
Mykhailo