vision& logoDEV Standards

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.

ExampleNotes
[Centro] SharePoint-Notify-TeamsPost Teams message on case create
[PortalInternalContoso] Scheduled-UploadFiles-SharePointUpload files to SharePoint
[ContosoCRMField] Outlook-NextStepsUpdate-DataverseUpdate 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.

ExampleNotes
Contoso CRM FieldField app for CRM scenario
Portal-Internal-ContosoInternal admin portal
CentroCentro app

Connection References

Pattern: [App/Service Name] [Connector] - [optional: Short Description] - [Type of Connection]

ExampleNotes
[Centro] SharePoint - Service UserSharePoint connection for an app called Centro. The service user is used to connect to SharePoint.
[Centro] Dataverse - Service PrincipalDataverse connection for an app called Centro. The service principal is used to connect to Dataverse.
[AbsenceManager] Office 365 Outlook - UserOffice 365 Outlook connection for an app called AbsenceManager using the end-user's connection.
[SplitPDFs] Storage Queue - API KeyOffice 365 Outlook connection for an app called AbsenceManager using the end-user's connection.
[MeetingNotes] SharePoint - Project List Agent - UserSharePoint 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.

ScopeRun AfterPurpose
TryN/AMain logic that may fail
CatchhasFailed OR hasTimedOutLog error, notify, compensating actions
FinallyisSuccessful OR hasFailed OR isSkipped OR hasTimedOutAlways-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