Quantcast
Channel: Microsoft Dynamics 365 and Power Platform Library
Viewing all 102 articles
Browse latest View live

D365FO - Method wrapping and chain of command

$
0
0
Another most awaiting Extensibility feature (Chain of Command) is going to come with one of the next platform updates. 

This enables you to call/use protected members and methods without making them hookable and using pre/post event handlers. 



More details are here https://blogs.msdn.microsoft.com/mfp/2017/07/04/extensible-x-chain-of-command/ and also here https://roadmap.dynamics.com/?i=296a1c89-ce4e-e711-80c0-00155d2433a1#.WVw1llbSw-M.linkedin

Stay tuned on above road map site to find more on this feature.

D365FO - Dynamics 365 Tutorials Help You Get up and Running Fast

Read excel through X++ in D365FO

$
0
0



Sample code to read an excel file, all it need file stream as a parameter.


publicboolean importFromExcelfiles(System.IO.Stream _stream)
{
   OfficeOpenXml.ExcelWorksheet        worksheet;
   OfficeOpenXml.ExcelRange            cells;
   OfficeOpenXml.ExcelPackage          package = new OfficeOpenXml.ExcelPackage(_stream);
       
   int totalRows,totalCells,rowCounter,cellCounter;

   if(package)
   {
      worksheet       = package.get_Workbook().get_Worksheets().get_Item(1);
      cells           = worksheet.Cells;
      totalRows       = worksheet.Dimension.End.Row ;
      totalCells      = worksheet.Dimension.End.Column;

      for (rowCounter = 2; rowCounter<= totalRows; rowCounter++)
      {
          for (cellCounter=1; cellCounter<=totalCells; cellCounter++)
          {
              //Do something with the values
              info(cells.get_Item(rowCounter, cellCounter).value);
          }
      }
   }

   returntrue;
}

This method can be called like this;

FileUploadTemporaryStorageResult    fileUploadResult;

fileUploadResult = FileUploadControl.getFileUploadResult();

publicvoid importFromFile()
{
    if(fileUploadResult)
    {
        using(System.IO.Stream stream  = fileUploadResult.openResult())
        {
            Filename    filename;

            if(stream)
            {
                try
                {
                    filename = fileUploadResult.getFileName();

                    if(this.importFromExcelfiles(stream))
                    {
                        info(strFmt("File %1 has been imported successfully", filename));
                    }
                }
                catch(Exception::Error)
                {
                    warning("File import failure");
                }
            }
        }
    }

}

D365FO: How to debug a non-development and a non-production environment

$
0
0
This post outlines the steps how to debug an issue which is happening in non-development or non-production environments e.g. UAT environment.




1.    RDP to your environment where you want to debug the issue, with this example I am connecting to UAT (Sandbox). 
2.    Connect to SQL server
a.     Get the server name from LCS database accounts
b.    Use .database.windows.net to connect to database


3.    Create a new SQL sign-in that the developer can use. This step lets the system administrator maintain the security of the sandbox environment. The developer will have access to one database for only a limited time. Use the following code to create the new SQL sign-in.

CREATEUSER devtempuser WITHPASSWORD='pass@word1'
EXECsp_addrolemember'db_owner','devtempuser'

4.    Stop following services in development box
a.     IIS or world wide web publishing service development box
b.    Microsoft Dynamics 365 unified Operations: Batch Management service

5.    Go to J:\AosService\WebRoot\web.config.
6.    Save a copy of the original web.config file, so that you can switch back later. I copied file in the same directory and renamed the web.config to webDev.config and copied one to web.config
7.    Edit the following section in the web.config file.
Before your changes
<add key="DataAccess.Database" value="AxDB" />
<add key="DataAccess.DbServer" value="devDbServerName" />
<add key="DataAccess.SqlPwd" value="password" />
<add key="DataAccess.SqlUser" value="axdbadmin" />
After your changes
<add key="DataAccess.Database" value="sandboxdatabaseServerName" />
<add key="DataAccess.DbServer" value=" sandboxdbName.database.windows.net" />
<add key="DataAccess.SqlPwd" value="P@ssw0rd" />
<add key="DataAccess.SqlUser" value="devtempuser" />

8.    Start IIS or world wide web publishing service
9.    Do not start batch service otherwise your batch jobs of development box will start writing into UAT environment. Be careful with this step!!!
10.  Now, connect to your development box from browser. Oops!!! It does not connect and throw an error. Don’t worry let’s jump into event log and see what’s in there



Okay; so it is an access issue and here is the resolution for it.

11.  Execute the following command against Master database in UAT database server. IP address you get from the event viewer.

exec sp_set_firewall_ruleN'PPDEV01','13.70.85.22','13.70.85.22'



12.  Connect to development URL again from browser and this time it works. You can now access UAT database (all legal entities etc.)
13.  Restart or your start your VS in development box and attach to Process w3wp.exe to troubleshoot the issue(s)

Done with your debugging and got the resolution J

14.  Now it is time to remove devtempuser from UAT database, this prevents having the permanent access to the sandbox database. Right-click on the devtempuser user under Sabndoxdatabase | Security | Users and delete it.

15.  Stop IIS.

16.  Revert changes from the web.config file or simply delete the copied one and rename the original one from WebDev to Web.

17.  Start IIS.

18.  Start batch service 

19.  Connect to development environment URL and make sure it is connected to development database.

Reference: 
https://docs.microsoft.com/en-us/dynamics365/unified-operations/dev-itpro/dev-tools/debugx-issue-against-copy-of-production

Newly created data entity is not visible in data management entity list?

$
0
0
If you created a new data entity and it's not visible in your data management entity list. 

Open Data Management workspace -> Framework parameters -> Entity Settings and hit the "Refresh Entity List" button


D365 platform update 12 (7.3): Admin access changes

$
0
0
The Microsoft team did release platform update 12 for Dynamics 365 for Finance and Operations, Enterprise Edition 7.3. There have been few changes concerning accessibility (admin access on VMs).

Starting with platform update 12 users do not have admin access to D365 VMs hosted on the Microsoft subscription.

Which means:

1.    You can only log in with the "builtin\Userxxxxxxxxx" account and not the “builtin\axlocaladmin” account anymore.
Prior to PU12 7.3

With PU12 7.3

2.    IIS Express is used as the web server instead of IIS

3.    IIS Express runs when Visual Studio is running 

4.    Visual Studio cannot be run as Administrator anymore (you are not the local admin anymore on your development VM L ). Just double click Visual Studio shortcut or run it from start.

Admin access to development virtual machines can only be achieved with following options;

1.    Host a development VM on a separate Azure subscription

2.    Deploy VM with an older platform update than PU12 and then upgrade platform update (This option will not work for 7.3)

Reference: https://community.dynamics.com/ax/b/newdynamicsax/archive/2018/01/05/restricted-admin-access-on-development-vms-with-platform-update-12-what-you-need-to-know

D365FO - Get list of obsolete data entities

$
0
0
Find which data entity is obsolete after every new update. Here are the steps.

For example; Customers V2 data entity is obsolete with version 8.0








For developers: Type the below in the metadata search in VSTS:
type:dataentityview property:isobsolete=yes


D365FO - How not to select Fleet Management modules in package creation

$
0
0
Want assurance that you never select/include fleet management modules in package creation or build all module together. Just rename the Descriptor folder from all these three locations and refresh models in VS first time to reflect the changes.

<Service volume drive>:\AosService\PackagesLocalDirectory\FleetManagement
<Service volume drive>:\AosService\PackagesLocalDirectory\FleetManagementExtension
<Service volume drive>:\AosService\PackagesLocalDirectory\FleetManagementUnitTests



D365FO - Add new participant and type of participant to Participant workflow element

$
0
0
There are times when you want to add a new type of participant other than security role participants and user group participants, this post describes the steps to take and achieve this requirement.

This is the final output































Let's find out how did it work.

This is how each type of participant exists in AOT so a new Workflow Participant Assignment Provider needs to be created in order to see it in the Type of participant list as for this example 'Vendor invoice approval provider' is being added.
Created a new Workflow Participant Assignment Provider with the following properties.

Available For All Workflow Templates = No [Just want to have this new Participant type vendor invoice approval workflow]

Added new workflow type and link it with VendInvoiceApprovalJournalTemplate which is the workflow type name for Vendor tax invoice approval journal workflow 



Each provider has a Provider class and here is an example of the class used for above created participant provider

classFF_VendInvoiceWFParticipantProviderExpend  extendsWorkflowParticipantProvider_Expend
{
    conststr owner = 'OWNER';

    publicWorkflowParticipantExpenDocumentType documentType()
    {
        returnWorkflowParticipantExpenDocumentType::VendInvoice;
    }

    publicWorkflowParticipantTokenList getParticipantTokens()
    {
        WorkflowParticipantTokenList tokenList = WorkflowParticipantTokenList::construct();

        tokenList = super();
        tokenList.add(owner, '@SYS77709');
        return tokenList;
    }

    /// <summary>
    ///     Resolves the vendor invoice line dimensions to a list of users
    /// </summary>
    /// <param name="_context">
    ///     An instance of the <c>WorkflowContext</c> class
    /// </param>
    /// <param name="_participantTokenName">
    ///     The participant token that is selected for a role-based assignment.
    /// </param>
    /// <returns>
    ///     An instance of the <c>WorkflowUserList</c> class that contains the enabled users from the token
    /// </returns>
    /// <exception cref="M:Exception::Error">
    ///     Participant token does not exist
    /// </exception>
    publicWorkflowUserList resolve(WorkflowContext _context, WorkflowParticipantToken _participantTokenName)
    {
        LedgerJournalTable ledgerJournalTable = this.getLedgerJournalTableFromContext(_context);

        WorkflowUserList userList = WorkflowUserList::construct();
       
        if (_participantTokenName == owner)
        {
            userList.add(DirPersonUserEx::worker2UserId(LedgerJournalTable::findRecId(_context.parmRecId()).FF_Originator));
        }

        return userList;
   
    }    

    /// <summary>
    /// Gets the <c>LedgerJournalTable</c> record from the workflow context.
    /// </summary>
    /// <param name = "_context">The workflow context.</param>
    /// <returns>A <c>LedgerJournalTable</c> record.</returns>
    privateLedgerJournalTable getLedgerJournalTableFromContext(WorkflowContext _context)
    {
        LedgerJournalTable ledgerJournalTable;

        if (_context.parmTableId() == tableNum(LedgerJournalTable))
        {
            ledgerJournalTable = LedgerJournalTable::findRecId(_context.parmRecId());
        }
        elseif (_context.parmTableId() == tableNum(LedgerJournalTable))
        {
            ledgerJournalTable = LedgerJournalTrans::findRecId(_context.parmRecId(), false).ledgerJournalTable();
        }

        return ledgerJournalTable;
    }

    /// <summary>
    /// Validates that the <c>WorkFlowContext</c> has the expected tables.
    /// </summary>
    /// <param name = "_context">The workflow context.</param>
    /// <returns>true if the expected tables are found; otherwise, false.</returns>
    privateboolean doesContextHaveExpectedTable(WorkflowContext _context)
    {
        return _context.parmTableId() == tableNum(LedgerJournalTable) || _context.parmTableId() == tableNum(LedgerJournalTrans);
    }

    publicstaticFF_VendInvoiceWFParticipantProviderExpend construct()
    {
        returnnewFF_VendInvoiceWFParticipantProviderExpend();
    }

}

If your interested to know how it used to work in AX 2012, follow this link https://dynamicsnavax.blogspot.com/2009/12/ax-workflow-direct-approver.html

D365FO - Start hierarchy approval with specific worker

$
0
0
There are times when clients want to start hierarchy approval from a specific worker and not from the one who initiated the workflow and then traverse up the hierarchy.

Scenario:

  • Invoices are coming from third-party into FinOps and creating tax invoice registers
  • Setting the Approved by field at tax invoice register line level
  • AP Clerk/Administrator assigns these invoices to correct worker for approval
So, in the above scenario, the AP clerk initiated the workflow but the workflow will not go his/her line manager for approval instead it will be assigned to the owner (approved by) of the invoice.



This is what we want to achieve - add a new Start from


























This Start from list get populated through getSupportedDataType() in  class WorkflowHierarchyProviderHelper

















Create a new event handler class and subscribe to the delegate as shown below.

P.S. WFOwner is the custom created EDT.


classECL_WorkflowHierarchyProviderHelperEventHandler
{
    [SubscribesTo(classstr(WorkflowHierarchyProviderHelper), delegatestr(WorkflowHierarchyProviderHelper, addAdditonalSupportedDataTypesDelegate))]
    staticvoidaddAdditonalSupportedDataTypesDelegate(Set _supportedDataTypes)
    {
        _supportedDataTypes.add(extendedTypeStr(WFOwner));
    }
}

Add a new field on LedgerJournalTable and assign the WFOwner EDT to it. LedgerJournalTable is for reference as the above change is implemented for vendor invoice approval.

D365FO - Rotate SSL Certificates in Tier 1 environments

$
0
0
If you face following error all of a sudden when accessing tier 1 environment like I faced, follow next steps in the post to get it working.

































The SSL certificate has been expired and requires renewal





How to renew the certificate? The easiest way is to do through LCS

Go to Environment details page | Maintain | Rotate secrets | Rotate SSL Certificates 

Click OK on next opened screen, environment status changes to Rotating secrets.

Important: This does little bit time so better plan it accordingly.












Refresh environment details page and wait for it to turn to Deployed state and access, it should be fine now.

D365FO - How to read metadata information from AOT through X++

$
0
0
Following code snippet loop through metadata information of AOT objects (this example is to loop through all data entities).


classDataEntityExtension
{
    /// <summary>
    /// Runs the class with the specified arguments.
    /// </summary>
    /// <param name = "_args">The specified arguments.</param> 
    publicstaticvoid main (Args _args)
    {
        DMFEntityTableExtension entityTableExtension;

        var entityNames = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetDataEntityViewNames();
        Var enumerator = entityNames.getEnumerator();
       
        while (enumerator.MoveNext())
        {
            enumerator.MoveNext();

            Microsoft.Dynamics.AX.Metadata.MetaModel.AxDataEntityView axDataEntity = Microsoft.Dynamics.Ax.Xpp.MetadataSupport::GetDataEntityView(enumerator.Current);

            if (axDataEntity)
            {                
                    entityTableExtension.Label = SysLabel::labelId2String(axDataEntity.Label);
                    entityTableExtension.PublicEntityName = axDataEntity.PublicEntityName;
                    entityTableExtension.PublicCollectionName = axDataEntity.PublicCollectionName;
                    entityTableExtension.EntityName = axDataEntity.Name;
                    entityTableExtension.IsPublic = axDataEntity.IsPublic;
                    entityTableExtension.insert();

                    info(strFmt("Entity Name: %1 -- Entity Label; %2 -- Entity public collection Name: %3 -- Entity Public Name %4 -- Is Entity Public - %5",
                                axDataEntity.Name,
                                SysLabel::labelId2String(axDataEntity.Label),
                                axDataEntity.PublicCollectionName,
                                axDataEntity.PublicEntityName,
                                axDataEntity.IsPublic));
               
            }
           
        }
    }

}

OUTPUT:





What's coming 2020 release wave 2 plan - my takes

$
0
0

Microsoft Dynamics 365 and Microsoft Power Platform 2020 release wave 2 plans are out, check out the full list



These features will be available 
from October 2020 through March 2021

2020 release wave 1 plan
 which are from April 2020 through September 2020

What's new and planned for Dynamics 365 Finance features list can be viewed from here

What I liked most is listed
💗

Touchless email reminders to customers

We often have to set alerts for payment reminders based on certain conditions (e.g. overdue) but with this touchless email reminders features, it will give you more peace of mind by automatically sending email reminders might initiate an activity that encourages payment sooner than would be made without the reminder.
When enabled, email reminders will be sent automatically to customers, with a list containing overdue invoice information based on email templates.

Configurable business documents conversion to PDF

This has been a very common requirement even in AX 2009 and AX 2012 and now in Finance and Supply change management to have documents convert to PDF e.g. when printing reports on screen or download. Having enabled this new feature let you any business document generated in Excel or Word to be converted to PDF.
You can use the PDF conversion option to convert the output in Microsoft Office format (Excel/Word) to PDF format.

Make PDF conversion available
To make the PDF conversion option available in the current Finance instance, open the Feature management workspace, and turn on the Convert Electronic Reporting outbound documents from Microsoft Office formats to PDF feature.





















Finance and Operations cross-app capabilities

MS has done a fantastic job in bringing Finance and Operations data natively available in CDS through Data Integrator and Dual Write. With this release wave, more features are coming to streamline this process and enhance digital transformation.
These features are going to be person opt-in enabled which allows customers to adopt new features at their own cadence and are not forced with 8 updates of the year from MS.
  • Lifecycle Services (LCS) new enhanced experience consistent for all Dynamics and Power Platform users.
  • Enhanced view with issues categories
  • A context-based document search experience
  • More visibility to known issues and status for the impacted product versions through Knowledgebase suggestions.

New grid control with a lot more advanced features

You may have already used some of these features and have experienced issues e.g. You might run into situations occasionally where the grid headers and data are misaligned, or the grid jumps while you scroll through data or create new records.
Benefits at glance
   ·         Performance
·         Positional scrolling
·         General improvements
·         Reorder columns
·         Mathematical formulas
·         Totals
·         Fast data entry


Task recorder with enhanced capabilities

Improvements to allow coverage of additional scenarios by regression tests and to improve the experience of users creating and maintaining these regression tests.

Saved views – general availability


Data and process integration - My favorite 💓

Finance and Operations data natively in Common Data Service

Release wave 1 features for dual write is:
  • 112 entities are supported - that's a pretty big number so hats off to MS to achieve this in record time.
  • Customers, Vendors, and Products integration between FO and CE
  • Company concept in CDS
  • On-demand pricing from Finance and Operations apps
  • Integrated quotes, orders, invoices, and assets
  • Reference data from finance, tax, account receivable and accounts payable
Release wave 2 targets:
  • Support for Dynamics 365 Commerce scenarios on Common Data Service
  • Party model, activities and notes, and services
  • Generic Dual Write enhancements and error handlings
Finance and Operations data in Azure Data Lake Storage Gen2

·         Available in all supported regions
·         The transition from BYOD and Entity Store to Azure Data Lake Storage Gen2

Q&A: The Dual Write Questions

$
0
0

Recently conducted webinars, summits, and D365 FinOps Saturday sessions on Dual Write. 

Interested to watch the replay? Here are the recordings. (do subscribe for upcoming events!!!)




Dual Write is an out-of-box infrastructure that provides near-real-time interaction between model-driven apps in Microsoft Dynamics 365 and Finance and Operations apps. When data about customers, products, people, and operations flow beyond application boundaries, all departments in an organization are empowered.

Dual-write provides tightly coupled, bidirectional integration between Finance and Operations apps and Common Data Service. Any data change in Finance and Operations apps causes writes to Common Data Service, and any data change in Common Data Service causes writes to Finance and Operations apps. This automated data flow provides an integrated user experience across the apps.

Q&A part of any discussion/presentation benefits you to understand the topic from your viewpoint. The following are the questions I have received in all my online sessions. I will keep adding all future questions as part of this blog series.


Q: How to transfer this setup(mapping, JSON, etc..) to other env. (like DEV to SAT and SAT to PROD)
A: Dual-Write is solution aware which enables basic ALM (Application Lifecycle Management) abilities such as transportation and backup/restore of Dual Write maps across environments.

Q: Does it work well for entities that have composite keys
A: Composite keys are fine and Dual-Write automatically adds legal entity/company to the keys for entities that aren't global to make them effectively composite. 

Q: Do these apps (Dual write solutions) are Microsoft Owned or Customer-owned? Can it be possible to replace it with Customer-owned? 
A: The apps are Microsoft-owned and automatically added to AAD so they'd be difficult to replace. 

Q: OData isn't known for great performance, how long does the initial sync take?
A: True on OData performance, initial sync depends on the volume of the data. Dual Write syncs record-by-record.

Q: You mentioned there are still some features coming in the future. Can you estimate how much of F&O has been already mapped to  CDS and how much still to come?
A: Think of it as 2 parts.
1. The technology that allows the two systems to integrate in real-time. This I feel is pretty solid and improving.
2. Mapping scenarios that are developed by Microsoft.
Look here to look at concepts Microsoft has done and documented.

https://docs.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/data-entities/dual-write/customer-mapping

Q: Does it support multi-lines documents? something like Purch order with several lines 
A: Yes. because it is in real-time.

Q: How errors are processed?
A: It will appear in real-time to the user

Q: so saving will not be allowed in CE?
A: correct. it will rollback. It is part of the transaction ttsbegin/ttscommit

Q: Is there a way at the moment to handle cross-company shared scenarios using the Dual Write?
A:Not supported with dual write at this moment.

Q: How Pricing sync works between CE and FO

Q: Question about licensing costs that might need to be taken into consideration when using CDS?
A:Licensing model that dual write is a service bring added to the product, but you do not need an additional license for it, so it's included in your FinOps subscription so that allows you to get the data written into the CDS. However, as soon you need to have the data to use the data on sales you have to have to subscription for the sales or for marketing. 

For whatever customer engagement apps you would like to use so that's not included. So take care in this area.

Dynamics 365 Licensing and Pricing https://dynamics.microsoft.com/en-us/pricing/

Q: How do you handle situations where address fields on CE are 50 chars wide but 25 on FO?
A: Truncate, but the best to keep it equal size to avoid data lost

Q: Performance (speed) of CDS?
A: For performance, the recommendation is to sync 1000s of records with initial sync.

Q: Do unlinking environments have any impact on data already synched between FO and CDS?
A: There will be no impact already synced data with unlinking the environments, the data will remain in each environment and you need to delete from each environment before linking the environments again if needed 

Q: Will we able to create a model-driven app with D365FO data rather than a canvas app?
A: Yes, dual write makes it possible to have FO data in CDS which can be used for any app.

Q: If we create the custom entity map, do we also have to add the integration key, or will it be added automatically?
A: Integration key comes from CDS which is an alternate key there (if defined otherwise company field) and this comes automatically to Dual Write.

Q: Is this restricted to a single tenant? Can it be used between tenants which are located in different datacenters?
A: Yes, both environments have to be on a single tenant. FO and CDS instances can be located on different datacenters but to avoid latency it is recommended to have both in the same datacenters.

Q: How to deploy dual write entity mapping from DEV to UAT to PROD?
A: Dual-Write is solution aware which enables basic ALM (Application Lifecycle Management) abilities such as transportation and backup/restore of Dual Write maps across environments. This is through solutions in PowerPlatform.

D365FO Update to PU36 (10.0.12) and experienced error "Something went wrong when communicating with the service."?

$
0
0


Version 10.0.12 is now gerneally available https://docs.microsoft.com/en-us/dynamics365/fin-ops-core/fin-ops/get-started/whats-new-changed?toc=/dynamics365/finance/toc.json

If you are planning to update existing VM to Version 10.0.12, you will hit this error message when opening (browsing) application


What does this mean for you today?
  • If you are planning to update your developer or build VM to PU36/10.0.12 or higher, consider just redeploying a new VM and you will be all set!
  • If you cannot deploy a new VM just yet:
    • If you have a Microsoft-managed VM, we will take care of .NET 4.7.2 for you prior to the PU37/10.0.13 release.
    • If you have a VM on your own subscription, or you use the downloaded VHD, you will need to manually install .NET 4.7.2 today or any time prior to installing PU37/10.0.13.
    • In both of those cases, you will need to get a new VM by April 2021!

The fix is also available as quality update with KB4573886

The Dual Write implementation - Part 1

$
0
0


In this post I will talk purely about how to implement dual write, there will be series of posts to address complete implementation cycle so stay tune.

Let's deep dive without any therotical information

Check you have access to https://make.powerapps.com/
Choose right environment of CDS (CE)


Make sure you have access to the environment too, click on gear icon and Admin Center 

Look for required environment and Open it, you must have access as going forward you are going to configure dual write steps in the environment user the same user you are logged in now.


Now, go back to power platform admin center and follow these steps.

1. Resources
2. Dynamics 365 apps
3. Filter with word 'Dual'

 
Follow these steps and install first dual write solution 'Dual-write application orchestration solution'


Follow same steps to install 'Dual-write core solution'

Log on to CE environment and click on gear icon | Advance settings



Click on Settings little down arrow and select Security



Click on Users 


Switch to Application Users and create two new users using these two application Ids

00000015-0000-0000-c000-000000000000
2e49aa60-1bd3-43b6-8ab6-03ada3d9f08b


Any email address can be used and not necessarily be valid emails

Now, log on to D365 Finance and Supply Chain Management environment

Go to System Administration | Setup | Azure Active Directory Applications and add following application Ids

33976c19-1db5-4c02-810e-c243db79efde
2e49aa60-1bd3-43b6-8ab6-03ada3d9f08b


You are done with the initial setup and installation of dual write solutions - great job !! 😐

NOTE: Both CDS and FO environments have to be on same tenant.

That's it with this post and will continue with configuring dual write so stay tune!!! 

The Dual Write implementation - Part 2 - understand pre-requisites

$
0
0
Before I jump to the environment linking for dual write integration, let's action pro-actively on the pre-requisites.

App Version

Image result for tick box

The dual-write core solution

Image result for tick box

The Common Data Service can connect to Finance and Operations apps

Image result for tick box

The Finance and Operations apps can connect to the Common Data Service

Image result for tick box

Apps in tenant

Image result for tick box

The dual-write registration and runtime plugins

Image result for tick box



All pre-requisites passed and it will look like this, will detailed in my post.



We need to setup some application user at FinOps side and similarly in CDS instance.


    "The reason for that is because the dual write technology is tightly coupled, Synchronous engine and what that means is that the data or the integration have a direct connection between the two system. So for example, FinOps when it needs to send data, it send the data to CDS using direct connection. What you need to do is to create some application users on each application side to allow those incoming connections."


    This is what we setup in Part 1


    If I got to my FinOps environment and go to azure active directory applications form. You will be able to see that I have actually set up two application users.


     
    1. One application user is for incoming connections from the data integrator side
    2. One is for incoming connection from my CDS instance

      Why data integrator side on the incoming connection?

      When initial write happens, the initial write is nothing but a hidden data integrator project, an initial sync mode or an initial write mode is we have incoming connection from the data integrator to D365 Finance and Operations.

      Once you are in live sync (running state) mode then connection would be incoming from CDS instance.

      This is why you need application users for two different type of connections.

      You also need a similar setup in your CDS instance.

      Dual Write solutions and aspects

        You need to have certain dual write solutions installed on your CDS environment. So because the dual write has two aspects

        1. The infrastructure
        2. The application



          There are two separate solutions as stated and showed in Part 1

          The dual write core solution is focus on the infrastructure capabilities at the solution awareness for the dual write maps


          The dual write orchestration solution includes all OTB entities and mappings that MS has shipped as part of DW

          This is available with name Dynamics 365 Finance and Operations Dual Write Entity Maps.


          Once applied to the environment it creates all Out of the box entity maps and will look like as follows.

          D365FO: An Internal error has occured

          The Dual Write implementation - Part 3 - Entity map explained

          $
          0
          0
          In continuation of our journey to have D365 FinOps data in CDS, Following has been covered.


          The Dual-write has been setup and the dual-write solution has already applied 


          I have chosen Asset management asset types (msdyn_customerassetcategories) entity map from the list to put lights on all infrastructural features (aspects) of Dual-write.

          Entity map naming convention 


          Entity mappings: 
          1. Click on entity map to view all entity fields mappings
          2. More field mappings can be added by clicking on Add mapping
          3. These can be OTB fields of entities or custom added ones
          4. Two actions can be taken on each entity map field; Reset and Delete

          Activity log provides details when was the last run and what was the outcome of that last run, if there was an error it shows activity id which can be shared to MS dual-write team to investigate further if you cannot find any resolution.


          Initial Sync details displays the outcome of initial data copied from D365 FinOps to CDS or vice versa. 

          Initial sync runs for all legal entities mapped for dual write e.g. if you have mapped more than 1 Legal entity there will be that number of entries in initial sync details. It also runs in alphabetic name sequence of the legal entity, e.g. DAT, USMF, and USSI 


          Catch up errors displays errors happened during data copied across environments through dual-write


          Details tab shows detail about the selected entity map


          Entity map version lets you save your changes with versioning (it is a manual numbering system so don't mix it with actual version control numbering).

          Add a new entity field mapping and hit Save as and I have to choose Publisher and type in Version


          After provided this information and saved, it keeps the versioning of entity mappings.


          Below, I am showing this feature for Warehouse entity map where I have added custom fields

          Entity map can be Stopped or Paused and these option are enabled when the entity map is running otherwise you will see Run option.




           

          Field mappings can be transformed using value maps to translate data into target language e.g. D365 FinOps understand Yes or No however, CDS holds data as true or False so this transformation has been defined below.

          These transformations can be copied or written using JSON format - very handy option.


          Dual-write can be setup for One-directional sync and Bi-directional sync.


          Data can be filtered from any part of the integration e.g. To sync only Customers of type "Organization" filter can be added like this by clicking on little funnel next to FO entity name

          Similary CDS filters can be added and the syntax is defined here Syntax Expression in Query Ranges


















          New entity map can be added where an OTB entity or custom built entity can be chosen 

          followed by adding entity fields mappings as explained above.





          MS D365 FinOps and Supply Chain Management Integration - Session at Microsoft Rector Sydney

          $
          0
          0

          Recently talked about Microsoft Dynamics 365 Finance Operations and Supply Chain Management integration with Common Data Services - Dual write, Virtual Entities, and Data Integrator.

          Idea is to show how FO data can be utilized in Power Platform being now as a part of MS Ecosystem as an business application app.

          Data was there since beginning, technologies change over period of time to access, manipulate, and display the data. This is an era of making every user a powerful user so everyone can articulate their ideas.

          Microsoft Dynamics 365 Finance and Operations applications have been the backbone of all financial data in any organization but how can you leverage this data using Power Platform and have this into Common Data Service.

          This session explains all these aspects.

          Viewing all 102 articles
          Browse latest View live