Através das classes Dict o AX permite que você invoque métodos em runtime. Isto é bastante útil se você quer chamar um método diferente baseado nos dados que recebeu ou qualquer outra condição onde você não sabe o que irá receber.

Exemplo:

1
2
3
4
5
6
7
8
9
10
static void invokeFindOnCustTable(Args _args)
{
  DictTable dictTable = new DictTable(tableNum('CustTable'));
  CustTable customer;
  ;
  if (tableHasStaticMethod(dictTable, identifierstr('find')))
    customer = dictTable.callStatic(tableStaticMethodStr(CustTable, Find), '4000');
 
  info (customer.Name); // Displays Light and Design in AX 4 Demo Data
}

Outro exemplo, só que agora usando uma classe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
static void invokeFindOnAClass(Args _args)
{
  SalesTable salesTable;
  SysDictClass dictClass;
  SalestableType salesTableType;
  ;
  dictClass = new SysDictClass(classNum('SalesTableType'));
  salesTable = SalesTable::find('00021_036');
 
  salesTableType = SalestableType::construct(salesTable);
 
  if (dictClass.HasObjectMethod(identifierstr('delete')))
    dictClass.callObject('delete', salesTableType);
}

[]s
Pichler

Fonte.