Canvas Apps & Lookup Fields (CDS)

Canvas apps are amazing. Seriously so. I’ve been developing my knowledge around them, and it’s incredible what you’re able to do with them. Clients are loving them as well, with how quickly it’s possible to develop something that’s visually appealing.

From a licensing perspective when looking at using data into/out of D365, I’m usually using the CDS as the datasource. This means that apart from a handful of scenarios, users would be licensed with a PowerApps licence, rather than a D365 one.

With all of the wonders and benefits that canvas apps brings, there still are some limitations. One of them I came across earlier today pertains to lookup fields.

Using Contact as an example, we see that ‘Currency’ is a lookup field:

When inserting a Gallery control, it’s possible to choose up to 3 fields to be displayed (depending on the layout selected). However, when we go set the value to a lookup field from the entity, they’re not there – it’s not possible to select a lookup field to be displayed. As you can see below, there’s no possibility to select ‘Currency’ (which we saw above):

I have no idea why Microsoft chose to do this, as it is possible to select a lookup field when connecting using a D365 datasource (though admittedly even then it only seems to work in limited situations, such as for Opportunities)

So, ways to work around it:

  1. Don’t! Accept the situation for what it is, and hope that Microsoft allows it in the future
  2. Create a custom text field for the entity. Create behaviour (eg with Flow, though keep in mind scalability of the solution and Flow run limits – you don’t want to be burning through all of them!) to copy the value of the lookup field to this new field (ensure that if the value is changed, it updates the custom field value as well). You can then use this field to be shown on the gallery control
  3. For lookup fields that are actually lookups (see item 4 below), it’s possible to change the ‘Text’ property for the field. Using the example above of Currency, the formula needed would be ‘LookUp(Currencies,’Currency Name’ = ThisItem.Currency.’Currency Name’).’Currency Name” (without the extra quotation marks). See left side image below for example of this
  4. For lookup fields that are actually of type ‘Customer’ (yup – special behaviour…thanks Microsoft!) there’s a different way that you’ll need to do this. You have to use the AsType function to declare  the type (i.e. account) of the relationship (this can also work for Owner fields, where the owner can be a user or a team). The formula needed to show the Account name would be AsType(ThisItem.’Company Name’,[@Accounts]).’Account Name’. See right side image below for the example of this

I’d also like to give thanks to Jason Almeida for his help and assistance with finding solutions – he’s an amazing guy!

What are your thoughts on this?

What is a Functional Consultant?

One of the questions that I’m regularly asked by people is ‘what do I actually do’. Well, that’s a good question, after all. Usually I’ll say something like ‘I look out of windows, and think about things’. It’s more exciting to them than what I actually do!

When I was interviewing in the consultancy world, I came across all of these wonderful titles. Technical consultant, Functional consultant, etc. I had to try to understand what they meant, as I’d like to think I have skills across the entire project lifecycle (though I’m not a developer).

Image result for project life cycle

So, with that in mind, I thought it might be good to do a post on what exactly a Functional Consultant is (as that’s apparently what I am…)!

The general statement goes as follows: ‘A Functional Consultant is there to be the liaison between the client and the development team. They listen to the client, understand what they’re trying to do, and facilitates the development of the product’.

Hold on – I know what you’re about to ask. This sounds similar to a Business Analyst, right?

That’s true, to a point. But there are functional (if you’ll excuse the pun) difference.

A Functional Consultant has strong product knowledge, understands the product/s on a (very) technical level – how it works, why it works that way, any limitations, etc. This can be quite specialist at times, depending on the product at hand. They know how to take advantage of native system functionality, and how it can support the client and their needs. This then allows them to best advise the client on the right solution that they should be going with.

Image result for correct advice

They also have the understanding, ability and knowledge to take what the client needs, create ‘user stories’ from this. The aim of a user story is to provide the full package and information for a specific feature, that is able to be understood both by the client as well as the development team. This will therefore include high level detail, as well as go into detailed specification/s that are required for the specific feature to be able to be developed and work.

By doing this, they remove the need for continual back and forth between the client and development team during the development process.

Image result for back and forth

There is also more to the role of the Functional Consultant. Because of their experience and in-depth product knowledge, along with the ability to understand and analyse what the client actually needs (as opposed to what is currently in place), they are able to up-sell, cross-sell, and increase the opportunity that they’re bringing to the client. Of course they’re going to be bringing in revenue by doing this, but they’re also then able to provide further value to the client overall.

This will then lead to a better professional image, further opportunities, and potentially even to act as a favoured advisor to the client (which is of course an amazing place to be in!).

Image result for trusted advisor

So, how would YOU describe your role?

Canvas Apps – Changing field order

Image result for field order

In Model Apps, it’s extremely easy to set out the fields on the form as you wish to. It’s a simple case of drag and drop.

However when looking at Canvas Apps, it’s not so straightforward (at least not initially!).

When adding a form to the app, you can then select which fields you’d like to appear (assuming you’ve connected it to a data source with fields, eg a CDS entity). These then show up, but aren’t always in the order that you’re wanting them to.

You can’t drag and drop the fields on the form itself – the interface doesn’t allow you to! So how exactly is this done then?

It’s actually done on the field selector slide out – you click the field that you want to change the placement of, and move it up (or down) the list.

This will then change where the field is then displayed on the form (you can also do some clever stuff with the number of columns being used etc). Quite a nice way to easily update them.

Happy layout placing!!

PowerPlatform & Commenting

The thinking behind this came out of a conversation I was having with someone last week. I had asked them to briefly document their thinking behind what they were creating on the PowerPlatform (especially with PowerApps). This would help me (and others) when reviewing the created item/s, to understand the thought processes and logic paths.

Image result for code comments

I mentioned to them that traditionally when coding, developers would include comments in the code itself. This would help other developers in reading through it, understand why things had been done in a specific way, and not in another way. Heck – even though I have minimal coding experience (mostly SQL), even I’ve done that.

Apparently they had NEVER heard of this. Somewhat surprising, as they’re from a technical background.

This got me to thinking – with the shift from Microsoft to LowCode/NoCode, it would be great if there was somewhere where comments could be loaded when doing PowerPlatform stuff. This is especially true when trying to follow a line of thinking from people who are more orientated towards the business side of things, rather than the tech side.

Image result for code comments

So – how/what would YOU suggest to handle this? Please comment!

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

Creating a Flow to set record image

Due to my interest in motorbikes, and being a keen biker (as touched upon previously), obviously one of my PowerPlatform/D365 environments is based around motorbikes! I mean, why not….

My aim is to have a list of motorbikes, and be able to distinguish them by make, model, and type. This is going to form the basis of various things that I’m minded to test out in the CDS with PowerApps and Flow, which I’ll be blogging about on a semi-regular basis.

Having the list of data is obviously necessary. Then it occurred to me – I should be saving an image for each motorbike against its record.

So there’s a default field available in every entity for an image. This is the little icon that displays next to the record name at the top left of the form when you open it:

There’s only ONE image field available for each entity – which makes sense, after all.

Now, this can be manually added to the record by manually uploaded. That’s a pain though – surely there’s a BETTER way to do this…and what could be better than using Flow!

So I started to create this, and see how it would work. Thanks to Mike Carlton for his amazing support with this.

The aim is to have a URL to a picture that the system will then automatically go out to retrieve.

The first Flow that we created did this by getting the URL, saving the image to OneDrive, and then taking that image and uploading it into the CDS record (we’re not touching D365 at all here)

After tweaking one or two of the parameters (the finished Flow is shown above), it ran successfully! High fives all around.

Looking further at it, I wondered if it would be possible to remove the stage where the image file was saved to OneDrive. I played around with it further, and lo and behold – it was indeed possible!:

This is now working very nicely, and I’m quite happy with it. More to come!

Microsoft Dynamics 365 Certifications

Having recently completed several exams, including the new MB-900 Fundamentals for Dynamics365, I thought it would be useful to set out how the new exam structure works, and what paths can be taken within it.
This post is meant to be for D365 CE, not for F&O (I’m hoping to do a separate post on that another time).

10 Marketing Certifications That Can Land You a Job at Ladder

The first question that usually comes up around certifications is ‘why should I take the exams – I know how to use/configure/deploy the system!’.
The answer to this is actually quite easy – if you know the stuff, then the exams won’t be too hard for you. They’ll also give you a better overview of things, especially due to the new curriculum (eg including cloud offerings, etc).

Not only is it rewarding for you to take (and pass!) them, it shows that you’re able to do so (and you get cool badges…thanks Microsoft for gamifying things lol).
Additionally it can also help your company to qualify for different Microsoft Partner tiers, which can be quite important in the grand scheme of things (I am NOT going to talk about the recent IUR situation…)

It can also help when applying for a job position, as recruiters will check to see if you’re current with the latest exams. Experience is great of course, but they’ll want to know why you may not have any (recent) exams to show your knowledge.

The first exams in the series that I’d recommend to take are:

The MB-900, as per the name, goes over the fundamentals of Dynamics 365, and also gets you used to the new format (it’s now 60 minutes, with approx 25 questions). There are now drag’n’drop questions, multiple choice answers, and ‘journey style’ questions (these are when the question presented depends on the answer given for the previous question)

The MB-200 exam covers the different deployment types, configurations and integrations, and click-based customisations. It expands on the base that’s set out in the MB-900. 

The next question usually asked is ‘what area/app should I specialise in’?
That’s ALSO quite simple to answer – there are (currently) 4 options available for exams (after the MB-900). These are:

So, pick which one you think would be most suitable to your role, and take them. Of course, that’s not stopping you taking some of the OTHER exams as well – why not try to get the whole set in!

Study tips:

  1. Read the syllabus! Microsoft doesn’t just draw them up randomly – they cover the material needed. They’ve also been through Beta phases where feedback has been given (which Microsoft usually take some note of). It will give you an idea of where the focus is, what’s needed to check, etc
  2. Practise – hands on experience. You really DO need this now. Fire up a trial, start playing around. Use the syllabus as a guide for this – if it says that you need to know about cases (eg case management, case routing, case rules, parent/child cases), then make sure that you DO know how to do these!
  3. Talk to others who are studying at the same time – perhaps try to make a study group. I was fortunate enough to join twice-weekly session for one of my exams, hosted by an amazing Microsoft Trainer.
  4. When taking the exam, if you come across something that you don’t know, and are guessing the answer to – DON’T CHANGE THE ANSWER LATER ON. In this sort of scenario the gut reaction is usually 85% correct, and it’s better to leave it than try to second guess yourself.

Also, don’t stress out about the exams. They’re not the Big Bad Wolf – once you do them, you’ll see that they’re not absolutely crazy. Sure, you may have to guess a question or two, but even very experienced people do that.

Useful resources:

Environments & Security

Following on from my post last week (https://thecrm.ninja/2019/07/05/environments-for-projects/) where I talked about the different environments for projects, I thought it would be good to talk about security relating to it as well.

Image result for security

What I’ll be discussing below is best practise for projects that relate to (external) clients.

However, there are usually some small differences when it’s an internal project for a company – security is can be slightly more relaxed (after all, the dev teams are usually the ones responsible for rolling the project out, providing on-going support, new features, etc). It’s also the case that internal developers (usually) won’t be prevented from seeing what the actual company data is.

The essential principle is as follows: Users should be restricted to only using environments that they are needing to access

This follows Best Practise for system security, as well as some common sense (it’s surprising how many times this can seem to be lacking!)

Access to the environment/s will depend on roles/s of the person, along with infrastructure that is in place. Users should not be granted access to any environment that they have no need to access at all .

DevIntegrationUATStagingTrainingProductionSupport
Team
Developers




Consultants


Clients


Note: There may be exceptional cases people are required to access the Production instance for a client. In such a circumstance, it is vital and absolutely necessary to have a complete audit trail to cover this, setting out the reason/s for it, along with all actions that are taken within the system. This should be ideally be via email, or any other system that may be present to allow a definitive time-stamped communication of request and sign-off

There is an extensive security model within Dynamics365 that can be used to enable and control this, if needed (eg for users to have access to one part of the system, but not another – this could be due to the system holding restricted access data, for example).

Have you come across any cases where this wasn’t followed, and caused issues? Feel free to comment – I’d love to hear about what happened!

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!