Customizing and extending Project for the web

Edited on: March 19th 2021.

Project for the web was released in October 2019. It runs on Common Data Service, which opens up loads of possibilities for customizing and extending Project. Out-of-the-box, Project offers two different user experiences: An Office UI experience as well as a Model-driven Power Apps experience, based on Unified Interface. Custom Canvas Power Apps can naturally also be built, as long as certain limitations around creating, updating and deleting records are taken into consideration. More on limitations later on this post.

Office UI

The Office UI experience is what I would call a go-to experience for the majority of Project users from project team members to project managers. The Office UI experience is extremely simple and fast to use. Comparing Project’s grid and timeline to D365 PSA’s custom control based WBS, the difference is immense. The Project Task Scheduling Engine is also super fast.

From a customization point of view the story of Project’s Office UI is, at the moment, short and bitter. Customizing the OOTB UI isn’t supported. Office UI Fabric React opens up possibilities for custom development but before you get your hopes up, you might want to read on to know how the current in-market, Minimum Viable Product version of Project, is locked down.

As Project for the web runs on Common Data Service, one basic customization scenario would be to use some of the views and fields in CDS on the Office UI. It remains to be seen what the product team will eventually let us do on the Office side. In the meantime, be sure to vote up an idea on UserVoice for custom fields in Project.

Project for the web’s Office UI.

Model-driven apps on Unified Interface

Project for the web comes with a Model-driven app that runs on Unified Interface. OOTB, its sitemap is kept very simple and the majority of entities we’ve seen in D365 PSA are not visible. The good thing is that as everything is on CDS, the sitemap can be customized. New Model-driven or Canvas apps can also be created if you want to leave the OOTB app alone.

Project for the web’s Model-driven app with a customized sitemap and Project main form.

Customizing and extending Project

Let’s look at what’s good, what’s restricting and what’s worrying when it comes to customizing and extending Project for the web. As I’m from the world of Dynamics 365 and Power Platform, there’s little to no advice I can offer when it comes to Office UI Fabric React. That’s why my approach is CDS and Power Platform centric. As you’re customizing Project, remember that solutions should be used for all customizations.

Customizing and extending Project – What’s good

Project can be customized just like any other app in a CDS environment. The whole backbone of CDS is available to us. There are many possibilities to extend Project to cover custom entities like RAID logs, Trainings or event Inspections, if that’s something your company needs Project for the web for. Use cases and scenarios are pretty much endless. The customization experience is the same as with any other native CDS or Dynamics 365 environment.

CDS offers a ton of features and a ton of security, in addition to the Office 365 Groups concept used in Project for the web. Customizing and extending Project for the web is possible with all the tools that are available on Power Platform:

  • Power Apps
  • Power Automate (Flow)
  • Power BI
  • Power Virtual Agents
Common Data Service.

Customizing and extending Project – What’s restricting

As you customize Project for the web, you will eventually run into error messages that prevent you from creating/updating/deleting records on some entities, when using Project’s Model-driven app. This is currently by design. As the error messages suggest, these restrictions will most likely be lifted down the line, as Microsoft’s Project+Dynamics 365 Better Together story becomes a reality. Not being able to (easily) customize or extend Project is nevertheless a bit of a blow, as some of the biggest value propositions with CDS are the extensibility and customization possibilities it offers.

Business Process Error when editing a Project record in the Project Model-driven app.

The table below has a list of entities for which create, update and/or delete operations are not allowed in the Project Model-driven app. Create/update/delete operations are possible from Project’s Office UI experience. I’ve also listed some plugins for create/update/delete events in the table. Note that the table is only for entities and plugins I’ve experimented with so it’s most likely not all inclusive.

As you’re customizing Project, remember that out-of-the-box plugins should never be deactivated for good, unless you have specific instructions from Microsoft to do so.

EntityPluginCreate / Update / Delete
ProjectProject Service Core – Pre validate of dates on update of msdyn_projectUpdate
Project BucketProject Service Core – Pre Validate Create of msdyn_projectbucketCreate
Project BucketProject Service Core – Pre Validate Update of msdyn_projectbucketUpdate
Project BucketProject Service Core – Pre Validate Delete of msdyn_projectbucketDelete
Project TaskProject Service Core – Pre Validate Create of msdyn_projecttaskCreate
Project TaskProject Service Core – Pre Validate Update of msdyn_projecttaskUpdate
Project TaskProject Service Core – Pre Validate Delete of msdyn_projecttaskDelete
Resource AssignmentProject Service Core – Pre Validate Create of msdyn_resourceassignmentCreate
Resource AssignmentProject Service Core – Pre Validate Update of msdyn_resourceassignmentUpdate
Resource AssignmentProject Service Core – Pre Validate Delete of msdyn_resourceassignmentDelete
Being bad – forcing customizations

What can we do if we want to see how our customizations or extensions play along with Project for the web, if the basic entities around project management are locked down? There’s a way around all the locks but it’s something that should not be tried in a production environment. I suggest opening a new tenant with a trial of Project for the web, if you want to try customizations that bypass the OOTB plugins. Why a trial tenant? Read on to understand about ALM in Project for the web.

If you want to be bad and force your customizations, you can enable what’s called Test Mode. This essentially bypasses the OOTB pre-validation plugins and lets you play with Project more freely. As I’m writing this blog post, there’s no documentation or official word from Microsoft about what flicking the Test Mode switch to Yes actually disables.

Edit: Test Mode bypasses pre-validation plugins so that create, update and delete operations to schedulable tables are made directly to Dataverse, without the Project Scheduling Service accepting and persisting changes. Test Mode should NOT be used in any production scenario.

Test Mode under Parameters. Use with caution and only in a trial tenant!

Customizing and extending Project – What’s worrying

Before I jump in the worrying bits and pieces, I want to say that I think Project for the web is a good Minimum Viable Product. It offers just enough to get started and considering that Microsoft’s story for modern project management feels pretty robust, the future of Project and project management with Microsoft’s tools looks promising.

There’s really only a single issue that’s worrying and it’s the fact that Project for the web only installs in a tenant’s Default environment. Installing to a named environment will most likely be possible down the line but it doesn’t change the fact that the only option is to install Project in a tenant’s “junkyard”. Default is a personal productivity “junkyard”, while named environments are meant for production use.

What’s the big deal then? It’s Application Lifecycle Management. All customizations that are done to Project are done in production. There’s no possibility to respect ALM best practices of using a dev, test, prod pipeline for implementing customizations. This would be an unbearable situation in a Dynamics 365 implementation. If you customize Project for the web, test your customizations in a trial tenant.

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

9 thoughts on “Customizing and extending Project for the web”

  1. Great Article. We were able to create project task via Power Automate after enabling Test Mode in Project Parameter. But the project task created via Power Automate does not show up in Project for Web.

    1. Thanks 🙂 About test mode. I edited the article with up-to-date information. Test Mode should


      be used in any production scenario. It bypasses to Project Scheduling Service and CUD operations to schedulable tables are written directly to Dataverse without PSS accepting and persisting the CUD operations.

      1. @Antti Pajunen,
        Thank you for quick response. I am trying in trial tenant only. We had call with Microsoft Project Operation sales manager, currently the Project, Project Task tables API are internal only, not opened for GA availability
        However there is a plan to open the API for public use, but they haven’t commit any timeline. We are waiting for April update.
        As per my understanding Project Operations uses “Project for the web” for task management, There is sync between Project Task CDS table and Project for the web tasks in Microsoft cloud. We are able to perform CRUD in CDS by enabling Test Mode, however the changes are not sync back to Project for the Web. Currently Project for the web only allows read operation , not write operation. CDS Write is planned as per user voice

        We are working on project which needs CRUD operation on Project, Project task table via Power Automate and Web API.
        Thanks to your article, Test Mode helped us to by pass the pre-validation and insert/update to CDS table.
        What is the purpose of Test mode? My understanding is the Test mode is developer preview of testing customization/extension. If there is no opportunity to move the customization to production, Why MS introduced Test Mode parameter?

        1. Test Mode is really just for Microsoft’s internal testing. Like I said it essentially bypasses the Project Scheduling Service, which holds and processes data for schedulable tables. Example: When you change the start date of a task in the Project for the web UI (the Office UI), the data is written to the PSS in Azure. PSS then processes the data and persists the change to Dataverse if it can. If it can’t you will see an error in the Project for the web UI.

          If you turn on Test Mode, data is written directly to Dataverse and PSS doesn’t perform any checks and balances on the data. This means that your schedule is now broken as the data is inconsistent.

          Do NOT use Test Mode for anything but testing on some theoretical concepts in your development environment.

          1. @Antti Pajunen,
            Thank you for the clarification. Extending Project Operations and Task import has been restricted with this limitation. I would like to see Microsoft opens the API for developer community.

  2. Do you know if they have allowed write values for assigned resources?
    I am working on building a 2 way sync for planner and project for the web. And when doing a Microsoft flow raw output or looking at a powerapps, I can’t find a assigned to field that resolves correctly.

  3. Hello,

    Thank you for your great article it is exactly what I was looking for. Unfortunately I am not able to find the Test Mode option can you guide me on where I have to go to enable it ?

    Best regards,

Comments are closed.