DualWrite Filtering

As I have mentioned before I am currently involved in implementing DualWrite with a customer and in this case there is data in CRM and FnO that we need to work around.

One example is a “single” contact that is used in multiple companies as an EDI adress. The reason I wrote “single” is that since we in FnO use the Global Adress Book, the contact is one Party that is instancuated as a contact in each of the Customers that are using it. This means that if you look in All Contacts there are a whole bunch of Duplicates.

These contacts are then synced, using DualWrite, to CRM… much to the annoyance of my CRM colleagues. This contact is of no use in CRM and I was asked to create a filter for them.

What i did was to set the field “Profession” in FnO (this was not being used) to EDI end then I added the following to the filters for Customer Contacts in DualWrite

FnO: (AssociatedContactType = 0) && (EMPLOYMENTPROFESSION != “EDI”)
CRM: msdyn_contactfor eq ‘Customer’ and msdyn_sellable eq false and msdyn_contactpersonid ne null and jobtitle ne ‘EDI’

As you notice, the syntax for the FnO and CRM sides is very different and that was the main reason I wrote this post. I needed a place to document the syntax 🙂

Links

Filter Not Working in FO side for Dual Write (dynamics.com)

Fetching App

Today I set up Synapse Link to a “Bring Your Own DataLake” for a customer. When I went through the configuration in SynapseLink and I had configured my D365FO Entities the process hung at the status Message “Fetching App”

After I looked around a bit I found the solution on Yammer… The issue was that the Service Principal for Common Data Service – Azure Data Lake Storage was missing from Microsoft Entra ID.

The solution:

New-AzADServicePrincipal -ApplicationId 546068c3-99b1-4890-8e93-c8aeadcfe56a

This command needs to be run by someone who is an Azure Admin on the tenant level

Note: While researching this, I also saw that the Service Principal for Power Query Online (AppId: f3b07414-6bf4-46e6-b63f-56941f3f4128) also might be missing. In that case… Run this: New-AzADServicePrincipal -ApplicationId f3b07414-6bf4-46e6-b63f-56941f3f4128

Good Luck

Forcing Initial Sync in DualWrite

I am currently working on a project where we are implementing DualWrite in existing Dynamics 365 Environments. Since we do not have huge data volumes we decided to use Initial Sync in DualWrite to migrate some data from D365 Finance and Supply Chain over to D365 for Sales.

When we verified the data we noticed and issue with addresses. It turns out that the customers had all addresses set to purpose Business and as it turns out the addresses that are configured in the default mapping for DualWrite are Delivery and Invoice addresses. Once the customer fixed the addresses, I thought: “Lets just resync the Customer V3 entity using Initial Sync!”. Well… turns out is was not that easy.

When the sync har run it synced 3 customers instead of around 1800…

When I looked at the Data Management Project (after ALOT of troubleshooting) which Initial Sync generates I could see that the project was set to “Incremental Push Only”… I wanted it to do a complete sync… why is this happening?? What do I do know? There are 3 different ways that “might” solve this.

  1. Disable and Enable Change Tracking

    Your first option is to turn, change tracking off and then on again. You do this in the Data Management workspace, in Data Entities.
  2. Reset DualWrite in FnO

    In the DualWrite section of the Data Management workspace, click Reset Link. This will let you setup the link again; as well as purging all of the settings, it will also reset historical configuration. Since we already synced most of the data, we did not have to run initial sync for most of the entities… we only re-ran the Customers V3 entity


  3. Deleting the DMF Project

    Every initial sync created a DMF project and when run the Initial sync for the second time, Dataverse tried to be smart and reuse the DMF project which meant. Deleting the project meant that it had to be created again.
    (Thanks Nathan Clouse for this insight)

    Links:
    https://learn.microsoft.com/dynamics365/fin-ops-core/dev-itpro/data-entities/dual-write/dual-write-troubleshooting-initial-sync?WT.mc_id=DX-MVP-5004702#error-customer-map

Whitelisting IPs for FnO Dev Environments

I got a question today from a customer… “Could you show me how to add IPs to the whitelist for our FnO Dev Mashines?”.. Here Goes

  1. Log in to the Azure Portal
  2. Find the Azure VM that you would like to change
  3. Go to Network Settings and locate the rdp-rule


  4. Open the rule and add your IP adress to the “Source IP addresses/CIDR ranges” field. You you have more than one IP, add a comma between the IPs.


  5. Click Save

Protecting your Dev VMs are important for a couple of reasons… The most important being that there are search engines on the internet that indexes RDP endpoints available to the Internet and if your VM is in that database, bad guys will start to try to break into them… and even if they might not succeed (LCS generates fairly good credentials) it will trigger a policy that will make the VM unavailable for logins for a while which, if nothing else, will stop your developers from doing their job.

Handling internal Vendors in DualWrite

At the moment I am involved in a DualWrite implementation between FnO and CE. The goal is eventually to be able to generate Quotes from CE and have them sync to FnO. As you might know there are a lot of entities required to get to the point where we can sync Quotes and one of the is Vendors V2 and another is Released Procucts. In order to sync Release Products we first need to have Vendors.

At this customer they are buying a lot of their products from an internal vendor (aka another Legal Entity of the same FnO instance. When we first synced Vendors, everything worked perfectly, with 100% completion, (as far as we could see) but when we tried to synd Released Products we were missing Vendors

Quite a lot… So digging into this we found that these Vendor were never synced, which we found a bit strange (remember 100 % completion.

Turns out there is a filter in DualWrite that looks like this and apparently internal Vendors are not of the type Organizations… They are LegalEntity

So with some modifications… it looks like this

But there is another thing we need to fix… We need to add the following line in the tranform rule

Once that is done, I force another Initial Sync of Vendors and once that is completed I could successfully sync Products… Yay !!