From d6ed05bc54ae503820e3f6c26b92d2bdc1bbea18 Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Thu, 23 Feb 2023 17:47:38 +0100 Subject: [PATCH 01/17] first commit --- .gitignore | 1 + .vscode/tasks.json | 13 + ...-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json | 564 ++++++++++++++++++ ...-F2784AEA-94B3-ED11-83FE-0022489ACD39.json | 97 +++ Task2Calendarpublisher/[Content_Types].xml | 1 + Task2Calendarpublisher/customizations.xml | 89 +++ Task2Calendarpublisher/solution.xml | 27 + 7 files changed, 792 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/tasks.json create mode 100644 Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json create mode 100644 Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json create mode 100644 Task2Calendarpublisher/[Content_Types].xml create mode 100644 Task2Calendarpublisher/customizations.xml create mode 100644 Task2Calendarpublisher/solution.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6f66c74 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.zip \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..4c33a99 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,13 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "cleanup, export and expand", + "type": "shell", + "command": "remove-item -recurse -force Task2Calendarpublisher; remove-item -force Task2Calendarpublisher.zip; pac org select --environment '4PS Deutschland'; pac solution export -n 'Task2Calendarpublisher' -p .; expand-archive Task2Calendarpublisher.zip;", + "problemMatcher": [] + } + ] +} \ No newline at end of file diff --git a/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json b/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json new file mode 100644 index 0000000..76f7434 --- /dev/null +++ b/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json @@ -0,0 +1,564 @@ +{ + "properties": { + "connectionReferences": { + "shared_office365": { + "runtimeSource": "embedded", + "connection": { + "connectionReferenceLogicalName": "tfe_sharedoffice365_e25fb" + }, + "api": { + "name": "shared_office365" + } + }, + "shared_todo": { + "runtimeSource": "embedded", + "connection": { + "connectionReferenceLogicalName": "tfe_sharedtodo_5d865" + }, + "api": { + "name": "shared_todo" + } + }, + "shared_planner": { + "runtimeSource": "embedded", + "connection": { + "connectionReferenceLogicalName": "tfe_sharedplanner_4c79e" + }, + "api": { + "name": "shared_planner" + } + } + }, + "definition": { + "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "$connections": { + "defaultValue": {}, + "type": "Object" + }, + "$authentication": { + "defaultValue": {}, + "type": "SecureObject" + } + }, + "triggers": { + "manual": { + "metadata": { + "operationMetadataId": "237d8917-d507-4e4f-9688-4d1c655949b0" + }, + "type": "Request", + "kind": "Button", + "inputs": { + "schema": { + "type": "object", + "properties": { + "date": { + "title": "Start date", + "type": "string", + "format": "date", + "x-ms-dynamically-added": true, + "description": "Please enter or select a date (YYYY-MM-DD)", + "x-ms-content-hint": "DATE" + }, + "date_1": { + "title": "End date", + "type": "string", + "format": "date", + "x-ms-dynamically-added": true, + "description": "Please enter or select a date (YYYY-MM-DD)", + "x-ms-content-hint": "DATE" + }, + "boolean": { + "title": "Delete existing calendar events", + "type": "boolean", + "x-ms-dynamically-added": true, + "description": "Please select yes or no", + "x-ms-content-hint": "BOOLEAN" + } + }, + "required": [ + "date", + "date_1", + "boolean" + ] + } + } + } + }, + "actions": { + "Check_if_existing_calendar_events_should_be_deleted": { + "actions": { + "Get_events_(V4)_with_task_category": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "0053ace6-ac9f-4804-b8a3-d1d4f6880fe9" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", + "connectionName": "shared_office365", + "operationId": "V4CalendarGetItems" + }, + "parameters": { + "table": "AAMkADNjNWUyNjQzLWMzZDctNGY5OS05OTg1LWY3MWUwOTRiYWI0ZgBGAAAAAADr45QAoSa2SL9Dz0xPh1ZVBwDjndJjIogISoDbRjKkDc89AAAAAAEGAADjndJjIogISoDbRjKkDc89AAAAAH6pAAA=", + "$filter": "categories/any(c:c+eq+'Tasks')" + }, + "authentication": { + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", + "type": "Raw" + } + } + }, + "Iterate_over_all_events_with_task_category": { + "foreach": "@outputs('Get_events_(V4)_with_task_category')?['body/value']", + "actions": { + "Check_if_calendar_event_is_in_date_range": { + "actions": { + "Delete_event_(V2)": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "db2f79ac-fe87-4a07-9779-f43d5c6634cc" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", + "connectionName": "shared_office365", + "operationId": "CalendarDeleteItem_V2" + }, + "parameters": { + "calendar": "AAMkADNjNWUyNjQzLWMzZDctNGY5OS05OTg1LWY3MWUwOTRiYWI0ZgBGAAAAAADr45QAoSa2SL9Dz0xPh1ZVBwDjndJjIogISoDbRjKkDc89AAAAAAEGAADjndJjIogISoDbRjKkDc89AAAAAH6pAAA=", + "event": "@items('Iterate_over_all_events_with_task_category')?['id']" + }, + "authentication": { + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", + "type": "Raw" + } + } + } + }, + "runAfter": {}, + "expression": { + "and": [ + { + "greaterOrEquals": [ + "@formatDateTime(items('Iterate_over_all_events_with_task_category')?['start'], 'yyyy-MM-dd', 'en-US')", + "@triggerBody()['date']" + ] + }, + { + "lessOrEquals": [ + "@formatDateTime(items('Iterate_over_all_events_with_task_category')?['end'], 'yyyy-MM-dd', 'en-US')", + "@triggerBody()['date_1']" + ] + } + ] + }, + "metadata": { + "operationMetadataId": "fe08f64c-c8e7-4f54-8c76-fbcdbff1576f" + }, + "type": "If" + } + }, + "runAfter": { + "Get_events_(V4)_with_task_category": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "1f5dcca4-dffa-444a-aa9a-4505a7f47726" + }, + "type": "Foreach" + } + }, + "runAfter": {}, + "expression": { + "equals": [ + "@triggerBody()['boolean']", + "@true" + ] + }, + "metadata": { + "operationMetadataId": "f66b6363-e7a9-42fc-a2ca-84b8bee12879" + }, + "type": "If" + }, + "List_all_to-do_lists_(V2)": { + "runAfter": { + "Check_if_existing_calendar_events_should_be_deleted": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "490c5b3a-0b81-40b1-8ebc-65ce6249ca44" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "apiId": "/providers/Microsoft.PowerApps/apis/shared_todo", + "connectionName": "shared_todo", + "operationId": "GetAllTodoListsV2" + }, + "parameters": {}, + "authentication": { + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", + "type": "Raw" + } + } + }, + "Iterate_over_all_To-Do_lists": { + "foreach": "@body('List_all_to-do_lists_(V2)')", + "actions": { + "List_to-do's_by_folder_(V2)": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "507c7b52-a1d3-4ab3-ba20-dda961bb6ac2" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "apiId": "/providers/Microsoft.PowerApps/apis/shared_todo", + "connectionName": "shared_todo", + "operationId": "ListToDosByFolderV2" + }, + "parameters": { + "folderId": "@items('Iterate_over_all_To-Do_lists')?['id']", + "$top": 999 + }, + "authentication": { + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", + "type": "Raw" + } + } + }, + "Iterate_over_all_tasks": { + "foreach": "@body('List_to-do''s_by_folder_(V2)')", + "actions": { + "Check_if_due_date_is_set": { + "actions": { + "Convert_time_zone_of_due_date": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "a95af025-b6e8-4d29-a68a-0df90706364b" + }, + "type": "Expression", + "kind": "ConvertTimeZone", + "inputs": { + "baseTime": "@{items('Iterate_over_all_tasks')?['dueDateTime/dateTime']}", + "formatString": "yyyy-MM-dd", + "sourceTimeZone": "UTC", + "destinationTimeZone": "Central Europe Standard Time" + } + }, + "Check_if_due_date_is_in_requested_range": { + "actions": { + "Create_event_(V4)_for_To-Do_task": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "08f27dcb-2e03-48e3-b9fc-10c796ec916f" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", + "connectionName": "shared_office365", + "operationId": "V4CalendarPostItem" + }, + "parameters": { + "table": "AAMkADNjNWUyNjQzLWMzZDctNGY5OS05OTg1LWY3MWUwOTRiYWI0ZgBGAAAAAADr45QAoSa2SL9Dz0xPh1ZVBwDjndJjIogISoDbRjKkDc89AAAAAAEGAADjndJjIogISoDbRjKkDc89AAAAAH6pAAA=", + "item/subject": "@items('Iterate_over_all_tasks')?['title']", + "item/start": "@concat(body('Convert_time_zone_of_due_date'), 'T06:00:00')", + "item/end": "@concat(body('Convert_time_zone_of_due_date'), 'T06:50:00')", + "item/timeZone": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", + "item/body": "

@{concat('https://to-do.office.com/tasks/id/', items('Iterate_over_all_tasks')?['id'], '/details')}

", + "item/isReminderOn": false, + "item/showAs": "free", + "item/sensitivity": "private" + }, + "authentication": { + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", + "type": "Raw" + } + } + }, + "Send_an_HTTP_request": { + "runAfter": { + "Create_event_(V4)_for_To-Do_task": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "430271fc-60de-4796-962c-e238b683bc8f" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", + "connectionName": "shared_office365", + "operationId": "HttpRequest" + }, + "parameters": { + "Uri": "https://graph.microsoft.com/v1.0/me/calendar/events/@{outputs('Create_event_(V4)_for_To-Do_task')?['body/id']}", + "Method": "PATCH", + "Body": "{\n \"subject\":\"☑️ @{outputs('Create_event_(V4)_for_To-Do_task')?['body/subject']}\",\n \"categories\":[\"Tasks\"]\n}", + "ContentType": "application/json" + }, + "authentication": { + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", + "type": "Raw" + } + } + } + }, + "runAfter": { + "Convert_time_zone_of_due_date": [ + "Succeeded" + ] + }, + "expression": { + "and": [ + { + "greaterOrEquals": [ + "@body('Convert_time_zone_of_due_date')", + "@triggerBody()['date']" + ] + }, + { + "lessOrEquals": [ + "@body('Convert_time_zone_of_due_date')", + "@triggerBody()['date_1']" + ] + } + ] + }, + "metadata": { + "operationMetadataId": "19df881f-348f-423f-a143-9bcb0a90d5ad" + }, + "type": "If" + } + }, + "runAfter": {}, + "expression": { + "equals": [ + "@empty(item()?['dueDateTime/dateTime'])", + "@false" + ] + }, + "metadata": { + "operationMetadataId": "1eb37813-d054-4a78-bc08-480a57c0d854" + }, + "type": "If" + } + }, + "runAfter": { + "List_to-do's_by_folder_(V2)": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "98498ec6-fd49-4d08-9285-a48cc7671189" + }, + "type": "Foreach" + } + }, + "runAfter": { + "List_all_to-do_lists_(V2)": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "10c99965-0f08-402a-8e7c-319be0a9d216" + }, + "type": "Foreach" + }, + "List_my_tasks": { + "runAfter": { + "Check_if_existing_calendar_events_should_be_deleted": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "872ba8da-9f1b-450e-adf4-0ea79c84a837" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "apiId": "/providers/Microsoft.PowerApps/apis/shared_planner", + "connectionName": "shared_planner", + "operationId": "ListMyTasks_V2" + }, + "parameters": {}, + "authentication": { + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", + "type": "Raw" + } + } + }, + "Iterate_over_all_my_Planner_tasks": { + "foreach": "@outputs('List_my_tasks')?['body/value']", + "actions": { + "Condition": { + "actions": { + "Convert_time_zone_of_due_date_2": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "a95af025-b6e8-4d29-a68a-0df90706364b" + }, + "type": "Expression", + "kind": "ConvertTimeZone", + "inputs": { + "baseTime": "@items('Iterate_over_all_my_Planner_tasks')?['dueDateTime']", + "formatString": "yyyy-MM-dd", + "sourceTimeZone": "UTC", + "destinationTimeZone": "Central Europe Standard Time" + } + }, + "Check_if_due_date_is_in_requested_range_2": { + "actions": { + "Create_event_(V4)_for_To-Do_task_2": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "08f27dcb-2e03-48e3-b9fc-10c796ec916f" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", + "connectionName": "shared_office365", + "operationId": "V4CalendarPostItem" + }, + "parameters": { + "table": "AAMkADNjNWUyNjQzLWMzZDctNGY5OS05OTg1LWY3MWUwOTRiYWI0ZgBGAAAAAADr45QAoSa2SL9Dz0xPh1ZVBwDjndJjIogISoDbRjKkDc89AAAAAAEGAADjndJjIogISoDbRjKkDc89AAAAAH6pAAA=", + "item/subject": "@items('Iterate_over_all_my_Planner_tasks')?['title']", + "item/start": "@concat(body('Convert_time_zone_of_due_date_2'), 'T06:00:00')", + "item/end": "@concat(body('Convert_time_zone_of_due_date_2'), 'T06:50:00')", + "item/timeZone": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", + "item/body": "

@{concat('https://tasks.office.com/4psede.onmicrosoft.com/Home/Task/', items('Iterate_over_all_my_planner_tasks')?['id'])}

", + "item/isReminderOn": false, + "item/showAs": "free", + "item/sensitivity": "private" + }, + "authentication": { + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", + "type": "Raw" + } + } + }, + "Send_an_HTTP_request_2": { + "runAfter": { + "Create_event_(V4)_for_To-Do_task_2": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "6d669b1e-807b-4ac8-b4f3-c4b1001f7f39" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", + "connectionName": "shared_office365", + "operationId": "HttpRequest" + }, + "parameters": { + "Uri": "https://graph.microsoft.com/v1.0/me/calendar/events/@{outputs('Create_event_(V4)_for_To-Do_task_2')?['body/id']}", + "Method": "PATCH", + "Body": "{\n \"subject\":\"☑️ @{outputs('Create_event_(V4)_for_To-Do_task_2')?['body/subject']}\",\n \"categories\":[\"Tasks\"]\n}", + "ContentType": "application/json" + }, + "authentication": { + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", + "type": "Raw" + } + } + } + }, + "runAfter": { + "Convert_time_zone_of_due_date_2": [ + "Succeeded" + ] + }, + "expression": { + "and": [ + { + "greaterOrEquals": [ + "@body('Convert_time_zone_of_due_date_2')", + "@triggerBody()['date']" + ] + }, + { + "lessOrEquals": [ + "@body('Convert_time_zone_of_due_date_2')", + "@triggerBody()['date_1']" + ] + } + ] + }, + "metadata": { + "operationMetadataId": "19df881f-348f-423f-a143-9bcb0a90d5ad" + }, + "type": "If" + } + }, + "runAfter": {}, + "expression": { + "equals": [ + "@empty(items('Iterate_over_all_my_Planner_tasks')?['dueDateTime'])", + "@false" + ] + }, + "metadata": { + "operationMetadataId": "19df881f-348f-423f-a143-9bcb0a90d5ad" + }, + "type": "If" + } + }, + "runAfter": { + "List_my_tasks": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "57758642-f75f-4db5-ae34-be9ac0c496e5" + }, + "type": "Foreach" + }, + "Respond_to_a_PowerApp_or_flow": { + "runAfter": { + "Iterate_over_all_To-Do_lists": [ + "Succeeded" + ], + "Iterate_over_all_my_Planner_tasks": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "175a7f94-0607-4dd7-bc54-62a061ced9c6" + }, + "type": "Response", + "kind": "PowerApp", + "inputs": { + "statusCode": 200, + "body": { + "done": "yes" + }, + "schema": { + "type": "object", + "properties": { + "done": { + "title": "Done", + "x-ms-dynamically-added": true, + "type": "boolean" + } + } + } + } + } + } + }, + "templateName": null + }, + "schemaVersion": "1.0.0.0" +} \ No newline at end of file diff --git a/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json b/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json new file mode 100644 index 0000000..946f32f --- /dev/null +++ b/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json @@ -0,0 +1,97 @@ +{ + "properties": { + "connectionReferences": {}, + "definition": { + "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "$authentication": { + "defaultValue": {}, + "type": "SecureObject" + } + }, + "triggers": { + "Recurrence": { + "recurrence": { + "frequency": "Week", + "interval": 1, + "timeZone": "W. Europe Standard Time", + "startTime": "2023-02-26T01:01:01", + "schedule": { + "weekDays": [ + "Sunday" + ], + "hours": [ + "18" + ], + "minutes": [ + 0 + ] + } + }, + "metadata": { + "operationMetadataId": "7fa0b082-88c5-41ed-b1aa-5ec427ae424f" + }, + "type": "Recurrence" + } + }, + "actions": { + "Run_manual_Task2Calendar_flow": { + "runAfter": { + "Create_end_date": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "0b7f593d-02e3-4dcf-a268-65c9f7d49157" + }, + "type": "Workflow", + "inputs": { + "host": { + "workflowReferenceName": "b8befeee-91b3-ed11-83fe-0022489acd39" + }, + "body": { + "date": "@body('Create_start_date')", + "date_1": "@body('Create_end_date')", + "boolean": true + } + } + }, + "Create_start_date": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "843237e7-66e7-47f6-9954-5485f1e82d02" + }, + "type": "Expression", + "kind": "ConvertTimeZone", + "inputs": { + "baseTime": "@{addDays(utcNow(),1)}", + "formatString": "yyyy-MM-dd", + "sourceTimeZone": "UTC", + "destinationTimeZone": "W. Europe Standard Time" + } + }, + "Create_end_date": { + "runAfter": { + "Create_start_date": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "a4f2c942-e535-44bf-9676-369713e53a5d" + }, + "type": "Expression", + "kind": "ConvertTimeZone", + "inputs": { + "baseTime": "@{addDays(utcNow(),10)}", + "formatString": "yyyy-MM-dd", + "sourceTimeZone": "UTC", + "destinationTimeZone": "W. Europe Standard Time" + } + } + } + }, + "templateName": null + }, + "schemaVersion": "1.0.0.0" +} \ No newline at end of file diff --git a/Task2Calendarpublisher/[Content_Types].xml b/Task2Calendarpublisher/[Content_Types].xml new file mode 100644 index 0000000..70428b9 --- /dev/null +++ b/Task2Calendarpublisher/[Content_Types].xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Task2Calendarpublisher/customizations.xml b/Task2Calendarpublisher/customizations.xml new file mode 100644 index 0000000..2da7555 --- /dev/null +++ b/Task2Calendarpublisher/customizations.xml @@ -0,0 +1,89 @@ + + + + + + /Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json + 1 + 0 + 5 + 0 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 1 + 1.0.0.0 + 1 + 0 + none + + + + + + /Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json + 1 + 0 + 5 + 0 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 1 + 1.0.0.0 + 1 + 0 + none + + + + + + + + + + + + + + + + Office 365 Outlook Task2Calendarpublisher-e25fb + /providers/Microsoft.PowerApps/apis/shared_office365 + 1 + 0 + 1 + + + Planner Task2Calendarpublisher-4c79e + /providers/Microsoft.PowerApps/apis/shared_planner + 1 + 0 + 1 + + + Microsoft To-Do (Business) Task2Calendarpublisher-5d865 + /providers/Microsoft.PowerApps/apis/shared_todo + 1 + 0 + 1 + + + + 1033 + 1031 + + \ No newline at end of file diff --git a/Task2Calendarpublisher/solution.xml b/Task2Calendarpublisher/solution.xml new file mode 100644 index 0000000..94f6ef9 --- /dev/null +++ b/Task2Calendarpublisher/solution.xml @@ -0,0 +1,27 @@ + + + Task2Calendarpublisher + + + + + 1.0.0.0 + 0 + + PublisherTFE + + + + + + + tfe + 92963 + + + + + + + + \ No newline at end of file From bc3971beb7fa3ec8e946ac7ed39547153c703707 Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Thu, 23 Feb 2023 18:11:24 +0100 Subject: [PATCH 02/17] handle different tenants --- .vscode/tasks.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 4c33a99..05e0f6f 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,9 +4,15 @@ "version": "2.0.0", "tasks": [ { - "label": "cleanup, export and expand", + "label": "cleanup, export and expand from 4PS Deutschland", "type": "shell", - "command": "remove-item -recurse -force Task2Calendarpublisher; remove-item -force Task2Calendarpublisher.zip; pac org select --environment '4PS Deutschland'; pac solution export -n 'Task2Calendarpublisher' -p .; expand-archive Task2Calendarpublisher.zip;", + "command": "remove-item -recurse -force Task2Calendarpublisher; remove-item -force Task2Calendarpublisher.zip; pac auth select -i 1; pac org select --environment '4PS Deutschland'; pac solution export -n 'Task2Calendarpublisher' -p .; expand-archive Task2Calendarpublisher.zip;", + "problemMatcher": [] + }, + { + "label": "import to ars solvendi", + "type": "shell", + "command": "pac auth select -i 2; pac org select --environment 'ars solvendi'; pac solution import -p Task2Calendarpublisher.zip", "problemMatcher": [] } ] From 743c8c51d89e386b81819e8ec3e3d6277858590b Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Thu, 23 Feb 2023 19:53:25 +0100 Subject: [PATCH 03/17] use name --- .vscode/tasks.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 05e0f6f..529f694 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -6,13 +6,13 @@ { "label": "cleanup, export and expand from 4PS Deutschland", "type": "shell", - "command": "remove-item -recurse -force Task2Calendarpublisher; remove-item -force Task2Calendarpublisher.zip; pac auth select -i 1; pac org select --environment '4PS Deutschland'; pac solution export -n 'Task2Calendarpublisher' -p .; expand-archive Task2Calendarpublisher.zip;", + "command": "remove-item -recurse -force Task2Calendarpublisher; remove-item -force Task2Calendarpublisher.zip; pac auth select -n '4PS DE'; pac org select --environment '4PS Deutschland'; pac solution export -n 'Task2Calendarpublisher' -p .; expand-archive Task2Calendarpublisher.zip;", "problemMatcher": [] }, { "label": "import to ars solvendi", "type": "shell", - "command": "pac auth select -i 2; pac org select --environment 'ars solvendi'; pac solution import -p Task2Calendarpublisher.zip", + "command": "pac auth select -n 'ars solvendi'; pac org select --environment 'ars solvendi'; pac solution import -p Task2Calendarpublisher.zip", "problemMatcher": [] } ] From 9f39af5b4e2b35ff936d0fc901227906e8dc9a13 Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Thu, 23 Feb 2023 20:32:20 +0100 Subject: [PATCH 04/17] exported --- settings.json | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 settings.json diff --git a/settings.json b/settings.json new file mode 100644 index 0000000..5b2c115 --- /dev/null +++ b/settings.json @@ -0,0 +1,33 @@ +{ + "EnvironmentVariables": [], + "ConnectionReferences": [ + { + "LogicalName": "tfe_sharedoffice365_e25fb", + "ConnectionId": "", + "ConnectorId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, + { + "LogicalName": "tfe_sharedplanner_4c79e", + "ConnectionId": "", + "ConnectorId": "/providers/Microsoft.PowerApps/apis/shared_planner" + }, + { + "LogicalName": "tfe_sharedtodo_5d865", + "ConnectionId": "", + "ConnectorId": "/providers/Microsoft.PowerApps/apis/shared_todo" + } + ], + "Workflows": [ + { + "Name": "Task2Calendar Manual Flow", + "WorkflowId": "b8befeee-91b3-ed11-83fe-0022489acd39", + "UserEmail": "" + }, + { + "Name": "Task2Calendar Scheduled Flow", + "WorkflowId": "f2784aea-94b3-ed11-83fe-0022489acd39", + "UserEmail": "" + } + ], + "CanvasApps": [] +} \ No newline at end of file From cd6197923b08947c8bc7619e1493523b3451dfef Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Sat, 25 Feb 2023 11:52:46 +0100 Subject: [PATCH 05/17] ignore env-specific settings --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6f66c74..4da2a9c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -*.zip \ No newline at end of file +*.zip +settings_*.json \ No newline at end of file From 522c22480b904e0db351243b94565efb64565d75 Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Sat, 25 Feb 2023 11:53:04 +0100 Subject: [PATCH 06/17] add settings and 4PS import --- .vscode/tasks.json | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 529f694..1b8c4d4 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,15 +4,27 @@ "version": "2.0.0", "tasks": [ { - "label": "cleanup, export and expand from 4PS Deutschland", + "label": "cleanup, export and expand from 4PS (default)", "type": "shell", - "command": "remove-item -recurse -force Task2Calendarpublisher; remove-item -force Task2Calendarpublisher.zip; pac auth select -n '4PS DE'; pac org select --environment '4PS Deutschland'; pac solution export -n 'Task2Calendarpublisher' -p .; expand-archive Task2Calendarpublisher.zip;", + "command": "remove-item -recurse -force Task2Calendarpublisher; remove-item -force Task2Calendarpublisher.zip; pac auth select -n '4PS DE'; pac org select --environment '4PS (default)'; pac solution export -n 'Task2Calendarpublisher' -p .; expand-archive Task2Calendarpublisher.zip;", "problemMatcher": [] }, { "label": "import to ars solvendi", "type": "shell", - "command": "pac auth select -n 'ars solvendi'; pac org select --environment 'ars solvendi'; pac solution import -p Task2Calendarpublisher.zip", + "command": "pac auth select -n 'ars solvendi'; pac org select --environment 'ars solvendi'; pac solution import -p Task2Calendarpublisher.zip --settings-file settings_ars-solvendi.json", + "problemMatcher": [] + }, + { + "label": "import to 4PS", + "type": "shell", + "command": "pac auth select -n '4PS DE'; pac org select --environment '4PS (default)'; pac solution import -p Task2Calendarpublisher.zip --settings-file settings_4PS.json", + "problemMatcher": [] + }, + { + "label": "create settings", + "type": "shell", + "command": "pac solution create-settings -s settings.json -z Task2Calendarpublisher.zip", "problemMatcher": [] } ] From e9751e0b72df6db133cb97270bad94ed6190e3ed Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Sat, 25 Feb 2023 11:53:52 +0100 Subject: [PATCH 07/17] get default calendar id dynamically --- ...-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json | 140 ++++++++++++------ Task2Calendarpublisher/customizations.xml | 15 +- Task2Calendarpublisher/solution.xml | 14 +- 3 files changed, 115 insertions(+), 54 deletions(-) diff --git a/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json b/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json index 76f7434..01610f3 100644 --- a/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json +++ b/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json @@ -27,6 +27,15 @@ "api": { "name": "shared_planner" } + }, + "shared_office365_1": { + "runtimeSource": "invoker", + "connection": { + "connectionReferenceLogicalName": "new_sharedoffice365_7bb9b" + }, + "api": { + "name": "shared_office365" + } } }, "definition": { @@ -97,17 +106,17 @@ "type": "OpenApiConnection", "inputs": { "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", "connectionName": "shared_office365", - "operationId": "V4CalendarGetItems" + "operationId": "V4CalendarGetItems", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" }, "parameters": { - "table": "AAMkADNjNWUyNjQzLWMzZDctNGY5OS05OTg1LWY3MWUwOTRiYWI0ZgBGAAAAAADr45QAoSa2SL9Dz0xPh1ZVBwDjndJjIogISoDbRjKkDc89AAAAAAEGAADjndJjIogISoDbRjKkDc89AAAAAH6pAAA=", + "table": "@variables('calendar-id')", "$filter": "categories/any(c:c+eq+'Tasks')" }, "authentication": { - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", - "type": "Raw" + "type": "Raw", + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" } } }, @@ -124,17 +133,17 @@ "type": "OpenApiConnection", "inputs": { "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", "connectionName": "shared_office365", - "operationId": "CalendarDeleteItem_V2" + "operationId": "CalendarDeleteItem_V2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" }, "parameters": { - "calendar": "AAMkADNjNWUyNjQzLWMzZDctNGY5OS05OTg1LWY3MWUwOTRiYWI0ZgBGAAAAAADr45QAoSa2SL9Dz0xPh1ZVBwDjndJjIogISoDbRjKkDc89AAAAAAEGAADjndJjIogISoDbRjKkDc89AAAAAH6pAAA=", + "calendar": "@variables('calendar-id')", "event": "@items('Iterate_over_all_events_with_task_category')?['id']" }, "authentication": { - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", - "type": "Raw" + "type": "Raw", + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" } } } @@ -173,7 +182,11 @@ "type": "Foreach" } }, - "runAfter": {}, + "runAfter": { + "Initialize_variable": [ + "Succeeded" + ] + }, "expression": { "equals": [ "@triggerBody()['boolean']", @@ -197,14 +210,14 @@ "type": "OpenApiConnection", "inputs": { "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_todo", "connectionName": "shared_todo", - "operationId": "GetAllTodoListsV2" + "operationId": "GetAllTodoListsV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_todo" }, "parameters": {}, "authentication": { - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", - "type": "Raw" + "type": "Raw", + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" } } }, @@ -219,17 +232,17 @@ "type": "OpenApiConnection", "inputs": { "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_todo", "connectionName": "shared_todo", - "operationId": "ListToDosByFolderV2" + "operationId": "ListToDosByFolderV2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_todo" }, "parameters": { "folderId": "@items('Iterate_over_all_To-Do_lists')?['id']", "$top": 999 }, "authentication": { - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", - "type": "Raw" + "type": "Raw", + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" } } }, @@ -262,12 +275,12 @@ "type": "OpenApiConnection", "inputs": { "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", "connectionName": "shared_office365", - "operationId": "V4CalendarPostItem" + "operationId": "V4CalendarPostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" }, "parameters": { - "table": "AAMkADNjNWUyNjQzLWMzZDctNGY5OS05OTg1LWY3MWUwOTRiYWI0ZgBGAAAAAADr45QAoSa2SL9Dz0xPh1ZVBwDjndJjIogISoDbRjKkDc89AAAAAAEGAADjndJjIogISoDbRjKkDc89AAAAAH6pAAA=", + "table": "@variables('calendar-id')", "item/subject": "@items('Iterate_over_all_tasks')?['title']", "item/start": "@concat(body('Convert_time_zone_of_due_date'), 'T06:00:00')", "item/end": "@concat(body('Convert_time_zone_of_due_date'), 'T06:50:00')", @@ -278,8 +291,8 @@ "item/sensitivity": "private" }, "authentication": { - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", - "type": "Raw" + "type": "Raw", + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" } } }, @@ -295,9 +308,9 @@ "type": "OpenApiConnection", "inputs": { "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", "connectionName": "shared_office365", - "operationId": "HttpRequest" + "operationId": "HttpRequest", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" }, "parameters": { "Uri": "https://graph.microsoft.com/v1.0/me/calendar/events/@{outputs('Create_event_(V4)_for_To-Do_task')?['body/id']}", @@ -306,8 +319,8 @@ "ContentType": "application/json" }, "authentication": { - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", - "type": "Raw" + "type": "Raw", + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" } } } @@ -385,14 +398,14 @@ "type": "OpenApiConnection", "inputs": { "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_planner", "connectionName": "shared_planner", - "operationId": "ListMyTasks_V2" + "operationId": "ListMyTasks_V2", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_planner" }, "parameters": {}, "authentication": { - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", - "type": "Raw" + "type": "Raw", + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" } } }, @@ -425,12 +438,12 @@ "type": "OpenApiConnection", "inputs": { "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", "connectionName": "shared_office365", - "operationId": "V4CalendarPostItem" + "operationId": "V4CalendarPostItem", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" }, "parameters": { - "table": "AAMkADNjNWUyNjQzLWMzZDctNGY5OS05OTg1LWY3MWUwOTRiYWI0ZgBGAAAAAADr45QAoSa2SL9Dz0xPh1ZVBwDjndJjIogISoDbRjKkDc89AAAAAAEGAADjndJjIogISoDbRjKkDc89AAAAAH6pAAA=", + "table": "@variables('calendar-id')", "item/subject": "@items('Iterate_over_all_my_Planner_tasks')?['title']", "item/start": "@concat(body('Convert_time_zone_of_due_date_2'), 'T06:00:00')", "item/end": "@concat(body('Convert_time_zone_of_due_date_2'), 'T06:50:00')", @@ -441,8 +454,8 @@ "item/sensitivity": "private" }, "authentication": { - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", - "type": "Raw" + "type": "Raw", + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" } } }, @@ -458,9 +471,9 @@ "type": "OpenApiConnection", "inputs": { "host": { - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", "connectionName": "shared_office365", - "operationId": "HttpRequest" + "operationId": "HttpRequest", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" }, "parameters": { "Uri": "https://graph.microsoft.com/v1.0/me/calendar/events/@{outputs('Create_event_(V4)_for_To-Do_task_2')?['body/id']}", @@ -469,8 +482,8 @@ "ContentType": "application/json" }, "authentication": { - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", - "type": "Raw" + "type": "Raw", + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" } } } @@ -555,10 +568,53 @@ } } } + }, + "Get_default_calendar_id": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "130db0a1-8a5e-49bc-b1b9-e9862875375c" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_office365_1", + "operationId": "HttpRequest", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, + "parameters": { + "Uri": "https://graph.microsoft.com/v1.0/me/calendar", + "Method": "GET", + "ContentType": "application/json" + }, + "authentication": { + "type": "Raw", + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" + } + } + }, + "Initialize_variable": { + "runAfter": { + "Get_default_calendar_id": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "199a342f-075c-45c4-b52b-60aad779ca5c" + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "calendar-id", + "type": "string", + "value": "@{body('get_default_calendar_id')?['id']}" + } + ] + } } } }, - "templateName": null + "templateName": "" }, "schemaVersion": "1.0.0.0" } \ No newline at end of file diff --git a/Task2Calendarpublisher/customizations.xml b/Task2Calendarpublisher/customizations.xml index 2da7555..f8348e4 100644 --- a/Task2Calendarpublisher/customizations.xml +++ b/Task2Calendarpublisher/customizations.xml @@ -20,10 +20,10 @@ 1 1.0.0.0 1 - 0 + 1 none - + @@ -38,16 +38,16 @@ 0 0 0 - 1 - 2 + 0 + 1 1 1 1.0.0.0 1 - 0 + 1 none - + @@ -83,7 +83,6 @@ - 1033 - 1031 + 1043 \ No newline at end of file diff --git a/Task2Calendarpublisher/solution.xml b/Task2Calendarpublisher/solution.xml index 94f6ef9..eaa2582 100644 --- a/Task2Calendarpublisher/solution.xml +++ b/Task2Calendarpublisher/solution.xml @@ -1,8 +1,8 @@ - + Task2Calendarpublisher - + 1.0.0.0 @@ -10,18 +10,24 @@ PublisherTFE - + tfe 92963 + - + + + + + + \ No newline at end of file From 20f2a45d4e91ec25bc7563279f95aefd88637614 Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Sat, 25 Feb 2023 12:03:30 +0100 Subject: [PATCH 08/17] fix reference --- ...nualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json | 11 +---------- Task2Calendarpublisher/solution.xml | 7 +------ 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json b/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json index 01610f3..3ae82e2 100644 --- a/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json +++ b/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json @@ -27,15 +27,6 @@ "api": { "name": "shared_planner" } - }, - "shared_office365_1": { - "runtimeSource": "invoker", - "connection": { - "connectionReferenceLogicalName": "new_sharedoffice365_7bb9b" - }, - "api": { - "name": "shared_office365" - } } }, "definition": { @@ -577,7 +568,7 @@ "type": "OpenApiConnection", "inputs": { "host": { - "connectionName": "shared_office365_1", + "connectionName": "shared_office365", "operationId": "HttpRequest", "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" }, diff --git a/Task2Calendarpublisher/solution.xml b/Task2Calendarpublisher/solution.xml index eaa2582..e4a393f 100644 --- a/Task2Calendarpublisher/solution.xml +++ b/Task2Calendarpublisher/solution.xml @@ -23,11 +23,6 @@ - - - - - - + \ No newline at end of file From 37f07e175442ec2294f16b6e19388c4bb89a2f62 Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Sat, 25 Feb 2023 21:32:36 +0100 Subject: [PATCH 09/17] Create README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..1ddb0b0 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Task2Calendar + +A Power Automate flow to add calendar entries for all your To-Do and Planner tasks. More details at https://tobiasfenster.io/adding-all-your-to-do-and-planner-tasks-to-your-calendar-with-power-automate From 1c70d0d6c22157da6cf78b413656d4afb754b05e Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Sat, 4 Mar 2023 23:19:57 +0100 Subject: [PATCH 10/17] do only incremental changes --- ...-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json | 149 +++++++++++++----- Task2Calendarpublisher/solution.xml | 2 +- 2 files changed, 110 insertions(+), 41 deletions(-) diff --git a/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json b/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json index 3ae82e2..c24659f 100644 --- a/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json +++ b/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json @@ -89,28 +89,6 @@ "actions": { "Check_if_existing_calendar_events_should_be_deleted": { "actions": { - "Get_events_(V4)_with_task_category": { - "runAfter": {}, - "metadata": { - "operationMetadataId": "0053ace6-ac9f-4804-b8a3-d1d4f6880fe9" - }, - "type": "OpenApiConnection", - "inputs": { - "host": { - "connectionName": "shared_office365", - "operationId": "V4CalendarGetItems", - "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" - }, - "parameters": { - "table": "@variables('calendar-id')", - "$filter": "categories/any(c:c+eq+'Tasks')" - }, - "authentication": { - "type": "Raw", - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" - } - } - }, "Iterate_over_all_events_with_task_category": { "foreach": "@outputs('Get_events_(V4)_with_task_category')?['body/value']", "actions": { @@ -162,11 +140,7 @@ "type": "If" } }, - "runAfter": { - "Get_events_(V4)_with_task_category": [ - "Succeeded" - ] - }, + "runAfter": {}, "metadata": { "operationMetadataId": "1f5dcca4-dffa-444a-aa9a-4505a7f47726" }, @@ -174,10 +148,35 @@ } }, "runAfter": { - "Initialize_variable": [ + "Initialize_variable_2": [ "Succeeded" ] }, + "else": { + "actions": { + "Remember_all_subjects": { + "foreach": "@outputs('Get_events_(V4)_with_task_category')?['body/value']", + "actions": { + "Append_to_array_variable": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "9a5980d8-c521-4ec6-9710-733dd96aa174" + }, + "type": "AppendToArrayVariable", + "inputs": { + "name": "eventSubjects", + "value": "@items('Remember_all_subjects')?['subject']" + } + } + }, + "runAfter": {}, + "metadata": { + "operationMetadataId": "c6df4440-5e66-4649-a52d-6aaa0ecf2681" + }, + "type": "Foreach" + } + } + }, "expression": { "equals": [ "@triggerBody()['boolean']", @@ -240,7 +239,7 @@ "Iterate_over_all_tasks": { "foreach": "@body('List_to-do''s_by_folder_(V2)')", "actions": { - "Check_if_due_date_is_set": { + "Check_if_due_date_is_set_and_event_doesn't_already_exist": { "actions": { "Convert_time_zone_of_due_date": { "runAfter": {}, @@ -272,7 +271,7 @@ }, "parameters": { "table": "@variables('calendar-id')", - "item/subject": "@items('Iterate_over_all_tasks')?['title']", + "item/subject": "☑️ @{item()?['title']}", "item/start": "@concat(body('Convert_time_zone_of_due_date'), 'T06:00:00')", "item/end": "@concat(body('Convert_time_zone_of_due_date'), 'T06:50:00')", "item/timeZone": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", @@ -306,7 +305,7 @@ "parameters": { "Uri": "https://graph.microsoft.com/v1.0/me/calendar/events/@{outputs('Create_event_(V4)_for_To-Do_task')?['body/id']}", "Method": "PATCH", - "Body": "{\n \"subject\":\"☑️ @{outputs('Create_event_(V4)_for_To-Do_task')?['body/subject']}\",\n \"categories\":[\"Tasks\"]\n}", + "Body": "{\n \"categories\":[\"Tasks\"]\n}", "ContentType": "application/json" }, "authentication": { @@ -345,9 +344,21 @@ }, "runAfter": {}, "expression": { - "equals": [ - "@empty(item()?['dueDateTime/dateTime'])", - "@false" + "and": [ + { + "equals": [ + "@empty(item()?['dueDateTime/dateTime'])", + "@false" + ] + }, + { + "not": { + "contains": [ + "@variables('eventSubjects')", + "@concat('☑️ ', items('Iterate_over_all_tasks')?['title'])" + ] + } + } ] }, "metadata": { @@ -403,7 +414,7 @@ "Iterate_over_all_my_Planner_tasks": { "foreach": "@outputs('List_my_tasks')?['body/value']", "actions": { - "Condition": { + "Check_if_due_date_is_set_and_event_doesn't_already_exist_2": { "actions": { "Convert_time_zone_of_due_date_2": { "runAfter": {}, @@ -435,7 +446,7 @@ }, "parameters": { "table": "@variables('calendar-id')", - "item/subject": "@items('Iterate_over_all_my_Planner_tasks')?['title']", + "item/subject": "☑️ @{items('Iterate_over_all_my_Planner_tasks')?['title']}", "item/start": "@concat(body('Convert_time_zone_of_due_date_2'), 'T06:00:00')", "item/end": "@concat(body('Convert_time_zone_of_due_date_2'), 'T06:50:00')", "item/timeZone": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", @@ -469,7 +480,7 @@ "parameters": { "Uri": "https://graph.microsoft.com/v1.0/me/calendar/events/@{outputs('Create_event_(V4)_for_To-Do_task_2')?['body/id']}", "Method": "PATCH", - "Body": "{\n \"subject\":\"☑️ @{outputs('Create_event_(V4)_for_To-Do_task_2')?['body/subject']}\",\n \"categories\":[\"Tasks\"]\n}", + "Body": "{\n \"categories\":[\"Tasks\"]\n}", "ContentType": "application/json" }, "authentication": { @@ -508,9 +519,21 @@ }, "runAfter": {}, "expression": { - "equals": [ - "@empty(items('Iterate_over_all_my_Planner_tasks')?['dueDateTime'])", - "@false" + "and": [ + { + "equals": [ + "@empty(items('Iterate_over_all_my_Planner_tasks')?['dueDateTime'])", + "@false" + ] + }, + { + "not": { + "contains": [ + "@variables('eventSubjects')", + "@concat('☑️ ', items('Iterate_over_all_my_Planner_tasks')?['title'])" + ] + } + } ] }, "metadata": { @@ -602,6 +625,52 @@ } ] } + }, + "Get_events_(V4)_with_task_category": { + "runAfter": { + "Initialize_variable": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "0053ace6-ac9f-4804-b8a3-d1d4f6880fe9" + }, + "type": "OpenApiConnection", + "inputs": { + "host": { + "connectionName": "shared_office365", + "operationId": "V4CalendarGetItems", + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365" + }, + "parameters": { + "table": "@variables('calendar-id')", + "$filter": "categories/any(c:c+eq+'Tasks') and start/dateTime gt '@{triggerBody()['date']}T00:00:00' and end/dateTime lt '@{triggerBody()['date_1']}T23:59:59'" + }, + "authentication": { + "type": "Raw", + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']" + } + } + }, + "Initialize_variable_2": { + "runAfter": { + "Get_events_(V4)_with_task_category": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "664d1192-331f-4677-b706-4598322c662c" + }, + "type": "InitializeVariable", + "inputs": { + "variables": [ + { + "name": "eventSubjects", + "type": "array", + "value": [] + } + ] + } } } }, diff --git a/Task2Calendarpublisher/solution.xml b/Task2Calendarpublisher/solution.xml index e4a393f..125750e 100644 --- a/Task2Calendarpublisher/solution.xml +++ b/Task2Calendarpublisher/solution.xml @@ -1,4 +1,4 @@ - + Task2Calendarpublisher From 96100bfa37bf4de3c924d770eaa5200d230f7e3e Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Mon, 6 Mar 2023 13:56:35 +0100 Subject: [PATCH 11/17] run daily --- ...ScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json b/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json index 946f32f..2d5e7d0 100644 --- a/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json +++ b/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json @@ -13,14 +13,11 @@ "triggers": { "Recurrence": { "recurrence": { - "frequency": "Week", + "frequency": "Day", "interval": 1, "timeZone": "W. Europe Standard Time", "startTime": "2023-02-26T01:01:01", "schedule": { - "weekDays": [ - "Sunday" - ], "hours": [ "18" ], @@ -91,7 +88,7 @@ } } }, - "templateName": null + "templateName": "" }, "schemaVersion": "1.0.0.0" } \ No newline at end of file From 55b9b6962c8baf9f6a25839644f1431c3571e649 Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Mon, 6 Mar 2023 13:56:44 +0100 Subject: [PATCH 12/17] check if task is done --- ...w-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json b/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json index c24659f..d6bf327 100644 --- a/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json +++ b/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json @@ -239,7 +239,7 @@ "Iterate_over_all_tasks": { "foreach": "@body('List_to-do''s_by_folder_(V2)')", "actions": { - "Check_if_due_date_is_set_and_event_doesn't_already_exist": { + "Check_due_date_is_set,_event_doesn't_exist,_task_not_completed": { "actions": { "Convert_time_zone_of_due_date": { "runAfter": {}, @@ -358,6 +358,14 @@ "@concat('☑️ ', items('Iterate_over_all_tasks')?['title'])" ] } + }, + { + "not": { + "equals": [ + "@item()?['status']", + "completed" + ] + } } ] }, @@ -414,7 +422,7 @@ "Iterate_over_all_my_Planner_tasks": { "foreach": "@outputs('List_my_tasks')?['body/value']", "actions": { - "Check_if_due_date_is_set_and_event_doesn't_already_exist_2": { + "Check_due_date_is_set,_event_doesn't_exist,_task_not_completed_2": { "actions": { "Convert_time_zone_of_due_date_2": { "runAfter": {}, @@ -533,6 +541,12 @@ "@concat('☑️ ', items('Iterate_over_all_my_Planner_tasks')?['title'])" ] } + }, + { + "less": [ + "@items('Iterate_over_all_my_Planner_tasks')?['percentComplete']", + 100 + ] } ] }, From 5f40a2415b5026a57481226bf28b0f35ca44fb6a Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Mon, 6 Mar 2023 13:56:53 +0100 Subject: [PATCH 13/17] chore --- Task2Calendarpublisher/customizations.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Task2Calendarpublisher/customizations.xml b/Task2Calendarpublisher/customizations.xml index f8348e4..88f90f8 100644 --- a/Task2Calendarpublisher/customizations.xml +++ b/Task2Calendarpublisher/customizations.xml @@ -38,8 +38,8 @@ 0 0 0 - 0 - 1 + 1 + 2 1 1 1.0.0.0 From 0e0bc8eb15b65e29434729761f15c2161f581472 Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Fri, 17 Mar 2023 21:46:47 +0100 Subject: [PATCH 14/17] fix response --- ...-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json | 79 +++++++++++-------- Task2Calendarpublisher/solution.xml | 2 +- 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json b/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json index d6bf327..10b0737 100644 --- a/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json +++ b/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json @@ -566,37 +566,6 @@ }, "type": "Foreach" }, - "Respond_to_a_PowerApp_or_flow": { - "runAfter": { - "Iterate_over_all_To-Do_lists": [ - "Succeeded" - ], - "Iterate_over_all_my_Planner_tasks": [ - "Succeeded" - ] - }, - "metadata": { - "operationMetadataId": "175a7f94-0607-4dd7-bc54-62a061ced9c6" - }, - "type": "Response", - "kind": "PowerApp", - "inputs": { - "statusCode": 200, - "body": { - "done": "yes" - }, - "schema": { - "type": "object", - "properties": { - "done": { - "title": "Done", - "x-ms-dynamically-added": true, - "type": "boolean" - } - } - } - } - }, "Get_default_calendar_id": { "runAfter": {}, "metadata": { @@ -685,6 +654,54 @@ } ] } + }, + "Scope": { + "actions": { + "Respond_to_a_PowerApp_or_flow_2": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "8d60920e-d260-4b30-aa85-e9435bbe2fa2" + }, + "type": "Response", + "kind": "PowerApp", + "inputs": { + "statusCode": 200, + "body": {}, + "schema": { + "type": "object", + "properties": {} + } + } + } + }, + "runAfter": { + "Iterate_over_all_my_Planner_tasks": [ + "Succeeded" + ], + "Iterate_over_all_To-Do_lists": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "289afabf-a806-4d5c-bd5c-0eee0081e249" + }, + "type": "Scope" + }, + "Set_variable": { + "runAfter": { + "Scope": [ + "Failed", + "TimedOut" + ] + }, + "metadata": { + "operationMetadataId": "3b43b610-f745-48b2-a59f-d1afea1fee58" + }, + "type": "SetVariable", + "inputs": { + "name": "calendar-id", + "value": "dont care" + } } } }, diff --git a/Task2Calendarpublisher/solution.xml b/Task2Calendarpublisher/solution.xml index 125750e..74b245f 100644 --- a/Task2Calendarpublisher/solution.xml +++ b/Task2Calendarpublisher/solution.xml @@ -1,4 +1,4 @@ - + Task2Calendarpublisher From 4bdc80b70f4cc2044aa4843335da9fb7a2d14a71 Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Fri, 17 Mar 2023 21:47:13 +0100 Subject: [PATCH 15/17] enable, go to daily --- ...darScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json b/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json index 2d5e7d0..7b8fdf4 100644 --- a/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json +++ b/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json @@ -50,7 +50,7 @@ "body": { "date": "@body('Create_start_date')", "date_1": "@body('Create_end_date')", - "boolean": true + "boolean": false } } }, @@ -80,7 +80,7 @@ "type": "Expression", "kind": "ConvertTimeZone", "inputs": { - "baseTime": "@{addDays(utcNow(),10)}", + "baseTime": "@{addDays(utcNow(),1)}", "formatString": "yyyy-MM-dd", "sourceTimeZone": "UTC", "destinationTimeZone": "W. Europe Standard Time" From 2b90028511a1a3fb188e8e7d3768b81712e2d3d2 Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Fri, 17 Mar 2023 21:52:12 +0100 Subject: [PATCH 16/17] rename --- samples/{Task2Calendar => task-to-calendar}/.gitignore | 0 samples/{Task2Calendar => task-to-calendar}/.vscode/tasks.json | 0 samples/{Task2Calendar => task-to-calendar}/README.md | 0 ...k2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json | 0 ...alendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json | 0 .../Task2Calendarpublisher/[Content_Types].xml | 0 .../Task2Calendarpublisher/customizations.xml | 0 .../Task2Calendarpublisher/solution.xml | 0 samples/{Task2Calendar => task-to-calendar}/settings.json | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename samples/{Task2Calendar => task-to-calendar}/.gitignore (100%) rename samples/{Task2Calendar => task-to-calendar}/.vscode/tasks.json (100%) rename samples/{Task2Calendar => task-to-calendar}/README.md (100%) rename samples/{Task2Calendar => task-to-calendar}/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json (100%) rename samples/{Task2Calendar => task-to-calendar}/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json (100%) rename samples/{Task2Calendar => task-to-calendar}/Task2Calendarpublisher/[Content_Types].xml (100%) rename samples/{Task2Calendar => task-to-calendar}/Task2Calendarpublisher/customizations.xml (100%) rename samples/{Task2Calendar => task-to-calendar}/Task2Calendarpublisher/solution.xml (100%) rename samples/{Task2Calendar => task-to-calendar}/settings.json (100%) diff --git a/samples/Task2Calendar/.gitignore b/samples/task-to-calendar/.gitignore similarity index 100% rename from samples/Task2Calendar/.gitignore rename to samples/task-to-calendar/.gitignore diff --git a/samples/Task2Calendar/.vscode/tasks.json b/samples/task-to-calendar/.vscode/tasks.json similarity index 100% rename from samples/Task2Calendar/.vscode/tasks.json rename to samples/task-to-calendar/.vscode/tasks.json diff --git a/samples/Task2Calendar/README.md b/samples/task-to-calendar/README.md similarity index 100% rename from samples/Task2Calendar/README.md rename to samples/task-to-calendar/README.md diff --git a/samples/Task2Calendar/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json b/samples/task-to-calendar/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json similarity index 100% rename from samples/Task2Calendar/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json rename to samples/task-to-calendar/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json diff --git a/samples/Task2Calendar/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json b/samples/task-to-calendar/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json similarity index 100% rename from samples/Task2Calendar/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json rename to samples/task-to-calendar/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json diff --git a/samples/Task2Calendar/Task2Calendarpublisher/[Content_Types].xml b/samples/task-to-calendar/Task2Calendarpublisher/[Content_Types].xml similarity index 100% rename from samples/Task2Calendar/Task2Calendarpublisher/[Content_Types].xml rename to samples/task-to-calendar/Task2Calendarpublisher/[Content_Types].xml diff --git a/samples/Task2Calendar/Task2Calendarpublisher/customizations.xml b/samples/task-to-calendar/Task2Calendarpublisher/customizations.xml similarity index 100% rename from samples/Task2Calendar/Task2Calendarpublisher/customizations.xml rename to samples/task-to-calendar/Task2Calendarpublisher/customizations.xml diff --git a/samples/Task2Calendar/Task2Calendarpublisher/solution.xml b/samples/task-to-calendar/Task2Calendarpublisher/solution.xml similarity index 100% rename from samples/Task2Calendar/Task2Calendarpublisher/solution.xml rename to samples/task-to-calendar/Task2Calendarpublisher/solution.xml diff --git a/samples/Task2Calendar/settings.json b/samples/task-to-calendar/settings.json similarity index 100% rename from samples/Task2Calendar/settings.json rename to samples/task-to-calendar/settings.json From 7ff8ea40a44905859c7f4849e84b2e9aee8c1266 Mon Sep 17 00:00:00 2001 From: Tobias Fenster Date: Fri, 17 Mar 2023 22:27:37 +0100 Subject: [PATCH 17/17] fix files, naming, readme --- samples/task-to-calendar/.vscode/tasks.json | 31 ------- samples/task-to-calendar/README.md | 84 +++++++++++++++++- .../task-to-calendar/assets/screenshot.png | Bin 0 -> 104598 bytes ...-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json | 0 ...-F2784AEA-94B3-ED11-83FE-0022489ACD39.json | 0 .../[Content_Types].xml | 0 .../Task2Calendarpublisher/customizations.xml | 0 .../Task2Calendarpublisher/solution.xml | 0 .../{ => sourcecode}/settings.json | 0 9 files changed, 82 insertions(+), 33 deletions(-) delete mode 100644 samples/task-to-calendar/.vscode/tasks.json create mode 100644 samples/task-to-calendar/assets/screenshot.png rename samples/task-to-calendar/{ => sourcecode}/Task2Calendarpublisher/Workflows/Task2CalendarManualFlow-B8BEFEEE-91B3-ED11-83FE-0022489ACD39.json (100%) rename samples/task-to-calendar/{ => sourcecode}/Task2Calendarpublisher/Workflows/Task2CalendarScheduledFlow-F2784AEA-94B3-ED11-83FE-0022489ACD39.json (100%) rename samples/task-to-calendar/{ => sourcecode}/Task2Calendarpublisher/[Content_Types].xml (100%) rename samples/task-to-calendar/{ => sourcecode}/Task2Calendarpublisher/customizations.xml (100%) rename samples/task-to-calendar/{ => sourcecode}/Task2Calendarpublisher/solution.xml (100%) rename samples/task-to-calendar/{ => sourcecode}/settings.json (100%) diff --git a/samples/task-to-calendar/.vscode/tasks.json b/samples/task-to-calendar/.vscode/tasks.json deleted file mode 100644 index 1b8c4d4..0000000 --- a/samples/task-to-calendar/.vscode/tasks.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - // See https://go.microsoft.com/fwlink/?LinkId=733558 - // for the documentation about the tasks.json format - "version": "2.0.0", - "tasks": [ - { - "label": "cleanup, export and expand from 4PS (default)", - "type": "shell", - "command": "remove-item -recurse -force Task2Calendarpublisher; remove-item -force Task2Calendarpublisher.zip; pac auth select -n '4PS DE'; pac org select --environment '4PS (default)'; pac solution export -n 'Task2Calendarpublisher' -p .; expand-archive Task2Calendarpublisher.zip;", - "problemMatcher": [] - }, - { - "label": "import to ars solvendi", - "type": "shell", - "command": "pac auth select -n 'ars solvendi'; pac org select --environment 'ars solvendi'; pac solution import -p Task2Calendarpublisher.zip --settings-file settings_ars-solvendi.json", - "problemMatcher": [] - }, - { - "label": "import to 4PS", - "type": "shell", - "command": "pac auth select -n '4PS DE'; pac org select --environment '4PS (default)'; pac solution import -p Task2Calendarpublisher.zip --settings-file settings_4PS.json", - "problemMatcher": [] - }, - { - "label": "create settings", - "type": "shell", - "command": "pac solution create-settings -s settings.json -z Task2Calendarpublisher.zip", - "problemMatcher": [] - } - ] -} \ No newline at end of file diff --git a/samples/task-to-calendar/README.md b/samples/task-to-calendar/README.md index 1ddb0b0..4f0f5df 100644 --- a/samples/task-to-calendar/README.md +++ b/samples/task-to-calendar/README.md @@ -1,3 +1,83 @@ -# Task2Calendar +# Task to Calendar -A Power Automate flow to add calendar entries for all your To-Do and Planner tasks. More details at https://tobiasfenster.io/adding-all-your-to-do-and-planner-tasks-to-your-calendar-with-power-automate +## Summary + +Gets all of your tasks from Planner and To-Do in a given time frame and puts them into your main Outlook calendar + +![picture of the sample](assets/screenshot.png) + +## Applies to + +* [Microsoft Power Automate](https://docs.microsoft.com/power-automate/) + +## Compatibility + +> Don't worry about this section, we'll take care of it. Unless you really want to... + +![Premium License](https://img.shields.io/badge/Premium%20License-Not%20Required-green.svg "Premium license not required") +![On-Premises Connectors](https://img.shields.io/badge/On--Premises%20Connectors-No-green.svg "Does not use on-premise connectors") +![Custom Connectors](https://img.shields.io/badge/Custom%20Connectors-Not%20Required-green.svg "Does not use custom connectors") + +## Authors + +Solution|Author(s) +--------|--------- +task-to-calendar | [Tobias Fenster](https://github.com/tfenster) ([@tobiasfenster](https://twitter.com/tobiasfenster)), 4PS + +## Version history + +Version|Date|Comments +-------|----|-------- +1.0|March 17, 2023|Initial release + +## Features + +This sample illustrates the following concepts: + +* Getting tasks from To-Do +* Getting tasks from Planner +* Creating calendar entries in Outlook +* Using a scheduled parent flow to call a manual child flow that can also be triggered directly + +## Minimal Path to Awesome + +* [Download](./solution/task-to-calendar.zip) the `.zip` from the `solution` folder +* Within **Power Automate Studio**, import the solution `.zip` file using **Solutions** > **Import Solution** and select the `.zip` file you just packed. + +## Using the Source Code + +You can also use the [Power Apps CLI](https://docs.microsoft.com/powerapps/developer/data-platform/powerapps-cli) to pack the source code by following these steps:: + +* Clone the repository to a local drive +* Pack the source files back into a solution `.zip` file: + ```bash + pac solution pack --zipfile pathtodestinationfile --folder pathtosourcefolder --processCanvasApps + ``` + Making sure to replace `pathtosourcefolder` to point to the path to this sample's `sourcecode` folder, and `pathtodestinationfile` to point to the path of this solution's `.zip` file (located under the `solution` folder) +* Within **Power Automate Studio**, import the solution `.zip` file using **Solutions** > **Import Solution** and select the `.zip` file you just packed. + +## Disclaimer + +**THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + +## Help + +> Note: don't worry about this section, we'll update the links. + +We do not support samples, but we this community is always willing to help, and we want to improve these samples. We use GitHub to track issues, which makes it easy for community members to volunteer their time and help resolve issues. + +If you encounter any issues while using this sample, [create a new issue](https://github.com/pnp/powerautomate-samples/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected&template=bug-report.yml&sample=YOURSAMPLENAME&authors=@YOURGITHUBUSERNAME&title=YOURSAMPLENAME%20-%20). + +For questions regarding this sample, [create a new question](https://github.com/pnp/powerautomate-samples/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected&template=question.yml&sample=YOURSAMPLENAME&authors=@YOURGITHUBUSERNAME&title=YOURSAMPLENAME%20-%20). + +Finally, if you have an idea for improvement, [make a suggestion](https://github.com/pnp/powerautomate-samples/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected&template=suggestion.yml&sample=YOURSAMPLENAME&authors=@YOURGITHUBUSERNAME&title=YOURSAMPLENAME%20-%20). + +## For more information + +- [Create your first flow](https://docs.microsoft.com/en-us/power-automate/getting-started#create-your-first-flow) +- [Microsoft Power Automate documentation](https://docs.microsoft.com/en-us/power-automate/) + + + + +--- \ No newline at end of file diff --git a/samples/task-to-calendar/assets/screenshot.png b/samples/task-to-calendar/assets/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ebda271b78201df0ab23e8a02270b2c5a805fca0 GIT binary patch literal 104598 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 z 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