Wednesday 1 May 2024

Custom Business events Part 3 - (Activate custom business event) in D365 F&O

 In this blog we will discuss about the steps to activate a custom business in D365 F&O.

As we know that business event catalog does not get automatically refreshed. So, we need to do that step manually.

1) Go the System administration > Setup > Business evens > Business events catalog.


2) Click on Manage > Rebuild business event catalog



3) Once the process is completed then you will be able to see info message on the screen.


4) You may search the custom business event in the business event catalog  tab.


5) Select the relevant custom business event and click on Activate button.

6) A new form with name configure new business event will appear. Select the  relevant legal entity and endpoint name which was created earlier and click Ok button.



7) Once it is activated. The custom business event will appear in the Active events tab.






Custom Business events Part 2 - (Create custom business event via code) in D365 F&O

 In this blog we will discuss about the steps to create custom business event via code in D365 F&O.

As we have already discussed in our previous blog that we need a custom business event which will be used to send notification to third party. This trigger will be consumed by logic app to send the information or notification to the third party.

In order to create a custom business event we need to create following three class artifacts:

  • BusinessEventsContract class
  • BusinessEventBase class
  • A Trigger class to send the business event
Below are the code snippet to create above mentioned classes : 

1) Create BusinessEventsContract class

Business event contract class is used to define internal state, implement initialization method, static constructor and implement parm method to access the contract state.


2) Create BusinessEventBase class.

In order to create custom base we need to extend it from the business event base class. After extending we need to implement a private new method, methods to maintain internal state, static constructor method,  and buildContract method.



3) A Trigger class to send the business event

This class will be responsible to trigger the business event.





Custom Business events Part 1 - (Setup end point) in D365 F&O

In this blog we will discuss about the setup of end point  in D365 F&O.

Before jumping into the process of set up. I want to add on some information regarding business events.

What are business events?

The business event in D365 F&O is way through which external system receives messages from D365 Finance and Operations.

Let's take a example :

We have a external system who want to know when the process of creating lines within trade agreements is completed. Then D365 F&O should send some notification or information  to the external system.

 In order to meet with business requirement we will need business event which will be triggered once the process is completed in D365 F&O. For this purpose we are planning to create a custom business event which will be triggered after completing certain operations. This trigger is sort of notification for the third party that the process has been completed. 

Later on the triggered will be consumed by logic app in order to send notification or information to third party.

Before jumping to code for creating custom business event.

We need to setup a end point in D365 F&O.

Below are the steps to setup the end point in D365 F&O.

1) Go the System administration > Setup > Business evens > Business events catalog.

2) Click on the end points tab and +New button.


3) A new dialog box will open with the name of configure end point. Select Azure Service Bus Topic from the drop down of the endpoint type field and click Next button in the bottom.





4) Another form with new fields will be displayed where we need to fill in the following mandatory fields.
Once all field are completed then click ok button.
  • Endpoint : Define a name for the end point.
  • Azure active directory application id : You need to go to the portal.azure.com. Go to azure active directory > the App registration > Select app which is using D365 instance. Open the app and select the value appearing next to Application client id. Paste the same value in the Azure active directory application id.
  • Azure application secret : We need here the client secret id of the azure app registration record which was created earlier.
  • Key Vault DNS Name : We need a azure key vault name in the DNS name.
  • Key Vault Secret name : We need here the secrete  of the  azure key vault which is used in the field of the key vault dns name. This information will be fetched from the azure portal in the resource section against available key vault.

Topic name field is option but it is good to give some value.




5) Once the process is completed then the business event end point will appear in the end point tab.



Wednesday 22 February 2023

Connect and upload in azure blob with azure key vault using x++

 Today, I will be sharing details about file upload in azure blob using azure vault that includes pre requisite and code snippet used to it.

Before proceeding with code we need following key information which will be added in the key vault parameters in D365 F&O.

  1. Azure application id
  2. Azure application client secret
  3. Key vault URL
  4. Key vault Secret (In our case we need three : Container name, storage account, storage key)
  5. Container/Blob must be created in the azure

The above mentioned information can be added and fetched from azure portal. After getting those details  you need to create a new record in azure vault parameters form.

Go to System administration > Setup > Key vault parameters

Create a new record in key vault then create three new records for secrets.




Below is the code snippet used to get storage account, storage key and container name via Azure vault and upload files in the blob.

Note: I have created csv file using CommaStreamIo and getting the stream from it in such a way
System.IO.Stream stream = commaStreamIo.getStream();
Also, add following namespace at the top of the class :
using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer;
using Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob;
using Microsoft.WindowsAzure.Storage.File

Code snippet : 
 private void uploadFileInAzureBlob(System.IO.Stream _stream, str _fileName)
    {
      
        KeyVaultCertificateTable    certTableForContainer;
        KeyVaultCertificateTable    certTableForStorageAccount;
        KeyVaultCertificateTable    certTableForStorageAccountKey;
        str                         containerName;
        str                         storageAccountName;
        str                         storageAccountKey;
        
        certTableForContainer         = KeyVaultCertificateTable::findByName("ContainerName");
        certTableForStorageAccount    = KeyVaultCertificateTable::findByName("StorageAccountName");
        certTableForStorageAccountKey = KeyVaultCertificateTable::findByName("StorageAccountKey");

        try
        {
            if (certTableForStorageAccount.RecId != 0 && certTableForStorageAccountKey.RecId != 0 &&  certTableForContainer.RecId != 0)
            {
                containerName        = KeyVaultCertificateHelper::getManualSecretValue(certTableForContainer.RecId);
                storageAccountName   = KeyVaultCertificateHelper::getManualSecretValue(certTableForStorageAccount.RecId);
                storageAccountkey    = KeyVaultCertificateHelper::getManualSecretValue(certTableForStorageAccountKey.RecId);

                var storageCredentials = new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(StorageAccountName, storageAccountkey);
                CloudStorageAccount storageAccount = new Microsoft.WindowsAzure.Storage.CloudStorageAccount(storageCredentials, true);

                if(storageAccount)
                {
                    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
                    CloudBlobContainer blobContainer = blobClient.GetContainerReference(containerName);
                    changecompany(curExt())
                    {
                        CloudBlockBlob blockblob =    blobContainer.GetBlockBlobReference(_fileName);
                        if(blockblob && !blockblob.Exists(null, null))
                        {
                            if(_stream)
                            {
                                _stream.Position = 0;
                                System.IO.StreamReader reader = new System.IO.StreamReader(_stream);
                                str csvFileContent = reader.ReadToEnd();
            
                                blockblob.UploadText(csvFileContent,null,null,null,null);
                                blockBlob.FetchAttributes(null,null,null);
                                BlobProperties BlobProperties = blockblob.Properties;

                                if(BlobProperties.Length == _stream.Length)
                                {
                                    info(strFmt("File %1 uploaded successfully", _fileName));
                                }
                            }
                        }
                        else
                        {
                            error(strFmt("File %1 Already Exists",_fileName));
                        }
                    }
                }
                else
                {
                    error("Unable ToConnect With Storage Account");
                }
            }
            else
            {
                info("Storage Account Or Key Record Missing");
            
            }

           
        }
        catch(Exception::Error)
        {
            error("Operation Cannot Be Completed");
        }

}

Monday 20 September 2021

Part 4 - Connect Azure BLOB storage with Dynamics 365 for Finance and Operations - (Place/Store/Upload the file in the blob folder using X++)

Today, I will share another part of connecting azure blob storage with Dynamics 365 for finance and operations series.

This part will be about placing or uploading the file in  the blob folder using X++ in Dynamics D365 Finance and Operations. Basically it is covering the write operations to the blob storage.

Perquisite:

  1. Storage account
  2. Blob container
  3. Create 2 folders in the blob container












Create a new class in the Dynamics 365 finance and operations and add following methods in it.
  • connectToAzureBlob
  • uploadFileToAzureBlob
  • moveTheFileBetweenFolders
  • deleteTheFileFromFolder
And we will be using following .NET libraries.
  • using Microsoft.WindowsAzure.Storage;
  • using Micorosft.WindowsAzure.Storage.Blob;
  • using System.IO;
  • using System.Text;
  • using System.Text.ASCIIEncoding;
























Output:

1) Uploaded or creating new file in azure blob





2) Moved file to another folder






3) Deleted the file from folder


Part 3 - Connect Azure BLOB storage with Dynamics 365 for Finance and Operations - (Consume or Read file details or data from the blob folder using X++)

Today, I will share another part of connecting azure blob storage with Dynamics 365 for finance and operations series.

This part will be about Consuming or Reading file details or data from the blob folder using X++ in Dynamics D365 Finance and Operations.

Perquisite:

  1. Storage account
  2. Blob container
  3. Create folder in the blob container
  4. Add a file to the blob container for testing (Using the Upload option in the Azure portal)

Sample text file










Create a new class in the Dynamics 365 finance and operations and add following methods in it.
  • connectToAzureBlob
  • GetFileNameList
  • readFileValueFromMemoryStream
And we will be using following .NET libraries.
  • using Microsoft.WindowsAzure.Storage;
  • using Micorosft.WindowsAzure.Storage.Blob;
  • using System.IO;
Sample code for the classes:
















Output :  




Part 2 - Connect Azure BLOB storage with Dynamics 365 for Finance and Operations - (Establish connection between Azure BLOB and D365 F&O)

Today, I will share another part of connecting azure blob storage with Dynamics 365 for finance and operations series.

This part will be about establishing the connection between azure blob and D365 F&O.

Perquisite:

  1. Storage account
  2. Blob container
1- Storage account

The application will require to access the connection string at runtime in order to authorize requests made to Azure Storage. We will use the connection string in Dynamics 365 Finance and Operations environment variable. (That variable can be part of parameters on the form)

The format of the connection string is :

DefaultEndpointsProtocol = [http|https];AccountName=myAccountName;AccountKey=myAccountKey

  • HTTP or HTTPS (Whether you want to connect to either of one protocol)
  • myAccountName : Replace it with your storage account
  • myAccountKey : Replace with your account access key
You can find out the connection key value on this path in the Azure portal.
- Go to Storage account - Access keys 












2- Blob Account


- Go to Storage account > Storage Explorer (preview) > BLOB CONTAINER




3- Store the BLOB file path in the Dynamics 365 Finance and Operations

Blob container has a folder type structure and files will be accessed from certain path.
We will store the file path and store it in the Dynamics 365 F&O variable to access the file at the particular location. With the help of file path we can iterate the blob container to particular folder and access the files.

Steps to create folder in blob container.
  • Go to Storage account > Storage Explorer (preview) > BLOB CONTAINER
  • Click New Folder and enter the name
  • Click OK









4- Create a new class and a code in it.(It will establish connection between Azure blob and D365 F&O)

We will use two .NET libraries to use Azure blob.
  • using Microsoft.WindowsAzure.Storage;
  • using Micorosft.WindowsAzure.Storage.Blob;








Output:



Custom Business events Part 3 - (Activate custom business event) in D365 F&O

 In this blog we will discuss about the steps to activate a custom business in D365 F&O. As we know that business event catalog does not...