lørdag den 15. juni 2013

Showing hidden fields in the table browser

A request for the possibility of showing the contents of hidden fields in Ax tables, using the table browser, made me do a google search, to avoid reinventing the wheel.

Sure enough Vilmos Kintera had adressed the problem earlier on http://daxrunbase.blogspot.dk/2010/04/non-visible-fields-in-table-browser.html. And he has done good work. :) Keep it up Vilmos.

Running the customized table browser seemed to work fine in AX 2009, however I ran into issues using it in AX 2012. I tested the customized table browser on the table CustTrans, which was the table I first found to contain hidden fields and I got a run-time error.

Investigating the problem I found that the reason in seemed to run fine on AX 2009 (using CustTrans table) but failed in AX 2012 on the same table, was due to a small issue that Vilmos hadn't adressed, namely Extended Data Types defined as Arrays.

The .ds datasource on the SysTableBrowser form had it's active method customized to populate the new lower grid, with rows showing the contents and "identity" of each hidden field. The method contains a switch case construction takling care of all intrisic types, and the default (no type found) simply attempts to convert the field value of the field in question to a string. However the issue was that fields based on Extended Data Types defined as arrays were not handled causing a run-time error.

I hacked this to make a further branch in the default case, checking if the arrayindex of the field in question is greater than 1, indicating that the field is based on an EDT defined as an array. If the field in question is an array, the hack iterates each array element and creates a row in the lower grid for each found array element.

The reason why everything seemed to work fine i AX 2009 was that DIMENSION fields were EDT's defined as arrays but in AX 2012 everything changed regarding financials dimensions, as you might know. In 2009 and previous versions Dimension fields were never hidden, as they were of course used. But in 2012 the old Dimension-fields are prefixed with DEL_ and put in the Obsolete... configuration key to be deleted in next upgrade.

The problem I encountered in CustTrans were due to the abovementioned. The customized table browser ran fine in AX 2009 because the Dimension field was in use and not hidden. However in AX 2012 this was not so, so the code could not handle the hidden Del_Dimension field (or indeed any array based field).

However the code WOULD have failed in 2009 also if anyone had browsed a table with a hidden array field. I tested this by setting the visible property of the Dimension field in an AX2009 to false, and browsing with Vilmos' customization and the result was a run-time error.

So here is my own modified version of Vilmos' tablebrowser.

AX 2012 - .xpo-file

AX 2009 - .xpo-file

Disclaimer: Use this code at own risk !!! This blogger can in no way be made responsible for data loss or damages that follows using this code.