Problem With Custom Lookup in AX Using SysTableLookup
One of the requirements for a customer feature I was developing asked for a custom lookup in AX that allowed the user to pick a released product. However, the list of products was to be further reduced by a custom field value. The lookup should have been simple, create a custom lookup using the fields from the InventTable's AutoReport field group and add a range to the query that limited the results by a custom field.
At first I tried the SysFieldGroupLookup class. This class creates a lookup that contains all of the fields of a specified field group. This worked great, except it didn’t honor my range restriction. Since I didn't really need to use SysFieldGroupLookup I decided to switch to SysTableLookup and manually add the necessary fields. The result looked something like this:
tTabIe, Itemld), true); defaultProductName)); add Lookup+i eld (field Num (InventTabIe, NameAIias)); addLookupMethod (tableMethodStr(InventTabIe, itemGroupId)); addLookup+ieId (fieldNum(InventTabIe, ItemType));
This worked great, except the defaultProductName display method wasn't returning a value. The itemGroupId method worked so I knew I could at least execute a display method. It must be something about this specific method so I changed to the defautProductDescription method from the same table. Same result, no data.
After a bit of debugging I realized that the defaultProductName display method calls a static method on the EcoResProduct table. The problem was that it passed the Product field as a parameter and it didn't have a value. A quick check of the InventTable table revealed that there was in fact a value, it just wasn't visible here. I decided to add the Product field to my lookup to see what value it contained within the context of my lookup. To my surprise as soon as I displayed the lookup defaultProductName was now returning a value.
It appears that the SysTableLookup class is returning only used fields for performance reasons and therefore didn't retrieve the Product field. Once I added this field everything worked fine. I did try adding the field and related tables to the query, but that didn't seem to affect the fields retrieved for display purposes (which, I suppose it shouldn't). I haven't yet debugged the SysFieldGroupLookup class to figure out why it doesn't honor my range.