PSA Contractor Time Entry

A shortcoming in the current release of Dynamics PSA, Project Service Automation, is that it only allows you to book time against a project for resources that are users. Resources in PSA can also be created for contacts and this is a typically how you handle sub contractors. You create them as a contact and then create a bookable resource records linked to this contact. You can then assign this resource tasks on your project.

The Time Entry function allows users to enter their time worked on project tasks and they can also use delegation to enter time worked on behalf of others users. When the time entry records are approved this triggers the creation of the project’s actuals records which get rolled up to the projects actual hours and progress percentage figures. More importantly the actuals are also used for invoicing. Unfortunately there is no way to enter the time worked for a contact type resources so your project level actual figures will be incorrect.

This blog posts suggests a “no code” way you can enter time worked for a contact resource  by booking their time against a single generic user and using a custom relationship to record which contact it relates to. So the first step is to create a new relationship between the between the time entry entity and the bookable resource entity.

PSA Contractor Time Entry Joe Gill Dynamics 365 Consultant

Then create a custom entity where you can enter contractors time. This basically is a copy of the time entry with an additional field to link it to the contractor’s resource record.

PSA Contractor Time Entry Joe Gill Dynamics 365 Consultant
PSA Contractors Time Entry Entity

Now create a workflow that fires when a contractor time entry records is created that creates the time entry records and populates the lookup field we created in the first step. This time entry records will be created for the owner of the workflow.

PSA Contractor Time Entry Joe Gill Dynamics 365 Consultant

Now when you save a new records contractor time entry record the workflow fires and creates  a time entry record. By default the time entry record is created with its Entry Status set to Draft so it needs to be submitted by the workflow owner or a delegate.  By setting the description field with the contractors name, in the workflow, the user submitting the time entry can see the contractors name.

PSA Contractor Time Entry Joe Gill Dynamics 365 Consultant


Once submitted the project approver can approve the time entry and the projects actuals get updated.

PSA Contractor Time Entry Joe Gill Dynamics 365 Consultant

This is not a foolproof solution to this problem, as it does not cover scenarios like reversals,  but it does provide a simple no code solution to create contractor time entry in Dynamics Project Service Automation.

In case you are interested in trying to use the SDK to enter a time entry record for a contract type resource
by setting the bookablerersouce as shown unfortunately it won’t work. It always set the bookableresoure to the user running the code.

Entity e = new Entity(“msdyn_timeentry”);

e[“msdyn_bookableresource”] = new EntityReference(“bookableresource”, new Guid(“4F1483D8-5C33-E711-80FD-5065F38B0302”));


Leave a Reply