How to Quickly Build Custom XML
Data Source Automation framework that is part of Docentric AX Framework can be used for quick building of custom XML documents or fragments, outside the scope of Reporting and Output Management.
You can collect, calculate and shape data as needed by simple traversing trough them, using plain X++ constructs and one special class – the RecordBuilder class. This class has several utility methods such as exportToXmlStr() and exportToXmlFile() that enable serialization to XML.
Thus, for example we can use the RecordBuilder class to serialize one or more table records with their child records to XML, or even to build the corresponding XML schema.
Let’s look at how to serialize a particular SalesTable record to XML.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
static void SerializeSalesTableToXml(Args _args) { DocXmlRecordBuilder recordBuilder; SalesTable salesTable; SalesLine salesLine; SalesId selectedSalesId; Filename serializedSalesTableToXml; XmlDocument xsdXmlDocument; XmlElement xsdRootXmlElement; salesTable = _args.record(); selectedSalesId = salesTable.SalesId; // Construct RecordBuilder with the root record. recordBuilder = DocXmlRecordBuilder::construct( DocXmlRecord::constructCalculatedRecord('SalesTableToXml')); // Use RecordBuilder to build XML from the selected SalesTable record // and corresponding SalesLine child records. select firstOnly salesTable where salesTable.SalesId == selectedSalesId; recordBuilder.addRecordWithAllFields(salesTable); while select salesLine where salesLine.SalesId == selectedSalesId { recordBuilder.addRecordWithAllFields(salesLine); } // Serialize SalesTable record to XML document and save ti to a string. info(recordBuilder.exportToXmlStr()); // Serialize SalesTable record to XML document and save it to a file. serializedSalesTableToXml = strFmt(@'C:\Temp\SalesTable_%1.xml', selectedSalesId); recordBuilder.exportToXmlFile(serializedSalesTableToXml); // Create the corresponding XSD schema. xsdXmlDocument = XmlDocument::newBlank(); xsdRootXmlElement = recordBuilder.makeXmlSchema(xsdXmlDocument); xsdXmlDocument.appendChild(xsdRootXmlElement); info(xsdXmlDocument.toString()); } |