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
Post a Comment