Galleries

‘RunAs’ function & method in Dynamics 365 Finance & Operations

Introduction:

There are some scenarios in Microsoft Dynamics 365 finance and operations where we need to run X++ program or code or business operation on the behalf of different userId other than current userId.

In my case, my X++ program of D365 finance and operations should always run under the userId- ADMIN . I can use ‘RunAs’ function & method in Dynamics 365 Finance & Operations.

Sample Code:

class AcxSharepointIntegeration
{
    public static container download(container _parms)
    {
        RunAsPermission perm;
        perm = new RunAsPermission("Admin");
        perm.assert();
        Container returncontainer = runAs("Admin", classnum(AcxSharepointIntegeration), "get", _parms);
        CodeAccessPermission::revertAssert();
        return returncontainer;
    }

    public static container get(container _parms)
    {
        container con;
        // Your business Logic
        return   con; 
    }

class AcxSharepointIntegeration
{
public static container download(container _parms)
{
RunAsPermission perm;
perm = new RunAsPermission(“Admin”);
perm.assert();
Container returncontainer = runAs(“Admin”, classnum(AcxSharepointIntegeration), “get”, _parms);
CodeAccessPermission::revertAssert();
return returncontainer;
}

public static container get(container _parms)
{
container con;
// Your business Logic
return con;
}

D365 FO/AX7: Sharepoint File Upload using X++

Requirement :

Uploading a file in Sharepoint online using X++ and inside from Microsoft Dynamics 365 finance and operations.

Prerequisites:

The current user id of Microsoft Dynamics 365 Finance and operations should have proper rights and privileged in Sharepoint Online.

Sample Code:

In this scenario i am creating a text file in Microsoft Dynamics 365 finance and operations and then uploading its memory Stream in Sharepoint online using X++ . You can modify the X++ code in D365 finance and operations as per your need.

class RunnableClassRun
{
/// /// Runs the class with the specified arguments. ///
/// The specified arguments.
public static void main(Args _args)
{
System.UriBuilder builder = new System.UriBuilder(“https://XXXXXX.sharepoint.com”);
str extId = xUserInfo::getExternalId();
Microsoft.Dynamics.AX.Framework.FileManagement.SharePointDocumentStorageProvider provider;
Microsoft.Dynamics.AX.Framework.FileManagement.DocumentLocation documentLocation = new Microsoft.Dynamics.AX.Framework.FileManagement.DocumentLocation();
provider = new Microsoft.Dynamics.AX.Framework.FileManagement.SharePointDocumentStorageProvider(“XXXXXX.sharepoint.com”, “sites/dummy”, “Shared%20Documents/MyFolder”, extId);
System.Byte[] reportBytes = new System.Byte[0]();
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
reportBytes = enc.GetBytes(“YOUR STRING/TEXT”);
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(reportBytes);
//memoryStream = comma.getStream();
documentLocation = provider.SaveFile(newGuid(), ‘TextFile.txt’, System.Web.MimeMapping::GetMimeMapping(‘TextFile.txt’), memoryStream);
}

}

}

D365 FO : SQL Connection & Access of production environment Using X++

  • Introduction – In earlier version of Microsoft Dynamics AX, Customer and partner had full control and access of Microsoft SQL Server and they were able to connect to Microsoft SQL Server of production server.Customer and partner were also able to use SSMS (SQL Server Management Server) in Microsoft Dynamics AX Production for querying and executing direct SQL Statements in certain scenarios.
  • But In Microsoft Dynamics 365 finance and operation Cloud & SaaS (Software as a service application) model , you cannot connect to Microsoft SQL server of production and you don’t have any access of production server SQL.
  • Only Microsoft has full control of production servers and responsible for tasks like maintenance, backups etc.
  • Customer is using LCS (Life cycle services) for deployments, service upgrades etc.
  • It is not recommend to execute direct SQL statement in SQL server of production but still in certain scenarios we need it.
  • Steps to connect SQL server of Microsoft Dynamics finance and operations production environment and executing SQL statements directly using X++
  • In this example, login to visual studio and create a runnable class in Microsoft D365 finance & operations.

  • Write the below code, for SQL update and delete command execution in production server SQL database.
  • Above piece of code works just fine when you are executing SQL update or delete statements or commands. But in some scenarios, we have to use SQL select commands or statements directly in production SQL.
  • In below screenshot and code i am showing how can we execute direct SQL statement and command.
  • The difference bewtween update/delete & select sql statement is that in select i am using method statement.executeQuery(sqlStr) whereas in update/delete SQL statement i am using statement.executeUpdate(sqlStr).
  • In this way we can execute SQL update, delete, select etc statements and commands in the production SQL database of Microsoft dynamics 365 finance and operations using X++.
  • Also read my post on D365/AX7:Connect To An External SQL Database Using X++.

D365 FO/AX7/Class Extension: COC (Chain of command) & Method Wrapping With Example

  • Introduction COC (chain of command) & Method Wrapping In Microsoft Dynamics 365 finance and operations –
  • Microsoft D365 Finance and operations supports very powerful feature called COC or method wrapping.
  • In past, Microsoft Dynamics AX/Axapta supports overlayering where you can overlayer Microsoft classes, table methods etc directly by placing your code in the middle, bottom or top if standard code. Below is screenshot and example for your reference. In below screenshot i placed my custom code in the middle of standard method by using overlayering.
  • In Microsoft Dynamics 365 finance and operations (After version 8.0) , you cannot overlayer code as everything is sealed now. We have to use COC or method wrapping.Microsoft has improved the Functionality of Class extension for D365 FO by adding wrap logic around methods which are defined in the base class that you are augmenting. You can Wrap or do Chain of command (COC) of public and protected methods.
  • In below screenshot i am using method wrapping or class extension of standard class which is different from Microsoft Dynamics AX overlayering approach.

  • Next keyword means to call the orginal method “ChecItemPostingDate” of standard class “InventUpdate”
  • You can get values of Global Variables of in your extension class of your parent class or main class.
  • Final Modifier means The method can’t be overridden in any class that derives from its class.
  • Here are one more example where we are using COC (chain of commands) in Table methods.

Benefits Of Using Change Of Commands instead of Old Overlayering approach in Microsoft Dynamics 365 finance and operations

  1. Easy Future upgrades and version enhancements as you are not doing overlayering in standard classes or methods or objects & keeping you separate extension classes.
  2. Neat & Clean development as no need to compile whole code librarary.

D365 FO/AX7: Mobile App & Mobile Workspaces With Example

Introduction – The Microsoft Dynamics 365 mobile app allows you to access your business processes, data and records from mobile phones and tablets. Microsoft Dynamics D365 Mobile workspaces can be enabled in a very less time with almost no effort. Using Microsoft Dynamics D365 fins and operations mobile user can easily perform below activities :

1. User can view Microsoft Dynamics D365 finance and operations business data in mobile app.

2. User can edit or delete Microsoft Dynamics D365 finance and operations business data in mobile app.

3. Admin can add certain tasks and CRUD operations in D365 workspace and mobile app. User can perform those operations in D365 mobile app.

Example – Below are the steps to create your first Microsoft Dynamics D365 mobile app.

  1. In this scenario we are using vendor master and we will public vendor master workspace and user will be able to view vendor master in D365 mobile app.
  1. Go to settings menu and click on mobile app in Microsoft Dynamics 365.
  1. Create new Microsoft Dynamics 365 mobile app.
  1. Fill all the details of Microsoft Dynamics 365 mobile app.
  1. Add page in Microsoft Dynamics 365 mobile app.
  1. Select fields
  1. Save the Microsoft Dynamics 365 mobile app.
  2. Publish the Microsoft Dynamics 365 workspace and mobile app.
  3. Login into your Microsoft Dynamics 365 mobile app and start using it

D365 FO/AX7: Multithreading With Example Using Pessimistic LOCK & BatchHeader/BatchTask Class

Background – In Microsoft Dynamics D365 Finance and Operations, most of the processes & batch jobs run in a single thread and supports only single thread execution not multi-threading. Generally Single Thread batch Jobs or processes work well in Microsoft Dynamics 365 Fins and ops. But there are many scenarios where we require fast performance and quick competition of processes and batch jobs. Multithreading Batch Jobs approach is very useful in those scenarios.

Two Different Ways In Microsoft Dynamics D365 Finance and Operations,We can develop Multithreaded Batch Jobs in two ways. The first approach is using PESSIMISTIC LOCKS OR PESSIMISTIC SELECT in Microsoft Dynamics D365 Finance and Operations.

The second is to create BATCH TASKs. Batch Task approach you can find in standard classes like RetailStatementCalculate_Multi, RetailStatementPost_Multi Etc. which are using RunBaseBatch Framework (Not SYSOperation Framework) inside Microsoft Dynamics D365 Finance and Operations.

Lets begin with first approach i.e. using PESSIMISTIC LOCKS OR PESSIMISTIC SELECT in Microsoft Dynamics D365 Finance and Operations.By default, D365 fins and ops supports Optimistic Concurrency model (OCC) during the time SELECT or fetching records from database of Microsoft Dynamics D365 Finance and Operations. Optimistic Concurrency Model or SELECT only locks records during the time of Update whereas Pessimistic Concurrency Control (PCC).

Below code you can utilize in batch jobs and you run multiple thread of same batch job class as we a

Lets move to second approach , which include create and adding RUNTIME task using BATCHHEADER class . Here a single Runbase Batch Job is used for creating multiple threads or Runtime Tasks.

D365 Fins & Ops/AX7: Extend & Customize Retail Statement Posting|Part 1|D365 Commerce|D365 Retail

Retail Statement Posting– Retail Statement Posting or Day End Posting in Microsoft Dynamics 365 finance and operations/D365 Commerce/D365 Retail is very important process. In Dynamics 365 Commerce, Retail statement posting process is a batch task which updates financial Transaction, customer transactions & inventory transactions. Retail statement posting process consists automation of activities like creation of sales order from D365 MPOS/CPOS retail sales transactions, invoice posting of sales order , retail tender payments & customer settlements.

Scenarios– Extension & Customization of Retail posting routine is a common requirement and classes architecture & posting routines is way more different than Microsoft Ax 2012 retail statement posting and totally new.

Example 1 :

During the time of retail statement posting, developer wants to carry custom fields in SalesLine or wants to update value of fields in SalesLine.During Retail statement posting , RetailTransactionServiceOrder Class is resposible for creation of SalesTable or Customer Order. Fortunately, Microsoft provides a class RetailCreateCustomerOrderExtensions for extending Retail Statement posting – Customer Order Creation Process. You can extend the class RetailCreateCustomerOrderExtensions and by using Chain of command (COC) of method RetailCreateCustomerOrderExtensions.preSalesLineCreate() you can achieve mentioned scenario.

Example 2:

In example 1 we are modifying the value of SalesLine. In this example , developer wants to update or carry new fields in SalesTable or customer Order Header during Retail Statement Posting.You can extend the class RetailCreateCustomerOrderExtensions and by using Chain of command (COC) of method RetailCreateCustomerOrderExtensions.orderHeaderBeforeInsert() you can achieve mentioned scenario.

D365 FO/AX7: The natural key for the table XXXX was not found [Solved] Data Entity Error

  • Issue – During the creation of data entity of table VendInvoiceTrans in Microsoft Dynamics 365 Finance and operation, system is throwing error- The natural key for the table VendInvoiceTrans was not found.
  • Root Cause The reason is that the table VendInvoiceTrans is using  RecId as its primary index. D365 Fo Data Entity Wizard doesn’t support tables with a RecId as a primary index.
  • Steps to Solve
  • Duplicate any existing data entity in your D365 fins and ops project and model. In my case i am making a duplicate copy of existing data entity – EMPSurveyTableEntity
  • Rename the duplicate copy of data entity
  • Change the existing datasource of data entity from EMPSurveyTable to VendInvoiceTrans
  • Delete existing fields of data entity and add new field from datasource vendInvoiceTrans
  • Remove the field from KEYS –> ENTITY KEY and new fields as per your need from datasource VendInvoiceTrans. ENTITY KEY fields should not allow duplicate and should be unique combination.
  • Change the Data entity properties PUBLIC COLLECTION NAME , PUBLIC ENTITY NAME & DATA MANAGEMENT STAGING TABLE to new values.
  • Right click on data entity and regenerate Staging Table Again
  • Assign data entity to security privilege.
  • Rebuild and synchronize the project .

D365 FO & MS Forms Pro Survey Integration : Send & Save Survey Responses using Microsoft Power Automate/Microsoft Flow/Azure Logic Apps

  • Objective – Microsoft Dynamics 365 (Finance & operations) & Forms Pro Survey Integration : Send and Save Survey Responses using Microsoft Power Automate/Microsoft Flow/Azure Logic Apps.
  • Scenario – Organisation wants to send Employee Satisfaction Survey to their employees via email. Employee will complete the survey . Survey Responses should be store and save in Microsoft Dynamics 365 Finance & operations.
  • Technologies/Products – Microsoft Form Pro(Free 30 Days Trial), Microsoft Dynamics 365 Finance & operations, Microsoft Power Automate(Microsoft Flow/Azure Logic Apps).
  • Prerequisite – Before moving ahead individual must go and see my old post on Microsoft Forms i.e. Microsoft Forms : Create a Survey Form From Scratch. Individual should have knowledge of Microsoft Power Automate(Microsoft Flow/Azure Logic Apps) & Dynamics 365 Finance & operations development.
  • Send Survey – Login to Microsoft Power Automate/Microsoft Flow/Azure Logic Apps. Create a Microsoft Flow for sending Employee Surveys to the employees of the company . In this scenario i am using a custom data entity of Employee master which is returning fields – Employee Code & Employee Email, Employee. You can use your own data entity as per your requirement and business need. I am reading all the Employee records and sending surveys in their email. You can add more conditions as per your business need. For demonstration purpose i am keeping things simple.Please refer below flow for your reference.
  • Storing and saving Survey responses – Create a Microsoft Flow for Storing and saving Survey responses in Microsoft Dynamics 365 Finance and operations using D365 FO custom data entity and Microsoft Flow Fins and ops connectors.Please refer below flow for your reference.

Cheers, piyush adhikari +91-7995802472 & piyushadh@gmail.com