August 10, 2023

D365FO: Read CSV file from Azure File Share

 using Microsoft.Azure;

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.File;
 
class MAKCloudStorageFileManager
{
    #File
    #define.delimiterField(',')
 
    public static void main(Args _args)
    {
        #OCCRetryCount
 
        System.IO.MemoryStream memoryStream;
        System.String          storageAccountName;
        System.String          keyValue;
 
        CloudStorageAccount    storageAccount;
        CloudFileClient        fileClient;
        CloudFileShare         fileShare;
        CloudFileDirectory     fileDirectoryRoot;
        CloudFileDirectory     fileDirectory;
        CloudFile              file;
 
        TextStreamIo           textStreamIo;
        VendTable              vendTable;
        VATNum                 vendABN;
        Counter                counter;
        container              rec;
 
        storageAccountName     = "AzureStorageAccountName";
        keyValue               = "KeyValueString";
        var storageCredentials = new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(storageAccountName, keyValue);
        storageAccount         = new Microsoft.WindowsAzure.Storage.CloudStorageAccount(storageCredentials, true);
        fileClient             = storageAccount.CreateCloudFileClient();
        fileShare              = fileClient.GetShareReference('AzureFileShareName');
  
        if (fileShare.Exists(null, null))
        {
            fileDirectoryRoot = fileShare.GetRootDirectoryReference();
            fileDirectory     = fileDirectoryRoot.GetDirectoryReference("Folder/Subfolder");
  
            if (fileDirectory.Exists(null, null))
            {
                file = fileDirectory.GetFileReference('File.csv');
  
                if (file.Exists(null, null))
                {
                    memoryStream = new System.IO.MemoryStream();
                    file.DownloadToStream(memoryStream, null, null, null);
                    textStreamIo = TextStreamIo::constructForRead(memoryStream);
 
                    try
                    {
                        if (textStreamIo)
                        {
                            if (textStreamIo.status())
                            {
                                throw Global::error("@SYS52680");
                            }
 
                            textStreamIo.inFieldDelimiter(#delimiterField);
                            textStreamIo.inRecordDelimiter(#delimiterCRLF);
                            counter = 0;
 
                            while (!textStreamIo.status())
                            {
                                rec = textStreamIo.read();
 
                                if (conLen(rec))
                                {
                                    vendABN = conPeek(rec, 1);
 
                                    info(strFmt("%1", vendABN));
                                }
                            }
                        }
                    }
                    catch (Exception::Error)
                    {
                        error("An error occured. Please contact your system administrator.");
                    }
                }
            }
        }
    }
 
}

No comments:

Post a Comment