Tip #829: Project Service Automation – When are Actuals actually created

Time is moneyMatt “Almost Resident” Johnson is definitely into PSA these days, learning and sharing what he learned.

Here’s a quick reference for anyone interested in when the Actuals are created during a Project in PSA. Maybe this will save someone a bit of investigation time or make things clearer in their mind.

Time and Materials Project

Steps Actuals Created
Resource adds time/expense
Resource submits time/expense
Time/expense approved by PM Actual created – Cost
Actual created – Unbilled Sales
Invoice created for all unbilled sales
Invoice confirmed (sent to customer) Actual created – Unbilled Sales (reversal of the previously created unbilled sale)
Actual created – Billed Sales
Invoice marked as Paid  


  • Actuals can be seen against either the Project, the Contract or the Invoice
  • Actuals will not be created if the contract is not associated with the project even if time is submitted and approved.

Fixed Price Project

Steps Actuals Created
Resource adds time/expense
Resource submits time/expense
Time/expense approved by PM Actual created – Cost
Milestone marked as ready for invoicing
Invoice created for Milestone Amount(s)
Invoice confirmed (sent to customer) Actual created – Billed Sales (Transaction class == Milestone)
Invoice marked as Paid


  • Actuals can be seen against either the Project or the Contract. Only the Billed Sales (Milestone) Actual will be associated with the Invoice.
  • Out of the box Milestones must be marked as Ready for Invoicing manually.
  • Although a milestone can be associated with a single Task, once this task is completed 100% it doesn’t automagically mark the Milestone as Ready for Invoicing.
  • A Task can actually be associated with multiple Milestones but a Milestone can only have one Task associated with it.
Tweet about this on TwitterShare on FacebookShare on Google+

Tip #828: Quickly migrate existing CRM Online licenses to Dynamics 365 licenses using PowerShell

I was not aware that Gayan “Performance Wizard” Perera shares my affection for PowerShell. Until this quick tip on how to bulk migrate CRM Online licenses to Dynamics 365 licenses using PowerShell.

$credentials = Get-Credential
Connect-MsolService -Credential $credentials
# this will get you a list of license types along with the tenant name which we'll be using later
Get-MsolAccountSku | Format-Table AccountSkuId, SkuPartNumber

# need to create a custom plan and remove sharepoint and project essentials. these are already assinged by Office E* plans

# get a list of users using Get-MsolUser and foreach loop; https://support.microsoft.com/en-nz/help/2777380/getting-all-licensed-office-365-users-with-powershell

# "tenant" is the name from the Get-MsolAccountSku command above
Set-MsolUserLicense -UserPrincipalName "user@user.com" -AddLicenses "tenant:DYN365_ENTERPRISE_TEAM_MEMBERS" -LicenseOptions $myplan

# remove the existing license, ensure you're removing the correct old license. i.e. "CRMPLAN2"
Set-MsolUserLicense -UserPrincipalName "user@user.com" -RemoveLicenses "tenant:CRMPLAN2"

Comes in handy when you have to assign the new D365 licenses to hundres or thousands of users.

Seal of approval

Tweet about this on TwitterShare on FacebookShare on Google+

Tip #827: Restricting date picker on portal forms

This tip comes directly from none other than Tanguy “The XRM Toolbox” Touzard himself.

It’s super easy to build an entity form and a page to allow editing of the Dynamics 365 records in a portal. But what if we want to restrict a date picker control to a certain range, which could be dynamic, e.g. based on today’s date.

Good news is that the portals use bootstrap framework so we should be able to use properties of the bootstrap date picker to set the range. The challenge is to get the actual control but for the master such as Tanguy, that’s not difficult.

The code that you’d want to add to Custom Javascript field of the entity form would look like the following:

$(document).ready(function() {
   $("#foo_dateofbirth")  // input control
   .next()   // the date picker container
   .data("DateTimePicker") // the date picker object
   .setMaxDate(moment()); // force the past

Here we’re forcing the date of birth to be in the past. You can use setMinDate(date) to restrict minimum date allowed as well.

Tweet about this on TwitterShare on FacebookShare on Google+

Tip #826: USD goodness unleashed

Whether you are an experienced Unified Service Desk developer or just about to dip your toes into the dark waters of USD, you are on a constant lookout for good code samples and snippets. But hey, why not to take it one step further?

Jayme Pechan, one of the USD fathers, has made the entire library of USD goodies available on Github. Full list of components is available and, apart from the Parature article list, they all look extremely useful, especially Controller.

If nothing else, you should be able to study the code to see how things should be done in USD!

Tweet about this on TwitterShare on FacebookShare on Google+

Tip #825: Tabs Gone Wild – Edge and IE

This tip shouldn’t be confused with a politically incorrect reference to ‘Girls Gone Wild’. So let’s get past that and into the issue with Learning Path and IE 11 and Microsoft Edge Browsers.

If you open your Dynamics 365 instance in one of these browsers you will get an uncontrollable situation where new tabs start opening faster than you can move your mouse and click to close them.

Learning Path Opens Multiple Tabs

Learning Path Opens Multiple Tabs

This is an issue in Edge and IE currently if you have Learning Path enabled. It doesn’t happen in Chrome or FireFox.

So if you want to use either of these browsers than just opt out of learning path. This is a temporary workaround. A true fix is in the works.

Click on the gear icon and then select Opt Out of Learning Path.

Opt Out of Learning Path

The fix should be created to MVP Extraodinaire Rhett Clinton.

Tweet about this on TwitterShare on FacebookShare on Google+

Tip #824: Track messages when you send them with Folder Level Tracking

Happy Valentine’s Day. Here’s a tip you may love if you use Folder Level Tracking.

One common criticism of Folder Level Tracking is you can’t track a message at the same time that you send the message, like you can when you use CRM for Outlook. You can move the message from the Sent folder to the tracking folder after you send the message, but there is no way to track the message when you send it. This is incorrect.

If you use Outlook (any version since 2007), you can track your messages at the same time you send them via Folder Level Tracking. When you compose your email, go to the Options tab of the ribbon.


Click the “Save Sent Item To” button, then browse to the desired tracking folder. When you send the message, the sent email will be saved to the selected folder, rather than saving it to the “Sent” folder. The message will then be tracked, and set regarding to whatever record to which that folder is linked.


Tweet about this on TwitterShare on FacebookShare on Google+

Tip #823: Custom Action editor wipes out parameter list

Love the tips sent to a jar@crmtipoftheday.com – always something new! Today, Elliott Hulburd unmasks a truly unpleasant bug in custom action a.k.a workflow editor that could literally cost you hours of trying to figure out why suddenly all your calls to a custom action fail.

When working with Custom Actions in CRM 2016 recently, I noticed a strange bug with the parameters. If you include speech marks in the description box for a parameter, and then save and close the process, when you open it up again, the parameter will have completely disappeared! No warning message or validation error or anything!

Custom action editor bug

I’ve only tried this in 2016, but also haven’t found anything about this anywhere online.

Tipp Jarr double tipp

Thanks Elliott for the heads up! I think I saw this behaviour but just didn’t pay attention to it as I should have. Confirmed that the bug is still present in Dynamics 365 and it’s not limited to double quotes. Looks like someone from the dev. team did a Spießrutenlaufen-worthy mistake and forgot to XML-encode the parameter description. As a result, saving custom action will wipe out your entire parameter list clean if any of the descriptions contains one of the following: "&'<>. Don’t be fooled by the presence of the parameters after you press the Save button – they are good as gone at this stage.

Tweet about this on TwitterShare on FacebookShare on Google+

Tip #822: Getting Started with Connected Field Service

We are glad to report that video tipping service has been restored and eligible customers can apply for a refund.

In this video, we look at Dynamics 365’s new Connected Field Service IOT capabilities. We will walk you though how to install and configure the solution both in Dynamics 365 and Azure, how to configure the simulator, and how to working with and respond to alerts inside Dynamics 365.

Give us your feedback, all of it: good, bad, and ugly, I’m sure we can take it. Suggest new topics either in comments or by sending your ideas to jar@crmtipoftheday.com.

Don’t forget to subscribe to http://youtube.com/crmtipoftheday!

Tweet about this on TwitterShare on FacebookShare on Google+

Tip #821: Troubleshoot Xrm.Tooling connection to Dynamics 365

We’ve long been recommending the use of CrmServiceClient in your applications that connect to Dynamics 365. But what to do when the client just wouldn’t connect?

The easiest way to start troubleshooting connectivity to Dynamics 365 is to run LoginControlTester.exe that has long been part of the SDK and can be found in <SDK>\Bin folder. As the name suggest, when you run it, the standard Xrm Tooling login dialog is displayed and it gives you a short Aye or Nay. The difference is that in config file for this small app tracing levels are maxed out and, in addition, there are some listeners for IdentityModel, ServiceModel, and even ADAL.

After you run the tests, collect your output in the same folder in the form of LoginControlTesterLog.txt and CrmToolBox.svclog files. You can use notepad of your choice to mule over the .txt file content, .svclog file can be viewed by Service Trace Viewer that is part of .NET tooling. Chances are that you’ll be able just double-click .svclog file to get it open.

Service log viewer

Lots of troubleshooting goodness here, and if you’re dealing with the support to resolve the issue, these files are something they would definitely ask for (or they should).

Tweet about this on TwitterShare on FacebookShare on Google+

Tip #820: Running multiple USD instances

If you ever tried to run Unified Service Desk more than once, you’d be very familiar with this message:

Multi USD error

Why would one want to run multiple instances? It’s handy during the development and testing to try various deployment scenarios, compare the look of a deployment after configuration changes, and connect to different organizations at the same time. As it turned out, it’s not that difficult at all:

  • Open USD installation folder which by default would be something like C:\Program Files\Microsoft Dynamics CRM USD\USD
  • Go level up, copy entire USD folder and paste it elsewhere, e.g. on a desktop
  • Inside you’ll find UnifiedServiceDesk.exe that you can run independetly of the installed copy

So now you can start customizing the copy, keeping the main installation as a reference point:

Multi USd splash screen

You can even connect as different users (licensed, of course):

Multi USD cases

(As you can see, some agents are busier than others).

Tweet about this on TwitterShare on FacebookShare on Google+