Edge profiles auto switching?

This is not a CRM post, but a post about being a consultant and problems that might occur. If you updated to the most recent version of Edge (September 2023) you might be jumping between profiles in Edge when entering different sites like:
admin.powerplatform
portal.azure
make.powerapps
ETC

There is actually a setting in EDGE where you can turn this off. Having way too many customer profiles, this is only a problem and I can’t have this on. Turning this setting off seemed to help the problem for a few of the admin pages that were jumping left and right 😂

Dynamics 365 – Adding products issue

This might be the dumbest blog in a while, but I am adding it in case others have problems with the same issue.

Recently I needed to add new products to the product table of Dynamics, and the buttons for adding the products/families were gone.

I of course had to look at the documentation in case there was something obvious I was missing. The documentation only wanted to ensure that I had a license + security role.

All of this was checking out on my side as I had a license and I was an administrator. Still, I was desperate trying to understand such a stupid issue that I made sure I had enough roles:

Eventually, I got some help from friends, and a huge thank you to Vivian Voss for pointing me in the right direction. First I was told to check the “obvious”.

Are you able to configure products via the old UI?

Vivian Voss

Well, turns out I was.

Solution?

Go to the Default Solution of configuration and make sure that “read only” was not on for the product table in the new UI😂😂🤷‍♂️🤷‍♀️🤷

The only thing that I can think of is an update from Microsoft changing this value for some odd reason. The fact that it is read-only in the Unified Client makes no sense, but hey. Not the first time something like that has happened.. hehe.

Just make sure this is OFF, Save changes, and then publish the table. You should be able to configure products again.

Dynamics 365 AI code with ChatGPT

By now I am sure most of you have heard about ChatGPT. The AI product is pouring out surprisingly intelligent responses to all sorts of questions that people all around the world have given it lately.

There have been examples of the tool writing papers for school, creating blog posts for people, and helping formulate fairly complex text for webpages and marketers. One thing that someone tipped me off about was the ability to write code, and I was a bit curious as to what that would mean.

So one of the many gaps in my knowledge is specifically regarding Plugins. A plugin is a piece of backend code that runs in real time when triggers occur in Dataverse. I tried doing a little plugin with some help a few years ago and wrote about it on the Company Blog – Plugin in 1 hour.

I was curious how ChatGPT would do with a similar issue, so I took it for a spin😊

Question

First off I started out with a question that you write the same way you would anything Google/Yahoo/AltaVista/Bing/AskJeeves/DuckDuckGo/etc etc etc

The response I get is fairly spot on. Certainly, some will comment about something not being 100% accurate here, but this is more than good enough and quite well-written!

This wasn’t exactly what I was hoping for, so I asked a follow-up question to my original question.

It thought for a few moments before it started spitting out CODE!! 🤯🤯🤯🤯 (above is just a snip of the total code. I put it all in a code box below).

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using System;
using System.Linq;

namespace MyPlugins
{
    public class SumProductValues : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // Obtain the execution context from the service provider.
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

            // Obtain the organization service reference which you will need for CRUD operations.
            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            // Retrieve the Opportunity record that the plugin is running against.
            Entity opportunity = (Entity)context.InputParameters["Target"];

            // Create a query to retrieve the related products.
            QueryExpression query = new QueryExpression
            {
                EntityName = "product",
                ColumnSet = new ColumnSet("productid", "price"),
                Criteria = new FilterExpression
                {
                    Conditions =
                    {
                        new ConditionExpression
                        {
                            AttributeName = "parent_opportunity_id",
                            Operator = ConditionOperator.Equal,
                            Values = { opportunity.Id }
                        }
                    }
                }
            };

            // Retrieve the related products.
            EntityCollection products = service.RetrieveMultiple(query);

            // Sum up the value of the products.
            decimal totalPrice = products.Entities.Sum(product => product.GetAttributeValue<Money>("price").Value);

            // Update the Total Price field of the Opportunity record.
            opportunity["totalprice"] = new Money(totalPrice);
            service.Update(opportunity);
        }
    }
}

🤯🤯🤯🤯

At this point, I was extremely excited to see that the result is pretty darn good. Sure the trigger here is based on Opportunity, and not the opportunity product, but that is beside the point. It seems that I could have formulated my question in a way that I would have understood it correctly. This is actual usable code for a plugin that could run on Opportunity level to update the sum of all Opportunity products.

Not really sure what more to write about this ATM.. Still trying to wrap my head around it all for now.

Dynamics 365 + Teams integration error

Recently ran into a problem with the Teams integration OOTB, where the integration continuously threw an error after connecting the Dynamics record to the Teams.

This is a pretty Vanilla environment, so I couldn’t quite figure out what was wrong. I obviously could see that the URL was wrong, but I didn’t understand WHY it was wrong.

https://**.sharepoint.com/sites/SuperCards/Shared%20Documents/General <- Nothing really wrong with this URL at first site.

After a lot of painful digging I finally found the issue. Someone had decided to install SharePoint in Norwegian when they first setup the tenant!!! hehe. This meant that the URL the SharePoint URL was wrong.

Wrong URL ⛔

Correct URL ✅

Solution?

Microsoft Support didn’t see a fix in the near future for language support, so I guess it’s time for a small work around 🙂 Not really exciting fix, but you need to create a Workflow or Power Automate on create to change the name of the document location to your local language.

Why a workflow you may ask? When is the last time a workflow failed you I answer 😎

New Email Signature in preview. Is it really an upgrade? 🤷‍♂️

In the preview for release wave 2020 2 Microsoft is moving the signature to UI. While doing this, they have the possibility to brush up on some old tech. Almost every piece of the old Dynamics moved over has had been given at least a small upgrade, of not a total overhaul. If you want to read about my take on signature in Dynamics, head on over here.

Limitations of the old signature:
1. Personal signature only. Could not define a signature for the organization or group.
2. No images could be added

So what has changed?

Old

The old signature did not have a rich editor, and limited us to primitive text editing. Exactly like the old email editor.

If you tried to enter a picture, you would get an error message. For this example, I just wrote the text “no picture possible”.

The signature would be added to the email as expected if it was defined as default signature, but again with little formatting.

New

The new signature is available in the new UI

I added a picture of the blue color, just to demonstrate that there can be a picture in the signature.

Opening a new email will automatically add the signature as expected, but now with the picture included. 👍

Well?

Does the signature support images?
YES, it finally does.

It is stored as a Base64, so no need to consider where the actual image is stored (notes, azure, blob etc etc). Migration from system A – B would work fine.

Can we use the signature multiple users?
Well… Yes, but No.. It seems every signature is meant to be personal, but you can search for other signatures if you want to. But in regards to automatic signature added to email, you need to create one for each user.

Thoughts 🤷‍♂️

As of now, I could only find the signature in the Customer Service Hub, and that confuses me a bit. Why not start off by adding it to the Sales Hub. If the signatures are personal, why not let the sales people use this first. In customer service I would have thought that a organization signature would make more sense.

While this is a great update to the last signature experience, I hope they are able to add global signatures in the future for groups of users. This would make the administrative experience a little better when you have hundreds of users.

If you read my article on signatures, I provide a different way of handling the signature experience. I try to centralize the management of the signature for faster changes. The good thing is that we have both solutions available, so pick and choose what suits your need.

Maybe in the next version we might see some structural changes to the way signatures are connected to users/groups.

Dear MS Could you please just fix the following? Pretty Please🙏🥰

I love the new UI and the new timeline, but there were some choices made that never made sense. Specifically the navigation elements on the timeline.

Ideas – Please vote

https://experience.dynamics.com/ideas/idea/?ideaid=187baf8c-5fdd-ea11-bf21-0003ff68e671#

This is a OOTB case with a timeline. I want to open one of the emails to view content or reply. Either way I want to OPEN the activity.

Let’s click on the Email and see what happens…

NOPE… Only the preview of the email. Great functionality, but still not what I want.

What about the BIG Purple circle? That is the same logic as subgrids. This must be it?

NOPE… This opens the owner of the activity…. Why would anyone want this function? Seriously asking, because I have never understood why.

There it is!!!.. The tiny little OPEN button….

Subrids do it better

Check it out.. I click on the subgrid item, and magically it opens the actual record I am trying to see.

BOOM

This is more like it..

Dear MS… Please make the navigation look and feel the same as subgrids 🙂

What the Flex !?💪

So as of yesterday Common Data Service platform was rebranded to Dataflex Pro.

https://powerapps.microsoft.com/en-us/blog/introducing-microsoft-dataflex-a-new-low-code-data-platform-for-microsoft-teams/

This post confused me way to much. Nothing seemed to make sense, and the only thing I could focus on was the extremely odd name Dataflex.

What about the name….

A quick online search shows that the name is already in use. Not only is it in use, but it is used by a competitive product offering low-code development! How on earth is it even possible to miss out on this?

https://www.dataaccess.com/products/dataflex-63

This sounds like a whole new SkyDrive – OneDrive problem, so I’m going to wait a bit before I rebrand everything to Dataflex

The voice of reason

My mind has been twisting and turning to understand the reasoning of it all of this, and luckily we have Jukka. His post is what Microsoft should have posted originally. It explains everything I was wondering about….. Except the name 😂

https://forwardforever.com/what-is-microsoft-dataflex/

Keep on flexing 💪

RegardingObjectID Type fix – Flow

How to fix the RegardingObjectID Type field in FLOW

When working with the Current Environment Connector (CDS), you have 2 options for a lookup (Value and Type). For some strange reason only one of them seems to work for me.

The Value is obviously the GUID, and the Type is “incidents, accounts, contacts, opportunities etc”.

Let’s look at the data:

As you see I have values for the GUID and the Type of regardingobjectid.

When adding them to the Compose the TYPE returns blank every time.

Peek kode

{    “inputs”: “@{triggerOutputs()?[‘body/_regardingobjectid_value’]}\n@{triggerOutputs()?[‘body/_regardingobjectid_value@Microsoft.Dynamics.CRM.lookuplogicalname‘]}”}

Flow is referencing the TYPE of lookup in a way that returned NULL every time.

Solution

Manually enter the expression:
triggerOutputs()?[‘body/_regardingobjectid_type’] <- change the VALUE with TYPE

Dynamics 365 Email to case – The New Way

Microsoft released a new way to do automatic record creation a few months ago, but I never got around to ckeck it out before now.

The most obvious reason for the new release is creating something that is possible use within new UI. Therefore you can only find this in the customer service app at the moment.

Heads up

At the current moment the new approach doesn’t work, for a contact that is known by the system with an account. I am working with support help them understand the error with the flow. Will update the post when they fix the error. This means that the new solution only works when the contact is not connected to a parent account.

Old

In the “old” days we created everything via settings in the navigation. You start off creating a new record and link it to a queue you want to listen to. I prefered the following setup, and I have explained why in my other post regarding Customer Service

When you created the role for creation of case, it would use the following standard setup. Notice that the contact here would be set if account and contact were known. Contact would be contact, and account would be customer.

New

The new way of doing things is a lot like the old, but there are some differences.

Don’t get fooled by the name in queue to monitor. This is a regular email queue, but I gave it the name “flow”. The first thing we have to create is a new rule for the queue.

Here is where we see the first major difference. The condition for creation seems to use the same visuals as the new advanced find.

At the bottom you choose the rule and click create. This brings you over to Microsoft flow. Instead of the old WF, MS autocreares a new flow for you.

Just like the old flow, Microsoft didn’t want to you touch the details of the flow.

The old flow filled out the contact and customer fields, while the new one for some reason doesn’t (yet). I will try to work with MS on this also.

What to do next?

I honestly don’t know when they expect all of these rules to be transfered over, but I guess it will have to be done in the future when they try to sunset the old WorkFlows.

In the meanwhile I hope they fix the flow, so that it works as expected:)

Dynamics APP for Outlook has changed… But why?

I know that change online is imminent, and is continuous. I don’t mind this, but i do mind how it’s done. I would never have noticed this if I had not created a new demo. It is a little annoying that the functionality introduced can’t be put to use in my existing environment.

This rant is just because I like to keep things vanilla as long as possible. The changes we see here make it even more clear that the platform where I work every day still is an open platform, and not at all a product. If certain things would act more like a product the changes would apply to everyone, and behave the same way. There will always be pro’s and con’s for Platform VS Product..

The following is provided from the documentation:
https://docs.microsoft.com/en-us/dynamics365/outlook-app/customize-the-track-regarding-card

Not sure when it happened, but the 1 form App for Outlook configuration has now become 2.

OLD

Form 1: App for Outlook Contact Card

NEW

Form 2: App for Outlook Contact Quick View – NEW

Why does this matter?

I am not sure yet, and that is the problem. Why split them up in the first place? Another extremely interesting thing about the new form is magic in the background that we can’t manipulate or recreate.

The new CASE subgrid looks like this

Not sure what this name means, but its obviously something they have defined after converting the old forms to the new forms.

Lets have a look why this is wierd:

The following picture is in a new untouched demo. The subgrids should have:
Account Name
Next Activity (Subgrid)
Last Activity (Subgrid)
Opportunity (Subgrid) – Showing
Case (Subgrid)

But as you can see, it only shows content where content is present. If I add a case to the contact Thomas Outlook, it will dynamically show cases in App for Outlook.

This is a great feature, so why am I complaining about it? Well, i can’t reproduce it. That’s why!

This is the same setup in config, but Cases are constantly showing here. I tried every step in config to recreate the function, but no luck..

I even tried importing a UN-managed and Managed solution from the vanilla environment to my existing production without any luck.

Did I not get the memo on this change by any chance? 🙂