May 8, 2021

Microsoft.PowerPlatform.Dataverse.Client and ClientSecret AuthType

.NET Core 3.1 is what I consider a good starting point if you plan to create a new project based on .NET Core, it's LTS (until end of 2022) and if you developed only with .NET Framework before, I usually suggest this version.

I know .NET 5.0 has been released for some months now but for what I am describing here it's not important, if you wish you can use this version.

If you are a developer and in the last years you worked with Dynamics CRM/CDS/Dataverse you probably know this NuGet package:
Microsoft.CrmSdk.XrmTooling.CoreAssembly

It's the package we usually install when we need to connect to Dataverse, it works but requires .NET Framework 4.6.2 or onward. It works also with ClientSecret AuthType, if you have this kind of connection string

AuthType='ClientSecret'; ServiceUri='https://mywonderfulorg.crm.dynamics.com';
ClientId='00000000-0000-0000-0000-000000000000'; ClientSecret='MyWonderfulClientSecret';

or if you are using Username & Password you may have something like this

AuthType='Office365'; Url='https://mywonderfulorg.crm.dynamics.com';
Username='username@mywonderfulorg.onmicrosoft.com'; Password='MyWonderfulPassword';

In your code you can connect with few lines:

CrmServiceClient service = new CrmServiceClient(connectionString);
WhoAmIResponse whoAmIResponse = (WhoAmIResponse)service.Execute(new WhoAmIRequest());
Console.WriteLine($"Connected with UserId: {whoAmIResponse.UserId}");

CrmServiceClient comes from the namespace Microsoft.Xrm.Tooling.Connector.

What if we want to use .NET Core? The NuGet package to use is currently in public preview:
Microsoft.PowerPlatform.Dataverse.Client

You can use this package also with .NET Framework and .NET 5.0 but the main reason is the compatibility with what we call .NET Core (and if you still want to say something like "but with .NET 5.0 we can bla bla bla" fine for me, also with .NET Core is possible to use .NET Framework packages but we would make the executable only compatible with Windows, I never suggested that kind of path but it's a possibility).

This package is not compatible with the Username & Password authentication, as stated inside the description: Note: that only OAuth, Certificate, ClientSecret Authentication types are supported at this time.
Meaning it's also a good time to move away from old forms of authentication.

Assuming you have a connection string with the ClientSecret AuthType how would our code changes? Just a type:

ServiceClient service = new ServiceClient(connectionString);
WhoAmIResponse whoAmIResponse = (WhoAmIResponse)service.Execute(new WhoAmIRequest());
Console.WriteLine($"Connected with UserId: {whoAmIResponse.UserId}");

ServiceClient comes from the namespace Microsoft.PowerPlatform.Dataverse.Client, that is also the name of the package, so make sure you are using it.

Hopefully next time I will remember that is called ServiceClient and not CrmServiceClient, DataverseClient or PowerPlatformClient, types I tried before checking what was inside the package.



March 10, 2021

Power Automate Desktop, opinions of others

Few days after the announcement of Power Automate Desktop for Windows 10 users (official link here) a famous Italian website focused on IT released a brief news about it (link here).

Microsoft is a big name so it is normal that something regarding Windows 10 made the news also inside this site (for example they published also the Microsoft-Bethesda agreement) but I was more interested in the comments.

First some numbers, the article contains 17 comments, I checked the recent news and except an article about Tesla Cybertruck (with 35 comments), the Power Automate Desktop one was the most commented (usually there are between 6 and 10 comments in other news).

This is very good in my opinion, people read the news and after wanted to discuss it, but what they are talking about?

A couple of comments are about the comparison to Mac (Apple Script is mentioned and the fact this is is coming to Windows years later), no surprises here, I also mentioned this in my previous post.

A user asked if can save something to PDF, rename it and after move it to a specific folder, another user promptly replied that is possible, that he is also checking the software and it looks useful.

Another user wrote that he downloaded the software, that is complex (meaning that you can do many things) and reported that maybe for his daily activities is not useful but he would like to check some demos.

Another comment was that in the download page there is the "Download now" option and "Buy" option, this made him confused.

A couple of users (in order to explain to others) compared Power Automate Desktop to IFTTT or to a Macro system.

Last comment was a bit more technical, the software was always intended as Business oriented, Powershell is also available for some automations under Windows.

In the end was good to see how this kind of product is received to a bigger audience, most of the comments were positive and they confirm my initial thought, having Power Automate Desktop included inside Windows 10 can be very beneficial.


March 3, 2021

Power Fx and Power Automate Desktop, my opinion

Microsoft announced a couple of things regarding Power Platform, Power Fx and Power Automate Desktop for Windows 10 users.

I start with Power Fx, you can find a couple of posts here:
Introducing Microsoft Power Fx: the low-code programming language for everyone
What is Microsoft Power Fx?

I am happy the language used in Canvas Apps got an official name (and it will be Open Source too) but I am not surprised, sooner or later (just for Documentation purposes) you need to call this agglomerate of functions in some way, so people can easily check or ask questions about it.

I am also happy that the code behind a Canvas App can be easily stored inside a source control system but let's be honest, nobody in a clear state of mind would be happy to edit that kind of YAML files directly :)

For how long we will continue to talk about low-code, citizen developers and stuff like that? When I was younger I developed applications with Visual Basic 6, I am sure that people developing in C++ thought about Visual Basic like it's a toy or something similar, the reality is that who used Visual Basic was probably a developer with less knowledge than the average C++ developer, nothing to be ashamed for, because there is a difference if I need to create a Windows driver for a PC component or a Windows Forms application to manage my customers.

As much as I appreciate the games developed by Scott Durow for Canvas Apps, using just a specific option (like a Canvas App or a writing a plugin) because it's technically possible should be (in my opinion) avoided. Like writing a 1000 lines of code plugin instead of 3 blocks inside a flow, or creating the biggest flow on earth just to avoid a 10 lines of code plugin. I think less of who write code in Canvas Apps? Definitely not, I call them "citizen developers"? Definitely not, if you know how to develop good for you, if you found a tool that encourage you to write better and lesser code good for you. For me Power Fx is not a low-code language, it's just a code language, like C#, JavaScript, VBA Macros, etc etc. Why I say this? because I can be proficient in one of the most common code languages, but I am sure that there are plenty of developers (maybe proficient in Assembler) developing more complicated stuff than I do. But the moment we write some code we are all developers, that's matter.

Moving to a more interesting topic, the new release of Power Automate Desktop for Windows 10 users is an AMAZING news. Announcement post:
Automate tasks with Power Automate Desktop for Windows 10—no additional cost

This is a game changer for Windows, if you are familiar with Mac, it is comparable to what Automator does. I quickly downloaded the application (link is https://aka.ms/GetStarted-PAD) and it's really something users should try.

Check this screenshot:


These are the actions related to FTP, imagine that your security camera saves the files in a specific FTP site and you want to copy automatically that files to a local folder (maybe synced with OneDrive), no manual steps, you can just create the automation and launch it.
Having a tool like this included in Windows will make users more familiar with the technology itself and the possibilities it offers, this means that when a user will need to automate some tasks in a work environment, already has the experience to do this kind of tasks.

Next time I need to create a repetitive task, I will definitely check if I can do it using Power Automate Desktop first.



November 11, 2020

Few words on Dynamics Weekly

If you were a subscriber of my newsletter Dynamics Weekly you already know I decided to don't continue it a month ago. After the final issue I received many messages of support from the subscribers, I tried to reply to each one of them and if I missed someone I am really sorry.

149 issues can be a strange number to close, someone on Twitter suggested me to arrive at least to 150, but more than being an even number I don't see other reasons :) However #149 was the first issue of October 2020, meaning it contains the HR content of the previous month. I don't check analytics, but I didn't want to interrupt something "on the middle", closing the newsletter with this content was the right thing to do for me and to respect the effort of Malin to prepare that part.

Why you closed the newsletter? Reason is quite simple, I didn't want to run it. You may consider this reason selfish, but during September my main thought was how much I was tired by Dynamics Weekly and that I didn't want to run it. Of course I was tired during other times in the past but I always wanted to continue it. To don't want to run the newsletter was a new feeling, and when for several days you get up and you go to sleep with that thought, you understand that what you are doing is not healthy.

Why don't take a break and continue later? Dynamics Weekly was out every Monday, no matter what. Jonas helped me in the past, this time I felt that after a break I would not be able to resume it and I didn't want to force myself to do something I don't like, I really like Dynamics Weekly and I didn't want to hate it.

Why don't pass the torch to someone else? When I started the newsletter I didn't ask others for suggestions or ideas. I was a subscriber of other newsletters so I knew how it works, I registered the domain, I paid the first month for the service and I sent it. As I wrote in the past it was something I needed for myself in the first place, it's the way I like to consume and keep track of information on some topics. I could ask someone else if they want to continue it but I didn't want to be a burden or for them to don't feel uncomfortable if they need to take decisions I may or I may not like, for me Dynamics Weekly is a closed chapter.

What do you think of other Power Platform newsletters? Running a newsletter where you curate the content is time consuming, and everyone involved has my respect. When I started there was no newsletters on the subject (that I know of) and now I am happy that there are two: Power Platform Developers Weekly and Power Platform Weekly. If you like the topics subscribe to them or (and I really appreciate this choice as it was one of the things I liked about Dynamics Weekly) go to their websites and check the issues directly there.

What about PCF Gallery, do you plan to close that too? No, PCF Gallery doesn't require the amount of time I gave to Dynamics Weekly, some weeks more controls get published, some weeks no controls at all. Beside the improvements that I didn't implement yet (sorry about that), I am aware the website should not be managed only by me, I hope to improve this aspect too in the future.

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.