Purpose:
Demonstrate how can download multiple files in X++.
Application:
Dynamics 365 for Finance and Operations
Business requirement:
Business requirement is to let users download multiple files using a single browser session.
Solution:
We can use the code below to download multiple files using a single browser session.
Code
class ATLAS_Vend_File_Export
{
private void exportFile(TextStreamIo _file, Filename _fileName)
{
System.IO.StreamReader reader;
System.IO.Stream stream;
str fileContent;
stream = _file.getStream();
stream.Position = 0;
reader = new System.IO.StreamReader(stream);
fileContent = reader.ReadToEnd();
File::SendStringAsFileToUserNewTab(fileContent, _fileName);
}
}
[ExtensionOf(classStr(File))]
final class ATLAS_File_Extension
{
public static void SendStringAsFileToUserNewTab(str content, str fileName, System.Text.Encoding encoding = System.Text.Encoding::get_UTF8(), ClassName fileUploadStrategyClassName = classstr(FileUploadTemporaryStorageStrategy))
{
System.Byte[] byteArray = encoding.GetBytes(content);
System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);
File::SendFileToUserNewTab(stream, fileName, fileUploadStrategyClassName);
}
public static void SendFileToUserNewTab(System.IO.Stream stream, str fileName, ClassName fileUploadStrategyClassName = classstr(FileUploadTemporaryStorageStrategy))
{
Browser br = new Browser();
str downloadUrl;
downloadUrl = File::SendFileToTempStore(stream, fileName, fileUploadStrategyClassName, true);
if (downloadUrl != "")
{
br.navigate(downloadUrl, true, false);
}
else
{
warning("@ApplicationPlatform:DownloadFailed");
}
}
}