Generate Text/CSV/DAT file using X++ and upload on Azure blob storage

 Generate Text/CSV/DAT file using X++ and upload on Azure blob storage


There are many scenario's where we want to wrap data inside the file and upload on blob storage. Following code use to generate file and upload on azure blob storage.

`   public void processOperation(Contract _contract)

    {

        #OccRetryCount

        #File

        InventTrans          inventTrans;

        Query                query;

        QueryRun             queryRun;

        str                  stringToWrite;

        int                  recordCount = 0;

        stringToWrite = "Customer Account Number|Invoice Amount|Invoice Balance Amount|Invoice Due Date|Invoice Date|Invoice Number| \r\n";

        query    = _contract.getQuery();

        queryRun = new QueryRun(query);

        while (queryRun.next())

        {

            try

            {

                ttsbegin;

                CustTransOpen   custTransOpen = queryRun.get(tableNum(CustTransOpen));

                CustTrans       custTrans     = queryRun.get(tableNum(CustTrans));

               

                //write the next line of the .txt file

                stringToWrite +=

                    strFmt("%1| %2| %3| %4| %5| %6| %7| %8| %9| \r\n", 

                    custTransOpen.AccountNum, custTransOpen.AmountCur, custTransOpen.AmountCur,                                 custTransOpen.DueDate, custTransOpen.TransDate, custTrans.Invoice); 

                recordCount++;

                ttscommit;

            }

            catch (Exception::Deadlock)

            {

                if (xSession::currentRetryCount() >= #RetryNum)

                {

                    throw Exception::Deadlock;

                }

                else

                {

                    retry;

                }

            }

        }

        System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();

        System.Byte[]     reportBytes = new System.Byte[0]();

        // Actual rendering to byte array

        reportBytes = enc.GetBytes(stringToWrite);

        XXXUploadFileToAzureStorage::uploadFileToBlobStorage(reportBytes); 

        info(strFmt("Total records generated: %1", recordCount));

    }

}

************** Code to upload file on Azure blob ******************

using Microsoft.WindowsAzure.Storage;

Using Microsoft.WindowsAzure.Storage.Blob;

using System.IO;

public class XXXUploadFileToAzureStorage

{

    public static void uploadFileToBlobStorage(System.Byte[]  _invoiceStr)

    {

        CloudBlobContainer  blobContainer;

        XXXUploadFileToAzureStorage  uploadFileToBlobStorage = new XXXUploadFileToAzureStorage();

 

        // Connecting container

        blobContainer = uploadFileToBlobStorage.connectToAzureBlob("Connection", "Container");

 

        // upload the file

        uploadFileToBlobStorage.UploadFileToBlob(blobContainer,"Invoice-upload","File.txt", _invoiceStr);

        

        

        

    }

 

    public CloudBlobContainer connectToAzureBlob(str _connectionString, str _containerName)

    {

        _containerName    = "Invoice upload";

 

        CloudBlobClient         cloudBlobClient;

        CloudBlobContainer      cloudBlobContainer;

        CloudStorageAccount     cloudStorageAccount;

             

        // Blob storage connection string

        cloudStorageAccount = CloudStorageAccount::Parse("AccountName=d365storage;AccountKey=dqwdweqkcnewcjnewvTFTFSWUIdn5X/8CF6invgvs=;EndpointSuffix=core.windows.net;DefaultEndpointsProtocol=https;");

        cloudBlobClient     = cloudStorageAccount.CreateCloudBlobClient();

        CloudBlobContainer  = cloudBlobClient.GetContainerReference(_containerName); // Container name

 

        info(strFmt("Storage container Name: %1",CloudBlobContainer.Name));

 

        return CloudBlobContainer;

 

    }

 

    public void UploadFileToBlob(CloudBlobContainer _cloudBlobContainer, str _folderName, str _fileName, System.Byte[] _invoiceStr)

    {

        CloudBlobDirectory      cloudBlobDirectory;

        CloudBlockBlob          CloudBlockBlob;

        System.Byte[]           reportBytes = new System.Byte[0]();

 

        // File path

        cloudBlobDirectory  = _cloudBlobContainer.GetDirectoryReference(_folderName);   // Azure container folder name

        CloudBlockBlob      = cloudBlobDirectory.GetBlockBlobReference(strFmt("INVOICEFILE_%1.DAT",strAlpha(datetime2Str(DateTimeUtil::getSystemDateTime()))));  // Blob file name

 

        reportBytes = new System.Byte[0]();

        reportBytes = _invoiceStr;  

        if (reportBytes)

        {

            System.IO.MemoryStream stream = new System.IO.MemoryStream(reportBytes);

 

            // upload stream

            CloudBlockBlob.UploadFromStream(stream, null, null, null);

        }

        info("File uploaded successfully to Azure Blob Storage.");

    }

}

Comments

Popular posts from this blog

Execute D365 F&O SSRS report with parameter and upload report output on Azure blob storage using X++

Microsoft D365 F&O: Remove custom models from deployable package