I wrote a job today to create a list of fields in a table and each field’s data type. You specify a table name in the variables, and it he job exports a list of non-system fields in the format: “Displayed name” (label), “Technical Name” and “Data Type” to CSV file.
Notice (line 50 – 70) that it lists the possible enum values for enum fields. It also adds the string length in brackets for string fields.
//Tina van der Vyver
//makecreatereiterate.com
static void ListFields(Args _args)
{
#File
DictField dictField;
DictTable dictTable;
DictType dictType;
DictEnum dictEnum;
FieldId fieldId;
Types type;
TableName tableName = tableStr(BatchJob);
str enumValues, stringLength, stringType;
int i;
CommaTextIo commaTextIo;
FileIOPermission permission;
str fileName = strFmt(@"C:\%1.csv", tableName);
;
permission = new FileIOPermission(fileName, #io_write);
permission.assert();
commaTextIo = new CommaTextIo(fileName ,#io_write);
dictTable = new dictTable(tableName2Id(tableName));
fieldId = dictTable.fieldNext(0);
if (fieldId)
{
commaTextIo.write("Displayed name", "Technical Name", "Data Type");
}
while (fieldId)
{
dictField = new DictField(tableName2Id(tableName), fieldId);
if (dictField && !dictField.isSystem())
{
type = dictField.baseType();
switch (type)
{
case Types::String:
dictType = new DictType(dictField.typeId());
stringLength = (strFmt("%1[%2]",type, dictType.displayLength()));
commaTextIo.write(dictField.label(), dictField.name(), stringLength);
break;
case Types::Enum:
dictEnum = new DictEnum(dictField.enumId());
for (i = 0; i < dictEnum.values(); i++)
{
if (i == 0)
{
enumValues = "Enumeration: ";
}
else
{
enumValues += "/";
}
if (dictEnum.value2Name(i))
{
enumValues += dictEnum.value2Name(i);
}
else
{
enumValues += dictEnum.value2Name(i);
}
}
commaTextIo.write(dictField.label(), dictField.name(), enumValues);
enumValues = '';
break;
default:
stringType = strFmt("%1", type);
commaTextIo.write(dictField.label(), dictField.name(), stringType);
break;
}
}
fieldId = dictTable.fieldNext(fieldId);
}
CodeAccessPermission::revertAssert();
}
The example above exports the fields for the “BatchJob” table. In AX 2012 R3, it generates this CSV file:

Like
Report
*This post is locked for comments