Dynamics 365 Project Service Automation: Reopening closed projects

Tested on:
Dynamics 365 version 9.0

When the OOTB Business Process Flow enters its final stage on a project record, the PostProjectBPFUpdate plug-in sets the record’s status to Inactive i.e the project is closed. This can come as a surprise especially to users who are used to the way Opportunities and Cases are handled in Dynamics 365 Customer Engagement. For Opportunities and Cases there is the option to reopen a record, however in Dynamics 365 Project Service Automation this functionality is not provided OOTB on a Project record.

Luckily the fix is pretty simple and we are partly doing the same we did with the Run Report button on one of my previous blog posts. The idea is simple and straightforward: Add a Run Workflow button on the Project form’s ribbon using the Ribbon Workbench by  and create an on-demand workflow that sets a record’s status to Active. Let’s go through the steps.

1. Load a solution that contains the Project entity and another entity with the Run Workflow button on a form’s ribbon. I’m using the same solution I created when adding the Run Report button to the ribbon.

2. Copy the Run Workflow button from the entity in your solution (in this example the Account entity).

3. Pick a spot on the Project form’s ribbon and paste the Run Workflow button. I also changed the text on the Id field form account to project. Publish changes and verify that the button works as intended.

Create an on-demand workflow on the Project entity that sets the record’s status to Active.

6. Run the workflow on a project that is Inactive. Reload the page on you web browser and the status of your project is now Active.

7. Click on Process and Reactivate on the ribbon to reactivate your Business Process Flow if needed.

I hope this tip enables you to take more out of projects in Dynamics 365 Project Service Automation. Although the OOTB logic of closing a project at a BPF’s final stage can be annoying, I recommend not disabling any OOTB plug-ins to avoid unexpected behavior in PSA.

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