Canvas App record set Regarding field

For the last few days, I’ve been working on an app. Not just any app – it’s a canvas app! (It actually happens to be a COVID-19 related app, for local authorities to use to contact vulnerable people & check they’re OK etc).

Now, my background isn’t canvas apps – it’s the model-driven app approach. I’ve been doing this for years – after all, my experience goes back to Microsoft CRM 3.0! So that’s all really nice & easy for me (even with some of the more modern ‘tweaks’ that have been brought in). Canvas apps, on the other hand, are very different from what I’m used to, and are taking quite a bit of getting used to.

See, the following example is easy in a traditional model-driven app:

Create a contact, save various attributes to the contact record. Then create a task, and set the Task Regarding field to the contact that you’ve just created

Looking at that, my mind says ‘easy-peasy’!. I create the fields required for the contact entity (& task entity as well, if needed). I then add them to the entity form/s (creating or modifying the form view/s as well). Finally, I create a Business Process Flow for users on the contact entity, and append the task creation to it. Simple, and done – not much time needed to be spent.

But when needing to do this as a canvas app, things change around QUITE a bit. I can’t create that business process flow, and I have multiple screens to have all of the information on.

Now, if I could add the ‘Regarding’ field to the edit form grid, and apply formatting to it, I could hopefully then just submit & save the grid. However, that unfortunately doesn’t work. I can add the field, but when I do so, I get the following:

So that doesn’t work. Hmmm – how then should I go around doing it?

I did (obviously!!) take a look online. Here I came across this wonderful article all about polymorphic lookups (https://docs.microsoft.com/en-us/powerapps/maker/canvas-apps/working-with-references). Having read, & re-read through it, I’m STILL not understanding what exactly I should be doing by this!

So I was stumped. Thankfully we have an amazing community, and on reaching out to someone within it (thanks Eric!), I was helped out. I therefore thought to write this post up, so that it can help others as well.

There are two parts to this, for my specific scenario:

  • Saving the contact record down. This is a matter of using (in my case) the command ‘SubmitForm.ContactInformation’ on my contact form screen. I can then also set a variable if I want to, to refer to the Contact record GUID (hey – I’m trying to be cool here & show that I can!)
  • Finding a different way to save my task record. I accomplished this using the Patch statement – this thankfully wasn’t too difficult for me to grasp how it worked.

So, how did I go about using the Patch statement? Well, the function is referenced here – https://docs.microsoft.com/en-us/powerapps/maker/canvas-apps/functions/function-patch. With Eric’s help, I soon started to see how to do it.

What I did was add the following line in my Patch statement when I was wanting to save the task: ‘Regarding:ContactForm.LastSubmit’ (‘ContactForm was the name of the form for the contact information). What this did was write into the record the GUID for the contact record that I last saved.

An alternative to this would be to use a variable instead, and set it there.

Thankfully this all worked. I’m now able to create Task records and set their Regarding field value to the Contact that I set up before them – which is the exact thing that I was trying to do!

I hope that this has been helpful – leave a note in the comments if you’ve found another way of doing this.

Retrospective on the last year and decade, and looking ahead

Over the last few days, my social media streams have gotten quite busy with people posting their thoughts on the last year – what they did, what they were aiming to achieve and did actually achieve, etc. I thought it would be good, as part of progressing myself (and my writing skills) to do the same, and what better time than New Years Eve!

Please note that this isn’t going to be the shortest blog post…

Additionally, technology has come so far. Looking back 10 years, ‘cloud’ was a word that was unfamiliar to most. The first SaaS offerings for Microsoft products was starting to come about – I remember UK hosted solutions for Dynamics 2011 launching, as Microsoft wasn’t doing anything directly yet. Office 365 first went live in 2011, and slowly started being adopted. Over the last year, the Power Platform has scaled immeasurably, and really become a standard/common part of client solutions.

On a personal level, much has happened, both for myself and my family:

  • We bought a house, and moved in! (and yes, we’re fully unpacked)
  • My dad passed away. He hadn’t been well for a few years. It wasn’t so easy to deal with – I still sometimes think that I’ll call him about organising something, or want to show him a picture of a DIY project that I’m doing.
  • I started a new job at the beginning of the year, with a twist to my previous roles – this one was in Consulting (which I had never done before). I did this to challenge myself, and move out of my comfort zone
  • I started learning about bids, pricing, and all of those sorts of things that consultants take for granted
  • Although having been somewhat involved in the technical community since early 2018, I decided to step it up a notch. I aimed to interact more, and applied to speak at 3 User Group gatherings in the UK (I only got accepted for one, admittedly, and was really nervous!)
  • I started a personal brand – The CRM Ninja!
  • I set up a Twitter account in June. At this time of writing, I have over 1600 direct tweets, and 328 followers!
  • I started a blog at the same time – this blog! I also learned how to migrate it, when it turned out that the original host didn’t offer all of the functionality that I needed
  • On the subject of my blog, I’ve done 62 blog posts (not including this one). Looking back I can’t believe how many I’ve done, and the sheer number that I’ve got lined up for next year
  • I also started an interview series (The Oops Factor), which went live at the beginning of November. The aim for this was two-fold. Firstly to get myself out there and start being known, and secondly to find out lessons that people have learned along the way of their careers that we can share with the community to help better us all. I’m amazed at how well it’s been going, and have already got a list of people who want to appear on the show in 2020
  • I pushed myself out of my comfort zone, and started approaching people to ask them to come on my show, or to share information with me. I also started tweeting to (major) people in the technical scene, and have been amazed to actually receive replies (when Charles Lamanna replied to one that I did, it was 3am in the UK – I happened to wake up, check my phone, and got SO excited that I couldn’t fall back to sleep
  • I asked someone to be my mentor (Chris – I wouldn’t have let you said no!). I then asked someone else, and they’ve now become my coach
  • I took 6 certification exams, having not taken any in a while – got my MCSA and MCSE. It would have been 7, but I had an issue with one, so rescheduled the 7th one to 2020 (I’ll actually be taking it this weekend)
  • My grandmother passed away – the last of my grandparents. She had Alzheimer’s and dementia, so it was a relief to be honest, but still sad.
  • Left my job – it wasn’t turning out to be the right fit for me
  • My sister got engaged

Looking forward to 2020, I’ve been drawing up a list of goals and things that I want to achieve in it. So here goes (there will obviously be more that happens during the year…):

  • Find a new job that’s the right fit for me. I now have a better idea of what I’m looking for, and already have some great leads (thanks Alison!)
  • Speak at more community events
  • Become (more) known for Omnichannel for Dynamics, which is what I’m mostly blogging about. Really own that space
  • Find shows (podcasts etc) that I can get invited on
  • Lose weight & getting in shape. I’m an early backer and beta tester for BionicGym (check it out if you’re interested). I received my first unit in Dec 2018, and the progress was going well. Due to various things happening in 2019, I slacked off with it. My aim for 2020 will be to use it (I’ll be receiving my production unit as well soon) and really get in shape!
  • Host a global online webinar, sharing information and knowledge with others
  • Continue with all of the Dynamics exams, and pass them all (well, most of them – not so sure about the developer ones…)
  • Continue being mentored. I may ask someone else to be my third mentor
  • Look to mentor someone myself!
  • Continue to build my social media presence. Aiming to have 1000 Twitter followers by the end of 2020, and at least 100 YouTube channel subscribers
  • Read at least two self-improvement books a month (these can also be how to work better in business etc). I’ve got 7 sitting on my shelf at the moment to start with!
  • Continue to build my technical domain knowledge, and branch out a bit. Azure – this is looking at you….
  • Spend more quality time with my children
  • Complete building my new garden shed (today I finished getting the base area ready – now need to put down rubble, mesh, and then get the concrete poured)
  • Make better use of my time, both with work things as well as personal stuff
  • Get a new personal computer system. I’ll miss my Alienware 18, but it’s getting really old (and having issues)
  • Continue interacting with random technical people, and learn from them
  • Go out on my motorbike more
  • Try my BEST to get Satya Nadella and Charles Lamanna on my interview series

So, here’s to wishing you all an amazing and wonderful year ahead, and getting to know more of you!

Omnichannel for Dynamics 365 – Skills Part II

In the previous post, we started to learn how we go about setting up Skills for Omnichannel within Dynamics 365 (https://thecrm.ninja/omnichannel-for-dynamics-365-skills-part-i/).

In this post, we’re going to see how we enable Skill-Based routing within Omnichannel, as in order to use skills, we need to enable it! (seems obvious, right?).

To do this, we need to be signed into the Omnichannel Administration app, and we then go to ‘Skill Based Routing’, which is under the Settings area in the left-hand side navigation bar:

Clicking here brings up the skill-based routing settings. At the time of writing, this feature is still in preview, and shows an information window declaring this (this will disappear once it goes GA)

Clicking on the toggle slider will change the value to ‘Yes’, and will enable it. It’s also shown nicely in green, which is something that I’m really liking!

Select a Rating Model to use, from the right hand grid. As touched upon in the previous article, rating models are used to set how proficient a user is with a specific skill. You can have multiple rating models saved, and use them for specific scenarios.

Rating Models are made up of two parts:

  1. Rating Model (being the name of the rating model, and the minimum/maximum rating values allowed)
  2. Rating Values (the actual values being used – the number of rating values should be the same as the range for the Rating Model minimum/maximum that you’ve set)

In the next article (https://thecrm.ninja/omnichannel-for-dynamics-365-skills-part-iii/) we look at how we go about attaching skills to conversations

Installing Omnichannel for Dynamics 365 (Trial) – Part II

In the previous post in this series, where I talked about the first part of installation (https://thecrm.ninja/installing-omnichannel-for-dynamics-365-trial-part-i/), I covered how to get the first 3 prerequisites dealt with for installing Omnichannel (namely Customer Service Hub, PowerBI licenses, and Data Consent).

In this post, I’m going to be covering the 4th item – actually getting the Omnichannel Hub installed. It’s not as straightforward as you may think, so I’ve included lots of screenshots, as well as a bonus YouTube video at the end showing the process for this as well (for people who prefer videos).

If you look at the official Microsoft documentation on Omnichannel for Dynamics 365, it says that you need to install the solution from the Dynamics 365 Administration Center:

Manage omnichannel

That’s all very well and good, but doesn’t actually show the reality of things! If you go to the Dynamics 365 Administration Center for your environment, you’re likely to see something similar to the following (you may be fortunate enough to see the option for Omnichannel there, in which case skip to ):

Hold on. There’s no ‘Omnichannel for Customer Service’ option there! Indeed so – and you’re not going to find it easily.

So, in order to actually get the Omnichannel option there in the Applications section, you’re going to need to do the following:

  1. Go to https://trials.dynamics.com/
  2. Select the ‘Customer Service’ option

Scroll down the page, and where it asks for your email, enter the email address that you used to sign up for the trial with! (this will be in the format of user@domain.onmicrosoft.com). Enter your phone number as well, and click ‘Get Started’

It’ll tell you that you already have a Dynamics 365 account. Click ‘OK, got it’ to continue. What is happening in the background is that a new trial is being created in your tenant, but at the same time Omnichannel for Customer Service is being installed. You don’t need to use the trial environment (and it’ll expire after 30 days), but you WILL be using the Omnichannel application (which will stick around even after the new trial expires).

You’ll then get a beautiful whirly GIF, showing that setup is happening

Once setup has completed, go back to the Dynamics 365 Administration Center (go to http://admin.powerplatform.com/, select ‘Environments’ from the left navigation bar, select an environment, and click the ‘Manage Solutions’ button on the menu bar. Select the ‘Applications’ option from the menu ribbon and Hey Voila! You should see ‘Omnichannel for Customer Service’ present! (you may need to click to the next page on the Applications screen)

Note that it’s showing as being ‘NotConfigured’ – we’ll go through the configuration of this in the next blog post.

Also note that there are two other options underneath this. Once is for Facebook, and one is for SMS. These are the direct integration points for this products that are provided by Microsoft (rather than an ISV or 3rd party solution), and more will appear over time as Microsoft releases further functionality.

Now for the YouTube video, in which I walk through all of the above in a live replay!

In the next part of the series at (https://thecrm.ninja/installing-omnichannel-for-dynamics-365-part-iii/), I go through the actual initial configuration of the Omnichannel for Dynamics 365 configuration

Installing Omnichannel for Dynamics 365 (Trial) – Part I

In order to be able to access Omnichannel for Dynamics 365, it’s necessary to install the Omnichannel Hub solution. There are several prerequisite items that are necessary in order to do this, with several steps.

The requirements for Omnichannel Hub are as follows:

  1. The Customer Service Hub needs to be installed on the environment within the tenant
  2. There needs to be a PowerBI License assigned to the user/s
  3. Data Access Consent needs to be accepted
  4. The Omnichannel Hub needs to be installed

Let’s go through the above steps. Due to the length of this, I’m going to be splitting this into two parts. This guide will cover getting Omnichannel up and running in a Trial environment – I’ll be doing a separate entry on getting it in a Paid For environment.

Customer Service Hub

This is actually quite simple. When setting up your trial at https://trials.dynamics.com/ (using the link to set up the trial for development purposes, of course)

You need to select the option below on the scenario screen (you can of course select the ‘All of these’ option as well!)

If creating the environment from admin.powerplatform.com, ensure that you select the option to create a database for the environment, ensure that you select the option to deploy Dynamics 365 apps, and then select the ‘Customer Service’ option (you can select others as well – it won’t affect Omnichannel)

Once it’s installed, you can check that it’s there by going to your Apps within the Dynamics 365 environment, and you should see the Customer Service Hub option there, both on the app menu on the left, as well as on the main screen

PowerBI License

Omnichannel for Dynamics 365 requires a PowerBI license assigned to users. They may have this already as part of their assigned license/s. Sometimes the system doesn’t always pick this up – if this happens, it’s possible to get and assign PowerBI Free licenses for users through the Office Admin portal (under Billing/Purchase Services):

When going through the check-out process, you’ll be prompted for a credit card. Thankfully it’s possible to bypass this by selecting the option to invoice, rather then use a credit card (it’s a free license anyhow, so just go through the process and finish). Once the licenses are in the admin centre, assign them to the users who’ll be using Omnichannel.

Data Access Consent

In order to allow Omnichannel for Customer Service to read and write data on behalf of users, Data Access Consent needs to be granted. This has to be performed by a Global Tenant Admin, who needs to use the following link – https://go.microsoft.com/fwlink/?linkid=2070932.

Once they access the link, they’ll need to sign in, and they’ll be presented with the following acceptance screen (note how many things are being accessed!):

They should select the ‘Consent’ box, and then click Accept

In the second part of this series (https://thecrm.ninja/installing-omnichannel-for-dynamics-365-trial-part-ii/ ), I go into the details of how to actually install the Omnichannel Hub!

Update on things

I’ve been somewhat quiet on here for the last month or so (as well as Twitter and LinkedIn). Fear not – I haven’t disappeared, there’s just been a lot going on.

Image result for update

 

  • Some time off work (for religious festivals)
  • Crazy client projects, requiring massive amounts of effort to convince them of Microsoft technology
  • Moving this blog (yup – that’s right). It looks like the same, but due to some of the limitations for analytics of the previous hosting provider, I’ve now moved it to a different host (and whilst doing it have learned quite a bit more about WordPress!)
  • Submitted to speak at PowerPlatform UG London in November – got accepted!
  • Submitted to speak at D365 UG London in November – unfortunately didn’t make the shortlist, but hopefully another time
  • Have started a (new) video series, which is going live VERY soon. Some great people lined up to come on it, and looking for more
  • Submitted to speak at D365 UG Summit EMEA 2020 in Barcelona – will only find out in November if I’ve made the shortlist, but feeling excited!
  • Apart from having a mentor, have managed to find a really amazing coach to help me get to the next level(s). Really looking forward to this journey
  • Have decided on what piece of Microsoft tech I’m going to be talking about in detail (oh, you thought I’d say here what is is? No – you’re going to have to wait a bit to find out, but it won’t be too long)

In other news, I’m also looking at putting a new garden shed in our garden (well, we already have the shed – need to put a base in place, and then assemble it). Ah, the fun and joys…

 

Keep an eye out for the future developments and information that I’ll be writing about!

Scaling up to Enterprise Level

Image result for enterprise level

In my previous post (Creating a Flow to set record image), I created a way to bring an image into the CDS from an external source. This works well (obviously!).

There are 3 stages involved in the process:

The next stage of thinking is if we would be doing this in an enterprise environment, how would we do things differently? Talking to Mike Carlton, there are a number of things that we’d need to take into consideration, including (but not limited) to:

  • Security
  • Storage
  • Compatibility
  • Classification
  • Record management & lifespan

Let’s talk about these, and go into more detail for each

Security. There are a number of ways in which people try to hide attacks. One of these ways are in images – it’s possible to include a .exe file (or similar) – the user downloads a normal looking image, which is actually an attach vector onto the computer. To minimise the risk of this occuring, the image file would need to be scanned by appropriate antivirus/antimalware first (which is a Flow action, using Azure Security for this purpose). Incidentally Microsoft use the same heuristic engine across all of their estate, so some people would want to also incorporate a second one as well

Storage. As everyone knows, storage is important! And depending on what type of storage is being used, pricing can vary greatly (anyone who’s costed D365 storage against Sharepoint storage against Azure Blob storage will know this). It’s therefore important to keep on top of this, as otherwise it’s very possible that the storage costs will increase rapidly! It would therefore be rational to include a file size check, to avoid someone trying to use an image file that’s hundreds (or thousands) of MB’s.

Compatibility. In the scenario here, we’re using an image. There are many different image types, and when scaling up we should implement checks to ensure that the image type is indeed one that’s supported (by whatever system we’re pushing the image into). In scenarios for other data types, it would also be important to check (and enforce when required).

Classification. When bringing data into a system from external resources, it’s essential that correct classification (ie metadata) is stored against the data. This ensures that the system is kept

Records Management & Lifespan. When scaling up functionality, it’s important to start considering who should have access to the data, and if any necessary security controls should be put in place to manage this. It’s also important to understand how long data should be kept with the system, and if processes should be implemented in order to redact and/or remove the data after a specified period of time (this is extremely relevant with GDPR now being in place)

Charity Volunteering

I’ve been somewhat absent over the last 1.5 weeks. Not because I haven’t had things to talk about (I have!), but because I’ve been quite busy. There’s the usual workload of course, but I’ve also been doing some charity volunteering, which has been taking up quite a bit of my time.

Image result for charity volunteering

Now, when you say ‘charity volunteering’ to someone, the image conjured up could be of helping out in a communal kitchen, raising funds for something, etc. Somewhat wide of the mark for this instance though.

With the caveat that I’m not going to go into deep detail, there’s a charity for kids and teens with cancer that visits the UK every few years. They spend around 8 days here, jam-packed with activities. It’s really their only major trip abroad, as they’re quite seriously ill. They bring with well over 100 campers, they have a ratio of 1:2.5 councillors per camper, and a full medical team and tech crew. It’s quite a large group. Many of the kids are receiving treatment throughout the trip itself.

My father had handled the logistics of the trip for more than the last decade. He did logistics professionally, and through his connections enabled the trip to have a better experience time after time, building on it with each visit. I had assisted him with this special group several times, and was always amazed at what he managed to accomplish.

He passed away early this year. One of the first responses to the news of his passing were questions as to how the group would be able to visit this July. I took it upon myself to try to step up, and carry out what had been carried out before.

With still no idea HOW I actually managed to accomplish it….I did. Liaison with national organisations such as the CAA, airport operations/security, baggage handling, airline operations/security – it all went through. Everyone was more than willing to help out, and I am most deeply grateful to everyone involved.

It really has been a lesson in seeing that if you really do put your mind to something, it’s (usually) achievable, and I am extremely happy that I was able to help out and assist with things running as smoothly as they did

Power Platform Admin Centre

Ever wished that you had a single place to manage/create environments, see statistics for all of your systems, view data integrations, etc?

Traditionally, it’s sometimes been quite hard to see all of this – admins have had to go to multiple places to find this information, and then bring it all together manually. A tedious task at times! This was especially true if an organisation had multiple environments – truly a major headache.

Image result for system admin frustration

But now…..there is an answer!

With the new Power Platform Admin Centre (note – it’s currently in Preview), this is all a thing of the past. It’s now extremely easy to see a massive amount of information in just one place. This covers environments, analytics (not only Dynamics environments, but now also the CDS, Flow and PowerApps for a tenant), Data Integrations, Data Gateways, etc.

The URL to use is https://admin.powerplatform.microsoft.com . When logging in, you’ll see the various options in the left hand menu bar.

Some screenshots (some obfuscation for privacy reasons):

Environments

Analytics

CDS Information

So go log in, and see what wonders you can find. Happy discovery…and enjoy the freed up time that you should now be having!

Marketing and Brand

Image result for social media

My current logo is quite standard (I’ve actually used it for a number of years for some things). But it’s not quite what I’m wanting for this. Therefore a logo rebrand is now being kicked off – results to hopefully be displayed soon!

As mentioned by many people, it’s vitally important to have a consistent theme and brand. It’s also important to cover the multiple different channels available.

Additionally I’ve now registered both Twitter and YouTube channels! This will push my comfort zone (for YouTube at least), but will hopefully be good.

Stay tuned!