Friday, July 24, 2026

How to Send AI-Generated Emails in Microsoft Dynamics Business Central

In modern ERP implementations, automated communication is essential. Whether sending payment reminders, order confirmations, or shipment tracking notifications, manually writing and dispatching emails slows down business operations.
In Microsoft Dynamics 365 Business Central, Microsoft replaced legacy SMTP utilities with the modern System Application Email Module, offering built-in scenario mapping, logging, attachment handling, and background processing. Combined with native Azure OpenAI (Copilot) capabilities, Business Central can dynamically draft personalized, context-aware email content based on live ERP data.
This guide provides a production-ready, step-by-step walk-through for building an end-to-end AI email dispatching solution in Business Central using AL.

  • Prerequisites
Before deploying this solution, ensure your development environment and Business Central tenant meet the following requirements:
 Target Application Version: Business Central v26.0 or higher (compatible with AL Target version 16.0+).
   

 Azure OpenAI Access: An active Azure subscription with an Azure OpenAI Service resource deployed (e.g., gpt-4o or gpt-4 model deployment) along with its Endpoint URL and API Key.

System Permissions: Super user or Administrator access in Business Central to configure Email Accounts, Scenarios, and Copilot Governance capabilities.

  •  Key Development Best Practices
 1. Secure Credential Storage: Never hardcode Azure OpenAI API keys or credentials directly inside AL code files. Store them securely inside IsolatedStorage, setup tables with restricted access, or retrieve them dynamically via Azure Key Vault using Service-to-Service (S2S) authentication.
 
2. LLM Output Sanitization: AI models frequently return text wrapped in Markdown formatting (such as html tags). Always sanitize the AI response before assigning it to an email body to prevent raw Markdown tags from displaying in the recipient's inbox.
 
3. Graceful Fallbacks & Error Handling: Network calls to AI services can fail or time out. Ensure your code handles API failures gracefully without rolling back critical transactional business data.
 
4. MIME Type Accuracy: When attaching files to the standard Email Message codeunit, ensure correct MIME content types (e.g., application/pdf, image/png) are supplied to prevent corrupt attachments in email clients.

  •  Business Scenario: Automated AI Dunning Notifications
The Problem
Accounts Receivable teams spend significant time drafting customized follow-up emails for past-due balances. Generic bulk template emails are often ignored, whereas personalized reminders yield higher response rates but require significant manual labor.

The Solution
When a credit controller opens a Customer Card with an overdue balance, clicking "Send AI Overdue Reminder" triggers Business Central to:
 1. Extract live balance details, customer name, and currency from the ledger.
 2. Send this context to Azure OpenAI to draft a polite, professional, and personalized HTML payment notice.
 3. Pass the AI-generated HTML body into Business Central's native System.Email module.
 4. Dispatch the email directly to the customer's email address and log the transaction in the Email Outbox.

  • Step-by-Step Implementation Guide
Follow these sequential steps to implement the complete architecture in your AL project, Sample code is listed below for reference, reach out me for more details.





Step 1: Create the Standard Email Management Codeunit
This codeunit encapsulates Business Central's native Email Message and Email codeunits to build HTML messages and handle file attachments.


/// <summary>
/// Codeunit for dispatching system emails in Business Central.
/// Implements standard system email architecture with error handling and attachment capabilities.
/// </summary>
codeunit 50100 "BKS Email Management"
{
    Access = Public;

    /// <summary>
    /// Creates and sends an HTML formatted email message.
    /// </summary>
    /// <param name="ToRecipient">Primary email address recipient.</param>
    /// <param name="Subject">Email subject line.</param>
    /// <param name="BodyText">HTML formatted email body string.</param>
    /// <param name="AttachmentInStream">InStream containing document attachment content.</param>
    /// <param name="AttachmentFileName">Filename including extension for the attachment.</param>
    /// <returns>True if the email was successfully sent or queued; otherwise false.</returns>
    procedure SendNotificationEmail(
        ToRecipient: Text[250];
        Subject: Text[250];
        BodyText: Text;
        AttachmentInStream: InStream;
        AttachmentFileName: Text[250]
    ): Boolean
    var
        EmailMessage: Codeunit "Email Message";
        Email: Codeunit "Email";
        Recipients: List of [Text];
        IsSent: Boolean;
    begin
        if ToRecipient = '' then
            Error('Recipient email address cannot be empty.');

        // Add primary recipient to recipient collection
        Recipients.Add(ToRecipient);

        // Construct base message (Recipients, Subject, Body, HtmlFormatted)
        EmailMessage.Create(Recipients, Subject, BodyText, true);

        // Attach document if InStream contains valid data
        if (AttachmentFileName <> '') and (AttachmentInStream.Length > 0) then
            EmailMessage.AddAttachment(
                AttachmentFileName, 
                GetContentType(AttachmentFileName), 
                AttachmentInStream
            );

        // Send via standard default scenario or queue background process
        IsSent := Email.Send(EmailMessage, Enum::"Email Scenario"::Default);

        exit(IsSent);
    end;

    /// <summary>
    /// Helper method to derive standard MIME content types from file extensions.
    /// </summary>
    local procedure GetContentType(FileName: Text): Text
    begin
        case true of
            FileName.EndsWith('.pdf'):
                exit('application/pdf');
            FileName.EndsWith('.docx'):
                exit('application/vnd.openxmlformats-officedocument.wordprocessingml.document');
            FileName.EndsWith('.xlsx'):
                exit('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            FileName.EndsWith('.png'):
                exit('image/png');
            FileName.EndsWith('.jpg'), FileName.EndsWith('.jpeg'):
                exit('image/jpeg');
            else
                exit('application/octet-stream');
        end;
    end;
}


Step 2: Register the Copilot Capability
To register custom AI features within Business Central's native Copilot Governance framework, extend the Copilot Capability enum and register the feature on app installation.

Enum Extension: BKSCopilotCapabilitySetup.EnumExt.al

enumextension 50100 "BKS Copilot Capability Ext" extends "Copilot Capability"
{
    value(50100; "Customer Collection Email")
    {
        Caption = 'Customer Collection Email AI Generator';
    }
}


Install Codeunit: BKSRegisterCopilotCapability.Codeunit.al

/// <summary>
/// Installs and registers the custom Copilot capability in Business Central AI Governance.
/// </summary>
codeunit 50101 "BKS Register Copilot Cap."
{
    Subtype = Install;

    trigger OnInstallAppPerCompany()
    begin
        RegisterAIFeature();
    end;

    local procedure RegisterAIFeature()
    var
        CopilotCapability: Codeunit "Copilot Capability";
    begin
        // Register capability within standard Copilot Governance
        if not CopilotCapability.IsCapabilityRegistered(Enum::"Copilot Capability"::"Customer Collection Email") then
            CopilotCapability.RegisterCapability(
                Enum::"Copilot Capability"::"Customer Collection Email", 
                Enum::"Copilot Availability"::Preview, 
                '[https://yourdomain.com/copilot-privacy-policy](https://yourdomain.com/copilot-privacy-policy)'
            );
    end;
}


Step 3: Implement the AI Generation Engine
This codeunit builds prompt payloads, securely triggers the Azure OpenAI system codeunit, and returns clean HTML content for the email body.

/// <summary>
/// Connects to Azure OpenAI Service to draft dynamic HTML email content based on ERP records.
/// </summary>
codeunit 50102 "BKS AI Email Generator"
{
    Access = Public;

    /// <summary>
    /// Generates an HTML-formatted collection email body using Azure OpenAI integration.
    /// </summary>
    /// <param name="CustomerName">Name of the target customer account.</param>
    /// <param name="OverdueBalance">Total amount past payment due date.</param>
    /// <param name="CurrencyCode">Code of transaction currency (e.g., USD, EUR).</param>
    /// <returns>Clean HTML formatted string returned by AI processing.</returns>
    procedure GenerateCollectionEmailBody(
        CustomerName: Text[100];
        OverdueBalance: Decimal;
        CurrencyCode: Code[10]
    ): Text
    var
        AzureOpenAI: Codeunit "Azure OpenAI";
        CopilotCapability: Codeunit "Copilot Capability";
        AIOperationResponse: Codeunit "AOAI Operation Response";
        ChatMessages: Codeunit "AOAI Chat Messages";
        Endpoint: Text;
        DeploymentName: Text;
        ApiKey: Text;
        SystemPrompt: Text;
        UserPrompt: Text;
        GeneratedContent: Text;
    begin
        // Validate capability is registered and enabled
        if not CopilotCapability.IsCapabilityRegistered(Enum::"Copilot Capability"::"Customer Collection Email") then
            Error('The AI Collection Email capability is not registered.');

        // Load credentials from secure storage
        GetAzureOpenAICredentials(Endpoint, DeploymentName, ApiKey);

        // Initialize Authorization and deployment configurations
        AzureOpenAI.Initialize(Endpoint, DeploymentName, ApiKey);

        // Define System Instructions (Metaprompt)
        SystemPrompt := 'You are an automated professional finance assistant for Business Central. ' +
                       'Generate a firm, polite, and professional payment reminder email in clean HTML format. ' +
                       'Do not include markdown wrappers (such as ```html). Return valid HTML body tags only.';

        ChatMessages.AddSystemMessage(SystemPrompt);

        // Define User Contextual Prompt with ERP Data
        UserPrompt := StrSubstNo(
            'Draft a payment collection notice for Customer: %1. Total Overdue Amount: %2 %3.',
            CustomerName,
            Format(OverdueBalance, 0, '<Precision,2:2><Standard Format,0>'),
            CurrencyCode
        );

        ChatMessages.AddUserMessage(UserPrompt);

        // Execute API request to Azure OpenAI
        AzureOpenAI.GenerateChatCompletion(ChatMessages, AIOperationResponse);

        if AIOperationResponse.IsSuccess() then begin
            GeneratedContent := ChatMessages.GetLastMessage();
            exit(CleanGeneratedHTML(GeneratedContent));
        end else
            Error('AI Processing failed: %1', AIOperationResponse.GetError());
    end;

    local procedure CleanGeneratedHTML(RawText: Text): Text
    begin
        // Remove markdown backticks if returned by the language model
        RawText := RawText.Replace('```html', '');
        RawText := RawText.Replace('```', '');
        exit(RawText.Trim());
    end;

    local procedure GetAzureOpenAICredentials(var Endpoint: Text; var DeploymentName: Text; var ApiKey: Text)
    begin
        // Replace with secure storage retrieval (e.g., IsolatedStorage)
        Endpoint := 'https://your-resource.openai.azure.com/';
        DeploymentName := 'gpt-4o';
        ApiKey := 'YOUR_SECURE_AZURE_OPENAI_KEY';
    end;
}


Step 4: Expose the Action on the Customer Card Page
Finally, add an action button to the Customer Card page to allow users to trigger the AI email workflow directly from the user interface.

/// <summary>
/// Page extension adding AI email generation actions to the Customer Card.
/// </summary>
pageextension 50100 "BKS Customer Card Ext" extends "Customer Card"
{
    actions
    {
        addlast(Processing)
        {
            action("BKS_SendAIPaymentReminder")
            {
                ApplicationArea = All;
                Caption = 'Send AI Overdue Reminder';
                Image = SendEmail;
                ToolTip = 'Generates an AI-tailored payment reminder email and dispatches it through the system email framework.';

                trigger OnAction()
                var
                    AIEmailGenerator: Codeunit "BKS AI Email Generator";
                    EmailManagement: Codeunit "BKS Email Management";
                    DummyInStream: InStream;
                    AIBodyHtml: Text;
                    SubjectText: Text;
                    IsSuccess: Boolean;
                begin
                    Rec.TestField("E-Mail");
                    Rec.CalcFields("Balance Due (LCY)");

                    if Rec."Balance Due (LCY)" <= 0 then
                        Error('Customer %1 has no outstanding overdue balance.', Rec.Name);

                    // Step 1: Draft Email Content using AI
                    AIBodyHtml := AIEmailGenerator.GenerateCollectionEmailBody(
                        Rec.Name, 
                        Rec."Balance Due (LCY)", 
                        Rec."Currency Code"
                    );

                    // Step 2: Build Subject Line
                    SubjectText := StrSubstNo('Payment Reminder: Outstanding Account Status for %1', Rec.Name);

                    // Step 3: Dispatch Email
                    IsSuccess := EmailManagement.SendNotificationEmail(
                        Rec."E-Mail", 
                        SubjectText, 
                        AIBodyHtml, 
                        DummyInStream, 
                        ''
                    );

                    if IsSuccess then
                        Message('Payment reminder email successfully sent to %1.', Rec."E-Mail")
                    else
                        Message('Email queued or failed to send. Check the Email Outbox.');
                end;
            }
        }
    }
}


  • Testing & Sample Output
### Testing Procedure
 1. Deploy the AL Extension package to your Business Central Sandbox environment.
 2. Ensure an active Email Account is configured in Business Central under Email Accounts.
 3. Open a Customer Card record (e.g., Trey Research) that has an overdue balance and a valid target email address assigned.
 4. Click Actions > Processing > Send AI Overdue Reminder.

### Sample Rendered Email Output
Below is an exact visual representation of how the generated email arrives in the recipient's email client inbox:

──────────────────────────────────────────────────────────
From: Finance Department <billing@yourcompany.com>
To: Accounts Payable <ap@treyresearch.com>
Subject: Payment Reminder: Outstanding Account Status for Trey Research
Date: July 24, 2026, 8:30 AM
──────────────────────────────────────────────────────────

Statement of Account: Overdue Balance Reminder

Dear Trey Research Team,

We hope this email finds you well. Our records indicate that your account 
currently has an outstanding balance that is past its agreed payment terms.

┌────────────────────────┬────────────────────────┐
│ Account Name                                           │ Overdue Balance                                      
├────────────────────────┼────────────────────────┤
│ Trey Research                                            │ 15,420.50 USD                                          │
└────────────────────────┴────────────────────────┘

Please review this balance and arrange for remittance at your earliest convenience. 
If payment has already been processed, kindly disregard this notice or reply with 
the payment reference details so we can update your ledger.

Thank you for your prompt attention to this matter and for your continued partnership.

Best regards,
Accounts Receivable Department
Automated Financial Systems
──────────────────────────────────────────────────────────



### Summary
By combining the System Application Email Module with Azure OpenAI Services, Business Central developers can build intelligent, data-driven automation that delivers personalized communication while maintaining enterprise control, governance, and audit logging.

Tuesday, April 28, 2020

What's new and planned for Dynamics 365 Business Central under Modern Developer Tools


Hi Readers,

I hope you and your family are healthy and safe during these unprecedented moments.

Today I am going to share, what’s new and planned for Dynamics 365 business central under modern developer tools.


  • ·        Application version for aliasing base application
  • ·        Camera/location AL API available in the browser
  • ·        Multiple variable declarations of the same type in the same line
  • ·        Ability to refactor a field from a table to a table extension
  • ·        AL interfaces
  • ·        Look up events and insert event subscriber in code
  • ·        Obsolete tag property
Out of these features, in this blog I am going to discuss on Camera Integration in browser.




Monday, July 8, 2019

File Handling Part 2 in Business Central SaaS

Hello readers,
Today I'm going to continue on file handling in business central SaaS to cover the  remaining functions as shown in below screenshot.  




Friday, July 5, 2019

File Handling in Business Central SaaS

Hello readers,
Today I'm going to discuss on file handling in business central SaaS. 
Already other bloggers have been written for onpremis.

As we know that business central discontinued the File variable to handle the files. 

But we can handle this using FileStream. 

Below is the list that i will cover in my blog. 

File Handling in Business Central – SaaS

  • Import Picture with/without Camera
  • Export Picture
  • Export to Excel
  • Save as Report in PDF/Excel...
  • Send Email with Report Attachment
  • Export Data thru XMLPort
  • Read/Append Text file

Monday, December 3, 2018

Printing Documents to PDF from NAV / Business Central

👋 Hi all,

This article am writing on the request of @Akash, It's already published by Bullzip, here am going to describe step by step for new developer who is still bothering How to set password, Digital signature, Watermark e.t.c on PDF Documents.
This is an example of how to use the PDF Printer from Microsoft Dynamics NAV / business Central (on premise).
I will use the C/AL code to show you a couple of thing that you can do from NAV. These subjects are covered by the example.

  • Printing multiple documents in a loop.
  • Using a watermark with dynamic text.
  • Signing the PDF using a digital certificate.
  • Sending Documents to Customer over Email.
  • Error handling

Sunday, November 4, 2018

ADCS NAV 2016 OVERVIEW

ADCS NAV 2016 OVERVIEW

Hi All,
     Today I'm going to describe how you can do ADCS Installation & Configuration in NAV 2016, also Testing using Hyper terminal.

Overview
       The Automated Data Capture System (ADCS) solution provides a way for Microsoft Dynamics NAV to communicate with handheld devices through web services. You can test your solution by using the VT100 plug-in.

Overview and Architecture
      ADCS enables you to accurately capture data for inbound, outbound, and internal documents, primarily for warehouse activities. For example, you can have users scan the bar codes of items in your warehouse as they perform daily tasks, and that information is recorded from these handheld device activities in Microsoft Dynamics NAV.




MSDYN365BC - Setup Business Central





Hi All,
In the last article, we installed dockers & Visual Studio Code for windows.

Next step is to download the Business Central Image using dockers and in future articles, 
we will start hacking or customizing Business Central.




Search and open Windows Powershell ISE as administrator.




Run command docker version to confirm that docker is installed and running.
If it's installed and running you will see an output as in below screenshot. If not then run the docker from the desktop shortcut or from the start menu.



Run command docker pull microsoft/bcsandbox:us to download the image for Business Central US version.

** This command running for the first time will take some time to download, don’t run it on a weak internet connection. 




Using an object-oriented programming analogy, the difference between a Docker image and a Docker container is the same as that of the difference between a class and an object. An object is the runtime instance of a class. Similarly, a container is the runtime instance of an image.

Run PowerShell command –
Set-ExecutionPolicy RemoteSigned

We will be running the script and by default, PowerShell stops running scripts. Run above command to set Execution Policy to Remote Signed.


install-module navcontainerhelper -force

navcontainerhelper is a PowerShell Module, which can be installed from the PowerShell Gallery by using above cmdlet.

docker images

Above command will list down all the images that you have downloaded till now. If you have already run download image in the last section you should see one image as shown below.



 docker container ls

Above command will list down all the containers which are running right now. As we don’t have any containers it will return blank.

New-NavContainer

For above command, please run using right-hand command panel and specify following parameters as per requirement. 



A Sample command for New-NAVContainer is below –
               
New-NavContainer -containerName sbineshMSDDYNBC -accept_eula -alwaysPull -assignPremiumPlan -auth NavUserPassword -doNotExportObjectsToText -enableSymbolLoading -imageName microsoft/bcsandbox:us -includeCSide -memoryLimit 3G -shortcutsDesktop –updateHosts

Once you run above command, the system will prompt you to save your username & Password as encrypted.





** Remember your password.
** Password should fulfill password policy for SQL Server.

Once the PowerShell command is complete, a screen like below as result of PowerShell cmdlet.




Please keep a note of from above screen –
** These values will be used for using this container.
1      Container IP Address
2        Container Hostname
3        Container Dns Name
4        Web Client
5        Dev. Server
6        Dev. ServerInstance
7        Files

Check your desktop, you should have all shortcut icons that are require accessing Business Central Container.




Go ahead and use any of these + if you have SQL Server management studio installed, you can connect to SQL for Docker database.

** Remember as docker will start all containers will start automatically. Please remember to use docker container stop cmdlet to save the memory of your host machine.

If you are interested to load some old NAV version using docker you can refer following GitHub page.

Business Central (Github)  https://hub.docker.com/r/microsoft/bcsandbox/

Be ready, with the setup of business central on your local system. We will be discussing AL Code and how we can customize Business Central.

Let me know if any questions. I will be happy to answer.







MSDYN365BC - Install Dockers

MSDYN365BC - Install Dockers.


This post is copied from @Saurav Dhayani, so Plz say thanks to Saurav for his great effort.

Hi All, 

The first article in this series is about the installation of dockers for windows. I know there may be some questions about dockers and why a new technology or software with all these changes in Product.

I will try to answer most of these questions and we will also talk about installation of Dockers. 

What is Dockers? 
     Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications, whether on laptops, data center VMs, or the cloud. 
Read More about dockers here.

Is Docker is a Microsoft Product? 
    Docker is not a Microsoft product. It's an open source software. In October 2014, Microsoft announced the integration of the Docker engine into the next Windows Server release. Windows Containers was made available for Windows 10 and Windows Server 2016. 

Why we need to install Docker?
    Freely from Microsoft has put great efforts in integrating NAV and MSDYN365BC with Dockers. 

With respect to NAV, dockers can be used for the following version - 
1. NAV 2016. 
2. NAV 2017. 
3. NAV 2018. 
All cumulative updates released by Microsoft on following versions are also available on dockers. 

Business Central (latest and greatest) releases is also available in dockers. 

More Resources by Freely - https://blogs.msdn.microsoft.com/freddyk/tag/nav-on-docker/ 

you can plan to use or not to use dockers but I personally feel it will be a cool tool in your toolbox to have multiple version and CU in one single environment which can be accessed turn on and off based on your requirements. I will be using dockers to configure and demo Business central. 

Docker Installation - 

Navigate to https://store.docker.com/editions/community/docker-ce-desktop-windows

Download the installer from the website. 




Double-click Docker for Windows Installer to run the installer. 

In the configuration panel, please select “Use Windows containers instead of Linux containers.”




Installation completed confirmation message. 





When the installation finishes, run docker from the desktop (if you selected Add shortcut to desktop). 

The whale icon in the notification area indicates that Docker is running, and accessible from a terminal. 





Be Ready with Dockers, we will be using in future articles. We have one more installation to be done to continue our journey towards Microsoft Dynamics 365 Business central. 
We will talk about it in future articles. 


Keep hacking. Questions? Please feel free to ask. 








Friday, November 2, 2018

SFTP Management using WinSCP

👋 Hi all,
SFTP Management using WinSCP
Recently I have worked on a Website Integration where the requirement was to upload, download, Remove, & Move the files over SFTP and then send the Information to Website Team through  REST/JSON API.

To achieve this goals I have created two modules.

1. Extract the Documents from NAV and then Upload, Download, Move & Remove over SFTP.
This module can be performed by SFTP Management Codeunit using WinSCP tools.

2. Send the information to Website so that they can manage (CRUD Operation) their database.
This module can be performed by Website Integration Mgt. Codeunit (Coming Soon).

WinSCP
WinSCP is an open source free SFTP client, FTP client, WebDAV client, S3 client and SCP client for Windows. Its main function is file transfer between a local and a remote computer. Beyond this, WinSCP offers scripting and basic file manager functionality.

Module 1:
Extract the Documents from NAV and then Upload, Download, Move & Remove over SFTP. This module can be performed by SFTP Management Codeunit using WinSCP tools.
Assume in NAV we have below objects




For better understanding please see the below Table structures:

Table 50065 Document Setup


Table 50066 Document Category



Table 50067 Documents


Plan:
1. First of all I would like to extract the documents from NAV, To achieve this I have written a procedure namely [TryFunction] ExportDocument(DocNoP : Code[20])

2. Now Upload the Extracted document into SFTP.
To achieve this I have written a procedure namely
 [TryFunction] UploadFile(SourceFileP : Text)

3. To maintain history and sending data to website I have done some more work Like:

a. I have setup, if document is Create / Update / Delete in NAV then create a record in Send Items to Website Table with
SendItemstoWebsite."Process Status"::Pending
And once the document is uploaded in SFTP then SendItemstoWebsite."Process Status"::” “ should blank.

b. Now the second module is going to execute for sending the data to website using REST / JSON API.

4. To perform this you have to install WinSCP in server and copy the WinSCPnet.dll file  from installed directory (C:\Program Files (x86)\WinSCP) and paste into NAV Service Add-Ins folder like: C:\Program Files\Microsoft Dynamics NAV\90\Service\Add-ins

Development:
Create a codeunit and declare the global variables as shown in below screenshot.



Create functions as shown as below screenshots



























Please let me know if you have any queries.....




Thursday, June 21, 2018

Document Management in Microsoft Dynamics NAV


Document Management in Microsoft Dynamics NAV
Overview:-
Document management is a way to Capture and store any type of files in MS Dynamics Nav. It supports for both incoming and outgoing means we can store the document we can export the document anywhere from NAV.
Advantages of Document management:-
·         We can import various types (Image/doc) of document in NAV.
·         Can view the document within NAV even delete if from your folder can view from Nav.
·         Can take print of document with in NAV.
·         Can send the Document.
·         We can export the document from NAV.
·         We can edit (Word / Excel) type of documents from NAV.
What we need
1.      We need 11 customized objects which are shown in below image:-




2.      Below are the fields required in Document setup:-




3.      Code unit for document management is specified Below :-

















          











How it works:-
1.      We can add this document management in any page where we need the document should be attached for example:-
I am showing here an action of document in Customer page for this we need to write below code in action of customer page :-



2.      Now Open the client And go as per below path and have to setup a path to store the documents:-




3.      Now open the customer page and click on the document



4.       



5.    

6.    

      

7.



Popular Posts