My first ever #365Saturday session in Dubai | 13th Apr 2019

Evidently as people who know me in person could tell, I was thrilled to be a part of #365Saturday event in Dubai 2019.

First and foremost, thanks to Raz Dynamics for putting this forward on a massive scale. The most prominent vibe of the event was the enthusiasm guests and speakers had at the event.

It being my first ever #365Saturday event, I was presenting on Dynamics 365 Project Service Automation (PSA). I had a full audience having interesting questions on real business scenarios on PSA and how some customers have implemented the module.

My session covered aspects of PSA like the Sales Cycle (Opportunity -> Quote -> Order), Project Management, Resource Management, Time & Expense entires, Invoice and finally, Reporting.

A special experience of the event was that I got to meet brilliant minds in the industry such as Wael HamzeDaniel LaskewitzAndrew WelchHichem ChekebkebNarayan Solanki.

There’s always so much to learn and take back from these events and by meeting torchbearers of the Dynamics community.

Looking forward for more of it! 🙂

Advertisements

Geo Coding addresses in D365 v9.1 with Unified Interface

Very straight-forward and useful feature is Geo Coding addresses on Sales, PSA & Field Service entities. Like, on Account, Work Order etc. entity. Let’s take an example of Account in this article.

button

Enable Geo Coding

Geo Coding first, needs to be enabled in D365. If you try to access the Geo Coding feature, you’ll be treated with this error –

error

So, let’s do the following –

  1. Navigate to the Resource Scheduling app –
    resScheduling
  2. If you are in the Unified Interface, make sure you switch the Area to Settings and then select Administration
    settingsSwitch
  3. Then, Scheduling Parameters
    schedulingParameters
  4. In Resource Scheduling, flick the Connect To Maps to Yes, read the warning specified and confirm if you are ok
    connect.png
    warning
    That’s it.

Using Geo Code

  1. Once enabled, you can click on the Geo Code ribbon button on the Account record.
    button
  2. And, it will pick the address you entered and show the Latitude and Longitude for the same. You can simply click OK once the details look correct to you
    latLong
  3. The same will show on the fields on the Account entity
    actualFields

Hope this helps!

Making common developer/customizer tasks simpler by using “Level up for Dynamics CRM/365”

I know how it’s like to be a developer/customizer for D365 and having to fumble between windows to reach ‘name’ of fields, look behind the scenes trying to get a schema name, etc.

But all of that is simplified with this Chrome extension called as Level up for Dynamics CRM/365 offered by Natraj Yegnaraman

Link: Level up for Dynamics CRM/365

Using the Chrome Extension

Add the extension to Chrome as below –
addToChrome

Once you see Level up icon on Chrome like below, you can use it so do common tasks and much ease –

extensionAdded

And when you click it while in D365, you’ll get tools that you could use to work your way in Dynamics 365

controlCenter

One of my favorite among these, as a customizer/developer is – “Logical names”. I shows the logical names of the fields/Tabs and saves me time from going in to Solutions or opening the Form Editor
logicalNames

Loved this and the way it works!

 

D365 Quick Tip: Hide Dashboards in D365

This being an obvious approach to how Dashboards are by default seen by all. And how you can disable/hide for users. Even for D365 System Administrators!

Unlike usual forms, view or other records,

ribbon.png

And Deleting the Dashboard isn’t an option.

Enable Security Roles way

So a simple trick is to remove entire access from Enable Security Roles

enableSecurityRoles

Make sure Display only to these selected security roles
selected

And then just untick if you want to provide no access to anyone

removed

Hope this works!

Show specific entities in Activity Party List Lookup in D365 Activity entity

Out-of-the-box, D365 Activity Party List field, say, Appointment’s Required/Optional Attendees fields lets you choose among multiple Activity Party enabled entities when you want to select records. And perhaps you don’t even want users to select what’s not relevant.

default

Let’s look at how we can show only the required entities in the selection list.

Before that, if you want to check how you can enable custom entities for the Activity Party, you can refer this post of mine – Enable entity for Party List selection in Appointment

Hide entities from the Activity Party List field

This can be achieved by writing a simple JS code and calling it onLoad of the Appointment form where the Party List field exists.

  1. Let’s say you only want to show the entities Lead and Contact in the Required Attendees Party List field
  2. Here’s the JS code that goes on the onLoad function of the Appointment form
    // JavaScript source code
    oAppointmentFormCustomization =
    {
    filterRequiredAttendees: function () {
    Xrm.Page.getAttribute("requiredattendees").setLookupTypes(["lead","contact"]);
    }
    };

     

  3. And call the method filterRequiredAttendees onLoad as below
    onLoad
  4. The Appointment’s Required Attendees field will show only the entities you provided in the setLookupTypes([“lead”,”contact”]);
    filtered

Hope this helps!

How to add Rating Values to Rating Models in D365 Field Service and PSA

Rating Models and Rating Values are attributed to Bookable Resources in Dynamics 365 PSA and Field Service. Out-of-the-box, there are 3 Rating Values – Familiar, Good & Proficient. But obviously, you want to customize to have your own.

This is a tricky change and this post will exactly describe before you end up doing something wrong.

If you think all you need to do is add a Rating Value to the Rating Model and save, it won’t work

addRating

Because when you do this, the Value field is locked and you can’t enter anything and just saving the record with the name of the Rating Value will result in the error as shown below

errorWhenDirect

Update Max Rating on Rating Model

So, the right way to do it is to update the Max Rating Value on the Rating Model record.

updateMaxRating

As soon as I save the record, see the an additional Rating Value appears. And in fact, these are the new records that were created when you updated the Max Rating Value and not that the old ones were renamed to ‘Enter rating label here…’

newLabelsToEnter

Note: You can simply enter the record and update all the Ratings inside to the corresponding values.

What happens to existing Ratings used for Resources?

They are all there but have been deactivated, if you query all the Rating Values as is, you’ll see the ones created due to the change we did above and the ones that already existed were suffixed with “[Inactive]” label. See below –

newlyCreated

Well, since these are all the new records created, the old ones are ‘Deactivated‘. What remains with the existing Bookable Resource Characteristics records are the Inactive ones.

inactiveAssigned

To update these, you can do a simple Advanced Find by querying one of the inactive Rating Values and updating them using Bulk Edit to set the new one.

  1. Query the inactive ones
    queryInactive
  2. And simply Bulk Edit to update the Inactive ones
    bulkEditInactive

By the way, if you want to Bulk Clear and start fresh, you can check my blog on Bulk Clearing fields using Advanced Find here – D365 Quick Tip: Bulk Clear field values

Hope this helps you!

 

D365 PSA: Restrict Project access only to their Project Managers

Out-of-the-box PSA’s Project Manager security role provides complete access to even other Project Managers. But then, what if you want to bring down the access of the Project Managers to their own Projects only?

Remember, access in D365 PSA is provided for Owner (ownerid) field and not Project Manager (msdyn_projectmanager) field.

PSARoleRestrict

Scenario

Now, I don’t want a Project Manager to have access to others Projects and looks like this can’t be controlled from the Security Level perspective, given the Project Manager is a separate field than Owner of the Project.

So, I’ll limit the access to only the User level (the one who created the record would have the access, obviously)

PSARoleRestrict2

But this remove the access from even the Project Managers since they don’t own the Projects. To overcome this, I’ve written a simple plugin to provide access to the Project Manager whenever they are updated by Sharing and giving PMs the access.

For this, I’ve written a plugin code that will grant all permissions to the Project Manager of that Project and I would like to share this with you all to consume it.

GitHub Project

Here’s the GitHub repository I’ve created which has the plugin code and the Unmanaged Solution that contains only the plugin assembly and the registered step –

Link: D365PSA-PMAccessRights

gitProj

The D365 Unmanaged Solution resides here –

unmanagedSoln

This will work in the following scenarios –

  1. When a Project Manager is changed from Person A to Person B, the access rights of Person A will be removed and granted to Person B.
  2. You can even create a trigger field and use an on-demand workflow to set the trigger. This trigger should be included in the filtering attributes of the plugin step to update the existing records.

This will provide access to the Project Manager of the Project automatically apart from the Owner so that they see/access only Projects that concern them
accessGiven

Make sure no other security role is overriding your restricted access.

Hope this helps! 🙂