Episode #04 Community license is for you

In episode 4 we talk about what is the community plan that is offered by Microsoft and how it is the perfect plan for you whether you are an end user, customer, developer, consultant or Architect for the power platform. Best place to try out new functionality. Found here https://powerapps.microsoft.com/en-us/communityplan/ anyone with an office 365 account can join and start benefiting. Note at the time of recording the option to delete a developer environment was not available but it is now 🙂 Enjoy!

 

 

 

 

Flows triggered from different environments when a backup is restored

Recently faced a situation where a production flow was being triggered if a record was added to the triggering entity in a lower environment and the flow had the current environment connector configured on it, strangest situation I’ve encountered.

A deeper investigation lead to a recognized bug by Microsoft on callbacksregistrations that are created at the backend when you turn a CDS trigger based flow on. All is good until you decide to restore the environments backup or copy the environment to another environment as those callbackregistrations to your flows do not get reset and are still pointing to the Flows of the environment you took the restore of, this causes the flows to trigger even if the environment is different. Unfortunately, there is no resolution yet and we have to wait till end of October to have this bug fix deployed to the platform, however below is a detailed work around on how to get rid of those bad call back registrations.

Resolution:
First identify the callbackregistration id’s on the entity your flow is being trigger off of. Todo so you will need to execute the below query on your effected environment(the environment you restored the backup to)

https://name.crm.dynamics.com/api/data/v9.0/callbackregistrations?$filter=entityname%20eq%20%27TypeEntitySchemaNameHere%27%20and%20message%20eq%201

You’ll replace your environment url, TypeEntitySchemaNameHere with your entity schema name and the 1 at the end represents the type of trigger so follow table below for the relevant type

– Create = 1,

– Delete = 2,

– Update = 3,

– CreateOrUpdate = 4,

– CreateOrDelete = 5,

– UpdateOrDelete = 6,

– CreateOrUpdateOrDelete = 7

Once we have our url created and excuted, you’ll recieve a json message in return look for all callbackregistrationid’s and delete them one by one following the process below.

“callbackregistrationid”:”d87bac31-f308-eb11-a813-000d3a988097″

Goto your restored environment and open up the developer console(F12 for chrome), and execute command below under console tab by replace the callbackregistration id

fetch(‘http://envname.crm.dynamics.com/api/data/v9.0/callbackregistrations(17asd7d2-40db-ea11-a813-000d3a579b99)’, {​​ method: ‘DELETE’}​​)

this will delete the callbackregistration with the original environment. Make sure you do this for all callbackid’s against that entity, then goto your flow and turn off the flow, edit the flow and save it again and turn it back on. After turning the flow on you will notice that a new callbackregistrationid is generated when you execute the first query to get all callbackregistrationid’s. This means that your trigger has now been registered against current CDS, now all you need to do is repeat this for all the flows you have in your environment that have a CDS trigger point, all the best!

The Science of Upgrading Dynamics 365 Power Platform Solutions

This is a final post in the solution deployment series and we will see how we can upgrade the solution that we created in my previous posts. If you would like to understand what are solutions and how to use them please visit my previous three posts where I talked about How to create a solution, how to create a solution patch and how to merge solution patches together.

For delivering new functionality for an existing unmanaged solution that you have released as a managed solution package we have the option of versioning which a customer can use to upgrade the existing managed solution. To create that upgrade package reference the previous post. In this case we have the solution 9.2.0.0 already imported into our managed box(production) and we are going to import our new release 9.3.0.0 managed solution.

Production currently has 9.2.0.0 (managed)

 

We will click on import and select the downloaded managed version 9.3.0.0

Once we click next, the wizard will recognize that we already have an older version in our production environment and the version we are importing is different

Once we click next, we will get the below options, lets discuss these in detail. The Solution Action decides what we would like the wizard to do with the previous version of the existing solution on our target environment, the correct answer depends on the end result you would like to achieve.  Upgrade(recommended) will merge your previous solution and patches and replace your previous solution with the new one entirely, what entire means is that if you had an option set in your previous solution that you removed a value from in your new version this option set will no longer have the old value once the upgrade is complete. Stage for Upgrade performs the same upgrade in the first step but in a staged manner, meaning first your solution is imported but the replacement part is not done until you go through the apply solution upgrade process. I personally always follow the stage for upgrade process in order to ensure complete import of a large release before I move on to the upgrade itself; important thing to note on here is newer power platform only components such as canvas apps and flows get replaced even if you Only stage for Upgrade.

Update(not recommended) also replaces your old solution with the new one but does not replace entirely, meaning in the scenario I mentioned above for the option set, the value will not be removed and you will see all new values as well as old values.

 

The second part of selection is deciding what to do with the unmanaged layer on the target environment of the objects that are included in your solution. Maintain customization will not try to delete your active layer and simply import your managed release, specially helpful if you are in the unfortunate position of having an unmanaged solution layer on your production environment and its too late to clean it up and go back to a fully managed solution stack. Overwrite customization tries to delete the unmanaged layer in your target environment for the included objects in your solutions wherever possible. If you have maintained a clean managed layer stack box I would recommend going with this option.

Once our import is complete, since we selected the stage for upgrade option we will see the screen below; with an option of applying the upgrade right from here. Clicking it will carry out the complete upgrade. You can also do that by going into your solutions and selecting the old version and clicking on Apply solution upgrade(see below)

If we don’t apply the upgrade from above window, your new version will sit in a staged position waiting to be upgraded and you will see both solution in the system as below:

From here we need to select the older version and then click on apply Solution Upgrade, which will upgrade your solution.

Happy solutioning!

How to assign power automate per flow plan to your flow

Since Microsoft came out with their new licensing around the Power platform breaking the power apps licenses and power automate licenses apart there has been a lot of questions in the community forums and generally on how are power automates getting licensed. Short answer to that question is there are now two licensing options available if someone would like to enjoy the power of power automate and power automate is not included in the license options for power apps.

  1. Power automate per user plan
  2. Power automate per Flow plan

 

The per user plan is quite self explanatory and the license is assigned to the user like the previous power apps plan 1 and plan 2 licenses, this has a lower limit than the expensive per flow plan but does allow that particular user to create unlimited number of flows for themselves. The power automate per Flow plan has a different process of assignment to the Flow. In order to assign the per flow plan to your flow. First you have to procure the license which comes in a bundle of 5( yes you have to buy minimum 5 flows costing $500/ month) and then you can buy an additional each for $100. Once the licenses are visible in your tenant. You will start to see the below Add on option in your Admin power platform portal under capacity.

 

Under Add-ons you will see all the flow licenses you purchased and will get the option to assign to one of your CDS environments

Select the environment you will be running your flows in, assign the number of flows and click on Save. Once done goto your flow in that environment and click on edit. The Per-flow option that is disable by default will become available.

With flow capacity assigned:

 

For more info on flow licensing. please visit https://docs.microsoft.com/en-us/power-platform/admin/powerapps-flow-licensing-faq

I also recommend you take the time and read the latest (As of July 2020) licensing guide, https://go.microsoft.com/fwlink/?linkid=2085130

 

 

 

Merging D365 Power Platform Solution Patches into a Major Version Update

If you would like to understand what are solutions and how to use them please visit my previous two posts where I talk about How to create a solution and how to create a solution patch. In this post we will see how we can merge the patches we created and create a Major version update of the solution for release.

 

To start off we will create another patch on top of the existing 9.1.0.0 base solution and the patch 9.1.1.0

To create another patch, select the base solution and click on Clone a Patch

This will create the second patch and versioning will stay in order

To create a major release we will follow what is called the cloning process. The good thing about following the patch approach and sticking to the recommended versioning is that our cloning will merge all patches together along with the base solution when we create a major version. In order to do so we will select the base solution, in this case 9.1.0.0 and click on Clone Solution

As we can this time the process recommends the next major version which is 9.2.0.0 instead of 9.1.3.0. When we click save the base solution and all patches will be merged automatically and we will end up with a single solution versioned as 9.2.0.0 this will be the solution we export in order to do a version upgrade at the managed box end (more on that in later posts)

 

To read more on patches please visit, https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/customize/use-segmented-solutions-patches-simplify-updates

 

Testing the Payable Skype Chat Bot to create and find a Purchase order in D365 #Dyn365FO

A chat bot recently developed by my colleagues Amir Nazim and Zain Khan at Mazik Global got me excited for how much room there is for enhancing the AX user experience and simplifying day to day tasks of an ERP end user. This chat bot right now enables you to find an existing purchase order in AX within a few seconds and also has the option of letting you create a purchase order in AX by answering a few questions of the bot. So if you are an end user that’s on the go or is finding it too cumbersome to open AX just to see details of a purchase order  you can simply hit up this bot and get it to do the work for you.  See the video below in which I talk to this bot to perform these tasks for me without having to say please. This showcases the true power of Odata entities and the bot framework.


For information on how to create a similar bot visit:

  1. Payable Bot Dynamics ax 365

  2. Purchase Order Chat-bot application with OData endpoints using WebApi in D365 for Operations

 

How to read data from a production instance in D365 #Dyn365FO

Recently I was trying to find the best way to read only updated/changed data from AX for some entities like customers and vendors in D365. To do this in AX 2012 we would generally get a read only database copy made of  production, enable modifiedDateTime fields and query the recently changed data from that database for our reporting needs but in D365 a cool new feature has been provided called change tracking. Through this you can get AX to push changes to your records to an external database outside of AX. A brief overview of this is that we use data entities to list what we need pushed out and configure them to export to our database. Read more on this here: https://docs.microsoft.com/en-us/dynamics365/unified-operations/dev-itpro/data-entities/entity-change-track

In Data management:

Register read only DB outside AX, providing its connection string:

 

Change tracking options:

Error on MPOS sync jobs #Dyn365FO

Errors:

Failed try of uploading data package to blob storage, error message: System.Reflection.TargetInvocationException has been thrwon

connection could be made because the target machine actively refused it

The change tracking information related to scheduler job 1090 and channel database group Default are only partially available, due to the headquarters data base change tracking retention period settling.

 

Solution:

Make sure your azure emulator is running.

How to check which IIS your AX Finance and Operations web App is hosted on in D365 #Dyn365FO

This can be done by going through the web.config xml file which is located at  “X:\AOSService\webroot”. Several parameters are configured here for for the application and i’ll go through some below, as a developer or administrator of Dynamics AX it is essential to know what configs are set here, so do give it a read and go through each element.

Hosting configs:

<add key=”Infrastructure.HostName” value=”usnconeboxax1aos.cloud.onebox.dynamics.com” />
<add key=”Infrastructure.HostUrl” value=”https://usnconeboxax1aos.cloud.onebox.dynamics.com/&#8221; />
<add key=”Infrastructure.SoapServicesUrl” value=”https://usnconeboxax1aos.cloud.onebox.dynamics.com/&#8221; />
<add key=”Infrastructure.InstanceEndpointIPAddress” value=”localhost” />
<add key=”Infrastructure.MaxInstanceEndpoint” value=”10010″ />
<add key=”Infrastructure.MinInstanceEndpoint” value=”10000″ />
<add key=”Infrastructure.PersistentVirtualMachineIPAddress” value=”localhost” />

Package directory folder settings:

<add key=”Aos.AppRoot” value=”C:\AOSService\webroot” />
<add key=”Aos.PackageDirectory” value=”C:\AOSService\PackagesLocalDirectory” />

Database info in the file:

<add key=”DataAccess.Database” value=”AxDB” />
<add key=”DataAccess.DbServer” value=”localhost” />
<add key=”DataAccess.SqlPwd” value=”XXX” />
<add key=”DataAccess.SqlUser” value=”axdbadmin” />