Consuming files stored in the Azure Blob Storage within Dynamics 365 Finance and Operations using X++ code
Let’s consider a scenario where a third-party business application uses Azure Blob as a central repository for storing the files, which in turn needs to be consumed by Dynamics 365 Finance and Operations.
Following standard .NET libraries helps to consume those files:
- using Microsoft.WindowsAzure.Storage;
- using Microsoft.WindowsAzure.Storage.Blob;
- using System.IO;

Part-2: Consuming files stored in the Azure Blob Storage within Dynamics 365 Finance and Operations using X++ code
Using the container connection created in Part 1: Azure BLOB storage with Dynamics 365 for operations – Saina Cloud Software Solutions, we can perform some basic operations with the blob folder. As part of this blog, we cover the following areas:
- Get file name list
- Get file memory stream
- Read the content of the file line by line
- Read the field value from the line
) Get File Name List
This section describes how to retrieve a list of file names present in the blob folder using standard classes:
- CloudBlobDirectory – Used to communicate with the blob folder
- IEnumerable – Used here to store a list of file names retrieved
- IListBlobItem – Represents the list of blob items accessed
- CloudBlockBlob – Represents a blob that is uploaded as a set of blocks
Using the connection established in the previous section, the following code will fetch the list of file names from the cloud blob directory:
CloudBlobDirectory cloudBlobDirectory;// The directory of the blob container
container con;
cloudBlobDirectory = cloudBlobContainer.GetDirectoryReference(“SainaCloudConsulting\Test1”);//File path where the files are stored
System.Collections.IEnumerable lstEnumarable = cloudBlobDirectory.ListBlobs(false, 0, null, null);
System.Collections.IEnumerator lstEnumarator = lstEnumarable.GetEnumerator();
List filenames = new List(Types::String);
while(lstEnumarator.MoveNext())
{
IListBlobItem item = lstEnumarator.Current;
if(item is CloudBlockBlob)
{
CloudBlockBlob blob = item;
blob.FetchAttributes(null, null, null);
con = str2con(blob.name, "/");
filenames.addStart(conPeek(con,conlen(con)));
}
}
2) Get file memory stream
After retrieving the file names list, iterate over the file list to get each file name, and get the file memory stream content.
- CloudBlobDirectory cloudBlobDirectory = _blobContainer.GetDirectoryReference(“SainaCloudConsulting\Test1”);
- CloudBlockBlob blob = cloudBlobDirectory.GetBlockBlobReference(“TestFile.txt”);
- System.IO.Stream memory = blob.OpenRead(null,null,null);
3) Read the content of the file line by line
Using the .NET standard IO class libraries, the contents of the file can be read.
- System.IO.StreamReader streamReader = new System.IO.StreamReader(memory);
- Str strRecord = streamReader.ReadLine(); //read each line in the file
4) Read the field value from the line
Assuming the data is separated using a comma field delimiter, we store each field’s data into a container variable as shown below:
- while(!System.String::IsNullOrEmpty(strRecord))
- {
- try
- {
- Container conRecord = str2con_RU(strRecord, ‘,’);// Here the file delimiter is ‘,’.
- conPeek(conRecord, 1);// read first field data in the file line
- conPeek(conRecord, 2);// read second field data
- }
- }
This blog has covered the list of operations used to read the files from the blob container and perform necessary business action in Dynamics 365 Finance and Operations.



