D365FO – Create an xml file and download into the browser with File::SendFileToUser

 

To create an xml file you can use XmlNode class and if you want to save it into a folder you can use save method, but if you want to send to the user using the browser download functionality you have to use File::SendFileToUser method.

This method accepts only a MemoryStream so you must convert the xml to this data type before to use it.

This code shows how to do it

class XMLWriteEmplAddr
{
    public static void main(Args _args)
    {
        XMLDocument xmlDoc = XMLDocument::newBlank();
        XMLNode rootNode;
        XMLNode NodeEmpl, NodeName, NodeAddr;
        XMLElement xmlElement;
        XMLText xmlText;
        HCMWorker HCMWorker;

        xmlDoc = XMLDocument::newBlank();

        // Create first line containing version info
        rootNode = xmlDoc.documentElement();
        xmlElement = xmlDoc.createElement('EmployeeList');
        rootNode = xmlDoc.appendChild(xmlElement);

        while select HCMWorker
        {
            // Create a node for the Employee record
            xmlElement = xmlDoc.createElement('Employee');
            NodeEmpl = rootNode.appendChild(xmlElement);
 
            // Create a node for the name
            xmlElement = xmlDoc.createElement('EmplName');
            NodeName = NodeEmpl.appendChild(xmlElement);
            xmlText =xmlDoc.createTextNode(HCMWorker.Name());
            NodeName.appendChild(xmlText);
 
            // Create a node for the address
            xmlElement = xmlDoc.createElement('EmplEmail');
            NodeAddr = NodeEmpl.appendChild(xmlElement);
            xmlText = xmlDoc.createTextNode(HCMWorker.email());
            NodeAddr.appendChild(xmlText);
        }

        // Save the file
        XMLWriteEmplAddr::writeXmlFile(xmlDoc);

    }


    public static void writeXmlFile(XmlDocument _xmlDoc)
    {
        using (var stream = new System.IO.MemoryStream())
        {
            XMLWriter writer = XMLWriter::newStream(stream); //Convert the Xml to a memory stream and pass it to use File::SendFileToUser method
            _xmlDoc.writeTo(writer);
            writer.flush();

            File::SendFileToUser(stream, 'XmlFile.xml');
        }
    }

}

Xml file will be dowloaded into the browser

Comments