Custom Page – Open Page with Ribbon Button

I am using Dynamics 365 as an example, but the process will be the same for Power Apps. Only difference is that Dynamics 365 has the Opportunity table that we are wanting to use.

If you want to learn more about Custom pages I suggest you look at the following posts:
Scott Durrow
Lisa Crosby
MCJ
Microsoft Custom Pages

I have also added the simple button setup to Github, if you just want to give it a go.
👉DOWNLOAD SIMPLE BUTTON HERE👈

Creating an app and adding the button

Start off by adding an app to a solution and giving it a proper name. In my case, I am choosing Sales Win, because I am creating a simple app for everyone to see the functionality. You could of course just add this to your existing app if that is what you want to do.

For the tricky part, you need to open the Command Bar. This is essentially Ribbon Workbench jr😉 In time I would only imagine that most of the Ribbon Workbench would be available here, but we are probably still a few years away from a complete transition here.

Choose the main form for this exercise, and then create a new Command. Command is actually a button. Why it’s called Command I’m not sure as we all are used to add buttons to a ribbon🤷‍♂️

On the right side, you can add an image, and I usually find mine through SVG’s online.
SVG’s for download <- a blog post I wrote about the topic. Add this as a webresource.

Now, we are going to have to create some JavaScript. It’s actually the only way to open a Custom Page. The JavaScript is pretty “simple”, and I will provide you with the copy-paste version.

JavaScript

🛑BEFORE YOU STOP READING BECAUSE OF JAVASCRIPT🛑

I will provide the JavaScript you need. Unfortunately, you will still need to understand how to copy-paste some script for stuff like custom pages to work.

The only parameter you have to change here if you are creating everything from scratch is:
name: “saleswin_saleswin_c0947” <- replace with the name of your custom page.

function CloseWON(formContext) {
    //Get Opportunity GUID and remove {}
    var recordGUID = formContext.data.entity.getId().replace(/[{}]/g, "");
    // Centered Dialog
    var pageInput = {
        pageType: "custom",
        name: "saleswin_saleswin_c0947", //Unique name of Custom page
        entityName: "opportunity",
        recordId: recordGUID,
    };
    var navigationOptions = {
        target: 2,
        position: 1,
        width: {value: 450, unit: "px"},
        height:{value: 550, unit: "px"}
    };
    Xrm.Navigation.navigateTo(pageInput, navigationOptions)
        .then(
            function () {
                // Called when the dialog closes
                formContext.data.refresh();
            }
        ).catch(
            function (error) {
                // Handle error
                alert("CANCEL");
            }
        );
}

This JavaScript opens up a custom page and sends in a GUID parameter (look at PageInput) to use within the page. This is just how Custom Pages work, so don’t try to do any magic here!

Other examples of how to load a custom page:
Microsoft Docs Custom Page

Hide-Show button

It’s important to hide or show the button at the correct times, and that is why you have to add logic. With the following function, the button is only visible when the Opportunity is in edit mode. When creating a new Opportunity you will not see this button.

Self.Selected.State = FormMode.Edit

Add a new page to your solution

A custom page is a lot like a Canvas App, but it’s not exactly the same. Not all functionality is the same as a Canvas App, so you need to get familiar with it first.

The first thing I noticed was the lack of multiple screens.

It seems not impossible to add more screens, but Microsoft has hidden this feature. The reason seems to be related to isolating a Screen to be a specific application. Might make sense, but not for my use case. It does make somewhat sense because a Custom Page can be opened from everywhere within Model Driven Apps. It’s actually not tied to anything (entity) at all. If you need to turn it on: 👇

Please don’t judge this Canvas App ATM. It will only get better over time 😂

I added labels and text boxes without any logic to them yet and added a data source for Opportunities. This is all for the next step of our configuration of the Sales Win dialog.

Last step (maybe the most important one)

We now need to add the custom page to the APP.

Make sure you UNCHECK the “Show in navigation”. Otherwise, you will see this page as a navigation option on the left side like account, contact, oppty etc.

Finally, publish in the ribbon editor

What have we achieved so far?

Once the button is pushed, the Custom Page loads. 🙏👍🎉

Dynamics 365 App for Outlook button

Tiny blog for a tiny button 😂 This is only relevant if you have users that work in Outlook Web. Every now and then I do encounter a few Apple users that prefer the Outlook Web, even though it works well with Outlook for Mac.

Outlook client

If you use the Outlook client you know the button from the ribbon. Click the button do load the client.

Outlook Web.

OOTB the Dynamics client is hidden once it is deployed for the user. Only way to find it is to open the actual email and choose the ellipsis

Great thing is that we can change the order of the buttons:)

Solution

Open the Outlook Web settings and choose “View All Outlook Settings”.

Find the Dynamics 365 button in the Customize Actions and click save.

You now have the button easily accessible 🤗

Dynamics 365 Teams Document Locations – Where art thou?🤷‍♂️

Even though we all wish it wasn’t so, Document Locations still rule the integrations between Dynamics 365 and SharePoint. I’m not saying that I have a better idea what would be a smarter way of solving it, but it all seems a bit “2011” ish.

Last week I encountered a problem with the Document Locations for Teams, and I was surprised when I couldn’t find them in the Document Locations at first. The list only contained the SharePoint sites that the standard SharePoint connector uses.

In this list I was missing all of the Teams locations. Turns out that the view is only showing Active SHAREPOINT locations.. hehe

All you have to do is add the “MS TEAMS” to the search, and you should see all of the document locations for that also

Dynamics / Power Apps + Office App Launcher

Launching a new app or launching a new CRM system always leaves the users with the same question. Where do I find the application? At first I didn’t really understand the question, because I thought it was natural to bookmark the URL to your application ie https://www.company.crm4.dynamics.com/***** etc.

Eventually I realized that most users are actually using the waffle menu in office 365 when navigating to applications that they don’t use continuously.

They were expecting to see the application in the list when you clicked the waffle menu, because this would save them time.

Luckily this is not a problem 😊 Open the all apps, and locate the app you are looking for

And just like that you now have a quick navigation to your CRM or Power App application in the Microsoft 365 app launcher👊

Dynamics 365 form or advanced find images error

This post is almost not relevant any more due to the fact that we all will be pushed into the make.powerapps experience in “the fullness of time”, but I will still be using the classic viewer for the foreseeable future 🙂

From time to the images can get distorted due to unknown reasons. This is not a big deal as the buttons still work, but can be annoying for the users. You might have seen this in the 2 places:

Advanced find:

Advanced Find Menu Error – Microsoft Dynamics CRM Forum Community Forum

Form configuration:

Fix

There seem to be several ways to solve this issue, but not all seem to work the same. I have seen some options describing a cache clear in the console of the browser, but for some reason none of those worked for me. Lately I have had to open the developer tools and delete a bit more manual.

Click F12 in the browser where you see the error

Open the Application tab on the dev tools

Clear or delete anything within the storage related to dynamics.

Try to restart the browser, and hopefully that should do the trick:)

Dynamics HR + CDS / Dataverse

This is not the average Dynamics CRM post, but I was challenged by Malin Martnes to see if we could integrate the competency part of of Dynamics HR with Customer Engagement. The reason we wanted to look into the matter was because we thought it would be really easy!!! Turns out we were wrong.. hehe 😂

The first thing we did was figuring out what tables were accessible in the CDS integration. At the time of reading the blog, the number of entities was not a lot. The ones that I needed were not there. The complete list of tables that write directly to CDS can be found here:
https://docs.microsoft.com/en-us/dynamics365/human-resources/hr-developer-entities

A lot of fields available, but just not the ones regarding competency.

What to do?!?!? Docs to the rescue !!

Thanks to a link from DOC’s I learned that Finance and Operations has a link to export data. You can choose whatever dataset you want, and export it to file. This has actually nothing to do with HR, but is a feature from Finance and Operations.

https://docs.microsoft.com/en-us/dynamics365/human-resources/hr-admin-integration-recurring-data-export

So I followed the blog but I used Flow instead of Logic Apps.

First start off by creating an export function in HR. Whenever this is called, it will answer your call with a file.

Export Workers data project

The flow looks like the logic app in structure, but I do a little extra in the end to extract the .zip file to excel.

The first hard part was actually finding the URL for HR. If you ask me it’s quite hidden. I had to have some help from Malin to figure out what my URL to the environment was.

The “Export Workers” has to be identical to the name of the export package. Then you have to decide what the name of the file I wanted to export was.

{
"definitionGroupId":"Export Workers",
"packageName":"talent_package.zip",
"executionId":"",
"reExecute":false,
"legalEntityId":"USMF"
}

The delay is there because the service can sometimes use a little time with the response. Just let it work:)

This part of the flow was just to see if .zip file had been completed. When it was complete, we could get the actual package.

At this point I had absolutely no idea what I was doing, but it was working. The body of the HTTP GET function returned a .zip file. This I could create directly in a OneDrive connector.

The last step was then to extract the file from the .zip, and voila. I now had an automated Excel export from Dynamics HR.

For the last part I could simply connect a DataFlow for importing to Dynamics:)

Was there even a point to this?

Well.. Yes, and no.. The positive thing about this was learning that Finance and Operations has an export function that I could use for extremely simple integrations. This I might be able to use at some later timer.

Later Malin told me that they had released the Virtual entities for Dynamics HR and CDS. You can read more about these here:
https://appsource.microsoft.com/en-us/product/dynamics-365/mscrm.d365hr_virtual_entity?tab=Overview
and
https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4HfPD

I don’t know enough about the virtual entities yet, but I will have a go at that soon to see how it works with using the HR data within Dynamics.

The end goal is still to match competencies from HR to Field Service Dynamics 👍

Dynamics 365 Customer Service in 1 hour or less ⏰

Did you know that it is possible to setup a fully functional Customer Service installation in less than one hour?

I am proud to present all 3 parts
1. The community solution – Download
2. The Video for installation
3. The Video for demonstrating the product

I have put a lot of hours into this configuration, because I wanted other consultants to see how nice and easy Customer Service could be delivered. I have been using countless hours every time I wanted to show a new demo, so I finally put in the extra work to make it complete. This will hopefully save you a LOT of work next time you want to demo Customer Service, or deliver a good solution to your customer.

1. Download

Go get my free community solution for Customer Service.

https://github.com/thomassandsor/CustomerService

2. Install the solution

See how install the solution within one hour

3. Demo the solution

This is a showcase of how I would demo the solution. Find your own pitch and make yourself comfortable with it. Just make sure you have good demo data!! Good Luck 😀

Dynamics 365 Customer Service – The Solution

This is the last post in a long series about Customer Service and Dynamics 365. After several implementations over the years, the following configuration should be a great place to start.

Before we get started

Fire up a new trial of Dynamics with Customer Service, and add an office 365 trial to the same instance. I will not be going in depth on how to create a trial. Navigate here if you need tips

NB! for some steps you need Global Admin privilege

1. Exchange

The first step we need to do is setup a Shared Mailbox in the admin for O365. Navigate to https://admin.microsoft.com <- Make sure you are on the correct org when doing this.

When done you should se the message above. You now have successfully created a new email address for Exchange.

Dynamics Configuration

2. Import Solution

Download the solution from here
https://github.com/thomassandsor/CustomerService – open folder solution, and download THE LATEST VERSION 18+

In the video I will explain why UNMANAGED, but I am not an ISV is the short answer. I have written about what’s included, so easy to reverse.

Remember to PUBLISH CHANGES

You will now see a new App called CS

3. Add Team + Security Role

Next you need to add a new team to Dynamics. Open the Advanced Settings in the navigation to the top right. We will be doing the next part in the old client

Open Settings – Security and Team. Add a new team and give it a name. I have chosen Customer Service. This is the team name that will own the Cases before they are assigned.

Also remember to add the security role “Team – Customer Service”. This security role is imported along with the solution

4. Add Queue + assign Team

This is the step where we connect Microsoft Exchange with Dynamics 365

Name of the queue is not important, but make something that is sensible.

When you click save, a new Mailbox will be created automatically by the system. Open the Mailbox, an navigate to the next step.

5. Approve Email and test receive mailbox

This is the point where you need to be Global Admin to continue. Start by approving the mailbox/email address.

Step 2 you test and enable the mailbox. Once this is done, head on over to “alerts”

You might need to refresh this a few times before it displays anything. The refresh button in the upper right corner is the easiest way to update the feed. You should only see information messages now. This should not generate any errors.

6. Email Settings

Next step is really important for keeping the subject logic. All of this will make sense later when you see the reply of the emails you send. Open the Email Configuration Settings and make sure it looks just like below.

7. Create Account and Contact

Now we create an Account and Contact that we use for our demo. The Account name can be whatever you want, but the contact needs to have a valid email address.

8. Send Test Email Outbound

Now it is important to check that emails actually are going out of the system. Open the contact you created with the valid email address. Create a new email activity.

NB! make sure that you substitute the from address to Customer Service (queue you created earlier) before you hit send. This will send FROM the queue to the Contact.

If things go as planned you will see an email appear in the mailbox. Be sure to check you spam if nothing is in the inbox!!!

9. Activate Record Creation and Upadte + add Team to Case Created Owner

After importing the solution you will now find “Email 2 Case” in the Automatic Record Creation area. Open this via the Customer Service HUB

Make sure you select your Queue that you have added earlier ADD QUEUE

Open the Email 2 Case Flow to see the structure that Microsoft now has create for Email to Case.

If you like adding the Team as owner to the cases (Optional), you have to add this line to the Owner field in the Flow.

NB! You have to retrieve the GUID from the Team in CRM.

Fining the Team GUID

Last step is to Activate the email to case record creation.. At this point you should be able to see emails entering CRM via Cases.

10. Add Signature

Next step we have create a signature for the user. Signatures can be personal or company specific. The signature is located under the setup section. Navigation is at the bottom left of the CS app.

The signature below is HTML. I don’t expect you do this from scratch. I have a great guide here

11. Add User with Signature and Default Queue

Getting close to the end now, we have to add all our hard work to the Customer Service User replying to the emails. In the user form you see 2 fields “Signature” and “Default Queue”.

Update with the queue you created earlier, and the signature you just created. This is what will defines what the email leaving the system will look like.

12. Add Email Warning – New Activity on Case

This last step is optional. I created it in Flow, so beware of possible hitches with a few things regarding the current environment connector.

The purpose is to notify the Agent that a new Email has arrived for the case. If for some reason the system received email to a close case, I reopen the case and notify the agent.

https://make.powerapps.com and open the solution Customer Service – CS

Open the Flow. You might be asked to authenticate the connection, so do this before you move on.

Last step is activating the process

You are now in action 😀

Let’s see what happens when I now send an email inn to Dynamics

Then wait for the autoresponse

Inside of CRM the Case now has been created

Stay tuned

Next week I demonstrate how to demo the solution 🎬🎥