New Project Team Experience (OneGrid) in Project Operations

If you’ve been using the Team tab on a Project in Project Operations, there’s a new experience you can switch on now – the Team Member grid can use the Power Apps OneGrid control, the same modern grid you are already seeing across other areas of the app.

Here’s how to enable it and what changes on the Team tab – before and after –

Enable the Feature

  1. In Project Operations, change the area to Settings and open Parameters. Open the Parameter record and drop down Feature Control. Look for Enable OneGrid for Team Member – notice it doesn’t have a check mark yet.
    Enable OneGrid for Team Member highlighted in the Feature Control menu
  2. You’ll be asked to confirm. As the message says, the Power Apps OneGrid control will now be used for the Team Member grid on the Project form. Click Enable. Note: once enabled, the option no longer appears in the Feature Control list, so do this on a Sandbox first and see how your users like it.
    Enable button highlighted on the OneGrid confirmation dialog

Before

  1. Here’s how the Team tab looked on my project before enabling the feature – a regular subgrid with + New, Refresh and Flow.
    Team tab on a project before enabling OneGrid
  2. And when I expand a team member, I see the tasks they are assigned to. Selecting the row gives me Generate Requirement and Subcontracting Options.
    Expanded team member showing task assignments before enabling OneGrid

After

  1. Now, on the same project, the Team tab uses the new grid. You get checkboxes to select rows, the Bookable Resource, Role, Resourcing Unit and Position are now clickable links, and there’s a new Add Existing Project Team button right next to + New. At the bottom, you also get a Rows count.
    Team tab on the same project after enabling OneGrid
  2. Expanding a team member now opens a proper nested grid for the task assignments – with its own checkboxes, links to the Task, Bookable Resource and Role, an icon to open each assignment record and a Rows count of its own. When I select the team member, Generate Requirement and Subcontracting Options are still right there, and the footer shows how many rows are selected.
    Expanded team member showing the nested assignments grid after enabling OneGrid

So nothing changes in how you staff your project – it’s the same actions, just in a grid that’s easier to work with, especially on projects with larger teams.

Hope this was helpful!

Here are some more Project Operations posts you want to check out –

  1. Deploying Project Operations Core vs Integrated with ERP
  2. Hide Resources from Schedule Board in Project Operations [Quick Tip]
  3. Resource Roles and adding Role Prices to Cost and Sales Price List in Project Operations
  4. Permissions in Project in Project Operations
  5. New Copy Project Experience in Project Operations
  6. Project Task Progress Update in Project Operations & Mark Task as Completed

And some popular Power Automate posts –

  1. Select the item based on a key value using Filter Array in Power Automate
  2. Select values from an array using Select action in a Power Automate Flow
  3. Call a Flow from Canvas Power App and get back response | Power Platform
  4. Parsing Outputs of a List Rows action using Parse JSON in a Flow
  5. Asynchronous HTTP Response from a Flow | Power Automate
  6. Converting JSON to XML and XML to JSON in a Flow | Power Automate

Thank you!

Work with your Dynamics 365 CE data from Copilot using Dataverse MCP

If you are already using Copilot via an M365 Copilot license and it is helping you in productivity already – you might want to take it a step further and enable it to also bring in your Dynamics 365 CE data together – be in Project Operations, Field Service, Sales, Customer Service etc.

Examples: Copilot is helping me with my emails, SharePoint files – summarizing and triaging information. But have to still log into Dynamics 365 to get work done. Well, by default this is not enabled for organizations and ready to use but your Admin team can help you enable this.
Make sure the users who will use this have an M365 Copilot license assigned to them and you have the right Admin privileges across M365, Power Platform Admin Center, Azure and Teams Development Portal.

Let’s see it how and make it work!

Step 1 – Register an App in Microsoft Entra

Give you have the right access to Azure with permissions, you need to create a new App Registration and follow the steps along –

  1. Add a new App Registration in Azure Portal.

  2. Then, enter the Name and select Web in the Redirect URI [https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect]

  3. Once the App is registered. Save the App Registration ID and Tenant ID.
  4. Then, navigate to the Certificates & secrets. And add a new Client Secret there.


  5. Now, store the value before you refresh the page. You’ll need the Secret Value.
  6. Now, go to API Permissions as below.

  7. Select Dynamics 365 CRM and mcp.tools as Delegated access.
    Then, grant the permissions.





    And finally, Grant the permissions as below.


    And check that the Permission is granted.

Step 2 – Allow the App on the Dataverse MCP Server using Power Platform Admin Center

  1. Given you have Dynamics 365 Admin privileges, navigate to Power Platform Admin Center. Navigate to your environment and look for Features under Settings.


  2. Then, navigate to Data Model Context Protocol and make sure Allow MCP clients to interact with Dataverse MCP server (GA version) is enabled. [Based on when you are reading this blog, the mention of version might change]

    Click on Advanced Settings which will take you in Dynamics CE to.

  3. Click on new MCP Client.

  4. You already have the Application ID from Azure’s App Registration. Copy it as you’ll need it here.
    Then, enter register the App Registration as an MCP Client here. Give it a suitable name, but also make sure to add prefix yourself. I just added “new_”
    Set Is Enabled to Yes. Save the record.


    This is set now.

Step 3 – Register the OAuth Connection in Teams Developer Portal

You need to register the OAuth Endpoint here.

  1. Navigate to Tools as shown and then select OAuth Registration.

  2. Register a new client. This will be similar to App Registrations you’ve used to doing before. Just that the information is to be borrowed from the App Registration on Azure we did above.
    Click Register client.
  3. Fill in the details as asked

  4. Once created, copy the Reg ID. You’ll need this in the Reference ID asked in the Microsoft Copilot Portal below.


    Here, you are now ready to consume this to create a new Custom Connector in M365 Admin Center’s Copilot area. Let’s see ahead.

Step 3 – Create the Connector in Microsoft 365 Admin Center

Given that you are an M365 Global Administrator, you need to now deploy this as a Custom Connector in M365 Admin Center under Copilot –

  1. Go to M365 Admin Center [https://admin.cloud.microsoft/]. Then, expand Copilot on the left hand pane and look for Connectors.

  2. Register your Connector. Enter the name and the info like the URL, and Description which are mandatory.

  3. Further, add more details as asked and the copied Reference ID from Teams Developer Portal app is to be pasted here. Refer Step 3 and point #3 from above.
    Now, click Authorize.

  4. Then, click Authorize again. It should go through and show as below. Then click, Create at the bottom.


    Once created, it’ll be available like this.


    Now, let’s roll it out to the users!

Step 5 – Roll it out to your Users

Now, let’s roll it out to the users. Follow the steps below –

  1. Navigate to the Copilot area in the the left hand pane. Look for Connectors, under Your Connections, wait for a bit for the list to refresh. You’ll find yours there. Click on the three dots and then click Add Staging.

    It takes a few mins for this to be available to the selected users.

Step 6 – Connect from Copilot Chat

Now, let’s test!

  1. In your Copilot Chat, look for the gear icon next to your profile, then navigate to Settings.

  2. Look for Sources, you’ll see list of Connectors available.


  3. Search for your Connector there and it’ll show up. Once you find it, click Connect on the Connector. It’ll authenticate you in.

  4. Click Continue and you should be connected in a moment.

  5. Then, you can also look at what tools are available for you to use.

    And you are all set. Let’s test.

Query your CRM data here!

Now, you can start by querying your CRM data here – just ask anything from the environment and validate if it is returning correct answers. Involve System Admins and the ones who deployed if you need to further fine tune your Connector.

Hope this was helpful!

Here are some more Dataverse and Copilot posts you want to check out –

  1. Code Apps for Dataverse – Part 1
  2. Code Apps for Dataverse – Part 2
  3. Finding Indexed Columns in Dataverse Search
  4. Time and Expense Agent [Production Ready Preview] – Part 1
  5. Enable Copilot for Dynamics 365 Sales environment
  6. Create Project Plan using Copilot in Project Operations
  7. Environment Groups in Power Platform Admin Center

And some popular Power Automate posts –

  1. Select the item based on a key value using Filter Array in Power Automate
  2. Select values from an array using Select action in a Power Automate Flow
  3. Call a Flow from Canvas Power App and get back response | Power Platform
  4. Parsing Outputs of a List Rows action using Parse JSON in a Flow
  5. Asynchronous HTTP Response from a Flow | Power Automate
  6. Converting JSON to XML and XML to JSON in a Flow | Power Automate

Thank you!

AI in Dynamics 365 CE Applications: Transforming Solution Architecting

Given my 12.5 years in the industry at this point – where I started my journey from Dynamics CRM 2013 online (and having dealt with some D365 CRM 4.0 on-prem along the way too) – I’ve come a long way from changing XML for SiteMaps to make sure the Calendar is set right for new orgs – features in D365 CRM got added and many features kept getting deprecated [Although the later is less than the former].

The only help I get and also which I offered was treacherous hours and hours spent in making sure the. ‘customer experience’ is top notch as much as the quality of my solutioning.
Now, sitting in later half of 2026 and putting even the Solution Architecting years behind me – I look back in time and gauge what has changed really?

Well, fundamentally things remain the same –

  1. Set up new environments
  2. Implement C# plugins and JS for custom logic
  3. Configure roles, System Settings
  4. Configure behind the scenes for applications like Project Operations, Field Service, Customer Service etc.
  5. Migrate and deploy solutions between environments

    …and so on.

But, the medium of doing all the above has changed. That definitely has!

With advent of AI tools – Copilot, Claude, ChatGPT, disparate configuration pieces are more connected to each other and to the Developer / Solution Architect sitting in front of the screen on a random Tuesday midnight.

So from a bird’s eye view of things – here’s what is more cohesive, AI-powered and in control which I plan to write further in this series and connect it all together as we sunset 2026 in these relatively newer Agentic development years.

  1. Metadata, Configuration: Dataverse MCP on your AI tools like Claude.
  2. CI/CD: Power Platform Pipelines, Azure DevOps
  3. C# Plugins and Code: Claude Code, GitHub Copilot
  4. End User Guides / Documentation: Claude Design, Figma, Copilot in Office Apps

So in the new few weeks and month, as AI continues to ever-evolve, I’ll share with my audience a framework of bringing together all the applications together with AI to deliver the same high-quality CE applications in an agentic-way.

And it doesn’t stop there – probably years after, there would be something else to replace it. But till then, this areas continue to evolve and take shape bringing from my experience and feedback from the teams and customers I work with in this remaining decade.

Hope this was helpful!

Thank you

Price Override in Project Operations | Part 1 [Understanding Change Amount effect]

So, often times if you are working on Project Contracts, you must have encountered this button which creates a separate Price List for the Quote itself – Project Contract Price List Defaulting Behavior in Project Operations

But here’s how to track and find what happens to these Price Lists and what Price Override levels are –

Creating Price Overrides

  1. Here’ where you can find the Prices to be overridden on a Price List level –


  2. Now, when a new Quick Create form is created, you can fill in the details for either the new Price or the % and the Scope.

  3. Now, when you add the Price Per Unit, also notice that there’s a Scope field as well. Notice the types of records for the Scope defines at what level should this take effect.


  4. Let’s select an Account and save.

  5. Now when I save the record, notice that the Price is added differently.


    So, let me demystify this Part 2 of this post here: Price Override in Project Operations | Part 2 [Understanding Change Amount effect]

Hope this was helpful!

Thank you!

Setting up Codex with Power Platform MCP Server

Amongst available AI clients available, Codex is well-known by ChatGPT and here’s how you can use to configure with Power Platform MCP Server.

Install Codex on VS Code

One of the first things to do is to install Codex as an extension in Visual Studio Code –

  1. Look for the below extension and you should see a ChatGPT icon.

  2. Once this is installed, go to Extensions and you can sign in with your GitHub Pro account.

  3. It’ll open up a Sign-in page and you’ll need to enter your credentials.

  4. Make sure you open a Folder in VS Code and also ensure npm is installed by running this command in terminal ‘npm -v‘.


  5. Next, before you configure the TOML file – make sure you are having powerplatform-mcp installed locally and then configure the TOML file for Codex.

Downloading Power Platform MCP locally and connecting to the MCP

Now that Codex is installed and NPM is installed as well. Let’s first download Power Platform MCP first and then connect it to the Power Platform MCP environment –

  1. Let’s check if PowerPlatform-MCP is already installed or not by checking its version number.
    Below, it says that it didn’t find zsh, means powerplatform-mcp is not installed locally.

  2. Because I use a Mac, I can do so using Homebrew. You can check alternatively on doing this using Windows and downloading using Powershell.
    In case you face permission issues on the device, you can just run the below command –
    “sudo npm install -g powerplatform-mcp” and you should see the packages getting downloaded successfully.

  3. Now, go ahead and configure the Toml file.

  4. Then, in the TOML file, you can enter the configuration like so –

  5. And when you try to query in Codex, you’ll see the results come through in the form of answers.

Hope this was useful!

Thank you!

Time Entry Calendar in Project Operations

If you have been used to doing Time Entries daily on the classic Time Entry grid and that has been a habit for quite some time, you might not realize that it is slower and inefficient to do, just because you got used to it now.
So, here’s Time Entry calendar view which is better way to visualize and do Time Entries! This is in Preview as of the day of writing this post.

Enable Time Entry Calendar View

Here’s how you can turn on your Time Entry Calendar from Project Operations’ Settings

  1. Navigate to Settings Area in Project Operations Model-Driven app.


  2. Then drop down form Features to find the Time Entry Calendar listed.


  3. Click on it to turn it on. It’ll ask for confirmation, it ask describes what it does.


How Time Entry Calendar works?

Here’s how Time Entry Calendar feature works when you want to do Time Entries.

  1. Now when you navigate to the Time Entries from My Work (or wherever you have put it), you’ll see this new option in My Work called as Time Entry Calendar, while you existing Time Entry section still exists as is.

  2. When it loads, you can see the Time Entries now appear like how allocations appear on your Schedule Board, gives you a better way to visualize Time Entries to be done and and most importantly, select the Time for the Time Entry.
    You can visualize Daily, Weekly and Monthly.


  3. You can even click on the Time you want to make Time Entry on and the window pane will let you drill down to the Task level on the Project which you want to make Time Entry on.

Hope this was useful!

Thank you!

Project Task Progress Update in Project Operations & Mark Task as Completed

Up until now, you had to do Time Entries to mark a Project Task as completed. But, this makes difficult to gauge the progress of the project in actuality as some tasks might need to be marked as completed without having to do remaining Time Entries on them.

Here’s when marking Project Task as Completed comes in handy.

Default Behavior for Project Tasks in Project Operations

By default, you won’t be able to edit the % of the task in the Project Task Grid –

  1. Till now, you are able to directly mark a Task as complete by using the below option –

  2. And it’ll mark the task as Completed to 100%. But, when hover over the % completed, it’ll say that it’s a read-only and can’t be edited to put your custom % in there.

  3. So, let’s see how this feature will let you edit the % complete to your desired number.

Enable marking Project Tasks as completed

In Project Parameters, you can find the Feature to mark Project Task as completed –

  1. Drop down on the Feature Control and you’ll see that Task C

Mark Project Tasks as completed

When you enable this, you’ll see the below on the Project –

  1. The Project form will have the field to allow Project Tasks to have custom progress % option.

  2. Once you do this, you’ll then be able to hover over the Project Task and enter the % you desire.

Hope this was useful!

Thank you!

Recycle Bin in Dynamics 365 CRM | [Preview]

Now, you can retrieve deleted records up to 30 days in Dynamics 365 CRM /. CE apps.
Here’s how you turn this feature on!

Enable Recycle Bin

Here’s how you can enable this given you have the correct Dynamics 365 System Administrator privileges –

  1. Go to the Environment’s Settings in Power Platform Admin Center (https://admin.powerplatform.microsoft.com/)

  2. Now, expand Product section and go to the Features option.

  3. When you scroll to the bottom, you’ll see Recycle Bin option as a feature. At the time of this blog post, the feature is in Preview – Hence, this is not recommended for production purposes yet.
    By default, it’s turned Off.

  4. Once you flick the switch, you’ll be asked for number of days the data has to be retained for. I’ll enter 30 here and then scroll to the bottom and save the setting.

  5. Once saved, you can go to your environment and test this on a sample record. See the section next.

Deleted Records

Now, since this is enabled and post that when you delete records, here’s how you can find them for the number of days you’ve configured Recycle Bin for –

  1. For example, this is the Account record you want to delete.

  2. Go to the View Deleted Records section in the in your environment’s Settings area.

  3. You’ll see the Deleted records which you can select and choose to Restore.


  4. Confirm.

  5. Upon Restoring, they’ll appear where they were originally supposed to exist.


    Because this feature is still in Preview, here’s Microsoft’s Documentation on the same with listing of some known issues as well – https://learn.microsoft.com/en-gb/power-platform/admin/restore-deleted-table-records?WT.mc_id=DX-MVP-5003911

Hope this was useful!

Thank you!

Create a Custom Connector For Power Automate & Power Apps

One of the most important qualities of extending capabilities of any platform is being able to add Custom code and make it available to wider use cases.

In this case, it’s a custom code that is encompassed in a Custom Connector in Power Platform and made available to Power Automate or Power Platform.

Use Case

The purpose of my custom connector is to call my hosted custom code in Power Automate or Power Apps.

For this example, I’ve created a simple Azure Function that just returns a value – just to test the working of the Custom Connector. Of course, your use case is to be able to connect to the hosted app, expect it to process the business logic which you intend to do and return back the results.
So, in my case – my Azure Function will simply greet the name passed to it.


See the Postman test below –

Now, let’s make a Custom Connector that will execute this Azure Function in your Power Automate.

Create Custom Connector in Power Apps / Power Automate

You can either make the Custom Connector from the Power Automate portal or the Power Apps Maker portal, both are the same things. Let’s see this example from Power Apps portal –

  1. In this use case, I’m in a Solution in Power Apps / Power Automate. Open the one in your case since you can’t create a Custom Connector from outside a Solution any longer.

  2. Now you can drop down from New and see in Automation menu that you can create a Custom Connector

  3. Now, you’ll be required to enter the name of the Connector itself and other details like a PNG icon for it, Description etc.

  4. Now, below is the info that I filled in. I’m calling it Data Transporter and have selected an Icon which should make me easy to recognize my connector in Power Automate and Power Apps and enter enter the details of my hosted Azure Function which is authenticated using an API Key.
    So, here’s what my info looks like –

  5. Now, when I click on Security after filling all the info, the type of Authentication I used in this case if API Key, yours could be different depending on what your custom application is configured to work with –

  6. It’ll ask you to fill in the information so that it appears as parameters to fill in for the Custom Connector when the end user will work on their Flows/Apps.

  7. The info I’m choosing to fill is this – I’m giving a name to the parameter to indicate what info is required. The actual parameter name required by the Azure Function, in this case – it’s ‘code’ and since I need to pass the API key in Query string, I’ve selected Query instead of Header.

  8. When you go to the next part, i.e. Definition, make sure you also give a Name to the Custom Connector already. Before your lose the info you’ve already entered. Make sure you also click on Create Connector


    Once you click on Create connector, it’ll create it in a few moments.

  9. Now, since you are aware of Triggers and Actions from using Power Automate – in this use case, my Custom Connector is designed to be an Action i.e. when called/used in Power Automate, it’ll simply perform the operation it’s designed to do.
    Hence, I’m selecting an Action here.
    When I select New Action from the left hand pane, it’ll open up information for me to fill out to describe the Action.

  10. Now, since this will appear as a listed item in Actions in my Power Automate connector, I’m filling in this info (and we can check later how it appears).


    Next, I’ll click on + Import from sample as it’ll give me a place to enter a sample for the request to call my hosted Azure Function.



  11. Next, I’ll pass these values as I did in Postman to create the sample. Once done, I can click on Import.

  12. When I import, I’ll the request parameters set in the Custom Connector based on the sample I entered.

  13. Next, I’ll scroll down to ensure that all validations are perfect and I needn’t fix anything.

  14. Next, I’ll skip AI Plugins step and also the Code step since I want to keep this example concise and to the scope of the hosted Azure Function only.


    And this is skipped too –

  15. Now, the final step is to Test the Custom Connector. The Editor will ask you to Update connector before you can Test. Then, in order to begin testing – you’ll need to first create a Connection using New Connection button as shown below.


  16. When you click on New Connection, you’ll be taken to a new tab to enter the API key which you created as parameter in the initial setup of this Connector. See #7 above. Enter the API key you have which works for this hosted app and then click Create connection.


  17. Next, in case the Connection doesn’t appear, click Refresh button once.

  18. Once you refresh, you should see your Connection come up and selected.

  19. Now, next step is to test the Custom Connector itself. Enter the values that you wish to test for and click Test operation.

  20. You’ll see the test results based on what the hosted code is supposed to perform.
    In my case, it was easy as it just greets the name entered.


    And your Custom Connector is now ready to be used!

Consuming Custom Connector

Now, let’s see how you can use the Customer Connector in Power Automate in order to perform the operation in your Flows –

  1. Once in Power Automate, look for the Custom tab in the Action selector.

  2. Then, you can see the Action you defined in your Connector Definition steps above.

  3. Since you need to authenticate using the API key you have, the create Connection step will ask you this info and you can give the name of the Connection.

  4. Pass the value you want to pass as data.

  5. Finally, you can just save and test the Flow itself and look for your Outputs.


    And that’s how you can have a Custom Connector for your custom app/service your have created. I’ll soon write about other aspects of Custom Connector which I wasn’t able to cover in this blog.

Hope this was useful!

Thank you!

Create your first custom Copilot for Customer Service Hub – Part 2 | Authentication

Now, you must have created your own Copilot to be deployed for the Customer Service Hub. If not, here’s the link to Part 1 of this blog – Create your first custom Copilot for Customer Service Hub – Part 1

Configure User Authentication with Microsoft Entra ID

Here’s how you can configure the User Authentication with Microsoft’s Entra ID for your Copilot to be authenticated with –

  1. Go to the Azure Portal [https://portal.azure.com/], then given the appropriate permissions your might have, you should be able to create an App Registration

  2. Now, create on New Registration –

  3. Now, give it a suitable name so that you can identify that the purpose of this App Registration is for Copilot. Select multi-tenant, leave Redirect URI blank and click on Register.

  4. Once ready, go to Authentication and then click to add Platform.


  5. In the platform selection, click on Web.

  6. Now, enter the URIs – First, enter the first URI, make sure to select Access tokens and ID tokens in Implicit grant and hybrid flows section and then click Configure.

    https://token.botframework.com/.auth/web/redirect
    https://europe.token.botframework.com/.auth/web/redirect



  7. Then, go ahead and add the Second URI from the main screen itself. Then, click Save and refresh the page once.

  8. Now that both the URIs are added, click on the configuration link to consider both the links for configuration.

  9. Now, you’ll be taken to this pane where you can click

  10. Now, both the URIs will appear here.

  11. Next, generate Client ID and Client Secret as you’ll need these details too –


Set Copilot Authentication to use Custom Authentication

Going back to the Copilot itself, set the Authentication you just created in the Azure Portal –

  1. Go to Settings on the Copilot to use the Custom Authentication.

  2. Go to Security section and then select Authentication.

  3. Select Authenticate manually and then enter the details as shown below. Enter the Client ID and Secret which you must’ve saved before.



  4. Next, come back to Copilot Settings and in Security, go to Settings and then look for Web channel security.

  5. Once you open it, you’ll find that the Secured Access is disabled. Go ahead and enable it.
    It takes up to 2 hours for it to take effect. Till then, old settings apply.

  6. Finally, in Channels, select Customer Service Hub so that you can connect to the Customer Service Hub.

  7. On the right hand side pane which opens up, you’ll see that this is not connected. Click the Connect button.


  8. It connects to Customer Service Omnichannel in a few moments.


Part 1: Create your first custom Copilot for Customer Service Hub – Part 1

Hope this was useful!

Thank you!