For all those who follow my blog I would be giving a comprehensive session on solutions deployments and approaches at DynamicsCon coming this September 2020 on. If you have not gone in at voted yet, please do so at https://dynamicscon.com/sessions/ this is an amazing event for the community by the Dynamics Power Platform community leaders and experts. There are multiple categories and lots to learn from the industries best.
You’ll find my session under the Dynamics 365 Power Platform section, go out there and vote!
Note: I’m a firm believer in releasing only managed solutions to testing and production environments and maintaining an unmanaged solution on the development box only, therefore this post is based on the MS best practice architecture of exporting managed solutions for distribution.
To understand solution patches think of them in the direct definition of what a patch is, something to mend or fix up a weak or broken point. For example a complete wall with a hole or a small missing piece in it would require a patch not a new wall. Solution patches are meant to fix up or complete a deployed solution, not to deploy new functionality; I repeat, they are not meant to deploy new additional functionality. This generic definition should be your rule of thumb when deciding whether to create a patch and release that or a new major version release.
On the other hand whether you are in a situation of actually needing to release a patch level fixes or working on a new sprint in your project to release for UAT after the first version of the solution has already been release, creating a patch is always a good idea to keep your new sprint functionality separate from the main solution until you decided to release the functionality, as that helps a great deal in identifying/reviewing the changes done before they are merged into a new version of the solution( more on major releases to come in future posts)
In order to create a patch for an existing solution in your development box. Select the base solution and click on Create patch
You get the option to change version, ideally you should let the system recommended one stay as it is managed in order of creation if you create more than one patch
Once the patch is created you will see the base solution as well as the patch:
This patch is now ready to be exported as a managed solution independently and applied to target environment.
Solution’s are used to transfer and release functionality in a packaged manner for other environments to be imported to. This approach applies to the Power Platform Make portal and the Dynamics customization(old interface) for creating solutions. To make it easier I will mention navigation for both.
In order to create a solution in the power platform, navigate to https://make.powerapps.com/ and select the correct environment on the top right.
This will open up your environments context. After this click on the solution module on the left navigation pane and then New Solution.
Give it the solution name you’d like and either select or create a new Publisher(this will be the entity that is releasing the solution, for e.g partner name if an isv). The version can be changed manually, Microsoft recommends start from 9 as that’s the current CRM version we are on; the remaining parts can be decided by you .0.0.0.
Once you click create an unmanaged solution will be created in your environment. The shortest way to explain an unmanaged solution is through the new MS info about it so as per Microsoft documentation “An unmanaged solution is one that is still under development or isn’t intended to be distributed. When the unmanaged solution is complete and you want to distribute it, export it and package it as a managed solution.”
From here you can add all your existing components like power automates, canvas apps etc to your solution and create new ones inside the solution as well to package.
In order to create a solution from the old interface, follow steps below:
Goto your CDS/Dynamics environment url and click on advance settings:
From here goto settings>solutions
Click on new solution and same fields would be inserted as we did above when creating solution from make power apps portal
4 Years back when I started working on Dynamics Customer engagement and the common data service(now known as Dataflex Pro) was coming to life there were different admin fronts for managing, configuring and customizing each application and environment/instance. Those are still alive and functional but there have been new alternates introduced which are the way forward as everything transitions to the Power Platform. If you are new to the Power Platform or Dynamics 365 in general this is a good place to start and identify where to navigate for the specific task you want to achieve. I will try to list all of them on here as of July, 2020. The first one is the old CRM Admin center (https://port.crm.dynamics.com/G/Applications/Index.aspx) which was used for administering dynamics CE instances, installing solutions and applications, taking/restoring backups etc
This portal is still alive and well but there is a new alternate released by Microsoft offering the same and more functionality over the CE environments called Power Platform Admin center ( https://admin.powerplatform.microsoft.com/environments ) this offers analytics over the common data service, org capacity reporting, data polices and data integrator access. You also have the same functionality of managing environments, taking backups, initiating new environments etc as you did with the previous admin center. This is your gateway to environments if you are a developer or admin that works with multiple boxes, bookmark this one!
In order to customize and configure an individual environment whats still used is the customization portal through your crm environment as this offers detailed options on customization a lot of which have not been moved over to the power platform alternate yet
The new offering is the PowerApps portal(https://make.powerapps.com/environments/) from here you can create environment based Power automates(previously MS Flows), power apps, power portals, power virtual agents, AI builder etc basically all power platform services. You can also manage each component in solutions and have complete solution management available. So yea if you are doing anything on the power platform, bookmark this!
Those are the main ones, each power platform service has its own individual front as well which i did not mention here as they are all opened through these main portals. Below is the list of all portals we talked about and an additional one that was deprecated as soon as it was launched 🙂
A lot of blogs out there as well as an msdn post about how to uninstall or remove a package from the standard acceptance test Teir 2 environments mentioning the process are available. I here will address what is not mentioned in all of those and I learnt after going through the process myself with Microsoft operations team.
Problem: When you upload a deployable package LCS gives out a generic error saying
“Unknown error occurred during package deployment. Please try again later. If the issue persists, contact support.”
Creating packages with the module to remove name being placed in ModuleToRemove.txt file being placed in the scripts folder of the deployable package is not enough if the package only contains the module you are trying to remove. In order for removal to work the package should contain all other packages while only the ModuleToRemove.txt file will contain the name of the module to remove. When you apply the package created in this order LCS actually prompts a window saying your package will remove the below mentioned modules from the environment and makes your confirm it one more time before beginning deployment.
In the Operation team’s own words:
“The error we’re seeing in LCS is that the package has no modules. That’s not supported and so I’d like to clarify with the customer what they are trying to do in this scenario. If they really want to remove all modules, can they just redeploy the environment instead? If they are trying to remove one specific module but have multiple installed, the package should still contain the others they’d like to keep. For example, if they have modules A, B, and C installed, and are trying to remove module C, the package should just contain modules A and B and then C would get wiped out.”
Surprisingly you cannot just remove all packages and MS recommends redeploying the environment in order to do so but you would loose you data wouldn’t you? Here’s there response to that
“If you just want to remove one of those, you can create a new package with the other module and follow the same steps linked in the documentation to remove the unwanted one (adding an entry to the ModuleToRemove.txt)
If you want to remove them both but keep your data, you can export the database to the asset library before redeploying the environment. That way you can import the database after creating a new environment.”
Yes that’s what google shows right now and people are going crazy, twitter is going crazy and if you are a Pakistani you should be going crazy too. Is it true or is it a software bug, you just want to see this happen so bad that you want to believe it and live it. Its not only against the USD the rupee has risen its against the pound the euro and all other currencies. Someone at google has give the Pakistani rupee the value they want it to have!
Last but not the least, even Bing shows the same 😀
Recently came across a scenario where we had to debug a user session that had limited rights to the system, one way of doing that could be for instance walking through a trace of the user session and another would be to debug code while user steps through the process but that would be done only for server side calls. So what if we need to debug client side calls as well, how to go about doing that was the challenge. Since if we assign the user role to an admin and execute the process we also have admin privileges which are higher up the ladder and do not limit access to what that user role has. Not to worry there is a way you can do this by following the steps below:
1. Run Dynamics AX as an administrator
2. Add the role you want to debug to your own user, let the Sys Admin role stay as well.
3. Open a new development Work space.
4. Place breakpoints where you need them.
5. Create below job
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:
In my previous post I showed how to capture a Trace of Payment Term creation that results in an etl file being generated. To read that trace we need to have Microsoft Dynamics AX Trace Parser installed. You do not need to be on the same machine that you took the trace on, you only need the ETL file. In the below video I quickly go over how to read a Trace file and the different options Trace parser provides. To see how to capture a trace read: How to capture a Trace log of any process in Dynamics AX 2012
Often times debugging a process is not enough to identify a bug or a query that is taking too long or the scenario only happens on a specific machine be it production or test and we need to get to the bottom of what is wrong that causes the issue. This calls for tracing the process and stepping through each cycle as it happened, thanks to Trace parser and the tracing cockpit provided in Dynamics AX 2012 we can capture every query executed and method called during that process. In the below video I show how to capture a trace log of any process.