Dynamics 365 for Customer Engagement

Two-way Azure Plugin Walkthrough

My first blog, so go gentle 😀

Summary:

When you’re calling external integration services and you’re using an enterprise service bus, you need to send a message with your CRM data to the service bus (obvs!). But in order to be able to use the built in behaviour of a crm plugin (rollback in particular) you’re going to need to run the plugin synchronously so that the user knows a problem has occurred. If you use the OOB plugin then it only works Asynchronously. Luckily service end points are baked into the CRM infrastructure, so we can get a leg up on passing remote execution context to a listener. That can then call the integration service and, should it fail, return a value to the plugin so it can respond accordingly.

The blog is a technical walkthrough of the steps to accomplish it. Enjoy!

https://dynamicsjourney.wordpress.com/2018/09/21/two-way-azure-plugin-walkthrough/

D365 Social Analytics Solution

As promised! Demoed at our D365 Saturday Summer Boot Camp session on Replacing Dynamics workflows with Flow.

This solution gathers tweets matching a specified hashtag saving them into a custom entity in Dynamics. A second flow then uses the Cognitive Service api to extract useful information from the tweets such as sentiment, key phrases and also translate the tweet if it’s not in English. This blog post contains the two flows as well the solution used in Dynamics with brief instructions on how to put everything back together

 

Dynamics solution

Contains a Social Analytics custom entity with some magic in the background!

Unmanaged.zip

Managed.zip

Flows

GetTweets.zip (Gets Tweets matching hashtags and creates records in social analytics entity)

DynamicsSocialAnalyticsV2.zip ( On create of a record in the Social analytics entity, use Text API to get sentiment, translation if not English, key words and update back into Dynamics)

Setup

Install the unmanaged  or managed solution into your instance which ever floats your boat 🙂.

Text Analytics API Key

You will need an azure subscription on with a Cognitive Text Analytics API service .You can get a trial API key with t 5000 executions for 7 days ( A free azure subscription will not limit you to the 7 days). Go to https://azure.microsoft.com/en-gb/try/cognitive-services/?api=text-analytics

Make sure Text Analytics is selected and hit Get API Key – Choose guest and get started.

You should eventually end up with the your API key and endpoint as shown in the image below which will be needed later on in the flow.

Social Analytics Flow

Head to your flow environment https://flow.microsoft.com. Go to My Flows , you should see Import in the top right, hit that . Upload  and import the flow DynamicsSocialAnalyticsV2.zip. You will need to fix the connections to your Dynamics instance. For Text Analytics, select “Select during Import” , Create a new connection, search for Text Analytics, select it and enter one of your Keys and your Endpoint URL. Come back to the import screen, refresh the list and select your new Text analytics connector. Do the same  for the Translator connection, named “Microsoft Translator” you shouldn’t need an API key for that. Once all the connectors have been fixed import the flow.

Once complete you should be able to see the Dynamics Social Analytics flow. Edit the flow and point both the Dynamics triggers, at the start and the update action all the way at the bottom to your instance by clearing out the org name, selecting yours and then the Social Analytics entity provided in the installed solution.

Before

After

Get Tweets Flow

Import GetTweets.zip flow. Fix the connections again by adding a twitter and your Dynamics connections.After upload , you will need to fix the create Dynamics record action at the bottom of the flow as before. Replace #D365Saturday to your favourite hashtag and bob’s your uncle, you can duplicate this flow if you wish to track multiple hashtags.

Dynamics 365 Saturday – Dublin 2018

The Dynamics 365 Saturday 2018 took place in Microsoft Dublin (One Microsoft Place) and was hosted by Janet Robb and her Team. Congratulations on Janet for a great work on organising such well-structured event.

Lots of cool sessions provided, as well as workshops for PowerApps and CRM for the ones who were interested.

 

Even though I’m not a Dynamics consultant, to me as a SharePoint/Office 365 Consultant, it was very cool to see how the same stack of products (Power platform + Azure) that we use on top of SharePoint/Office 365 is been adopted in the Dynamics Community as well. As mentioned on the keynote, for all D365 specialists it’s been a constant work to keep up to date with tons of new features been released (I can assure that for Office 365 as well), and an event like this helps to connect the community and to get a summarized overview of what’s been there in the market.

Special thanks to our Dynamics Guys who came from the UK and smashed in their presentations:

Chris Huntingford – Dynamics 365 for Marketing

Kylie Hill – My Favorite new D365 Features

It was a pleasure to meet those legends in person.

Also, the interaction from the community posting and sharing content and pictures on social media (Hashtag #365SatDub) was really nice, cool to see such engagement and nice pictures from everyone on Linkedin and Twitter.

Looking forward to the next #365SatDub!!

Microsoft Cognitive Services with PowerApps – Snap It and Translate

Microsoft cognitive services gives rich Artificial Capabilities into the applications. These capabilities can be used with PowerApps when building Apps. Cognitive services can help to make your Apps Smarter.

Artificial Intelligence and Data science go in hand in hand. Microsoft packaged in all capabilities and packages those together to create easy to consume API’s such as Cognitive Services and Bot Framework.

Microsoft provides 23 Cognitive Services API’s. It’s categorises into five areas namely Vision, Speech, Language, Knowledge and Search. For the experiment below I have used Computer Vision & Microsoft Translator API’s. It helps to detect text content from an image using OCR (Optical Character Recognition) & Translate text to different languages.

You can find further information on cognitive services information by following link below.

https://azure.microsoft.com/en-us/services/cognitive-services/

When creating Connections inside PowerApps would require getting an Account Key and Site URL. Use below link to get it.

https://azure.microsoft.com/en-us/services/cognitive-services/computer-vision/

If you do not have an Azure Account yet you can use the 7-day trial to get started.

Below Image depicts the simple flow of the actions involved with the app.

Set properties as below.

Image

Image = First(colPhoto).Url

Camera

Onselect = ClearCollect(colPhoto,Camera1.Photo)

Text BOX

Text = varOCR

Overflow = Overflow.Scroll

Capture Text Button

Onselect = Set(varOCR,ImageOCR.Run(First(colPhoto).Url).ocrtext)

To Translate

Text = MicrosoftTranslator.Translate(varOCR,Dropdown1.Selected.Value)

Use the MS flow to recognize the Optical Character Recognition.

Special Note: Images can be saved in different formats. Computer Vision API is looking for binary format of the Image therefore below expression must be used in the Image Content box in OCR to Text to convert to binary format.

dataUriToBinary(triggerBody()[‘Createfile_FileContent’])

Now you can start creating your own Translator Buddy app. 😊

PSA – Journals

Did you know PSA has journal functionality – this allows for a flexible approach to applying and pushing costs to your projects. You may ask “Will, you sound excited about this but why will I need Journals I use Time and Expenses to push through to Actuals which then show on the various tracking screens etc.”

Well the great thing about Journals is they are flexible and out of the box when you open up a journal you get the following transaction types and form:

Along with the following Transaction Class:

Now these really are just categorisations to aid with reporting etc. but if we look beyond these types and classes into uses for journals within PSA:

1. Sub-Contractors Time and Expenses – use the cost type and time class and then by selecting the project and task along with bookable resource you will be able to apply time and expense costs back to the project without allowing your Sub-Contractors access to the environment itself which helps reduce cost and sometime Sub-Contractors will not like access to your systems to show that they are separate from the company.

2. Processing/Applying Cost from Purchase Orders – it is possible to expose costs to your Project from Purchase Orders by selecting a transaction type of Cost with a transaction class of Material, you can then select the project and tasks the Purchase Order applies to as well as the quantity and cost.

 

3. Reversals – For those who are reading this that understand Dynamics 365 Finance and Operations you may be pondering “hmmm… I wonder if you can use these for reversals like we do in F n O” the answer is absolutely!!!! Just throw in a negative value for whatever it is you wish to reverse and voila it’s achieved for example, for a certain resources timesheet just punch in the project and task it belongs too along with the bookable resources name who’s timesheet you need to reverse and post it. This will then filter through and reverse the tracking items such as effort and cost :-).

Furthermore, use the journals to apply tax is incurred, commission that may need to be processed through as a cost towards the project and much more!

Can’t Associate Existing Contacts to an Account in the D365 UCI? – WHERE IS THE DAMN BUTTON??

Don’t feel like the emotional post? 😀 😀 FIND THE SOLUTION HERE!!

Recently I was doing some config. within Dynamics 365 for a customer that was keen on using the UCI (Unified Client Interface).  I’ve done a load of demo’s for this type of thing but never actually helped configure for a live implementation. To be deadly honest, I had to change my mindset a bit about how I designed things.

After a few hours of build i ended up setting up a little training solution that allowed users the ability to associate existing contacts to an account. A pretty straight forward N:N relationship on the account form showing the associated contacts that had been trained and the internal users that had actually done the training.

I was happy with the setup but when it came down to testing, something weird happened… There was no button available on the sub grid that allowed me to associate an existing record. The Add Existing User button was there, but no “Add Existing Contact” button 🙁 

I checked if it was working in the Web refresh… Lo and behold, i could work just fine! No issues with adding existing contacts to an account. 

I tested out different views and still no luck I even tried a 1:N relationship to Contact and it only allowed me to create a NEW contact rather than add an existing one. 

After a bit of searching… I found the one solution that worked! THANK YOU to the Joel THE TIP OF THE DAY team for this post! you saved me a TON of time. This could have been a rabbit hole. Also Scott, your Ribbon Workbench comes to the rescue again! Legends!

FIND THE SOLUTION HERE!!

Dynamics 365 Project Service Automation: Two approaches to implementing PSA

Dynamics 365 Project Service Automation differs between organizations and partners. This includes the reasons behind implementing it, the way it is approached and even the way it is implemented. PSA (and Field Service) are both applications that can be used out-of-the-box by simply going through all the required settings and parameters. Usually a PSA project does include some customization just like any D365 CE project but with PSA one thing is a little different: The logic in which the application works is not to be changed and when customizing or writing code, the functionalities and the “PSA process” of the application should only be extended. Not changed. This way you will have a working application as new functionalities are released.

The hardest app to master

While the Sales and Customer Service applications are straightforward, PSA and Field Service have a lot more to them. I’m not getting into Fields Service in more detail on this blog post because that really is a story of its own. Let’s focus on PSA for now. In reference to Steve Mordue’s fantastic blog post, what is simple for me might be hard for you and vice versa. Steve brought up our mothers but I’m not going that way – let’s say we focus on millennials. No matter how we quantify simple, I still want to argue PSA still is the hardest application to master in the D365 CE stack. I’m black and white in that sense.

What does “the hardest” app really mean? In short it means the “PSA process” from prospect to cash and understanding what bits and pieces we must consider when executing the process. From a business perspective, an additional factor is that you really can’t easily force PSA to your business’ processes as the way we use PSA is fixed – hence the name the “PSA process”. You might be thinking “But we have Business Process Flows in D365 CE…”. That’s a nice thought but that’s not what I mean. I mean the overall high level process of how you go from prospect to cash in PSA and what you must do in the application to get it to function properly. It’s a ready-made app so when you think about it, it should make sense, or…?

Two approaches to implementing PSA

I’m going to boldly state there are two approaches to PSA when we use its core functionalities and don’t extend it. We can take the app to the moon and back by building around it like the awesome Chris Huntingford demonstrated during the D365 UG Virtual Summer Camp on his RAID logs presentation. Extending is not the point of this blog post though. Let’s keep our focus on the app as it is OOTB.

Implementing PSA as whole (as in leveraging all it has) in an organization is a big effort. This is the case especially when an organization is new to D365 CE and has no experience with the product. If the whole “PSA process” is too much, what options do we have? How do we start with what we really need from a business requirements point of view and then pick up the “nice to have” later? For this we have two approaches.

1. The Financial container

One of the two approaches to PSA is the financial aspect. The “financial container” is essentially your Project Contract and everything that happens around it. It’s a container for all your financial data. When approaching PSA from a financial perspective we want to get financial data out of PSA and then push it to an ERP like Finance & Operations or Business Central for invoicing.

With the financial approach, we look more closely at the opportunity to invoice process without putting too much effort on the project management and resourcing side of PSA. Projects will be there because naturally it’s a prerequisite to getting our financial data but the focus is not on projects per se. You’re probably asking for some concrete examples by now so let me try to dive deeper into the financial container.

The financial approach is around the Project Contract and how that is set up. We have our Time & Material and/or Fixed Price Order Lines to define what our contract and the project(s) related to it are like. Our staff submits Time and Expense Entries so that we will get the necessary Actuals that we will then invoice. We focus on the profitability of our contract and its performance. The “financial container” is business critical as it produces our financial data.

The financial side of things is usually taken quite seriously in an organization (gee I wonder why this is…). When it comes to implementing the “financial container” we have a lot of ground to cover in PSA and there is quite a bit to learn. As this approach is something an organization really must master perfectly, there might not be a lot of steam left to cover the other container described in the next paragraph until everyone has had a bit of time to digest what was just implemented.

2. The Project container

The “project container” is essentially a container for work. It holds the concepts of project management, project work breakdown structure and resourcing. With a focus around projects and work, an organization wants to focus on managing and running projects and assigning the right people on the right tasks at the right time. In PSA, we can plan and execute projects without needing to focus on the financial side of things.

When we dive deeper into the project container we look at very granular project planning and granular task specific resourcing. Version 3 of PSA has decreased the overhead in resourcing significantly by separating resource bookings and assignments on tasks. Resourcing is nevertheless a pretty intensive task for an organization and the functionalities around resourcing take quite a bit of learning to really master. If you really want to make resourcing in PSA effective, you need to know it well and be consistent in resourcing your staff.

There are naturally bits and pieces like resource roles and project work breakdowns in this container that we also need to take into consideration on the financial side. The granular resourcing and planning are where the contents of this container get heavy to handle so implementing that granularity and the aspects around project management and work are something that you may want to implement either before or after the “financial container”.

Summary

The approach to PSA doesn’t have to be everything or nothing. Your organization can split a PSA implementation into two containers: A financial container around Project Contracts and a project container around work, projects and resourcing. Your business requirements naturally drive your implementation. In any case I want to say use a partner in your PSA implementation. And not just any partner but one that really knows what PSA is and how it works.

Disclaimer:
All my posts reflect my personal opinions and findings unless otherwise stated.

PSA

I have recently embarked on a wild journey that is learning Customer Engagement for those who know me I am predominantly a Finance and Operations consultant – but PSA aroused my curiosity so I thought i’d take a dive head first into it. Here you’ll see videos I upload as I go through this adventure!

Project Overview:

 

Resource management:

Skills for the PowerApp developer

It seems to me that PowerApps will prove to be a game-changer by enabling businesses and organisations to build bespoke apps designed to meet very specific needs.

The curious thing about PowerApps is that the product is pretty well where it needs to be as of today but the major blocker for a global revolution is that there simply aren’t enough people out there with anything like the skills that they would need to be able to build robust business product.

So let’s assume that you can’t buy in PowerApps skills or maybe that you have some but need to grow some more.  What would you be looking for in an individual to identify them as a potential PowerApps developer?  In this article I’m going to outline some of the skills that I would be looking for when identifying candidates with the potential to be high performers.

Excel

It feels kind of strange to start with a product rather than personal skills but in this case the Excel formula structure and Excel cell construction is so closely related to that of PowerApps that is the number 1 skill.

The Excel and PowerApps teams work closely together so that any new formulas created are aligned to each other.  With this in mind this also opens the door to the many years of formulas created by individuals within excel that can theoretically be borrowed or referenced to enhance a PowerApp.

Maths

PowerApps is the product that is the most mathematical that I’ve ever seen.  Variables can be easily created that can be used in an algebraic fashion.  X and Y properties exist to govern the position of everything that you see on a screen.

Empathy

You need to be able to consider your products from the perspective of other users.  If people don’t like your product they won’t use it, and you should be aiming for them to love them.

Logic

To my mind there are 2 kinds of logic.  Firstly, the more mathematical/excel based ‘If X=1 to this otherwise do that’ and secondly there is the type of logic where you put yourself in the shoes of a user or administrator and be able to see whether or not a form (as in business world this is the most likely application) has a logical flow.

Design

Having an eye for design is a skill people have to a greater or lesser extent.  To be fair it doesn’t come naturally to me, but I do know that from making lots of products some designs work better than others and it is a skill that can be learned.

Initiative

PowerApps won’t go to you, you have to go to PowerApps.  If you create a blank app it will stay blank until you do something.  Additionally, many technical solutions may require techniques that feel like work-arounds mainly because the problems you have been facing haven’t been faced before, so looking them up on Google won’t necessarily yield any results.

Lifelong Learning

The product is ready, but is changing all the time.  Good sources for keeping up to date are twitter and the PowerApps blog, but even the latter tend to focus on ‘big’ updates whereas some of smaller adjustments can still be game changers.  Keep up with it.  I’ll be honest in saying that there are times when staying at the cutting edge can be difficult to manage versus traditional tools and skills that stay very similar over long periods of time.

Perseverance

Some problems will require high levels of determination to find the exact syntax you need to solve your problem and when those fail you may need to pull back stick your head up and work out if there ways around the problem or if the items is even needed (i.e. do you really need to collect the data at all or is it a nice to have)

Patience

Not necessarily my forte, but patience may be required of yourself as you may not have the skills that you need at your fingertips and similarly the same may be true of those around you.  You’ll also need a level of patience on the part of your sponsors or users.  I can almost guarantee that unless they are very familiar with digital form building you may produce a product to the exact specification requested but nevertheless you, and they, know that it’s not quite right and that adjustments, sometimes significant may be required.

Use the community

The PowerApps community at this stage is currently populate by a relatively small but passionate group of individuals building highly imaginative solutions designed to stretch the product.  Make use of these by joining https://powerusers.microsoft.com, follow people on twitter posting using the #powerapps or @PowerApps references.  By all means take a look at my youtube channel www.youtube.com/dataspinners and don’t forget to join https://dynamics365society.uk which contains a PowerApps bank that you can make use of once you sign up (for free).

Go on a course

Personally, I’m quite happy with an online course as typically these are completed over a longer period of time which for me is a better way of allowing the learning to sink in.  The best single free resource is https://courses.edx.org where DAT207x is a very useful starting point.  You can search up courses run in a classroom setting, but you will need to ensure that you invest time in utilitizing the product one you’ve completed it as otherwise you’ll lose your knowledge quite quickly.

Concluding remarks

This article was intended for hirers or individuals trying to make some sense as to the range skills needed for PowerApps excellence.  Hopefully, it isn’t too daunting.  Whatever you do, start small but build usable solutions.  This particular tool offers us astonishing scope for us to run our businesses in efficient ways and the more we can grow as a community the closer we will all get to a culture of efficiency the impact of which may be widespread, more operations, better scheduling less wastage all by putting the right information in front of the right people at the right time.

 

 

PSA & Field Service Schedule Board Error

Recently I ran into this little issue when trying to access the D365 schedule board for both PSA and Field Service. “Resource not found for segment ‘msdyn_FpsAction’. There were also a bunch of other general SQL / Unexpected errors when I was trying to access projects within PSA. This happened immediately after I installed the Microsoft Partner Portal solution with the additional PSA extension.

Basically every blog I went to pointed me to the same link, which didn’t seem to work 🙁

So, for those of you that run into this error in the future, It has to do with certain processes being in Draft mode. I also discovered that a load of these processes didn’t even have an owner.

Firstly, I assigned the processes to myself.

 

Then activate the processes that had randomly been deactivated for no reason. This will then show the schedule board.

Viola… Your schedule board should now work…AND you shouldn’t get any random errors when trying to save projects. Seems the Partner Portal installation, with the additional PSA extension, deactivated a ton of Actions and workflows, and didn’t re-activate them.

Dynamics 365 User Group – Birmingham – 17 May 2018

Recently I had the pleasure of presenting at the D365 Birmingham User Group Meeting. Thanks to everyone that attended. Was really fun and I learnt a whole lot. For those of you that haven’t been to one of the D365UG meetings, and if you are utilising Dynamics 365, I suggest that you join and get involved.

I had the pleasure of following Julian Sharp, an absolute legend in the D365 world and a brilliant trainer whose focus is “Helping organisations make the most of Dynamics 365 Customer Engagement through advice, optimisation and training”.

Julian gave a great presentation on the importance of Dynamics 365 Customer Engagement exams and as well as how to prepare for them and how to study. You can follow Julian on twitter using this handle: @Julianatvigence or check out his blog here for some really useful information.

My presentation was focused on why brand perception is so important within a business and the ability to generate more meaningful conversations with your customers utilising Dynamics 365 Customer Engagement.

This presentation was a “Spin Off” of the one I did at the D365 User Group Summit event. I only used Microsoft Social Engagement as the channel of interaction rather than use a load of channels. More information regarding this session can be found in my next post (Awaiting Hyperlink).

Just a quick summary of what the User Group is all about… it’s not a sales pitch for Dynamics, but more of a community lead initiative that enables the community to help and assist one another regarding all things Dynamics 365 related. There is a big mix of Dynamics 365 customers, Partners, ISVs and even Microsoft guests.

I’ve found it massively useful because the people part of the community just want to help and share info. It’s a super relaxed environment that promotes learning and development. To find out more and to even register, follow this link and get stuck in. There are User Group chapters popping up all over the place. Hope to see you there.

Follow the Dynamics 365 UK user Group on Twitter using the following handle: @CRMUGUK

PowerApps – Camera Integration Part 2

So we left the last article (Part 1 – if you have not read Part 1 please do before moving onto Part 2) with a glorious self app that involved putting a camera element into a new screen then configuring the ‘OnSelect’ command to capture the image from the camera and store it in a collection. Which looked a little something like this:

 

Please note I foolishly forgot to ‘Save’ my app (more a rush to start the weekend and grab a beer) so some of the control and component names may have changed but please just engage logic for this.

 

Displaying the collection to show the person using the app the image they have just captured:

Now the next stage is to allow the users of the application to quickly see the image they have just taken. The first step in this glorious journey is to add an image under the Camera component go to ‘Insert’>Media>Image and place it under the camera element – which should look something like this:

I think it’s important that I publicly apologise for the amount the readers of this article has to keep seeing my face, sorry ;-).

Now we need to instruct the image to show what is in the collection (remember we are using the ‘ClearCollect’ formula for storing the captured camera image in the collection which means only one will be stored at a time, so this is the main reason for choosing an ‘image’ component rather than a ‘gallery’). Select the image and go to the advance settings and set the ‘Image’ as: Camera1.Photo (previous article would be Camera3) as shown below:

Now the last piece that i’d like us to is to flip the image horizontally, to achieve this select the image and go to the ‘Design’ grouping area withing the advanced options and then select “more Options”:

Then scroll down to the ‘FlipHorizontal’ property and change it from ‘False’ to ‘True’ this will flip the image horizontally and marry up with the camera.

This finishes Part 2, Part 3 will focus on sending this image via Flow to an email address as an attachment as well as storing it on SharePoint!

If you like the articled then please do ‘Like’ it below and if you have any questions please use the questions functionality in the main menu of the site.