Dynamics 365 for Customer Engagement

PowerApps – limitations, requirements & configuration values

Here is some more great reference material lifted from Microsoft regarding PowerApps requirements, limitations and configuration values.


Supported platforms for running apps using the PowerApps app

Minimum required Recommended
iOS 9.3 or later iOS 10 or later with at least 2GB of RAM
Android 5 or later Android 7 or later with at least 4GB of RAM
Windows 8.1 or later (PC only) Windows 10 Fall Creators Update with at least 8 GB of RAM)


Supported browsers for running apps

Browser Operating system
Google Chrome (latest version)
Windows 7 SP1, 8.1, and 10
Android 5 or later
iOS 8 or later
Microsoft Edge (latest version)
Windows 10
Microsoft Internet Explorer 11 (with Compatibility View off) Windows 7 SP1, 8.1, and 10
Mozilla Firefox (latest version) Windows 7 SP1, 8.1, and 10
Android 5 or later
iOS 8 or later
Apple Safari (latest version) iOS 8 or later


Supported browsers for PowerApps Studio

Browser Operating system
Google Chrome (latest version)
Windows 7 SP1, 8.1, and 10
Microsoft Edge (latest version)
Windows 10
Microsoft Internet Explorer 11 (with Compatibility View off) Windows 7 SP1, 8.1, and 10


Request limits

These limits apply to each single outgoing request:

Name Limit
Timeout 180 Seconds
Retry attempts 4


The retry value may vary. For certain error conditions, it’s not necessary to retry.


IP addresses

Requests from PowerApps use IP addresses that depend on the region of the environment that the app is in. We don’t publish fully qualified domain names available for PowerApps scenarios.

Calls made from an API connected through an app (for example, the SQL API or the SharePoint API) come from the IP address specified later in this topic.

You should use these addresses if, for example, you must whitelist IP addresses for an Azure SQL database.

Region Outbound IP
United States,,,,,,,,,,,
United States (Early Access),,,,,,,


Required services

This list identifies all services to which PowerApps Studio talks and their usages. Your network must not block these services.

Domain(s) Protocols Uses
management.azure.com https RP
msmanaged-na.azure-apim.net https Runtime of Connectors/Apis
https ADAL
https Azure Graph – For getting user info (e.g. profile photo)
gallery.azure.com https Sample and Template apps
*.azure-apim.net https Api Hubs – Different sub-domains for each locale
*.powerapps.com https WebAuth + Portal
*.azureedge.net https WebAuth
*.blob.core.windows.net https Blob storage
vortex.data.microsoft.com https Telemetry

[Source: https://docs.microsoft.com/en-gb/powerapps/maker/canvas-apps/limits-and-config]

PowerApps Formula reference for PowerApps

Formula reference for PowerApps

When building PowerApps I have found the below from Microsoft incredibly really helpful, an index of awesomeness for all things related to PowerApp formulas. I have lifted this from the Microsoft page but kept all the hyper links to allow you to drill into each piece of functionality.


Abs – Absolute value of a number.

Acceleration – Reads the acceleration sensor in your device.

Acos – Returns the arccosine of a number, in radians.

Acot – Returns the arccotangent of a number, in radians.

AddColumns – Returns a table with columns added.

And – Boolean logic AND. Returns true if all arguments are true. You can also use the && operator.

App – Returns information about the currently running app, such as which screen is currently displayed.

Asin – Returns the arcsine of a number, in radians.

Atan – Returns the arctangent of a number, in radians.

Atan2 – Returns the arctangent based on an (x,y) coordinate, in radians.

Average – Calculates the average of a table expression or a set of arguments.


Back – Displays the previous screen.

Blank – Returns a blank value that can be used to insert a NULL value in a data source.


Calendar – Retrieves information about the calendar for the current locale.

Char – Translates a character code into a string.

Clear – Deletes all data from a collection.

ClearCollect – Deletes all data from a collection and then adds a set of records.

Clock – Retrieves information about the clock for the current locale.

Coalesce – Replaces blank values while leaving non-blank values unchanged.

Collect – Creates a collection or adds data to a data source.

Color – Sets a property to a built-in color value.

ColorFade – Fades a color value.

ColorValue – Translates a CSS color name or a hex code to a color value.

Compass – Returns your compass heading.

Concat – Concatenates strings in a data source.

Concatenate – Concatenates strings.

Connection – Returns information about your network connection.

Count – Counts table records that contain numbers.

Cos – Returns the cosine of an angle specified in radians.

Cot – Returns the cotangent of an angle specified in radians.

CountA – Counts table records that aren’t empty.

CountIf – Counts table records that satisfy a condition.

CountRows – Counts table records.


DataSourceInfo – Provides information about a data source.

Date – Returns a date/time value, based on YearMonth, and Day values.

DateAdd – Adds days, months, quarters, or years to a date/time value.

DateDiff – Subtracts two date values, and shows the result in days, months, quarters, or years.

DateTimeValue – Converts a date and time string to a date/time value.

DateValue – Converts a date-only string to a date/time value.

Day – Retrieves the day portion of a date/time value.

Defaults – Returns the default values for a data source.

Degrees – Converts radians to degrees.

Disable – Disables a signal, such as Location for reading the GPS.

Distinct – Summarizes records of a table, removing duplicates.

Download – Downloads a file from the web to the local device.

DropColumns – Returns a table with one or more columns removed.


EditForm – Resets a form control for editing of an item.

Enable – Enables a signal, such as Location for reading the GPS.

EndsWith – Checks whether a text string ends with another text string.

Errors – Provides error information for previous changes to a data source.

EncodeUrl – Encodes special characters using URL encoding.

Exit – Exits the currently running app.

Exp – Returns e raised to a power.


Filter – Returns a filtered table based on one or more criteria.

Find – Checks whether one string appears within another and returns the location.

First – Returns the first record of a table.

FirstN – Returns the first set of records (N records) of a table.

ForAll – Calculates values and performs actions for all records of a table.


GroupBy – Returns a table with records grouped together.


HashTags – Extracts the hashtags (#strings) from a string.

Hour – Returns the hour portion of a date/time value.


If – Returns one value if a condition is true and another value if not.

IfError – Detects errors and provides an alternative value or takes action.

IsBlank – Checks for a blank value.

IsEmpty – Checks for an empty table.

IsMatch – Checks a string against a pattern. Regular expressions can be used.

IsNumeric – Checks for a numeric value.

IsToday – Checks whether a date/time value is sometime today.


Language – Returns the language tag of the current user.

Last – Returns the last record of a table.

LastN – Returns the last set of records (N records) of a table.

Launch – Launches a web address or an app.

Left – Returns the left-most portion of a string.

Len – Returns the length of a string.

Ln – Returns the natural log.

LoadData – Loads a collection from PowerApps private storage.

Location – Returns your location as a map coordinate by using the Global Positioning System (GPS) and other information.

LookUp – Looks up a single record in a table based on one or more criteria.

Lower – Converts letters in a string of text to all lowercase.


Max – Maximum value of a table expression or a set of arguments.

Mid – Returns the middle portion of a string.

Min – Minimum value of a table expression or a set of arguments.

Minute – Retrieves the minute portion of a date/time value.

Mod – Returns the remainder after a dividend is divided by a divisor.

Month – Retrieves the month portion of a date/time value.


Navigate – Changes which screen is displayed.

NewForm – Resets a form control for creation of an item.

Not – Boolean logic NOT. Returns true if its argument is false, and returns false if its argument is true. You can also use the ! operator.

Now – Returns the current date/time value.


Or – Boolean logic OR. Returns true if any of its arguments are true. You can also use the || operator.


Param – Provides access to parameters passed to the app when the user opened it.

Parent – Provides access to a container control’s properties.

Patch – Modifies or creates a record in a data source, or merges records outside of a data source.

Pi – Returns the number π.

PlainText – Removes HTML and XML tags from a string.

Power – Returns a number raised to a power. You can also use the ^ operator.

Proper – Converts the first letter of each word in a string to uppercase, and converts the rest to lowercase.


Radians – Converts degrees to radians.

Rand – Returns a pseudo-random number.

Refresh – Refreshes the records of a data source.

Remove – Removes one or more specific records from a data source.

RemoveIf – Removes records from a data source based on a condition.

RenameColumns – Renames columns of a table.

Replace – Replaces part of a string with another string, by starting position of the string.

Reset – Resets an input control to its default value, discarding any user changes.

ResetForm – Resets a form control for editing of an existing item.

Revert – Reloads and clears errors for the records of a data source.

RGBA – Returns a color value for a set of red, green, blue, and alpha components.

Right – Returns the right-most portion of a string.

Round – Rounds to the closest number.

RoundDown – Rounds down to the largest previous number.

RoundUp – Rounds up to the smallest next number.


SaveData – Saves a collection to PowerApps private storage.

Search – Finds records in a table that contain a string in one of their columns.

Second – Retrieves the second portion of a date/time value.

Set – Sets the value of a global variable.

ShowColumns – Returns a table with only selected columns.

ShowError – Displays an error message to the user.

Shuffle – Randomly reorders the records of a table.

Sin – Returns the sine of an angle specified in radians.

Sort – Returns a sorted table based on a formula.

SortByColumns – Returns a sorted table based on one or more columns.

Split – Splits a text string into a table of substrings.

Sqrt – Returns the square root of a number.

StartsWith – Checks if a text string begins with another text string.

StdevP – Returns the standard deviation of its arguments.

Substitute – Replaces part of a string with another string, by matching strings.

SubmitForm – Saves the item in a form control to the data source.

Sum – Calculates the sum of a table expression or a set of arguments.

Switch – Matches with a set of values and then evaluates a corresponding formula.


Table – Creates a temporary table.

Tan – Returns the tangent of an angle specified in radians.

Text – Formats a number as a string for display.

ThisItem – When in a gallery or form, returns the data for the current item from the container.

Time – Returns a date/time value, based on HourMinute, and Second values.

TimeValue – Converts a time-only string to a date/time value.

TimeZoneOffset – Returns the difference between UTC and the user’s local time in minutes.

Today – Returns the current date/time value.

Trim – Removes extra spaces from the ends and interior of a string of text.

TrimEnds – Removes extra spaces from the ends of a string of text only.


Ungroup – Removes a grouping.

Update – Replaces a record in a data source.

UpdateContext – Sets the value of one or more context variables of the current screen.

UpdateIf – Modifies a set of records in a data source based on a condition.

Upper – Converts letters in a string of text to all uppercase.

User – Returns information about the current user.


Validate – Checks whether the value of a single column or a complete record is valid for a data source.

Value – Converts a string to a number.

VarP – Returns the variance of its arguments.

ViewForm – Resets a form control for viewing of an existing item.


Weekday – Retrieves the weekday portion of a date/time value.


Year – Retrieves the year portion of a date/time value.


[Source: https://docs.microsoft.com/en-gb/powerapps/maker/canvas-apps/formula-reference]

PowerApps – Camera Integration Part 1

Part one of the ‘Those Dynamics Guys’ PowerApps Series.

As promised via Linked-In I am going to publish a series of Blogs on how to start using PowerApps. PowerApps is part of the Dynamics 365 stack that allows a user to create various application that connect with not only Dynamics 365 Data Sources but a prodigious plethora of others such as:

  • WordPress
  • SharePoint
  • Twitter
  • Skype For Business
  • Outlook
  • Bing Maps
  • Google Maps


Selecting a connection/data set:

This will then take you to the next step which is where you can either create a new connection and select a connector of your choice (this example would use Dynamics 365 for Finance and Operations – known as jsut Dynamics 365 for Operations in PowerApps) or if you have pre-existing connections available select the Dynamics 365 for Operations connector and choose an environment, preferably Test Environment that you have full System Administrative access too,  and select it as your data set.


Selecting a table:

Now we have our data source we need to let the system know which Data Entity we wish for it to use – for this example we are going to use ‘Projects’, use the search functionality to filter through the various DEs to find the correct one choose it and select “Connect”:

A ‘Building Your App’ process will kick off then you’ll be greeted by the PowerApps designer. Then we are ready to start throwing this beast together!


Navigation of the PowerApps Designer (an Introduction):

Please note the menu is dynamic in nature so options will disappear and reappear depending on what has been selected – the navigation shown here is when no items are selected and should be seen as an introductory overview.

  1. Home – the home area on the action pane allows the user to choose from a various array of formatting option (text size, text weight, Italics, borders, fill, pre-set themes etc.)
  2. Insert – Allows the user to insert various items such as; buttons, icons, various controls, input text, labels, data, media, charts etc.
  3. Action – this allows you to create certain actions for various items including; ‘Navigation’ (where you’d like a certain item (Icon, button etc.)) to take you to a certain screen within the app, ‘Collect’ allows the user to create collections (this will be covered later on in the article), ‘Flows’ allows to integrate a flow or the option to create a new one. There are other options but this is enough to start with.
  4. Screen – select images for the background of the screen, state positioning for background images and select various colours to fill the background with.
  5. New Screen (Home Tab) – this allows the user to insert a new screen and select from various options such as whethere you wish for a blank fixed screen, a scroll enabled screen etc.
  6. Tree View – this view displays a break-down structure of the selected screen. Which allows you to navigate around the design of your app.
  7. Thumbnail view – this view represents the screens via small thumbnail images. Which allows you to navigate around the design of your app.
  8. Tree View (break-down) – separates into various items that can be drilled into to focus on each item independently.
  9. Play Icon – this allows the user to preview the app in it’s current, unpublished, state – you can also push F5 as a shortcut.
  10. Properties – allows to set various options for the selected item such as formatting of the item itself, default values etc.
  11. Rules – this allows the user to apply a rule that modifies an app based on predetermined criteria on the item selected.
  12. Advanced- depending the item selected this is where the user can apply various commands (some of which we’ll address in this article) applied to data elements, action elements and design elements.

One final item is the ‘View’ tab which allows the user to view the ‘Data Sources’ being used by the application (create new connections, refresh connections and delete connections), view any media being used by the App, view collections and variables.


Presenting the ‘Projects’ DE in a more useful manner:

The first stage to build our camera app is to have the first browse screen render the data in a more useful manner. Currently it is browse screen with some values in my case the “Allow Negative Values To Be Carried Forward” value:

To achieve this select the main ‘Browse Gallery 1’ area – then select, from the ‘Properties’ area within the ‘Layout’ grouping “Title, Subtitle and body” this will bring up the data dialogue where was can start picking and choosing the data from the Projects Data Entity that we wish to expose onto the gallery.

To change what is shown in the gallery we can change the following data inputs for the labels:

  • Body1
  • Subtitle1
  • Title1

I am going to change the drop down for each one of these to the following values:

  • Body1 = DeliveryName
  • Subtitle1 = ProjectStage
  • Title1 = ProjectName

This will then populate the Gallery with the selected values (push F5 of the play icon to view the app in it’s current state).

Now we have presented the Gallery in a more readable manner we now have a basic app that will allows us to view projects, select a project to view further details on the selected project and even edit certain values and publish them back to Dynamics 365 for Finance & Operations.

We will come back to adding further fields to the project details area but for now let’s jump straight in to, what I deem, the more exciting part- building the camera functionality and storage.


Building the camera functionality:

Right now on to the awesome part let’s build a camera app! First stage is creating a new screen. To achieve this go Home>New Screen then select Scrollable Screen.

Insert a new screen:

Change a label value:

This will generate and insert a new screen into the viewing pane and the designer will take you to the newly inserted screen The first thing i’d like to do and familarise ourselves with is changing the label which in this case is the Title. It is possible to change the label text in three locations:

  • Formula bar (by selecting ‘Text’ from the list and put quotations “” around it)
  • Properties – within the ‘Text’ area
  • Direct – by typing into the label itself


The next stage is to insert the ‘Camera’ Control – to achieve this first select the ‘Add an item from the insert tab’ (this isn’t a necessity but is a quick and easy way to remove the text from the screen) from the ‘Insert’ tab on the action pane and select Media>Camera.

Insert Camera and capture images:

This will then insert the Camera:

Now we need to start a collection that allows us to capture a picture and store it (we will then look into passing the image through to SharePoint and email later on in this article series). First select the Camera and go to the ‘Advanced’ area- we are now going to put in an ‘OnSelect command’ this come be achieved in two ways:

  • Advanced – within the advanced area there is an OnSelect field.
  • Formula Bar – change the list to ‘OnSelect’.

Type in the ‘OnSelect’ field the following:      ClearCollect(CameraImage,Camera3.Photo)

  • ClearCollect means that it’ll only store one image in the collection at a time (remove ‘Clear’ to amass a large collection.
  • “CameraImage” is the name of the collection – rename this this to whatever you’d like the collection to be called.
  • “Camera3” is the name of the Camera item and “Photo” the media the collection is expected to capture.

Now whilst still in the screen that contains the Camera ‘Play’ (Push F5) the app – this will open the App in the screen that you are currently in – now click the area that contains the camera. This will engage the ‘OnSelect’ command which will engage the ‘Collection’ to grab a still image from the camera.

Now let’s view the image. Go to  View>Collections:

This will take you to the collections list where we can select ‘CameraImage’ (the name we chose as the collections name in the step above) and view the captured photo.

The next article will show us how to present the image under the camera (shown below), then we’ll move on to flows! Article 2 click here!





“UNEXPECTED ERROR” on Record Creation / Update in a Workflow

I’m going to share something life changing with you right now. Perhaps I’m the only one that ever experienced this… who knows, but I thought I’d share it anyway.

Have you ever created a workflow and added the “Update / Create Record” function? Have you ever created an “Automated Record Creation Rule” and added the same function? Have you ever received the below error? I’ve found that this generally happens on the Case entity…

WELL… If you have ever encountered this delightful little issue, then you are in the right place. After beating my head against a wall, I discovered that this appears when you activate and publish the Knowledge base functionality to the associated entity… This is why it was happening on the case record.

To resolve, simple pop into the relevant entity and disable the KB functionality on the forms.

The thing that made me very sad was that I discovered I needed to disable this on all the forms, not only the primary form. This may be an issue if you have a load of different forms.

Once I had disabled the KB functionality I could set the update fields in the case entity.

Once all your updates are made, simply go back into the case entity and re-enable the KB functionality J

I hope this helps someone because I fought for a while to get this right and I couldn’t find a load of stuff on the web.

HOUSING HACKATHON – Opinion Interview with Addi Ammar – Housing Rockstar!

Recently I had the privileged of having a chat to Addi Ammar, one of the Dynamics 365 housing specialists at Hitachi Solutions and also one of my mates. Addi is SUPER passionate about housing and has working in the industry for over 5 years. Her passion for the technology and for how it can be utilised to provide solutions in the housing industry is infectious. I really loved chatting.

Firstly, Thanks to Addi for taking the time out to chat to me. Was super fun and I learnt a whole lot. Recently Addi attended a housing hackathon hosted by Microsoft at the Thames Valley Park Offices on the 14th of March. Addi and her team were the proud winners J very cool and congratulations to all who put in so much hard work to make this event possible.

Normally we would do a recording, but I thought we would try this in a Q&A / dialogue type structure just to see how it works. We did laugh a lot: D so, here we go.

Chris: Welcome Addi, thanks for taking the time to chat. So, after attending the housing hackathon at Microsoft yesterday, what did you think? Was it fun to hang around a bunch of like-minded people and chat tech / problem solving?

Addi: I thought it was a really interesting and insightful day. There were a number of housing associations there as well as a number of vendors with different technologies and different offerings. So, it was really good to get everybody in a room together and, kind of, pass the ideas around. What was interesting, was that every HA had the same pain points… Even though this is something that we know, it’s really nice to get that sanity check and to hear everybody saying, Do you know what? Repairs, how do we manage them? How do we make it more intelligent? And, in fact, for the hackathon, all the teams picked repairs as their biggest pain point.

Chris: HAHAHA, no ways! That’s really interesting.

Addi: EVERYBODY! So it was really hard for the judges, because they were judging 5 repairs solutions.

Chris: Wow

Addi: So our table was predominantly Dynamic vendors. We had Advanced at the table, we had RSM, and obviously Hitachi. We had ANS there who weirdly, I used to work for. ANS offer a solution where they can migrate your current platform up into the cloud. We also had our housing association we were working with. What was cool is at our table, they had brought one of their tenants, so instead of bringing all IT staff and people from the business, they brought a tenant as well, which is probably what gave us the edge, because we were able to talk about technology and its impact on people at the other end. The GENUINE customer experience. I thought it was a fab day. We had loads of idea sharing.

Chris: That’s very cool! So did you and your team come up with a great solution to solve problems with repairs? Did you focus on anything in particular about repairs, or just the whole process?

Addi: We looked at the End-to-End journey and we started by saying that you should be able to raise a repair through any mechanism because it has to be what meets the needs of the tenant. So as well as having a mobile app, Artificial Intelligence, Chat bots that learn based on what’s been done before, being able to take a photograph of the repair and being able to recognise what that is. We also looked at things like Alexa and Google home because there are tenants that might have a smart phone but have no idea how to use it, whereas, Alexa is something you can physically speak to. We actually talked about tenants with dementia and Alexa might be easier for them to interact with than handling a mobile phone or interacting over a portal. Then we looked at flowing that information in and routing it out to the correct services. We also looked at the commercial element as well.

Chris: Oh Really?

Addi: Yeah I think it’s one of the things that set us apart from the other teams and one of the reasons we came first. We said well, we’re putting all this good stuff in, but HA’s firstly have maintenance staff that aren’t always busy, but they could also run like a trusted traders thing. SO, for tenants and non-tenants, they could access a service and say, you know what, my flat needs a piece of work doing, it needs painting or a toilet seat and you could pick a trusted trader that the housing association has either employed or verified. It’s an income stream, because you could charge for those repairs AND if you are letting trusted traders advertise through your housing association, you are generating income. SO, Yeah, they really liked that.

Chris: So you managed to bring a load of the bits and pieces together from a repair point of view. Do you think that there alignment between the HA’s and the partners? I suppose different ideas come from different places! Do you think the HA’s even knew some of this technology existed?

Addi: My impression was, there is a lot of buzzwords in the industry at the moment and for some housing associations, they have not even started their CRM journey. They have a load of disparate systems, they have all this data that is sitting in different systems, but they can’t use it. They have heard buzzwords in the industry like Alexa and Chat Bots but they don’t know where to begin in applying that because they have not got the fundamentals in place yet. I think that was really interesting in its–self. I think different people are at different stages of the journey, and that was evident in the room. So one of the housing associations that presented have gone through their digital, I’m not going to say “transformation”. HAHAAHA! I’m not going to say “Digital Transformation” because that implies that there is a destination, it’s more of a journey.

Chris: I love that!!!

Addi: You should ALWAYS be moving with the new technology and moving with the times. Striving to always be better. But the HA previously mentioned, they have done their CRM bit, they have done their standardising and rationalisation of data, systems and processes, so they are now able to look at how to make all of this more innovative. How do we get our tenants plugged into this digital shift? Some of the other HA’s haven’t started that journey, so everyone is at different points. There is A LOT of noise in the industry at the moment about chat bots, AI, Alexa bit I don’t think people realistically know how they can be applied.

Chris: You know something interesting; I was having a conversation about Alexa the other day about using Alexa in areas like Social Care. You have a scenario where an elderly person is in a smallish house, they have a fall and they can simply call out to Alexa to contact the HA or emergency services. Now that may be a little way in the future, but I thought that would be something that would make a real difference to someone’s life.

Addi: yep, that parallels really nicely with the tenant at our table was talking about one of the people she works with (She sits on a tenant panel and offers support to other tenants) has dementia and has got fixated on her laundry. This person will go out to the laundrette multiple times a day because she can’t remember if she has taken laundry there and left it. She will continuously go and check. And I said, well, if she had something like Alexa, and she could say in the morning “Alexa, I’m doing my laundry today”, then she could ask later. This stops her having to go out multiple times in a day… and we are talking about going out in bad weather as well. So, she would get a taxi or take a walk down to the laundrette because she has no-one to remind her.

Chris: Wow, that’s tough!

Addi: She doesn’t want to give up living in her home. She doesn’t want to go into a care home. Technology would enable her the ability to stay in her social housing home and not have to move into a care home…. And actually live better.

Chris: That’s very awesome. That really improves someone’s quality of life. I genuinely think that leveraging tech in that way makes a difference.

Chris. So in your opinion, realistically, how close do you think housing associations are getting to actually implementing this type of tech?

Addi: I think again, it comes down to the fact that everybody is at a different point in the journey. Based on what was said in the room, it seems everybody knows that the capability is there, actually delivering that is another story… Simply because, the HA’s themselves aren’t necessarily there yet. It has to come down to; getting the fundamentals in and working and then acknowledging that you are not building the fundamentals just for today, you are building for tomorrow as well.

Chris: So it’s very much about future proofing?

Addi: Exactly!

Chris: During the event, you must have interacted with a load of different types of people. What was the general consensus on the event?

Addi: Everyone really enjoyed it! The team that Rob Fletcher (Green Square Group) was on came up with something almost like a Pokémon go type app where when you are walking around your property it could actually pickup that there was a potential problem. It could see the damp and see the boiler lights flashing. After chatting away to people like Rob and the other vendors, everyone was getting really fired up. Yes, we were competing against other teams, but it was friendly competition. We were genuinely working together to hack these issues.

Chris: I’m actually super jealous that I couldn’t attend! So, do you think that these types of events are beneficial to the housing industry? Do you think there should be more of them?

Addi: YES! YES I do! I think HA’s want to come and I think they want to talk about what ever part of their journey they are at! They want to talk about where to go next. I think regardless of the size of the HA, there will be interest and enthusiasm. I’d really like to be part of running one with Hitachi actually! Everyone seemed to be really bought in. It wasn’t like we were trying to design something that was never going to happen. In the near future, a lot of this stuff is seriously possible. I think it would definitely be worth having more of these types of events.

Chris: Fantastic! I’ll be at the next one!

Chris: LAST QUESTION, I promise…. Do you think the Microsoft product stack aligns nicely with the requirements being made by HA’s?

Addi: The Microsoft stack is offering HA’s the ability to get all their data and processes into one place. They are sitting on so many disparate systems. A lot of the HA’s are locked into systems that they can’t easily configure or change themselves. If they want to add a few fields they need to pay someone a lot of money to do that. The Microsoft stack is flexible and Dynamic. It’s growing because of the investment behind it, which is really important. We also would love people to stay with Hitachi as their provider, but if they decided to move on, it’s not as if they are locked into something so bespoke they can never get away from it. I’ve worked at housing associations where people have been depressed because they are stuck with a system that is so bespoke and they can’t move away from the supplier. HA’s are ready for a solution that allows for them to be put on one platform and where they can control their data and processes and can still do all this innovation. Because it’s Microsoft, the innovation will just keep coming.

Chris: Oh for sure, the innovation will never stop! NEVER!!

Addi: Well, in the keynote speech at the hackathon, Microsoft stated that they are constantly updating their vision, which will then reflect on the customers.

Thank you so much to Addi for this awesome chat! As you can see through the information Addi has shared with us, Housing Associations are clearly ready to be taken on the digital journey with Microsoft and the focus on innovation is hugely important. I love the fact that the tenant on Addis team gave so much information and I think that plugging tenants into the digital journey and showing that some of the processes and technologies can make life A LOT easier creates massive value all round.

Future Proofing your Implementation and Configuration – Part 3 – The Configuration Question

In part 2 of this 3 post series I spoke about the Microsoft and how you are able to keep up to date with what is being released, so that you don’t end up building something into your Dynamics 365 implementation that is going to be added in a next release. In this post, I am going to talk about why it is important to carefully consider the use of custom functionality versus the use of out-the-box functionality when implementing and configuring Dynamics 365 Customer Engagement.

Why would we want to make our implementation of Dynamics 365 future proof? Well, there are loads of reasons.

  1. So that upgrades are smoother and less painful.
  2. So that customers can leverage other parts of the solution to support their business.
  3. So that Dynamics can be grown from both a functional and business point of view.

Essentially, Dynamics is used to solve more problems, which then increases user consumption and adoption.

So, I guess the million-dollar question is “Should we configure this or should we use what’s available out the box”? I have been working with Dynamics 365 CE (CRM) since version 3 and a lot of the time, in the earlier versions, we needed to configure stuff from scratch. There was a load of great functionality there already, but the previous versions were nowhere near where Dynamics 365 is today.

I remember spending hours trying to get past a problem without using loads and loads of code. This is partially because I am no developer. There was a huge reliance on form side scripting (pre-business rules) where setting things like field visibility or business relevancy required several lines of JavaScript, and this was incredibly Important because the experience of the user was at stake. The reason we tried our best not to code was because when the next release came out, there were always issues with certain bits of code not being supported and not working.

Now, for all my developer friends out there, I am not saying that there is anything wrong with coding at all. What I am saying is that the role of the developer has simply changed from when the previous versions of Dynamics were released. Before, functional consultants like myself were expected to code and write plugins, and if you couldn’t then you needed a developer with you. Now, this may not be the case. There is so much one can achieve with what is available out the box in Dynamics 365 that developers are focusing more on REALLY extending what Dynamics 365 can do.

So, back to my question….. Do we build it or do we use what is already available? Well, in my opinion, the answer is relatively simple. We use what is already available and extend through configuration, customisation and ISV solutions where the functionality we require is lacking. This approach really is in line with the Microsoft future proof strategy where the current functionality utilised within the Dynamics 365 CE framework is supported. Caveat: Yes, Microsoft do often deprecate functionality that is not widely utilised (Such as contracts).

Some time back I had a scenario where it was suggested to me that I did not utilise the standard Case entity and I was told that it would be better to recreate this functionality in a custom entity because it gave me more flexibility and freedom to do what I wanted. (Multiplexing rules aside) I didn’t agree with this. Why? Well, to recreate the functionality that existed in the standard case entity would have taken me more than 3 times the amount of time that it would have taken me to just do some basic config to support the main case entity that is already available in D365 CE. I would have to do all sorts of crazy stuff around routing rules, SLAS, Entitlements, Case Resolutions, Case Hierarchy and much more. It seemed that the right thing to do would be to supplement the case entity with some related metadata entities that enabled the user to lookup to various sub entities. This worked well because it also gave the users the power to maintain their own lookups.

The other thing that we thought of was that we couldn’t ad hundreds of fields to the case form. This would make maintenance and business rules a logistical nightmare. We ended up creating several sub entities for each case category and then just associated the sub entity to the case. This way the core case management functionality was utilised but not drowned with attributes. This also made upgrades MUCH easier.

Scenario 2 was a little different where I wanted to utilise the standard Contract & Contract lines entity in Dynamics 365 CE. I found that the functionality that I wanted couldn’t be achieved through utilising this entity set. One thing that really stood out was I couldn’t enable a contract to be associated to the Business Process Flow functionality, which was pretty important as far as the “Agreement – Contract” process was concerned. I actually ended up creating a custom set of entities and only ended up replicating a very small amount of the current contract functionality.

There are hundreds of examples of this type of thing that I could bring up at any one given point. One of the most talked about scenarios at the moment is “Will Custom Controls (CCF) replace web resources”. In many cases, yes! Check out this video for a bit more information.

Essentially the moral of the story here is that the requirement to configure the solution versus utilise what’s out the box is entirely scenario based. What I’ve found is that the more I utilise out the box functionality within Dynamics, the ore future proof it is. HOWEVER, this needs to be done in such a way that you don’t completely overuse the standard functionality to a point that it can’t be leveraged across the rest of the solution. The example in scenario 1 with the case management is a perfect example of using what’s out the box, but knowing how to supplement with config.

When implementing Dynamics you need to be a bit like the precogs from the movie Minority Report. You need to look into the future and try to understand how your customer may grow as well as how the solution may grow in order to be more future proof.

Future Proofing your Implementation and Configuration Part 2 – The Roadmap Question

In Part 1 of “Future Proofing your Implementation and Configuration – The Licensing Question” I covered off a couple things to take into account as far as licensing goes. The next question is around the Microsoft roadmap and a few things both customers and partners need to consider when planning for and implementing Dynamics 365 Customer Engagement.

Let me start with an example It’s 2011 and Partner X has developed a FANTASTIC business process management solution that enables businesses to create and manage sales processes, which in turn effectively promotes governance and sales performance within their sales team. After joining the CRM 2013 preview program, it was realised that out-of-the-box Business Process Flows did a similar job. The functionality created and implemented by partner X was still VERY relevant and provided a brilliant solution to their customers, but would the Business Process Flows replace this? The answer is yes and no.

We see similar scenarios in loads of implementations where partners and customers have implemented functionality utilising ISVs, as well as custom code, and this functionality is matched by something being released by Microsoft in a “Next Version / Release”. So, what do we do? We only know what we know right?

There are a load of resources out there that will give you a certain amount of visibility into future releases to make sure you are not “Double Dev’ing” or buying an ISV product that may be deemed unnecessary in the future…Caveat: If your customer needs the functionality now, it will be up to you to be open and suggest the right solution.

My first go-to resource is the Microsoft Dynamics 365 roadmap site. There is a LOAD of information about what is going to be released in the future releases of Dynamics 365 (the ‘In Development’ tab). It’s a really user friendly site that allows for filtering by application.

Back in the day (up to last year) D365 participants were able to register on the MS Connect website to participate in the D365 preview programmes. Connect has been RETIRED… Many of the services offered by Connect are moving to new tools and services. Check out this post for more information.

A lot of the Connect functionality seems to have moved off to the Dynamics 365 Ideas site where one can present ideas which can be voted on. This is a very smart method of keeping an eye out for functionality that may be expected in the roadmap site, based on input from the D365 community.

I would suggest joining the Dynamics 365 Insider programme and applying to be one of the “Insiders” who will join the previews for the selected applications and feedback based on your findings. The application can be filled out here.

A very reliable source of information can also be some of the direct Microsoft resources available to you. Don’t forget the DynamicsLearning Portal (DLP) and the ‘Blitz’ recordings which highlight upcoming functionality and capability. It’s often also worth your time to reach out to your Partner Development Manager or Partner Technology Strategist if you have these available.

The other method of finding out what may be in the pipeline is to watch the forums and groups on all of the social sites. The Dynamics 365 community is larger than you think and many of the members are active participants in sharing knowledge, enthusiasm, and war stories. Multiple blogs out there (Including this one) really do try to share the Dynamics 365 love. The MVP community also do a fantastic job of sharing what they can with all of us, which really helps.

Honestly, the frequency at which functionality is released is completely dependent on Microsoft, but according to a Mr. James Phillips this release cycle should be more consistent and reliable starting from 1 April 2018. It is best to be open and upfront with your customers about what is coming in the future, as you may want to stagger the delivery cycle to cater for this. If we know we have a delivery roadmap of 1 year with our customer and we know that functionality X is coming in 6 months, we may not want to build anything in the interim and then have to deprecate that functionality… OR you may… The most important thing is to be aware that the functionality will be released and that your customer may want the opportunity to select what is available out the box rather than a custom solution.

In summary, try your best to keep your ear to the ground regarding what is coming in the Microsoft Dynamics 365 roadmap and utilise the tools and services out there to educate yourselves. You may be saving yourself time and your customers’ money!

Part 3 of this article will focus on some of the functional elements in future proofing your implementation and configuration.

Future Proofing your Dynamics 365 implementation and Configuration (Part 1 – The licensing question)

Microsoft Dynamics 365 Customer Engagement is an incredibly versatile platform that can be configured with relative ease. This is both a good and bad thing because often solutions that are implemented descend into configuration anarchy. Yes, it sounds as bad and it is. Imagine a deployment with hundreds of entities, attributes and solutions that are irrelevant or are there for no particular reason. On the other hand, what about loads of old ISV solutions that aren’t being used anymore. As fans of Dynamics 365, I can guarantee that most of us have seen this.

So how does one future proof their implementation? I appreciate the fact that there will be loads of opinions on this matter and there are hundreds of things one could do to manage this process from a business and technical point of view.

One of the big questions during any implementation is whether to utilise what is available out the box or whether to create custom entities and attributes. This is generally based on the scenario and the customer’s requirements. Personally, I prefer to use what is already available as much as possible as there is a load of functionality that you may need to rebuild using workflows and plugins if you go the custom route. IN ADDITION, when Microsoft release updates / upgrades, I know the functionality in my solution will be upgraded correctly and is in line with Microsoft projected functional roadmap. That isn’t to say that Microsoft don’t deprecate functionality. They definitely do!

Now, here is the thing: The licensing model limits us or controls what you can and can’t do as far as the addition of custom entities relevant to the existing functionality. YOU MAY NOT REPLICATE THE FUNCTIONALITY OF STANDARD ENTITIES IN DYNAMICS 365 WITH CUSTOM ENTITIES. If the standard entity is replicated then the user must be licensed appropriately for that standard functionality. This is available in the Licensing and Pricing guide on page 17. THEREFORE, in short… you can create your own “Case” entity, sure… However, you will then need to purchase the Dynamics 365 for Customer Services license for users that will be accessing this entity. This is because it replicates the current and standard case management functionality.

This makes absolute sense. Information on the enterprise-licensing model can be found here in appendix B. This is one of the first documents I generally consult during solution design. Microsoft suggest that configurators utilise what’s available within the standard Dynamics 365 platform so that when core functionality is added to the platform on top of the standard entity set or functional area (marketing, Sales, Service, PSA & Field Service), customers have access to this without having to add additional configuration. As an example, when the entitlements functionality was added to the services module, it linked to the standard case entity and functionality as a standard. Companies that had built their own case functionality had to either move to the standard case management functionality or configure a link to the entitlements.

A second example that I have come across before, which required configuration and was considered future proof was where a customer had several case types, each of which required a large amount of data capture. Instead of adding hundreds of fields to the case form, the case was simply used as the header record and a set of custom entities was created for each of the categories. The core case functionality, such as routing and email-to-case was used and the configuration flexibility of the platform was used to apply a huge level of personalisation from an incident management point of view.

In summary, part of future proofing your configuration is to bear in mind what Microsoft offer as out the box functionality, as well as what the licensing model allows you to do and not to do. Often, this involves an honest and transparent conversation with your customer, which will enable you the ability to educate them in what, is required to implement a robust, performant solution that is as future proof as you can make it. In the next post I will be talking about the Dynamics 365 roadmap and how you can prepare your solution for what’s coming.

D365 Custom Control Framework (CCF)

Microsoft Dynamics 365 Customer Engagement contains some impressive hidden gems in some really cool functionality that really promote a more immersive and interactive user experience. One such gem is the Custom Control Framework or CCF, which enables users the ability to place interactive controls over attributes. This video shows off some of the standard Custom Controls and how to add these to the new Unified User Interface (UUI) forms. It is believed that Microsoft will enable us the ability to create our own custom controls in future releases.

I’d also like to give a shout out to Amandip Dhillon for being a part of the testing of these controls! Awesome job 🙂

Microsoft Teams & Dynamics 365 Customer Engagement – And some other ideas :)

There are so many discussions about Microsoft Teams, how they are being used and how they will work with Dynamics 365 Customer Engagement. If you think about what exactly Microsoft Teams really does it starts to make perfect sense.

GOOGLE TOLD ME THIS: “Microsoft Teams is a chat-based collaboration tool that is part of the Office 365 suite of services. Teams enables local and remote co-workers to work together in real and near-real time.”

AWESOME, sounds very useful, but don’t we have Office 365 groups and Yammer for that? Recently a few enthusiasts and I (One of them being Ken) had a discussion about what works where and how. Rather interesting because the results were quite different. I’m also almost 108.65% certain that various people were asking the same thing when O365 groups were released. “Why can’t we just use Yammer?”….???? Well I’m DEFINITELY not answering that question with this blog post and if you need more information Please look HERE… A really rock solid article that talks about some of the stuff that’s going on. I will take it on properly at some point.

What I am going to answer is how deeply MS Teams works with Dynamics 365 Customer Engagement. At the moment my personal preference is towards MS Teams because I feel as if a lot of the existing O365 collaborative functionality is going to get absorbed by MS Teams. (Personal Opinion).

MS Teams actually has an existing “Integration” (More of a connection) with Dynamics 365 Customer Engagement and will let you surface certain information within a MS Team as well as track certain activities and changes. It’s really simple… Simply follow the instructions below and you are off to a good start:

Get a team up and running and create a channel of your preference.

Once you have done that… jump into the menu and hit connectors.

Filter the connectors menu and select Dynamics 365.

Select the correct instance of Dynamics 365 Customer Engagement. Looks like you need to select an instance within your O365 tenant.

From there select a record you would like to connect with. I only saw the ability to connect with “Accounts”, “Opportunities” and “Leads”. I have a workaround for other records explained at the end of the post for other record (Entity) types.

Once you’ve connected to a record (It seems as if you can only select one at a time), you will see the “1 Configured” link under the Configuration button.

If you select the link you only have the option to remove the record. Nothing else. (YET!!!)

After you have decided not to remove the D365 Customer Engagement records because of its vital importance to your team, you will see an update on your team channel with the records addition details.

I can go into D365 Customer Engagement, search for the record, make my updates and then these will be posted to the Team Channel.

Obvs’ you can then click through the Team link through to the Dynamics 365 instance record to review and interact with the record as required.

NOW… That’s the easy part done… Here’s the hard part. There is a lot I / we don’t know. In honesty format here we go:

  1. There are only certain entity types you can connect to out the box.
  2. There are only certain fields and activities that sync through to the Teams channel from the record.
  3. The information displayed is okay, but may not be enough to inform the right team members.

The solution:

I created an MS flow to interact with Teams and D365 Customer Engagement. It solves a lot of the problems that you would generally perceive with the MS Teams and D365 connector. IE… It doesn’t only look at Accounts, Leads and Opportunities. Because flows are pretty easy to create. I reckon this solves a lot of thaw current connector gaps.

Probably another blog post for another time…

If you are serious about using teams, in my opinion, that’s the right route! Have fun and shout if you need help!