As you can see from the following code, we have to get the primitive or container type for a given EDT. It comes from method AOTtpeStr() as an abbreviation. Then you should call an appropriate method to create a new field.
private void createFieldInTableInAOT()
{
TreeNode treeNode = treenode::findNode(#ExtendedDataTypesPath);
TreeNode treeNodeEDT2extend = treeNode.AOTfindChild(edtType);
AOTTableFieldList fieldNode;
str typeStrCode = treeNodeEDT2extend.AOTtypeStr();
if(!treeNodeEDT2extend)
{
warning(funcName() + ".\n Extended data type "+ edtType + " not exists in AOT!");
return ;
}
switch (typeStrCode)
{
// string
case 'UTS':
treeNodeFields.addString(edtName);
break;
// real
case 'UTR':
treeNodeFields.addReal(edtName);
break;
// integer
case 'UTI':
treeNodeFields.addInteger(edtName);
break;
// int64
case 'UTW':
treeNodeFields.addInt64(edtName);
break;
// date
case 'UTD':
treeNodeFields.addDate(edtName);
break;
// time
case 'UTT':
treeNodeFields.addTime(edtName);
break;
// datetime
case 'UTZ':
treeNodeFields.addDateTime(edtName);
break;
// enum
case 'UTE':
treeNodeFields.addEnum(edtName);
break;
// container
case 'UTQ':
treeNodeFields.addContainer(edtName);
break;
// GUID
case 'UTG':
treeNodeFields.addGuid(edtName);
break;
default:
throw error(funcName());
}
fieldNode = treeNodeFields.AOTfindChild(edtName);
fieldNode.AOTsetProperty(#PropertyExtendeddatatype, edtType);
fieldNode.AOTsave();
currentFieldGroupTreeNode.AOTadd(edtName);
info(strfmt("Field '%1' of type '%2' created", edtName, edtType));
}