Google Tasks from Dataverse Work Items
When a record is assigned in Dataverse (case, work order, follow-up), the flow creates a matching Google Task for the assignee with due date and a deep link, and marks the task complete in Google when the record closes. Bridges system-of-record work into the assignee's Google Tasks.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
This solution bridges system-of-record work in Microsoft Dataverse into the assignee's Google Tasks, and closes the loop back. When a Work Item is created or assigned in Dataverse, Flow 1 creates a matching Google Task for the assignee (title, due date, deep link) and stores the Google task id back on the record. When the assignee later completes that Google Task, Flow 2 finds the matching Dataverse record by the stored task id and marks it Closed, notifying the assignee.
Why it matters: Assignees who live in Google Tasks miss Dataverse assignments. Mirroring work items keeps their personal list authoritative, and syncing completion back keeps the system of record accurate without anyone double-entering status.
Build note: The Google Tasks connector exposes only read + create operations (no update/patch/complete). The closing loop is implemented connector-first via the OnCompletedTaskInListV2 trigger, which fires when the assignee completes the task, and Flow 2 writes the closure back to Dataverse.
Use Case
Operations and developer teams track personal work in Google Tasks, but assignments originate in Dataverse (cases, work orders, follow-ups). This keeps both systems in sync automatically and bidirectionally.
Flow Architecture
When a work item is added or assigned (Flow 1)
Microsoft Dataverse — SubscribeWebhookTriggerMessage 4 (create-or-update), Organization scope — system-of-record signal that work was assigned.
Init UserListMap / RecordUrlBase / DefaultTaskListId
Initialize VariableLoad config from env vars.
Check If Work Item Is Assignable
ConditionProceed only if assignee present, status = Open, and no Google task id yet (dedupe).
Resolve Assignee List
ComposeMap assignee email -> Google list id, falling back to the default list.
Compose Task Title
ComposeTitle with optional [Priority] prefix.
Compose Deep Link
ComposeRecord url base + record id.
Create Google Task
Google Tasks — CraeteTaskCreate the task (title, deep-link note, due date).
Store Google Task Id
Microsoft Dataverse — UpdateRecordWrite task id + list id back on the record.
Notify Assignee
Office 365 Outlook — SendEmailV2Email the assignee with the deep link.
When a Google Task is completed (Flow 2)
Google Tasks — OnCompletedTaskInListV2Batch, 5-min recurrence, splitOn body/items — fires once per completed task.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_WorkTable | String | flowlibs_workitems | Entity set name of the source table. |
| flowlibs_UserListMap | String | {"default":"@default"} | JSON map of assignee email -> Google list id. |
| flowlibs_RecordUrlBase | String | https://<configure>.crm.dynamics.com/main.aspx?pagetype=entityrecord&etn=flowlibs_workitem&id= | Deep-link base; record id is appended. |
| flowlibs_DefaultTaskListId | String | @default | Fallback Google list id (also the list Flow 2 polls). |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Microsoft Dataverse | shared_commondataserviceforapps | SubscribeWebhookTrigger ListRecords UpdateRecord |
| Google Tasks | shared_googletasks | CraeteTask OnCompletedTaskInListV2 |
| Office 365 Outlook | shared_office365 | SendEmailV2 |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Per-user lists
- Populate flowlibs_UserListMap with {"alice@contoso.com":"<listId>", ...} to route each assignee's tasks into their own Google list. Use ListTaskLists once to discover list ids.
- Reassignment
- Extend Flow 1's condition / add an UpdateRecord to move or recreate the task when the assignee changes.
- Due sync
- Re-create or recompute the task when the record's due date changes (the connector cannot patch an existing task).
- Priority
- Already reflected as a [Priority] title prefix; adjust Compose Task Title.
- Status values
- flowlibs_status is a free-text String for demo simplicity; swap to a Choice column for production.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Resolve assignee's list (with fallback)
Maps assignee email to a Google list, falling back to default.
EXPR.02Deep link
Builds the record deep link.
EXPR.03Title with priority prefix
Optional [Priority] prefix on the task title.
EXPR.04Match record by completed task (Flow 2 filter)
OData filter matching the stored task id.
EXPR.05Completed-task fan-out (splitOn)
Fans each completed task into its own run.
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.