I had to debug a custom Mendix widget that was failing. All that was shown on screen in red was “Could not create widget BHCCDropZone.widget.BHCCDropZone”.
We’d recently upgraded to Mendix 7.18.1, so something looked like it happened during the upgrade.
The first step was to make sure the appropriate access rights to the entity the widget uses were right. In this case they were.
Next was to up the log levels from INFO to DEBUG in the Mendix Modeller to see if that gave me any clues. I could see the widget’s constructor
and postCreate
being run as I had logger.debug
calls in those functions being run. However, one of my debug calls was not being reached, so I had narrowed down the location of problem.
After this I added JavaScript breakpoints in the failing method using Chrome’s developer tools. The widget is only loaded the first time the page is reached. When I reached this page I singled stepped through, and found an exception being thrown by the JavaScript but being caught by Mendix. My error was…
"TypeError: Converting circular structure to JSON at JSON.stringify () at http://localhost:8080/mxclientsystem/mxui/mxui.js?636758982080189581:74:164930 at Array.map ( ) at t.log (http://localhost:8080/mxclientsystem/mxui/mxui.js?636758982080189581:74:164840) at http://localhost:8080/mxclientsystem/mxui/mxui.js?636758982080189581:74:196250 at http://localhost:8080/mxclientsystem/mxui/mxui.js?636758982080189581:74:166406 at Array.forEach ( ) at t.log (http://localhost:8080/mxclientsystem/mxui/mxui.js?636758982080189581:74:166377) at t.debug (http://localhost:8080/mxclientsystem/mxui/mxui.js?636758982080189581:74:165718) at Object.postCreate (http://localhost:8080/widgets/BHCCDropZone/widget/BHCCDropZone.js?636758982080189581:80:11)"
I could now see I had a circular data structure.
Working backwards through the stack trace, I could see the problem was in my widget’s postCreate
function, and it was a debug
function causing the problem. This was the faulty code causing the widget to fail.
My postCreate
function looked like this…
postCreate: function () { console.log("BHCCDropZone session", mx.session); logger.debug(this.id + ".postCreate"); this.initBHCCDropZone(); logger.debug("this", this); },
The faulty line was this…
logger.debug("this", this);
Trying to send the contents of this
to the debug logs was causing problems as it was a circular data structure. Removing this line of JavaScript fixed the problem, and the widget started to work again as expected.
I hope this helps others in future when debugging “Could not create widget” errors in Mendix.