X++ code to write data to XML File

static void CreateXml(Args _args)
XmlDocument xmlDoc; //to create blank XMLDocument
XmlElement xmlRoot; // XML root node
XmlElement xmlField;
XmlElement xmlRecord;
XMLWriter xmlWriter;
InventTable inventTable;
DictTable dTable = new DictTable(tablenum(InventTable));
DictField dField;
int i, fieldId;
str value;

xmlDoc = XmlDocument::newBlank();
xmlRoot = xmlDoc.createElement(#ItemRootNode);

// Loop through all the records in the inventTable
while select inventTable
where inventTable.ItemGroupId == "Parts"
// Create a XmlElement (record) to hold the
// contents of the current record.
xmlRecord = xmlDoc.createElement(#ItemRecords);
// Loop through all the fields in the record
for (i=1; i<=dTable.fieldCnt(); i++)
fieldId = dTable.fieldCnt2Id(i);
// Find the DictField object that matches
// the fieldId
dField = dTable.fieldObject(fieldId);

// Skip system fields
if (dField.isSystem())
// Create a new XmlElement (field) and
// have the name equal to the name of the
// dictField
xmlField = xmlDoc.createElement(dField.name());
// Convert values to string. I have just added
// a couple of conversion as an example.
// Use tableName.(fieldId) instead of fieldname
// to get the content of the field.
switch (dField.baseType())
case Types::Int64 :
value = int642str(inventTable.(fieldId));
case Types::Integer :
value = int2str(inventTable.(fieldId));
default :
value = inventTable.(fieldId);
// Set the innerText of the XmlElement (field)
// to the value from the table
// Append the field as a child node to the record
// Add the record as a child node to the root
// Add the root to the XmlDocument
// Create a new object of the XmlWriter class
// in order to be able to write the xml to a file
xmlWriter = XMLWriter::newFile(@"c:\Items.xml");
// Write the content of the XmlDocument to the
// file as specified by the XmlWriter

//Open the file in Internet Explorer


  1. Hi,

    As I am quit a big fan of your post, it always help me alot as I am quit new in AX development. Regards to the above post when I try to run this I am getting an error on #InventTags and #ItemRootNode. By the looks of the thing these are macros which are not exist in my AOT and that is why its populate an error.

    I am testing this on Microsoft AX VPC. Can you please tell me how I can get over this, do i need to write down these macros or there is something I am missing. Please advise.


  2. Hi,
    I am using your post but i am also getting same error please help me

  3. You need to define the macro yourself - something like this:

    ..the same applies for all other nodes


Note: Only a member of this blog may post a comment.