Sam's Microsoft Dynamics 365 Blog

Sunday, 6 September 2026

Is the D365 developer job changing? (plugins vs agents)

Someone asked me last week if plugin development is dead.

It isn't. But the shape of the work has definitely moved.

A few years ago most of my time went into plugins, JavaScript, custom workflow activities. Making the platform do things it wouldn't do on its own. A fair chunk of that is now either configuration, or an agent action, or Copilot handles it well enough that nobody asks for it any more.



What's replaced it isn't easier, just different. Data modelling matters more than it ever did, because agents inherit whatever mess you left in the schema. Security is back at the centre of every conversation. And a surprising amount of my week goes on explaining what the AI can't do, which is a strange skill to have picked up.


If you're worried about it, here's the thing I'd hold on to: deterministic logic still belongs in plugins. Anything that has to run the same way every single time isn't going anywhere near a model. Agents are for the fuzzy edges. Knowing which side a requirement falls on is the actual job now.

Anyone else seeing their week shift like this?

Related: Copilot in Dynamics 365 — what it actually does

Thanks for reading this article. Hope this Article will help you. Cheers!!!

#Dynamics365 #PowerPlatform #MicrosoftCopilot #DynamicsCRM #CopilotStudio #Dataverse #AIDeveloper #DynamicsAIEngineer #HireAIEngineer #AIEngineer #D365Consultant #CRMDeveloper #AIAgents #MSDyn365


Saturday, 5 September 2026

Copilot in Dynamics 365: what it actually does

 Copilot in Dynamics 365: what it actually does

Every demo makes it look like magic. Then you switch it on for a client and the real questions start.


The honest version, for those of us who implement this stuff:

Summaries are the genuine win. Opportunity summaries, case summaries, email drafts. Boring, but they save reps real time every day.

It reads your data, not your intentions. Empty notes fields and half-filled records produce useless summaries. Copilot doesn't fix bad CRM hygiene, it exposes it.

"Copilot" is now several different things. In-app Copilot inside Sales and Customer Service, Copilot for Sales in Outlook and Teams, and agents you build in Copilot Studio. Different licences, different setup. Clients rarely know which one they've bought.

The config work didn't vanish, it moved. Instead of ribbon buttons and JavaScript, you're now tuning security roles, knowledge sources and grounding data.

The teams getting value out of Copilot aren't the ones who bought the most licences. They're the ones who cleaned up their data first.

What's your experience been — real productivity, or expensive autocomplete?


Thanks for reading this article. Hope this Article will help you. Cheers!!!

#Dynamics365 #PowerPlatform #MicrosoftCopilot #Dynamics365 #DynamicsCRM #PowerPlatform #MicrosoftCopilot #CopilotStudio #Dataverse #AIDeveloper #DynamicsAIEngineer #HireAIEngineer #AIEngineer #D365Consultant #CRMDeveloper #AIAgents #MSDyn365 #Dynamics365 #MicrosoftCopilot #PowerPlatform #AIDeveloper

Thursday, 22 May 2025

How to Get the Power Automate Flow Run URL Using Expressions

In many Power Automate projects, especially those involving approvals, error handling, or audit logs, it’s helpful to have a direct link to the current flow run instance. This is particularly useful for debugging or sending links to business users or admins to investigate failures.

In this blog post, I’ll show you how to generate the current Flow Run URL using a simple concat() expression in Power Automate.

๐ŸŽฏ Objective

We want to dynamically construct a URL like this during a flow run:

https://us.flow.microsoft.com/manage/environments/{EnvironmentId}/flows/{FlowId}/runs/{RunId}

You can then include this in an email notification, Microsoft Teams post, or Dataverse log for auditing and support purposes.

๐Ÿงช The Expression

Here’s the expression you can use in Power Automate:

concat('https://us.flow.microsoft.com/manage/environments/', workflow().tags.environmentName, '/flows/', workflow().name, '/runs/', workflow().run.name)

๐ŸŒ Replace us.flow.microsoft.com with the correct region URL if you are in a different geography (e.g., europe.flow.microsoft.com).


๐Ÿ›  Step-by-Step Guide

๐Ÿ“ Step 1: Create a Flow

  • Create an automated flow or manual flow.

  • Add a trigger like "Manually trigger a flow" or "When a record is created."

๐Ÿ“ Step 2: Add a Compose Action to Build the Flow Run URL

  1. Click + New Step.

  2. Select Compose.

  3. In the Inputs field, paste the expression:

        concat('https://us.flow.microsoft.com/manage/environments/', workflow().tags.environmentName, '/flows/', workflow().name, '/runs/', workflow().run.name)




๐Ÿ“ Step 3: Test the Flow

  1. Save and run the flow.

  2. Go to the Run history.

  3. Click on the latest run → Expand the Compose action.

  4. You’ll see the full Flow Run URL generated dynamically.





๐Ÿ“ Step 4 (Optional): Use in Email or Teams Notification

To make this link useful, add it to an email or message like this:

In Send an Email (V2):


Hi,

The flow has completed. You can view the run here:
@{outputs('Compose')}




✅ Benefits

  • Great for debugging failed runs

  • Helpful in audit trails or support processes

  • Can be stored in Dataverse, SharePoint, or sent via Teams


๐Ÿง  Final Thoughts

With just a single expression, you can make your flows much more transparent and easier to monitor. The next time something fails—or just finishes successfully—you’ll have a clickable link directly to that specific run.

Thanks for reading this article. Hope this Article will help you. Cheers!!!

Is the D365 developer job changing? (plugins vs agents)

Someone asked me last week if plugin development is dead. It isn't. But the shape of the work has definitely moved. A few years ago mo...