It is now possible to use DIMX to allocate the ANSWER array (when required for trees that are editable, or allow multi-select, or allow drag/drop). Previously, you had to specify the MAP1 unformatted variable, i.e.:
MAP1 ANSWERX ! ANSWERX passed to XTREE
MAP2 ANSARY(100)
MAP2 CB1,S,1 ! checkbox
MAP2 EDIT1,S,10 ! editable cell
The problem with the above construct is that it is impossible to dynamically allocate. Now, you can do the following:
MAXCNT = 100 ! must match array size (i.e. # rows)
DIMX ANSARY(MAXCNT),S,11 ! element size = sum of editable fields
DIMX ARRAY(MAXCNT),S,200 ! array of rows (same MAXCNT as ANSARY)
...
xcall XTREE, srow, scol, ansary(1), array(1), maxcnt, coldef,...
Note that in the above case, XTREE has to "trust" you that the actual mapped size of the ANSARY() and ARRAY() arrays is equal to or greater than MAXCNT. Also note that you will have to parse the ANSARY() elements out into the individual fields that would normally make up ANSARY (i.e. as mapped in the first example above).
For ATE, note that this change requires updating the server side as well, because the XCALL argument checking is done by the server side before passing it to ATE.