Microsoft_MVP_banner

Electronic Reporting: Send vendor payments to external azure storage via X++

Electronic Reporting: Send vendor payments to external azure storage via X++
Electronic Reporting module in Microsoft Dynamics 365 Finance Operation lets you archive file generated by ER at SharePoint location and in Azure Storage as per this link Archive
ER destination type – Finance & Operations | Dynamics 365 | Microsoft Learn
.
APIs can be used to check message status and read file from either location. Logic Apps or Power Automate can be used to make a call to APIs, read files, and perform required action. This post is not about how this can be done via integration 🙂 It’s been a while I haven’t written a full code base post (no low code :))

To send ER generated files directly to your provided Azure Blob Container, below is the sample class.

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(nullnull))
            {
                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, nullnullnull);
            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;
    }
}

Share:

Related Posts

Microsoft Copilot
admin

Exploring Microsoft Copilot Architecture

Microsoft Copilot isn’t just another AI tool; it’s a comprehensive platform designed to be your indispensable companion, enhancing productivity, fostering creativity, and facilitating information comprehension all through a user-friendly chat interface. The concept of Copilot emerged two years ago when Microsoft introduced GitHub Copilot, aiming to assist developers in writing

Read More »
How to enable new Microsoft teams - Public Preview!
Microsoft Teams
Faisal Fareed

How to enable new Microsoft teams – Public Preview!

New Microsoft Teams is just AWESOME, quick but useful post below shows how you have this preview feature to make your life EASY!  Open Microsoft Teams admin center [Ask admin in your organization if you don’t have access] and follow path Teams > Teams update policies > Click on an existing

Read More »

Send Us A Message

Leave a Reply

Your email address will not be published. Required fields are marked *

Recent Post

Exploring Microsoft Copilot Architecture

Exploring Microsoft Copilot Architecture

Microsoft Copilot isn’t just another AI tool; it’s a comprehensive platform designed to be your indispensable companion, enhancing productivity, fostering creativity, and facilitating information comprehension all through a user-friendly chat interface. The concept of Copilot emerged two years ago when Microsoft introduced GitHub Copilot, aiming to assist developers in writing…

How to enable new Microsoft teams – Public Preview!

How to enable new Microsoft teams – Public Preview!

New Microsoft Teams is just AWESOME, quick but useful post below shows how you have this preview feature to make your life EASY!  Open Microsoft Teams admin center [Ask admin in your organization if you don’t have access] and follow path Teams > Teams update policies > Click on an existing…

Electronic Reporting: Send vendor payments to external azure storage via X++

Electronic Reporting: Send vendor payments to external azure storage via X++

Electronic Reporting module in Microsoft Dynamics 365 Finance Operation lets you archive file generated by ER at SharePoint location and in Azure Storage as per this link Archive ER destination type – Finance & Operations | Dynamics 365 | Microsoft Learn. APIs can be used to check message status and read…

FaisalFareed@2025. All rights reserved

Design by T3chDesigns