using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.File;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.Auth;
class DAX_ERVendPaymOutFieUploadHelper
{
/// <summary>
/// Handles attachingFile event from Electronic reporting
/// </summary>
/// <param name = "_args">Event args for event handler</param> [SubscribesTo(classStr(ERDocuManagementEvents), staticDelegateStr(ERDocuManagementEvents, attachingFile))]
public static void ERDocuManagementEvents_attachingFile(ERDocuManagementAttachingFileEventArgs _args)
{
ERFormatMappingRunJobTable ERFormatMappingRunJobTable;
Common common = _args.getOwner();
if(common.tableid == tableNum(ERFormatMappingRunJobTable))
{
ERFormatMappingRunJobTable = ERFormatMappingRunJobTable::find(common.RecId);
}
if (!_args.isHandled() && ERFormatMappingRunJobTable.Archived == noyes::No)
{
DAX_ERVendPaymOutFieUploadHelper uploadHandler = DAX_ERVendPaymOutFieUploadHelper::construct();
uploadHandler.uploadFile(_args.getStream());
}
}
/// <summary>
/// Creates an object of DAX_ERVendPaymOutFieUploadHelper class
/// </summary>
/// <returns>DAX_ERVendPaymOutFieUploadHelper class object</returns>
public static DAX_ERVendPaymOutFieUploadHelper construct()
{
return new DAX_ERVendPaymOutFieUploadHelper();
}
/// <summary>
/// Uploads file to custom Azure blob container specified in parameters
/// </summary>
/// <param name = "_fileStream">File stream to be uploaded</param>
/// <returns>True if file uploaded successfully</returns>
private boolean uploadFile(System.IO.Stream _fileStream)
{
boolean ret = true;
// Custom parameters table to store Azure Storage and container info
DAX_Parameters parameters = DAX_Parameters::find();
try
{
StorageCredentials credentials = new StorageCredentials(parameters.StorageAccountName, parameters.Key);
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer rootContainer = blobClient.GetContainerReference(parameters.ContainerName);
if(!rootContainer.Exists(null, null))
{
return Checkfailed('Azure storage parameters are not set up correctly.');
}
CloudBlobDirectory directory = rootContainer.GetDirectoryReference(parameters.BankOutPaymFolder);
CloudBlockBlob blockBlob = directory.GetBlockBlobReference(strFmt('VendOutPaym.xml'));
if (_fileStream.CanSeek)
{
_fileStream.Seek(0, System.IO.SeekOrigin::Begin);
}
blockBlob.UploadFromStream(_fileStream, null, null, null);
Info('File uploaded');
}
catch(Exception::Error)
{
ret = checkFailed('Error occurred while uploading the file');
}
catch(Exception::CLRError)
{
ret = checkFailed('CLR Error occurred while uploading the file');
}
return ret;
}
}