Dynamics 365 for Customer Engagement

Remove Flow Ribbon Button

Remove Flow Ribbon Button

Hey D365’ers! Welcome to {{ quirk.works }}, a blog series where we try to solve a Dynamics 365 or Power Platform problem with unconventional solution. For our first part of the series, let’s try to remove the Flow ribbon button.

So you want to remove the Flow ribbon button?

Yes sir, we don’t want our users to see it as per our requirements document.

Tried removing it with Ribbon Workbench?

Ribbon buttons are easy to hide/show using the Ribbon Workbench. Just select the ribbon button, right click, and click Hide.

Hide also the rest of the ribbon button sub-menu.

And there you go. What? It’s not hidden isn’t it?

Here’s a {{ quirk.works }}

There is a quirk with how the Flow ribbon button can be removed.

Click the cog icon on the upper right side of the screen and click Advanced Settings.

Go to Settings > Administration

Go to System Settings.

Open the Customization tab. There you have it, select No from the option Show Microsoft Flow on forms and in the site map. Click the OK button and we’re all set.

Conclusion

Not every ribbon button can be hidden using the Ribbon Workbench, sometime you have to look out of the XrmToolBox. Just playing with some puns, no offense meant for these great tools as I admire these awesome works from Scott and Tanguy. Until our next {{ quirk.works }}, stay-tuned D365’ers. I’ll keep you posted.

 

How to upload Powerapps Audio into sharepoint?

Problem: Recently I have a requirement to upload recorded audio from powerapps to sharepoint.

Requirements seems to be straight forward if you have a basic knowledge of Powerapps and Microsoft flow isn’t it? But there is a catch (let’s see that in sometime :-))

Just for the completeness of this blog, I will reiterate certain Hows.

How to Record and listen the Audio in powerapps?

In powerapps we have a media control named MicroPhone to record the audio, and another media control named Audio to listen to the recorded audio.

Further on how to do that:

In the Microphone control (I named as MyMic) Onstop property collect the recorded audio as follows:

ClearCollect(collInspectionAudio, MyMic.Audio);

In the Audio Control Media property, place the collection which you have used to collect the recorded audio earlier as follows:

First(collInspectionAudio).Url

We now know how to record and listen the audio within powerapps. Now lets discuss the actual challenge on how to upload it to sharepoint.

Analysis

We use Microsoft flow to upload to sharepoint however in my microsoft flow it looks straight forward to pass the audio as First(collInspectionAudio).URL to my sharepoint file content as shown below.

when I execute the Powerapps and hence my flow it is creating an audio file in my sharepoint, however its not playing. when I see the outcome of the Flow i found it strange because File content looks as below:

When I further drilldown into the problem by checking the datatypes in flowstudio. I realized that in Createfile action of Sharepoint connector expects Binary format hereas powerapps send its audio content in byte format.

Solution:

So the only way to get around is accept Byte parameter from Powerapps and use it to upload file in sharepoint.

For that, I used Outlook connector  to send an email. When I ask for attachment parameters in powerapps it can send in byte format.

Note: If you have a requirement to send email of the audio file along with uploading in sharepoint then that’s amazing. If you don’t have such emailing requirement then another slight hack is required.

  1.  Create a condition which never becomes true. (in my case 100 equals 200 which never becomes true ;-))
  2. In the true section call Outlook connector and ask for parameters for Attachment Name and Attachment Content.
  3. In the false section call Sharepoint Connector and create a file by using same parameters which we have in Step 2.

Final working Microsoft Flow looks like this:

Warm Regards,

Pavan Kumar Garlapati

 

 

Dynamics 365-CE Approval Dialogues Using Canvas-apps

There are scenarios where we need to configure approvals in Dynamics 365, for example, mark an account as a premium customer after approval or qualify leads after approval etc. We used dialog control to capture approval request and comments but, now dialog controls are depreciated and not advised to use for new projects.

As per Microsoft’s initial announcement

Dialogs are deprecated and are replaced by mobile task flows (available as of the December 2016 update), and business process flows. Both task flows and business process flows will continue to evolve to make the transition easier.

But either tasks flow or business process flow was not a perfect replacement for Dialog. Knowing this pain from users, Microsoft has now modified the announcement.

Dialogs are deprecated, and should be replaced by business process flows or canvas apps

Even though I knew canvas apps can be now embedded in model-driven apps, I hadn’t thought of this option until I came across this new announcement, so tried replicating my approval dialogues with a canvas app and it works fine. Pheww!!!! 🙂

For testing purpose, I replicated the dialogue for creating approval request for the Account entity.

  1. created a canvas app to create an approval request.
This sample app changes account status to pending verification and captures the comments in one custom field.

2. Now we need to call this app from account form, obtain the app ID from app details section.

select app details to get the App GUID

3. I need to call this canvas app as a popup when the user clicks a button. I created a custom button for account entity-> added a JavaScript as button action to call an HTML web-resource and embedded my canvas app in this HTML I-frame.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<html><head>
<title>Approval</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body style="padding: 0px; font-family: arial; overflow-wrap: break-word;" onload="LoadPowerApp()">
<center>
<iframe id="Approval" width="800" height="600"></iframe>
</center>
<script id="myScript">
function LoadPowerApp()
{
var AccountID = window.parent.opener.Xrm.Page.data.entity.getId().slice(1, -1);
document.getElementById("Approval").src=url;
}
</script>
</body>
</html>

I know you have many questions now. "https://web.powerapps.com/webplayer/iframeapp?source=iframe&appId=/providers/Microsoft.PowerApps/apps/56123673-f45c-4b96-b9e6-ece1b0a8069a&ID="+AccountID;

This is the key and I will breakdown it into parts “https://web.powerapps.com/webplayer/iframeapp?source=iframe&appId=/providers/Microsoft.PowerApps/apps/APP GUID&CUSTOM PARAMETER NAME=”+PARAMETER VALUE

App GUID I explained in step 2, now regarding a custom parameter, I deliberately didn’t mention it when we discussed the app creation and kept for this section. When we open this canvas from an account form(like we start a dialogue) the app needs the record GUID to update the account status

I have used form control in the canvas app and filtered the item using the ID Parameter.

4. Now try your button and you can see the magic.

You can download the sample APP from TDG Power Apps bank.

Please note this is a basic app I tried for testing purpose and needs many improvements to use in a live project. you are always welcome to discuss with on this app.

Hope this helps….. 🙂

Creating a Quiz in Forms Pro

Today we had a “bring your kids to work” day at Barhead Solutions in Melbourne, Australia, with six kids between the ages of 8 – 13 in the office.  I was brave and stupid enough to insist they take a break from the games and movies to create a quiz together, using Forms Pro.  I’ll be honest – there were varying degrees of enthusiasm in the room – I was competing with a Lego car set, a seriously huge pack of textas, origami paper, Uno, Monopoly cards, and tummies full of pizza.  But I was determined, enthusiastic, and in charge, and I put Forms Pro up on the big screen and forged on. with my own unique brand of enthusiasm…

Once the kids came up with the concept of a “How much of a kid are you?” quiz, I had more than half of them on side, and it wasn’t long til I had the whole group.  At first their questions were all about opinions – who was your favourite character in a movie – which led to an discussion of the difference between a survey (opinions, feedback) and a quiz (right and wrong answers with scores).  There is nothing quite as good at testing your understanding and ability to explain clearly as having to get a bunch of kids on track.

And so we worked together, constructing questions in their various areas of expertise and interest – cartoons, super heroes, Minecraft, board games, YouTubers, Disney Princesses.  I taught them (by stealth) how Forms Pro works, showing off the AI that appeared in various questions as we created them, much to their increasing delight.  Then we circulated the quiz to everyone at Barhead.  They watched their parents get things right and wrong. They watched the results come in, and the charts and reports being created and changing. The pizza was good, but this might actually have been the highlight of the day –  when we got 47 responses, most of which proved the adults don’t know as much as the kids!  The kids also loved the built in themes, and were very proud of how their quiz looked when we sent it out.

I’ve done a lot of demos with Forms Pro surveys, but this was my first real experience of putting the quiz functionality through its paces, and I learned a lot.  There is functionality there that I didn’t know existed, including the ability to grade and post results.  All the question types that appear in surveys are available to quizzes, but they don’t work quite the same way – for instance, the NPS question (“How much did you like our survey?”) shows as a dial, rather than a sentiment analysis, and doesn’t auto-score for the points available.  I’d also love to see the ability to allocate pro-rata points for multi-response answers (e.g. where someone picks 2/3 correct answers but misses the third one) – as much as the kids delight in seeing adults get things “wrong”!.

Overall, it was a fun and informative experience, which will lead me to explore more of the quiz functionality in Forms Pro.  I suspect when we have these kids back again on a day in the next school holidays, I will be able to hand over the laptop and let them create the next survey themselves.  It’s really that easy!

You can test yourself on our “How much of a kid are you?” survey here – but be warned – these kids are tough quiz masters – and no googling allowed!  https://forms.office.com/Pages/ResponsePage.aspx?id=DEOYUBLCG0GHJcJRCqvR1VOqayAv2uZIlXHN_DK7jh9URUlPSkdCSktZTEM1SjZBOUc0MlBWTjVNRS4u

D365UG Bristol

Man, oh MAN! I am just on the train back from Bristol after attending their first 365 User Group. and it was AWESOME!

First up, big props to the organisers @lubo @dbarber @xrmjoel @robpeledie @leembaker for doing such an amazing job. The venue was great, the food was too (including vegan options :-)) and the swag bags were epic.

But more importantly, the speakers were amazing.

First up, Mark Smith did a fantastic presentation to explain the (seemingly unexplainable) Common Data Model, which is something that sits on the CDS and exists to make sense of your data so that it is usable and, more importantly, means you can build apps faster. Considering he knew nothing about the CDM 5 days ago, this was a great presentation which goes to show how quickly you can assimilate information when the data is available in a usable format (see what I did there *winks*)

Second up was @scott-durowdevelop1-net showing us how much the Power Platform has changed in such a short space of time, and why that’s such a good thing, enabling access to a much wider audience and giving rise to things like the Citizen Developers who can effect such great change in an organisation, and how we all need to embrace change and be adaptable.

And finally, @themarkchristie with an entertaining presentation on how he bought headphones at the Microsoft store and @lubo busted them 5 minutes later – but not to worry, Virtual agent was able to help him raise a support ticket through Forms Pro, which then could be assigned to someone in Field Service, leading to the headphones being fixed (whilst being worn by Mark Smith).

I learned a lot about how to better use the tech we have openly available to us in a more inventive way, and how to work with the community to find answers to stuff that you are struggling with.

I love these community events and I hope to attend each and every one that I can.

Again, big thanks and well done to the organisers.

Love to all

Alison

(Me when I won a Flic button from @themarkchristie)

Opening Global Search from a Webresource

Following my post here about opening a CRM form from a webresource by passing a query string, I got another idea to enhance the customer experience. How about opening Global Search from my webresource?

The idea is to search for a contact record based on a query string. If the contact record is not found in CRM, then I would want to open the global search screen and pass the query string value to it. This will give the option of finding my records among Contacts, Leads and Accounts.

Global Search
Invoking Global Search

To do that, you will need to open the following URL in your webresource.

https://ORG_URL/multientityquickfind/multientityquickfind.aspx?text=Gabriele

You can pass the following optional parameters as Encoded text as well:

sitemappath=SFA|MyWork|nav_dashboards (note that the | character must be replaced with %7c)

pagemode=iframe

There is also an XML Payload in which you can specify the Entity Filter.

<?xml version="1.0" encoding="utf-8" ?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetQuickFindColumnCollectionForEntityArray xmlns="http://schemas.microsoft.com/crm/2009/WebServices"><entityCodes>4</entityCodes></GetQuickFindColumnCollectionForEntityArray></soap:Body></soap:Envelope>


Impact of deprecation of VoC on the Exam MB-230: Microsoft Dynamics 365 for Customer Service

For people aiming for: Exam MB-230: Microsoft Dynamics 365 for Customer Service

In October, Voice of the Customer skills and exam questions will be replaced with Forms Pro skills and questions. The exact date of that change and the associated changes to the Skills Measured will be communicated in August, 2019. Please prepare for your exam accordingly.

How to fix Ribbon Button issues in Unified Client Interface (UCI)

A while ago I was working on creating a ribbon button for Contact Form. I used the fabulous RibbonWorkBench to add the button to my classic form. My requirement was to run a workflow from my custom ribbon button. The post I referred to was from Scott Durow in his website.

When I changed my form from the classic Webform to UCI, I saw two strange behaviors .

The button was not anymore showing on UCI

  • Someone using the Ribbon Workbench, the Enable Rule was messed up. The button was showing in the classic form but not on the UCI form. I tried creating new solutions. I even tried isolating the button. None of these worked. Then I had to examine my “Customization.xml” file. I used the Microsoft Documentation to write enable rules again and published my solution. Once I published my solution it worked fine. To button line is that in case of any issues with your ribbon (when you try all possible options), make sure to examine Customization.xml to ensure your configuration is correct. Customization.xml is the ultimate source of truth.

Pressing the ribbon button was not doing anything

  • The ribbon button was not performing anything because the action was from a static .js library (/_static/_common/scripts/RibbonActions.js). Actions in UCI must be from web resources. static files are not supported anymore on UCI

Wave 2 Release Plan with the MVP’s Part 2

Part 2 of our MVP review of the PowerPlatform 2019 Wave 2 Release Plan. In this episode I am joined by Mark Christie, Iain Connolly, Andrew Bibby, and Shawn Tabor to discuss:

  • Field Service
  • Unified Interface
  • Canvas Apps
  • Microsoft Flow
  • Common Data Service
  • The death of Task Flows

And in case you missed it, catch part 1 here.

How to set Sharepoint document location in a field dynamically in Dynamics 365

So, I recently had this requirement to put the SP document location in a field and show it on the Contact form. And I had to do it OOTB way. After some time of playing around with the D365 workflow, I found a way to do it. Yay! 🙂

First, make sure to

  1. Enable Server-side Sharepoint Integration.
  2. Enable document management for your desired entity.
  3. Take note of the absolute URL of your Sharepoint directory. It looks something like this: https://contoso.sharepoint.com

Once you have Sharepoint side set up, let’s do some config! 🙂

  1. Create a field where you would like the link to appear on. In this case, I created a single line of text field with format URL and put it on the form.

2. Create a workflow. The important thing to note here is that the workflow should run on the Document Location entity.

3. Create a step to update the record of whichever entity you enabled document management on. In my case, it is Contact.

4. Inside the workflow designer, select the field you created on Step 1 and paste the URL of your sharepoint directory and add a “/” character.

5. Once you’ve done that, select this field from the Form Assistant and it on the field after the “/”.

6. Once you’ve mapped the field from Step 5, add another “/” character.

7. Select this field from the Form Assistant and add it after the second “/” character.

8. Select Save & Close and activate your workflow.

9. Now this link will be added dynamically on the form 🙂

 

5 ways to insert images in Dynamics 365 email templates

 

Disclaimer: Some of these methods are unsupported, so please check Microsoft documentation for updates.

1. The old school copy paste.

1.You need an image that is hosted on a public-facing website. Simply go to that image, right click, and select Copy Image. Works in IE, Chrome, Edge, and Firefox. The image must be rendered in browser view.

2. Open a new email template window, hit ‘Ctrl + V’ to paste the image. Your image should now be visible.

2. Upload your image in a file repository online (OneDrive/Dropbox/Google Drive)

Another secure way is to upload your image to your preferred file repository, make the file public, and embed it in your email template.

  1. Simply get the direct link to the image you have uploaded.
  2. Open the image in browser view, right click and select Copy Image.

3. Open a new email template window, hit ‘Ctrl + V’ to paste the image. Your image should now be visible.

3. Base64

If you do not want to upload your image to a site, you can encode your image using Base64.

1. Use an Image to Base64 converter. I personally use this website but it’s up to you, you can use MS Flow if you want 🙂

2. After you’ve converted the file, copy the Base64 code. Enclose it with an <img> tag. Select the text and copy and paste it to your email template.

3. When you insert a template into you email, the image should render properly.

4. Clickable images

If you want your image to point somewhere on the web, then you would want to make use of a few friendly HTML tags.

Example:

<a href=”https://dynamics.microsoft.com/en-us/”>
<img border=”0″  src=”https://mspoweruser.com/wp-content/uploads/2016/10/Microsoft-Dynamics-365-logo.jpg”></a>

  1. Just copy the snippet above and replace the href tag to whatever URL you want the image to direct to.
  2. Open a new Email Template window, paste the HTML snippet. Select Save & Close. 

3. When you try your new email template, the clickable image should work properly.

5. Image slices

This is a bit beyond this post, but this is a common issue especially if you want to send out marketing emails. I would just like to share what I know.

  1. Open your image in Photoshop, make your desired slices using the slice tool.

2. Once your slices are ready, right click on a selected slice, then select Edit Slice Options.

3. Enter URL/target depending on where you want the slice to direct to.

4. Once you’re set, select Save for Web and Devices and then select Preview.

5. Copy the generated HTML script and replace the img src tag to the direct link of the image.

6. Paste it on your new email template. Select Save & Close.

7. When you try your new email template, the image slices should be rendered properly. 🙂

How to Enable the PowerApps AI Builder

Hey, Will here – just a quick post. I’ve had quite a few people come up to me asking how to enable the new “AI Builder” for Power Apps on their environment – which strikes me as slightly strange as it comes enabled as default. However, here is how you do it.

 

  1. Go to: https://admin.powerplatform.microsoft.com/ 
  2. Then using the navigation pane select “Environments” then select the environment you wish to turn the ‘AI Builder’ on for:
  3. Then select “Settings”:
  4. Then select “Features”:
  5. Then enable the PowerApps AI Builder:

Now go forth and build something AWESOME!