Power Automate
Pattern: [Solution Name in PascalCase] [Trigger]-[Action]-[Target]
Flows that are used in multiple solutions do not need to be prefixed with the solution name.
| Example | Notes |
|---|---|
[Centro] SharePoint-Notify-Teams | Post Teams message on case create |
[PortalInternalContoso] Scheduled-UploadFiles-SharePoint | Upload files to SharePoint |
[ContosoCRMField] Outlook-NextStepsUpdate-Dataverse | Update Dataverse table with next steps based on Outlook email |
Solutions
Pattern: [Solution Name]
There is no restriction on the name of the solution. However, you must add the Publisher.
If it is a solution that you will deploy to another tenant, make sure to include your company's name as the publisher. If the solution is being used only in your own tenant, make sure to include the department name as the publisher.
| Example | Notes |
|---|---|
Contoso CRM Field | Field app for CRM scenario |
Portal-Internal-Contoso | Internal admin portal |
Centro | Centro app |
Connection References
Pattern: [App/Service Name] [Connector] - [optional: Short Description] - [Type of Connection]
| Example | Notes |
|---|---|
[Centro] SharePoint - Service User | SharePoint connection for an app called Centro. The service user is used to connect to SharePoint. |
[Centro] Dataverse - Service Principal | Dataverse connection for an app called Centro. The service principal is used to connect to Dataverse. |
[AbsenceManager] Office 365 Outlook - User | Office 365 Outlook connection for an app called AbsenceManager using the end-user's connection. |
[SplitPDFs] Storage Queue - API Key | Office 365 Outlook connection for an app called AbsenceManager using the end-user's connection. |
[MeetingNotes] SharePoint - Project List Agent - User | SharePoint connection used for a Copilot Studio agent to connect to the SharePoint Project List. |
Use of camelCase
Use camelCase for most identifiers (connections, environment variables, child flow names), combined with a short prefix where relevant. Flow names themselves follow the pattern above and may use PascalCase words within the segments for clarity.
Try / Catch / Finally
Implement error handling using three Scope actions named Try, Catch, and Finally with configured Run After settings.
| Scope | Run After | Purpose |
|---|---|---|
| Try | N/A | Main logic that may fail |
| Catch | hasFailed OR hasTimedOut | Log error, notify, compensating actions |
| Finally | isSuccessful OR hasFailed OR isSkipped OR hasTimedOut | Always-run cleanup (close connections, archive, etc.) |
// Structure (high level)
Scope: Try
- Actions that may throw
Scope: Catch (run after: Try hasFailed, hasTimedOut)
- Compose error details
- Post to Teams / Email Ops
Scope: Finally (run after: Try isSuccessful, hasFailed, isSkipped, hasTimedOut)
- Cleanup, archive logs, set outputs