September 13, 2020

Dependent Option Set Manager


tl;dr: Dependent Option Set Manager Solution (DOSM) can be downloaded here, check the demo here.

First of all, if you contacted me in the past about my previous Dependent Option Set solution and you didn't get an answer I am really sorry.
Only recently I noticed comments on this blog went directly to spam and some of them were about Dependent Option Sets, when I get messages on Twitter or LinkedIn I usually get an email notification and it's easier for me to track them.

Latest release of my previous Dependent Option Set solution was more than 2 years ago, I know it wasn't perfect but the main goal was to easily generate the required JSON, the fact that included also the script to add the functionality to a form was always secondary, I just tweaked the original script to be compatible with more Dynamics versions and with the latest release to make it compatible with Multi Select Option Sets.

If you used or still using it in some projects I am really happy for you, it means it was useful. I am not here to argue or pick a side compared to Filtered Lookups, it happens that sometimes you have Option Sets instead of Lookups (probably the main advantage is the translation of options) and it was nice to provide this functionality.

Microsoft announced Dependent Option Sets before, and I replied to someone asking me about improvements with "Microsoft will release Dependent Option Sets, I don't think I will update my solution". After a while I noticed that Microsoft removed this announcement and my solution (I repeat here, main goal was to generate the required JSON) was still used. In the last years I focused on other projects (Dynamics Weekly and PCF Gallery), I already write code during my working hours and I didn't want to write (crappy) code in public projects. Despite this, I always recognized that my Dependent Option Set solution was used and sooner or later it deserved an update.

I finally decided to spend some time on creating something new and I released Dependent Option Set Manager (DOSM), an updated version of my previous solution. Main reason of this release is the use of formContext instead of the old Xrm.Page, Unified Interface transaction is near (some customers are already using it) and it's nice to provide a fully supported version of the script.

But I wanted to do more, I thought: "How this should work for me?", upgrading the previous JavaScript to support formContext instead of Xrm.Page took me few hours, I changed some parameters, wrote some code and it was ready.
This way still require people to go manually on each form, make the changes, save and publish the form, if you already configured the previous script it's not difficult but it's a tedious process.

I wanted to provide an upgrade path, so people would install the new solution and at least they would have an option to update the forms in one way, and after I wanted to allow users to configure new options, to create new JSON Web Resources and so on.
In the end the new solution has many features so users can do everything inside the app


This forced me to work also on the script attached to the form. Yes, it works in a similar way as the script provided by Microsoft (practically an OnLoad event to load the JSON and an OnChange event for each parent field) but in addition to the code to deal with Multi Select Option Sets and the new features it's something now rewritten by me.

What are these new features?
  • Sorting, you can now decide how the values inside the Option Sets should appears (for example by Label or by Value).
  • Multiple parents, now if a Child Option Set has more than one Parent Option Set, the available options are only the intersect (quick example, for one parent the child options would be A and B, and for another parent options B and C, the only option available would be B).
Solution also included some fixes:
  • It will not trigger when a form is Disabled or Read Only (like inactive records).
  • There was a bug when more than 2 option sets were in a chain and child Option Sets were not cleared when the parent changed.

If you want to try/use the new solution you can go to the Releases under the GitHub repository to download it, and a for a demo here.

The license is MIT, means that the solution is provided "as is", no strings attached, I also tried to make clear this with the notice I wrote inside the tool:

Yes, the code is fully supported, but when dealing with Dynamics XML Forms it's a bit complicated so I needed to make you aware of that warning.

Now regarding support, if you have questions or you have problems with the solution, please open an issue here: https://github.com/GuidoPreite/DOSM/issues
It's better than contacting me directly because
  • I usually get an email when a new issue is opened
  • It's all public so everybody can see it
If in the future Microsoft decides to implement Dependent Option Sets, I only hope they will make an API available, so I can build some tool to convert my solution to the Microsoft one.

The code is public and I tried to make it as much readable as I can, there are many comments both in what the functions do and the code itself.

DOSM uses the following libraries (for the app, the Form script does not have dependencies):
  • jQuery 3.5.1
  • Bootstrap 4.5.0 (I know it's currently 4.5.2 but I didn't feel necessary to upgrade it)
  • Bootbox.js 5.4.0 (to deal with Bootstrap modals)
  • bootstrap-select 1.13.18 (I made a change on this library, the one you find inside DOSM is not the same as you download it, more details in this issue I opened in their repository)

July 22, 2020

Microsoft renames things... again

If you read one of the recent announcements (like this one Introducing Microsoft Dataflex, a new low-code data platform for Microsoft Teams) you know that CDS (Common Data Service) has been renamed to Microsoft Dataflex Pro (and a subset version for Microsoft Teams is called Microsoft Dataflex).

It's not the first time that Microsoft renames some products/services (if we keep the examples inside the Dynamics space, they just renamed Forms Pro to Customer Voice) so I am not surprised of this change, probably if I write "two years later they will change it again" I may be right.

However the main question is "why they changed the name?". Let's be honest, Microsoft Teams in the recent months gained more and more traction, becoming a popular product inside the ecosystem, I don't have exact numbers but if you probably ask around about Microsoft products, I am quite sure Teams is more known than the Power Platform or one of its services (maybe with the exclusion of Power BI, people love reporting). 

When Microsoft decided to introduce a subset of Dynamics CRM CDS to Teams it's right to show these new functionalities to the audience and probably the CDS name wasn't a good fit. CDS carried always a bit of confusion (CDS, CDM, CDS-A, ...) and when CDS appeared practically the only product using it was Dynamics 365, a true separation of the platform (that in my opinion is still in progress but just for minor things) arrived years later. It's easy now to say Dataflex Pro = CDS, wasn't the same with the previous names.

I may or may not agree with the new name or part of it (for example leaving Pro as CDS, or the fact that is Dataflex and not DataFlex or Data Flex) but I really hope Microsoft pushes these products (with a new one just for Teams) in the right way and not only keeping these name changes as a generic announcement.

This post is not a list of the differences between the two versions (Dataflex vs Dataflex Pro) because I am sure that when I discover "functionality X" is available only on CDS Dataflex Pro I will be a bit disappointed, but in the same way I will be very happy when "functionality Y" is available in Dataflex.

They may be based on the same technology, but they are two different products with different targets in mind, we should not forget that. I usually don't talk about licensing, mostly because it's not part of what I do everyday, but if after a product pitch the first question is "how much does it cost?" probably the pitch wasn't that good, if you are proposing Dataflex/Dataflex Pro to improve the capabilities of a process and people don't start to ask "so means that I can do this right?" or "do you think it's possible to do X?" and they focus on just the cost then maybe it's not a good fit, we should not change a product for another, we should focus on doing things better. Said that, licensing is too complex and too aleatory (and for some things too pricey, I am looking at you Power Apps Portals) so my hope is also to have a clear picture of the costs involved if I decide to use the Power Platform or just a part of it.

Welcome Dataflex/Dataflex Pro! You may increase functionalities or change name, but for me you will always be the same when I write Entity newAccount = new Entity("account");, in the end I am a bit sentimental when I write some code.



May 20, 2020

PCF Gallery: 1 year after

1 year ago I opened PCF Gallery, time really does fly. The site went beyond my expectations, listing more than 200 controls and having more than 90 authors. My goal was simple: to have a space where open source controls can be listed so developers can see what others are doing, publish their work (in addition to the repository) and show what PCF controls can actually do to help end users.

The site really needs some improvements (mainly regarding the search) but thanks to the suggestions of the community I was able to introduce small features that I implemented as indicators: if a control is for Canvas Apps, if the control has a license and if a managed solution is available.

License information is really important for some end users and also for the authors, it may be a secondary thing, but having a license really step up the control and how it should be used or expanded by others.

The managed solution indicator is something that I needed for myself in a first place. The process to compile a PCF control isn't so straightforward for end users and can be annoying for developers, if the author spends extra time to publish also a managed solution for the control, the minimum that I can do is to make that information available to others.

I am aware that the community created several tools to assist users in the creation or deployment of PCF controls, and also if they are not shown inside the gallery, I try to create awareness using the Twitter account (there is also a LinkedIn Page by the way).

I am not good to write this kind of posts, but this morning I received this message:
"Dear Guido, thank you for all the effort behind the PCF Gallery and possibility for me and all other Power Apps enthusiasts to use all those tools. I think this is an incredible way to bring the community together."

I don't care about the views or the stats behind the site, I just try to make something available for others (as simple as it can be to list other people controls) and I am happy when someone finds the site useful.

 Thanks everybody and especially the authors listed inside PCF Gallery.



February 29, 2020

Exam MB-400: My Experience

This morning I finally got the result from an exam I did a while ago: the MB-400: Microsoft Power Apps + Dynamics 365 Developer.
I passed it (result here) but I learned two important lessons:
  • I will never do again a Beta exam
  • I need to prepare better the exams
The reasons I took this exam in Beta were essentially two: I got an early discount code (here a mention of it for the first 300 people) and it was the first technical exam about Dynamics 365 released in a long time.

The previous technical exam was MB2-701 Extending Microsoft Dynamics CRM 2013 (that I passed too by the way) and I was eager to prove myself that I still got it. My main skills regarding Dynamics 365 and the Power Platform are technical, so I felt that I needed to do this exam, as additional proof I didn't do yet the MB-200: Microsoft Power Platform + Dynamics 365 Core that is considered by many one of the exams that you need to take if you want to start this path.

If you use the discount code you have also a time limit (in my case was 12 December 2019) but due to previous commitments I scheduled the exam for 14 November, only two weeks after the announcement.
In that two weeks I tried to prepare the exam the best as I could, but remember to follow the official exam skills in addition to the suggested learning path because (for example) the Learning path suggests Extend Dynamics 365 portals but Portals is not an argument included in the exam skills, and the exam skills contain PCF (Power Apps Component Framework) and a learning path is not available yet.

When I booked the exam I thought: "if I don't pass the exam it's the same, I can do it again" but after I did the exam I instantly regret the decision, because the exam was hard for the preparation I had and you don't get the result right away when you do a Beta exam. Waiting for over 3 months and be in a limbo where you don't know if you passed or not an exam is something I don't want to experience again.

So my suggestion is to always go prepared for the exams, and if you plan to take the MB-400 I suggest also to read the posts by Joe Griffin in his website.

December 5, 2019

Unified Interface transition: Powered by Power Apps Portals

The latest news is that Microsoft is scheduling the transition to Unified Interface way before October 2020. If you are interested in this topic check this blog post by Magnetism: Scheduling Dynamics 365 Unified Interface Upgrade in the Transition Portal and this twitter thread by Jukka Niiranen.

After I heard the news I quickly checked one of the tenants I have access and with my surprise (beside the early date Microsoft scheduled) I noticed that the site https://runone.powerappsportals.com is built with Power Apps Portal.

Yes, the domain was an obvious clue, but as soon I saw the Profile Page I recognized it:


I work with Power Apps Portals (since it was called ADX Studio Portals) and I am happy to see Microsoft using it also for this kind of websites. If you believe in a product you should be the first to use it, right?

If you want to know more about Power Apps Portals, you can check the official site: https://powerapps.microsoft.com/en-us/portals/ and the blogs of three MVPs: Nick Doelman, Colin Vermander and Nicholas Hayduk.

What are you waiting for? Go to check the scheduled dates for your instances!

October 31, 2019

"Custom plug-ins should not catch exceptions"... that's new.

The title refers to an error message I got today in one of my plugins, the complete text is the following:

ISV code reduced the open transaction count. Custom plug-ins should not catch exceptions from OrganizationService calls and continue processing.

I googled the message and I found the explanation inside the following page: Troubleshoot plug-ins.
The reason is simple: inside my code I wrapped an IOrganizationService.Update inside a try catch block:
try
{
    Entity updateRecord = new Entity(recordRef.LogicalName, recordRef.Id);
    updateRecord[fieldName] = fieldValue;
    service.Update(updateRecord);
}
catch (Exception ex) {
    // ...
}
Why I did that? In my case the specific update may or may not fail (due to the status of the entity and the field that I need to update) but I needed to make sure the plugin containing the above code should never fail.
I don't have a specific workaround to resolve this situation because it really depends on the logic you have inside the plugin (in my case one of the options is to create an additional async plugin just to perform this update so it will not affect the main plugin).
The page mentions that this error has been added recently, so if in your existing plugins you have an IOrganizationService call wrapped inside a try catch block, the plugin is probably failing right now.

UPDATE: looks like that wrapping an IOrganizationService call was never possible, but the platform before returned a non meaningful error message (like "no active transaction found"), at least now we are notified with the exact reason. Thanks Tanguy Touzard and Jonas Rapp for the correction!

October 18, 2019

PCF Gallery - 5 months after

Today (18 October 2019) I added the 100th to PCF Gallery.

All the controls listed inside PCF Gallery can be downloaded, and the source code is available inside their GitHub repository or in the blog post linked inside the page. The majority of the controls is for Model-driven apps, some of them can be added also to Canvas apps and there are also a couple created specifically just for Canvas apps.

There is no doubt the PowerApps Component Framework is one of the most interesting capabilities landed recently inside the Power Platform world, at least for developers!

When I wrote the post announcing the launch of PCF Gallery, I optimistically wished that soon it would list dozen of controls. After few months, thanks to the contributions from more than 40 authors, PCF Gallery is a beautiful showcase of the possibilities offered by the PowerApps Component Framework.

A big thanks to the whole PCF Community!