This video runs through the setup and functionality of the new Vendor/Customer records field changes approval – enjoy!
In this post I will be covering some Microsoft Flow basics and limitations when working with Dynamics 365. This will help you determine which Flow plan and/or connectors suites best for your needs.
Connecting to your Dynamics 365 instance
Firstly let’s look at the connectors for Dynamics 365. You have two options when it comes to connecting to a D365 instance.
- Dynamics 365 connector
The Dynamics 365 connector provides limited access to the Dynamics 365 organisation.
For more info on trigger events and actions please visit: https://docs.microsoft.com/en-us/connectors/dynamicscrmonline/
- Common Data Services (CDS) connector
Provides access to the org-based database on the Microsoft Common Data Service.
For more info on trigger events and actions please visit: https://docs.microsoft.com/en-us/connectors/runtimeservice/
Now let’s do a side by side comparison between some of the notable features:
|Feature||Dynamics 365 Connector||CDS Connector|
|Trigger Flow on create||Available||Available|
|Trigger Flow on updates||Available||Available|
|Trigger Flow on specific attribute updates||Not availableLimited to record level updates only
* Which means you will have to take extra measures if you have to update the triggering record within the same flow. This is to stop the flow from triggering infinitely.
|Change Tracking limitations||Requires Change Tracking to be enabled in D365||Change Tracking is not required|
|Define level of scope for the Flow trigger||Not availableLimited to Organisation level only||Available
|Trigger Flow on deletes||Available||Available|
|Manually trigger when a flow is selected||Not available||Available|
|Action: Create Note (annotation) for specified entity record||Manual||Special simplified action is available|
|Action: Retrieve all Notes (annotations) for the provided entity Id||Manual||Special simplified action is available|
|Action: Retrieves file content for specified Note (annotation)||Manual||Special simplified action is available|
|Connector Type||Standard||Premium(Only available in Flow Plan 1 and 2)|
Let’s have a look at the trigger event screens of each connector. I have selected the “When a record is updated” trigger event for the screenshots.
Dynamics 365 connector:
CDS connector will give you the option to select the Scope for event triggers. Scope can be set to Organisation, Parent: Child Business unit, Business Unit or User level. This is similar to the native workflow engine in D365.
In addition to the scope you will also have the option to select attribute filters. Attribute filters will ensure the event trigger is only invoked when the specified attributes are updated.
Points to consider when using update triggers:
- Update event triggers are invoked on Update requests to the record. Event triggers would NOT check whether any attribute values are being changed or not. As long as the update request is successful the Flow would be triggered.
What does this mean?
For update triggers at record level, the flow would still be invoked even if the update request has not made any changes to the record (Applies to D365 connector and CDS connector both)
For update triggers with attribute filters, the flow would be invoked even if the update request is setting the attribute its existing value (Applies to CDS Connector)
- Update event triggers on Dynamics 365 connector requires “Change Tracking” to be turned on at entity level. For more info on Change Tracking please visit https://docs.microsoft.com/en-us/dynamics365/customer-engagement/admin/enable-change-tracking-control-data-synchronization
Now that we have covered triggers and actions let’s have a look at Flow Plans. Currently Flow offers 3 plans.
|Flow Free||Flow Plan 1||Flow Plan 2|
You can check out Microsoft Flow Plans page for more information.
Limits and configuration in Microsoft Flow
Documentation from Microsoft provides more information on current request limits, run duration and retention, looping and debatching limits, definition limits, SharePoint limits or IP address configuration.
For current limits and configuration details please visit Microsoft Docs here.
There are also some limitations in the Flow designer UI compared to the native workflow designer in D365. One of them being the ability to design grouped conditional statements. Currently Flow does not provide grouped conditions to be configured in Basic mode. Which means you will have to use the advanced mode to build your conditional statements. I have noticed that LogicApps have already added the ability to group conditional statements in the basic designer and hopefully this is on the roadmap for Flow too.
Even with these limitations Flow offers a lot more than the native D365 workflow engine.
You can checkout Microsoft Flow Documentation page for more information and how-to guides.
I have released a new paperback book called “Microsoft Dynamics 365 FinOps – Fixed Price Projects Revenue Recognition In-depth” on Amazon about the fixed price projects revenue recognition last Thursday .i.e. 27th September 2018. In this blog post i am going to talk about the book and the motivation behind that.
I knew basic fixed price projects revenue recognition and how to perform it in the system. However, when it came to knowing all the possible fixed price projects revenue recognition scenarios, i always had to dig the internet and find out how this scenario works and how that scenario works. And while doing that i realized that apart from the basic information about the fixed price revenue recognition, there was not much available on the internet. This triggered me write this book. I thought lets put all the logical and allowed scenarios on paper in details, along with the screenshots, explanation, supporting T-accounts, other relevant details, exceptions, shortcomings, specific behavior and have it all in one place, in one book. The aim was to stop looking the internet endlessly for this topic henceforth.
What i did initially was plotted all the permutations and combinations with all the elements of the project group like 4 values of ‘Revenue recognition accounting rule’, 3 values of ‘Calculation methods’ and 4 values of ‘Matching principle’ and put them on excel sheet. The number came somewhere around 36. Also added further scenarios when i brought the ‘Cost template’ and its values for ‘Completion based on’ in scope. This added few more permutations and combinations with ‘Straight line’ and ‘WBS’ type of revenue recognition further adding to the scope. However, after trying each one of them by setting them up individually in the system, i concluded that 11 unique scenarios are the ones which i should be writing about in this book.
I decided to name it as “Microsoft Dynamics 365 FinOps – Fixed Price Projects Revenue Recognition In-depth” as this book gives the in-depth explanation for all the 11 scenarios along with all the accounting and relevant supporting details in over 200 pages. The second important decision was to print this book in COLOR, as the screenshots had many markings in RED, which i wanted the readers to really look at and understand it at once. The aim was always to uncover this complex beast of revenue recognition engine for fixed price projects.
Being a functional consultant, i have always faced many situations when client used to ask questions about a specific revenue recognition scenario and whether that is possible in the system and can i explain it. My regular answer was, “Let me get back to you on this”, as i knew that this is a complex area and this needs thorough preparation before presenting it to the client. Now with this book in place, i am personally in a much better position than what i was earlier. Not that i would answer all the questions about this topic instantly but at-least the turnaround time on them and the confidence would be much higher. I seriously feel that consultants working in the area of ‘Project management and accounting module’ of Microsoft Dynamics 365 FinOps, should definitely have a read through of this book.
Amazon link for the book is as follows: http://amzn.eu/d/7cEcot9
If you happen to read the book and if you wish to provide any feedback, then don’t hesitate to email it to me on email@example.com. And if you like the book, then please write a review on Amazon, so that it would benefit other buyers too.
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!!
There are three calculation methods when it comes to fixed price projects, they are:
- Markup percent total
- Markup percent estimate line
|Calculation method and Balancing fee journal|
- dimensions are NOT present on the project and hours transactions and
- dimensions on the project and hours transactions are different
|On account transaction|
|No dimensions on project|
|Contract value distribution among cost lines|
|System suggested percent complete|
|Actual hours v/s Hours forecast|
|One voucher for accrued revenue|
|Balancing fee transaction|
|Percent complete changed from automatic to manual|
|Balancing fee transaction|
Everyday we learn, no matter what and that’s absolutely true. However more important is to retain what we have learnt today and reduce the time in re-inventing the wheel later. I just now learnt a very small thing but i still wish to put this in writing so that i remember it in future and also if it helps others , then nothing like it.
If the project is over and the ‘Eliminate’ button does not activate, then there are two reasons for it, one is either the cost is not yet set to 0 or the contract value (On-account) is not yet invoiced. However there is one more reason why it wont be active, which i learnt today.
In my example, which is a straight line project, where the ‘Actual start date’ is 14th of Jan 2018 and ‘Actual end date’ is 13th of Feb 2018, however we are in September. When i invoiced the on-account (contract value), i did not realize that i haven’t changed the ‘Posting date’ and it was today, .i.e. 4th of September 2018.
After that i started posting estimates. As there were only two months for which i need to run the estimates, i ran it for Jan 2018 and Feb 2018 and i was expecting the ‘Eliminate’ button to get active so that i can eliminate the project. However system did not activate the ‘Eliminate’ button. I instantly realized that system is probably looking at the invoice ‘Posting date’. Hence i continued the estimates till September 2018 and after the estimate for September 2018 was posted, system activated the ‘Eliminate’ button. Notice the ‘Invoice revenue’ also appeared in the month of September only.
Just to prove it completely and validate it 100%, i created one more project but this time while posting the on-account invoice, i deliberately changed the posting date to 15th of Jan 2018.
After that i posted two estimates for Jan 2018 and Feb 2018 and then instantly after the Feb 2018 estimated was posted, system activated the ‘Eliminate’ option.
I know this is pretty small for a blog post but thought of capturing it so that it does not get lost.
Business case – A prepayment is received from the customer for an additional support contract for 35 hours on top of the actual core project. However the contract is such that whenever a consultant spends time on this engagement, that time is booked on the separate support project and a zero value invoice is raised against the project for the customer to know the hours spend till date. There is no obligation for the vendor to return the remaining hours amount to the customer. If the customer does not spend the agreed quota of 35 hours and project ends, then the vendor can write-off the remaining hours and recognize the revenue for the hours not used by the customer. This is a typical scenario in professional service companies and this is how you cater to it from Dynamics 365 FinOps Project management and accounting module.
Contract Value = 10,000
Cost price per hour = 100
Estimated cost = 3,500 (35*100)
Solution – A T&M kind of a project is created where ‘Hours’ and ‘On-accounts’ are set to go to ‘Balance’ first.
The project dimensions are as follows.
For the prepayment received from the customer, an on-account is billed initially at the start of the project.To raise a prepayment, ‘Customer advance’ feature is used, which automatically create a ‘Deduction’ type of transaction along with the ‘Prepayment’ type. When the project invoice for prepayment is posted, the accounting entry is as below. This is an unearned revenue as associated cost is yet to be booked against this.
Note the dimensions on the posting. These dimensions are inherited from the project.
The consultants working on the project starts posting their time-sheets. In this example we will put two hour journals but with different ‘Department’ dimension on each one of them.
Time-sheet posted by consultant number one – Will
Note that Will belongs to ‘Department number 23 = Operations’
Time-sheet posted by consultant number one – Chris
Note that Chris belongs to ‘Department number 28 = Client services’
Total of 30 hours are utilized by the vendor for customer incidents by the people from two different departments on the vendor side. Now at the month end, it the time to raise a 0 value invoice. The sale price against the hours transaction is netted off against the deduction type of on-account transaction. To achieve this deduction transaction is split at the time of invoice creation.
By doing this the revenue is split across the two cost transactions proportionately with correct dimensions on them. Please have a look at the screenshot below:
So far so good. Now assume that the project is over and the vendor wishes to recognize the remaining revenue of 250. To do this, user needs to post a fee journal for a value of 250 and then raise a 0 value invoice by netting it off against the remaining deduction on-account value. However the only issue with this is, the fee journal that is posted will be having dimensions from the project and hence the revenue posted after the 0 value invoice would also have dimensions from the project and not from the actual cost transactions. If this is the option that user wishes to go ahead with then no need to navigate to ‘Fee journals’ menu item to create fee transaction specifically, it can be done on the ‘Draft invoice proposal’ screen by clicking the ‘Create fees’ button. Once the details are filled in and ‘Ok’ is clicked, then fee journal is posted, with dimensions inherited from the project and it will be a part of the invoice proposal, ready to be posted.
However if the user wants to split the remaining revenue across the posted cost transactions, a manual fee journal needs to be created and the lines of the fee journal needs to be split in the equal proportion and on each line the appropriate dimensions from the cost transaction needs to be selected.
Fee journal lines for 150 and 100 are posted. The fee journal line numbers derived are in proportion with the total hours posted earlier. Have a look at the posted fee journal lines.
0 value invoice is then created including these fee journal lines.
Once this invoice is posted, the remaining revenue value of 250 is then automatically allocated to the already posted cost lines. This step serves two purposes, one to recognize the remaining revenue value which is initially posted as deferred revenue and second to recognize it by dimension, so that revenue and cost by dimension is also correct.
The revenue that was accrued by the fee journal is reversed and the remaining deferred revenue is recognized as a project revenue by dimension.
This manual workaround of fee journal is the way to recognize the remaining revenue on the project which is in balance sheet and that too properly by dimension.
Hope you have learnt something new after reading this today.
See you soon in the next post…till then take care..!!
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.
When creating Connections inside PowerApps would require getting an Account Key and Site URL. Use below link to get it.
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 = First(colPhoto).Url
Onselect = ClearCollect(colPhoto,Camera1.Photo)
Text = varOCR
Overflow = Overflow.Scroll
Capture Text Button
Onselect = Set(varOCR,ImageOCR.Run(First(colPhoto).Url).ocrtext)
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.
Now you can start creating your own Translator Buddy app. 😊
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!
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.
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.
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.
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.
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.
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.
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.
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.
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)
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.
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.
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.
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
|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
|Google Chrome (latest version)
|Windows 7 SP1, 8.1, and 10
Android 5 or later
iOS 8 or later
|Microsoft Edge (latest version)
|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
|Google Chrome (latest version)
|Windows 7 SP1, 8.1, and 10
|Microsoft Edge (latest version)
|Microsoft Internet Explorer 11 (with Compatibility View off)||Windows 7 SP1, 8.1, and 10|
These limits apply to each single outgoing request:
The retry value may vary. For certain error conditions, it’s not necessary to retry.
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.
|Asia||188.8.131.52, 184.108.40.206, 220.127.116.11, 18.104.22.168, 22.214.171.124, 126.96.36.199, 188.8.131.52, 184.108.40.206|
|Australia||220.127.116.11, 18.104.22.168, 22.214.171.124, 126.96.36.199, 188.8.131.52, 184.108.40.206, 220.127.116.11, 18.104.22.168|
|Canada||22.214.171.124, 126.96.36.199, 188.8.131.52, 184.108.40.206, 220.127.116.11, 18.104.22.168, 22.214.171.124, 126.96.36.199|
|Europe||188.8.131.52, 184.108.40.206, 220.127.116.11, 18.104.22.168, 22.214.171.124, 126.96.36.199, 188.8.131.52, 184.108.40.206|
|India||220.127.116.11, 18.104.22.168, 22.214.171.124, 126.96.36.199, 188.8.131.52, 184.108.40.206, 220.127.116.11, 18.104.22.168|
|Japan||22.214.171.124, 126.96.36.199, 188.8.131.52, 184.108.40.206, 220.127.116.11, 18.104.22.168, 22.214.171.124, 126.96.36.199|
|United States||188.8.131.52, 184.108.40.206, 220.127.116.11, 18.104.22.168, 22.214.171.124, 126.96.36.199, 188.8.131.52, 184.108.40.206, 220.127.116.11, 18.104.22.168, 22.214.171.124, 126.96.36.199|
|United States (Early Access)||188.8.131.52, 184.108.40.206, 220.127.116.11, 18.104.22.168, 22.214.171.124, 126.96.36.199, 188.8.131.52, 184.108.40.206|
This list identifies all services to which PowerApps Studio talks and their usages. Your network must not block these services.
|msmanaged-na.azure-apim.net||https||Runtime of Connectors/Apis|
|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|