Я сделал всё проще. Это конечно не Ax 3.0, а AX 2009 (kernel 5.0.1000.52).
Вот пример функции:
X++:
public void changeRelation(str _tableName, str _relatedName, boolean _withThrow = true)
{
TreeNode relation;
str properties;
;
relation = EDTNode.AOTfindChild(#PropertyRelations);
if (!relation)
{
if (_withThrow)
throw error("@SYS8500" + funcName());
else
return;
}
relation = relation.AOTaddSubNode(#NT_DBTYPENORMALREFERENCE);
properties = relation.AOTgetProperties();
properties = setProperty(properties, #PropertyTable, _tableName);
properties = setProperty(properties, #PropertyRelatedfield, _relatedName);
relation.AOTsetProperties(properties);
EDTNode.AOTsave();
}