From 74f529ae099c32a01439b57a65c9b3edd82a560a Mon Sep 17 00:00:00 2001 From: sai Date: Sun, 31 Aug 2025 14:28:50 +0530 Subject: [PATCH 1/2] Added the Sync Outlook calendar events to a SharePoint list using Power Automate --- .../sharepoint-calendar-event-sync/README.md | 158 ++++++++++++++++ .../assets/sample.json | 55 ++++++ .../assets/screenshot.png | Bin 0 -> 40261 bytes .../solution/SharePointCalendarEventSync.zip | Bin 0 -> 4401 bytes .../sourcecode/src/Other/customizations.xml | 61 ++++++ .../sourcecode/src/Other/solution.xml | 84 +++++++++ ...-A1F0FBD5-3A86-F011-B4CC-000D3A35CE29.json | 178 ++++++++++++++++++ 7 files changed, 536 insertions(+) create mode 100644 samples/sharepoint-calendar-event-sync/README.md create mode 100644 samples/sharepoint-calendar-event-sync/assets/sample.json create mode 100644 samples/sharepoint-calendar-event-sync/assets/screenshot.png create mode 100644 samples/sharepoint-calendar-event-sync/solution/SharePointCalendarEventSync.zip create mode 100644 samples/sharepoint-calendar-event-sync/sourcecode/src/Other/customizations.xml create mode 100644 samples/sharepoint-calendar-event-sync/sourcecode/src/Other/solution.xml create mode 100644 samples/sharepoint-calendar-event-sync/sourcecode/src/Workflows/SharePointCalendarEventSync-A1F0FBD5-3A86-F011-B4CC-000D3A35CE29.json diff --git a/samples/sharepoint-calendar-event-sync/README.md b/samples/sharepoint-calendar-event-sync/README.md new file mode 100644 index 00000000..515943b5 --- /dev/null +++ b/samples/sharepoint-calendar-event-sync/README.md @@ -0,0 +1,158 @@ +# SharePoint Calendar Event Sync + +## Summary + +This Power Platform sample demonstrates how to automatically sync Outlook/Teams calendar events to a SharePoint list using Power Automate. + +The flow retrieves events from a specified calendar, checks for duplicates using the event iCalUId (Meeting ID), and creates new SharePoint list items with details such as subject, organizer, attendees, location, start/end time, and description. + +This solution is provided as a proof-of-concept (POC) for customization or extension. + +![Preview - Flow](./assets/screenshot.png) + +## Applies to + +![Power Automate](https://img.shields.io/badge/Power%20Automate-Yes-green "Yes") + +## Compatibility + +![Experimental Features](https://img.shields.io/badge/Experimental%20Features-No-red.svg "Does not on experimental features") + +## Features + +- ✅ Sync Outlook/Teams events to SharePoint automatically +- ✅ Prevent duplicate entries using Meeting ID +- ✅ Map all key event details including attendees, organizer, and location +- ✅ Handles HTML content cleanup in event descriptions +- ✅ Configurable concurrency (up to 20 parallel executions) + +## Prerequisites + +- Access to a SharePoint Online site with the target list +- Permissions to read calendar events from Outlook or Teams +- Power Automate flow owner must have access to both SharePoint and Microsoft 365 (Outlook/Teams) connectors + +## Solution Components + +### Data Sources +- SharePoint +- Microsoft Outlook / Teams Calendar + +### Flow +- **Calendar Event Sync** - Main automation flow + +## Installation + +### Step 1: Create Supporting SharePoint List + +Create a new list named **Calendar Events** in your SharePoint site with the following columns: + +| Internal Name | Display Name | Type | Notes | +|---------------|--------------|------|-------| +| Title | Title | Single line of text | Use event subject | +| Organizer1 | Organizer1 | Single line of text | Event organizer | +| Attendees | Attendees | Multiple lines of text | Required + optional attendees | +| StartTime | Start Time | Date and Time | Start time of the event | +| EndTime | End Time | Date and Time | End time of the event | +| Location | Location | Single line of text | Event location | +| Body | Description | Multiple lines of text | Event body / description | +| MeetingID | Meeting ID | Single line of text | iCalUId to prevent duplicates | + + +### Step 2: Import Power Platform Solution + +1. Download the **Unmanaged** solution `.zip` from the solution folder +2. In [Power Apps Maker Portal](https://make.powerapps.com), choose your environment +3. Navigate to **Solutions** > **Import solution** > **Browse** +4. Select the downloaded solution file +5. Connect the SharePoint and Outlook connectors when prompted +6. Click **Import** +7. Share the flow with any additional users who may need to view or edit it + +### Alternative: Using Source Code + +You can also pack the source code using the Power Apps CLI: + +```bash +pac solution pack --folder --zipfile --processCanvasApps +``` + +- Replace `` with the local path to the sourcecode folder +- Replace `` with the path of the solution .zip + +Then import the solution as described above. + +## Flow Overview + +### Process Flow +1. **Get Calendar Events** – Retrieves events from the selected Outlook/Teams calendar between a start and end date +2. **For Each Event** – Loops through each event retrieved +3. **Check for Duplicates** – Uses a SharePoint Get items action to see if the event's iCalUId (Meeting ID) already exists +4. **Create SharePoint Item** – If the event is not found, creates a new item in the SharePoint list + +### Field Mapping + +| SharePoint Field | Mapped Flow Value | +|------------------|-------------------| +| Title | Event subject | +| Organizer1 | Event organizer | +| Attendees | Required + optional attendees | +| StartTime | Event start with timezone | +| EndTime | Event end with timezone | +| Location | Event location object | +| Body | Event body with HTML tags removed/replaced | +| MeetingID | Event iCalUId | + +### Performance +- **Concurrency**: The flow is configured to run up to 20 repetitions in parallel for faster processing + +## Usage + +1. The flow runs on a schedule or manually to retrieve calendar events +2. Events are checked against the SharePoint list to avoid duplicates +3. New events are added automatically to the list with all mapped details +4. Your SharePoint list stays in sync with the selected calendar + +## Configuration + +To customize the solution: +- Modify the calendar source in the flow +- Adjust the date range for event retrieval +- Update field mappings as needed +- Configure the schedule trigger frequency +- Update SharePoint URL: Change the SharePoint dataset URL in the flow from "dataset": "https://tenant.sharepoint.com/sites/sitename" to match your specific tenant and site name (e.g., "dataset": "https://yourcompany.sharepoint.com/sites/yoursite") + +## Version History + +| Version | Date | Comments | +|---------|------|----------| +| 1.0.0.0 | Aug 30, 2025 | Initial release | + +## Contributors + +- [Bandaru Sai](https://github.com/saiiiiiii) + +## Support + +This sample is provided as-is. If you encounter issues: + +- [Create a new issue](https://github.com/pnp/powerplatform-samples/issues) +- [Ask a question](https://github.com/pnp/powerplatform-samples/discussions) +- [Suggest an improvement](https://github.com/pnp/powerplatform-samples/discussions) + + +## Help + +We do not support samples, but 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, you can [create a new issue](https://github.com/pnp/powerplatform-samples/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected&template=bug-report.yml&sample=sharepoint-calendar-event-sync&authors=@bandarusai&title=sharepoint-calendar-event-sync%20-%20). + +For questions regarding this sample, [create a new question](https://github.com/pnp/powerplatform-samples/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected&template=question.yml&sample=sharepoint-calendar-event-sync&authors=@bandarusai&title=sharepoint-calendar-event-sync%20-%20). + +Finally, if you have an idea for improvement, [make a suggestion](https://github.com/pnp/powerplatform-samples/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected&template=suggestion.yml&sample=sharepoint-calendar-event-sync&authors=@bandarusai&title=sharepoint-calendar-event-sync%20-%20). + +## 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.** + + \ No newline at end of file diff --git a/samples/sharepoint-calendar-event-sync/assets/sample.json b/samples/sharepoint-calendar-event-sync/assets/sample.json new file mode 100644 index 00000000..529b0120 --- /dev/null +++ b/samples/sharepoint-calendar-event-sync/assets/sample.json @@ -0,0 +1,55 @@ +[ + { + "$schema": "https://developer.microsoft.com/en-us/json-schemas/pnp/samples/v1.0/metadata-schema.json", + "name": "pnp-powerplatform-samples-sharepoint-calendar-event-sync", + "version": "1.0.0.0", + "source": "pnp", + "creationDateTime": "2025-08-31T00:00:00.000Z", + "updateDateTime": "2025-08-31T00:00:00.000Z", + "title": "Sharepoint Calendar Event Sync", + "shortDescription": "This is a proof of concept Power Platform solution for Sync Outlook Events to a SharePoint list using Power Automate.", + "longDescription": [ + "This is a proof of concept Power Platform solution for how to automatically Sync Outlook/Teams calendar events to a SharePoint list using Power Automate." + ], + "url": "https://github.com/pnp/powerplatform-samples/tree/main/samples/sharepoint-calendar-event-sync", + "products": [ + "Power Automate", + "Power Platform" + ], + "tags": [ + "SharePoint", + "Power Automate" + ], + "categories": [ + "POWERAUTOMATE" + ], + "metadata": [ + { + "key": "POWERAPPS-MANIFEST-VERSION", + "value": "0.20" + } + ], + "thumbnails": [ + { + "type": "image", + "order": 100, + "url": "https://github.com/pnp/powerplatform-samples/blob/main/samples/sharepoint-calendar-event-sync/assets/screenshot.png?raw=true", + "alt": "Preview" + } + ], + "authors": [ + { + "gitHubAccount": "saiiiiiii", + "pictureUrl": "https://github.com/saiiiiiii.png", + "name": "Sai Bandaru" + } + ], + "references": [ + { + "name": "Create a cloud flow in Power Automate", + "description": "Create a cloud flow in Power Automate", + "url": "https://learn.microsoft.com/en-us/power-automate/get-started-logic-flow?tabs=classic-designer" + } + ] + } +] diff --git a/samples/sharepoint-calendar-event-sync/assets/screenshot.png b/samples/sharepoint-calendar-event-sync/assets/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..6354c426af6a0fa6f5ced6e3f0df0144d78618bb GIT binary patch literal 40261 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 literal 0 HcmV?d00001 diff --git a/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/customizations.xml b/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/customizations.xml new file mode 100644 index 00000000..f374dc3b --- /dev/null +++ b/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/customizations.xml @@ -0,0 +1,61 @@ + + + + + + /Workflows/SharePointCalendarEventSync-A1F0FBD5-3A86-F011-B4CC-000D3A35CE29.json + 1 + 0 + 5 + 0 + 4 + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 1 + 1 + 1.0.0.0 + 1 + 0 + 1 + 0 + none + + + + + + + + + + + + + + + + Office 365 Outlook sai-959bd + /providers/Microsoft.PowerApps/apis/shared_office365 + 1 + 0 + 0 + 1 + + + SharePoint sai-6c509 + /providers/Microsoft.PowerApps/apis/shared_sharepointonline + 1 + 0 + 0 + 1 + + + + 1033 + + \ No newline at end of file diff --git a/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/solution.xml b/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/solution.xml new file mode 100644 index 00000000..a88c79b7 --- /dev/null +++ b/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/solution.xml @@ -0,0 +1,84 @@ + + + sai + + + + + 1.0.0.1 + 0 + + sai + + + + + + + sai + 91851 + +
+ 1 + 1 + + + + + + + + + + + + + + + + 1 + + + + + + + + +
+
+ 2 + 1 + + + + + + + + + + + + + + + + 1 + + + + + + + + +
+
+
+ + + + +
+
\ No newline at end of file diff --git a/samples/sharepoint-calendar-event-sync/sourcecode/src/Workflows/SharePointCalendarEventSync-A1F0FBD5-3A86-F011-B4CC-000D3A35CE29.json b/samples/sharepoint-calendar-event-sync/sourcecode/src/Workflows/SharePointCalendarEventSync-A1F0FBD5-3A86-F011-B4CC-000D3A35CE29.json new file mode 100644 index 00000000..49fd62ca --- /dev/null +++ b/samples/sharepoint-calendar-event-sync/sourcecode/src/Workflows/SharePointCalendarEventSync-A1F0FBD5-3A86-F011-B4CC-000D3A35CE29.json @@ -0,0 +1,178 @@ +{ + "properties": { + "connectionReferences": { + "shared_office365": { + "runtimeSource": "invoker", + "connection": { + "connectionReferenceLogicalName": "sai_sharedoffice365_959bd" + }, + "api": { + "name": "shared_office365" + } + }, + "shared_sharepointonline": { + "runtimeSource": "invoker", + "connection": { + "connectionReferenceLogicalName": "sai_sharedsharepointonline_6c509" + }, + "api": { + "name": "shared_sharepointonline" + } + } + }, + "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" + }, + "$connections": { + "defaultValue": {}, + "type": "Object" + } + }, + "triggers": { + "manual": { + "metadata": { + "operationMetadataId": "a94ec0ef-9c6a-4502-81aa-c791472c8a4d" + }, + "type": "Request", + "kind": "Button", + "inputs": { + "schema": { + "type": "object", + "properties": {}, + "required": [] + } + } + } + }, + "actions": { + "Get_calendar_view_of_events_(V3)": { + "runAfter": {}, + "metadata": { + "operationMetadataId": "f7539677-945d-4c60-bd3a-a63920fa266c" + }, + "type": "OpenApiConnection", + "inputs": { + "parameters": { + "calendarId": "AQMkAGQ4YmNlMzRlLWE5ZTQtNGQwZC04ZTM5LWI5MmQ1MmU0MzEzZQBGAAADoidONSuajE27-_wcYG8d7AcAAYdxNrC1AkK_bLGB0_90vgAAAgEGAAAAAYdxNrC1AkK_bLGB0_90vgAAAniJAAAA", + "startDateTimeUtc": "2025-01-01T00:00:00Z", + "endDateTimeUtc": "@utcNow()" + }, + "host": { + "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", + "connectionName": "shared_office365", + "operationId": "GetEventsCalendarViewV3" + }, + "authentication": { + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", + "type": "Raw" + } + } + }, + "Apply_to_each": { + "foreach": "@outputs('Get_calendar_view_of_events_(V3)')?['body/value']", + "actions": { + "Get_items": { + "metadata": { + "operationMetadataId": "d5095882-8eb7-4c0f-8a8a-c07f2e5dcb88" + }, + "type": "OpenApiConnection", + "inputs": { + "parameters": { + "dataset": "https://tenant.sharepoint.com/sites/sitename", + "table": "bbc08a65-6d05-4000-8722-a927c5a8316a", + "$filter": "MeetingID eq '@{items('Apply_to_each')?['iCalUId']}'" + }, + "host": { + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", + "connectionName": "shared_sharepointonline", + "operationId": "GetItems" + }, + "authentication": { + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", + "type": "Raw" + } + } + }, + "Condition": { + "actions": { + "Create_item": { + "metadata": { + "operationMetadataId": "65427292-572a-4fd5-a385-3f10325d90b4" + }, + "type": "OpenApiConnection", + "inputs": { + "parameters": { + "dataset": "https://tenant.sharepoint.com/sites/sitename", + "table": "bbc08a65-6d05-4000-8722-a927c5a8316a", + "view": "840f4894-ffb1-41fe-b65d-3f8b4a038e61", + "item/Title": "@items('Apply_to_each')?['subject']", + "item/Attendees": "@{items('Apply_to_each')?['requiredAttendees']}@{items('Apply_to_each')?['optionalAttendees']}", + "item/StartTime": "@items('Apply_to_each')?['startWithTimeZone']", + "item/EndTime": "@items('Apply_to_each')?['endWithTimeZone']", + "item/Location": "@items('Apply_to_each')?['location']", + "item/Body": "@replace(replace(replace(replace(items('Apply_to_each')?['body'],'
','\\n'),'
','\\n'),'

','\\n'),'

','')", + "item/MeetingID": "@items('Apply_to_each')?['iCalUId']", + "item/Organizer1": "@items('Apply_to_each')?['organizer']" + }, + "host": { + "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", + "connectionName": "shared_sharepointonline", + "operationId": "PostItem" + }, + "authentication": { + "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", + "type": "Raw" + } + } + } + }, + "runAfter": { + "Get_items": [ + "Succeeded" + ] + }, + "else": { + "actions": {} + }, + "expression": { + "and": [ + { + "equals": [ + "@length(body('Get_items')?['value'])", + 0 + ] + } + ] + }, + "metadata": { + "operationMetadataId": "74980576-0e28-4578-a76e-d9fa34c3fea6" + }, + "type": "If" + } + }, + "runAfter": { + "Get_calendar_view_of_events_(V3)": [ + "Succeeded" + ] + }, + "metadata": { + "operationMetadataId": "fe9c2204-a14f-46eb-918c-98eeb122f794" + }, + "type": "Foreach", + "runtimeConfiguration": { + "concurrency": { + "repetitions": 20 + } + } + } + } + }, + "templateName": null + }, + "schemaVersion": "1.0.0.0" +} \ No newline at end of file From 32826fa575c4a17039f29ea679e8badd72f3dc72 Mon Sep 17 00:00:00 2001 From: saiiiiiii Date: Mon, 13 Oct 2025 22:36:49 +0530 Subject: [PATCH 2/2] Added with the env variables and replace the zip with managed solution --- .../sharepoint-calendar-event-sync/README.md | 5 +- ...CalendarEventSync_1_0_0_1_managed.zip.zip} | Bin .../sourcecode/src/Other/customizations.xml | 20 +------- .../sourcecode/src/Other/solution.xml | 19 ++++++-- ...-A1F0FBD5-3A86-F011-B4CC-000D3A35CE29.json | 46 +++++++++--------- .../environmentvariabledefinition.xml | 11 +++++ .../environmentvariabledefinition.xml | 11 +++++ 7 files changed, 64 insertions(+), 48 deletions(-) rename samples/sharepoint-calendar-event-sync/solution/{SharePointCalendarEventSync.zip => SharePointCalendarEventSync_1_0_0_1_managed.zip.zip} (100%) create mode 100644 samples/sharepoint-calendar-event-sync/sourcecode/src/environmentvariabledefinitions/sai_OutlookMeetings/environmentvariabledefinition.xml create mode 100644 samples/sharepoint-calendar-event-sync/sourcecode/src/environmentvariabledefinitions/sai_Sharepointurl/environmentvariabledefinition.xml diff --git a/samples/sharepoint-calendar-event-sync/README.md b/samples/sharepoint-calendar-event-sync/README.md index 515943b5..09f21932 100644 --- a/samples/sharepoint-calendar-event-sync/README.md +++ b/samples/sharepoint-calendar-event-sync/README.md @@ -61,7 +61,7 @@ Create a new list named **Calendar Events** in your SharePoint site with the fol ### Step 2: Import Power Platform Solution -1. Download the **Unmanaged** solution `.zip` from the solution folder +1. Download the **managed** solution `.zip` from the solution folder 2. In [Power Apps Maker Portal](https://make.powerapps.com), choose your environment 3. Navigate to **Solutions** > **Import solution** > **Browse** 4. Select the downloaded solution file @@ -120,7 +120,8 @@ To customize the solution: - Adjust the date range for event retrieval - Update field mappings as needed - Configure the schedule trigger frequency -- Update SharePoint URL: Change the SharePoint dataset URL in the flow from "dataset": "https://tenant.sharepoint.com/sites/sitename" to match your specific tenant and site name (e.g., "dataset": "https://yourcompany.sharepoint.com/sites/yoursite") +- Update SharePoint URL: Change the SharePoint URL in the flow from "Sharepointurl (sai_Sharepointurl)": "https://tenant.sharepoint.com/sites/sitename" to match your specific tenant and site name (e.g., "Sharepointurl (sai_Sharepointurl)": "https://tenant.sharepoint.com/sites/sitename") +- Update SharePoint URL: Change the SharePoint URL in the Environment variable from defaultvalue of "Sharepointurl (sai_Sharepointurl)": "https://tenant.sharepoint.com/sites/sitename" ## Version History diff --git a/samples/sharepoint-calendar-event-sync/solution/SharePointCalendarEventSync.zip b/samples/sharepoint-calendar-event-sync/solution/SharePointCalendarEventSync_1_0_0_1_managed.zip.zip similarity index 100% rename from samples/sharepoint-calendar-event-sync/solution/SharePointCalendarEventSync.zip rename to samples/sharepoint-calendar-event-sync/solution/SharePointCalendarEventSync_1_0_0_1_managed.zip.zip diff --git a/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/customizations.xml b/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/customizations.xml index f374dc3b..a483563f 100644 --- a/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/customizations.xml +++ b/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/customizations.xml @@ -1,4 +1,4 @@ - + @@ -37,24 +37,6 @@ - - - Office 365 Outlook sai-959bd - /providers/Microsoft.PowerApps/apis/shared_office365 - 1 - 0 - 0 - 1 - - - SharePoint sai-6c509 - /providers/Microsoft.PowerApps/apis/shared_sharepointonline - 1 - 0 - 0 - 1 - - 1033 diff --git a/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/solution.xml b/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/solution.xml index a88c79b7..95f838ae 100644 --- a/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/solution.xml +++ b/samples/sharepoint-calendar-event-sync/sourcecode/src/Other/solution.xml @@ -1,12 +1,12 @@ - + - sai + SharePointCalendarEventSync - + 1.0.0.1 - 0 + 1 sai @@ -79,6 +79,15 @@ - + + + + + + + + + + \ No newline at end of file diff --git a/samples/sharepoint-calendar-event-sync/sourcecode/src/Workflows/SharePointCalendarEventSync-A1F0FBD5-3A86-F011-B4CC-000D3A35CE29.json b/samples/sharepoint-calendar-event-sync/sourcecode/src/Workflows/SharePointCalendarEventSync-A1F0FBD5-3A86-F011-B4CC-000D3A35CE29.json index 49fd62ca..a65c130b 100644 --- a/samples/sharepoint-calendar-event-sync/sourcecode/src/Workflows/SharePointCalendarEventSync-A1F0FBD5-3A86-F011-B4CC-000D3A35CE29.json +++ b/samples/sharepoint-calendar-event-sync/sourcecode/src/Workflows/SharePointCalendarEventSync-A1F0FBD5-3A86-F011-B4CC-000D3A35CE29.json @@ -31,6 +31,20 @@ "$connections": { "defaultValue": {}, "type": "Object" + }, + "Sharepointurl (sai_Sharepointurl)": { + "defaultValue": "https://tenant.sharepoint.com/sites/saitesting2", + "type": "String", + "metadata": { + "schemaName": "sai_Sharepointurl" + } + }, + "Outlook Meetings (sai_OutlookMeetings)": { + "defaultValue": "Outlook Meetings", + "type": "String", + "metadata": { + "schemaName": "sai_OutlookMeetings" + } } }, "triggers": { @@ -64,12 +78,8 @@ }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_office365", - "connectionName": "shared_office365", - "operationId": "GetEventsCalendarViewV3" - }, - "authentication": { - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", - "type": "Raw" + "operationId": "GetEventsCalendarViewV3", + "connectionName": "shared_office365" } } }, @@ -83,18 +93,14 @@ "type": "OpenApiConnection", "inputs": { "parameters": { - "dataset": "https://tenant.sharepoint.com/sites/sitename", - "table": "bbc08a65-6d05-4000-8722-a927c5a8316a", + "dataset": "@parameters('Sharepointurl (sai_Sharepointurl)')", + "table": "@parameters('Outlook Meetings (sai_OutlookMeetings)')", "$filter": "MeetingID eq '@{items('Apply_to_each')?['iCalUId']}'" }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "connectionName": "shared_sharepointonline", - "operationId": "GetItems" - }, - "authentication": { - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", - "type": "Raw" + "operationId": "GetItems", + "connectionName": "shared_sharepointonline" } } }, @@ -107,8 +113,8 @@ "type": "OpenApiConnection", "inputs": { "parameters": { - "dataset": "https://tenant.sharepoint.com/sites/sitename", - "table": "bbc08a65-6d05-4000-8722-a927c5a8316a", + "dataset": "@parameters('Sharepointurl (sai_Sharepointurl)')", + "table": "@parameters('Outlook Meetings (sai_OutlookMeetings)')", "view": "840f4894-ffb1-41fe-b65d-3f8b4a038e61", "item/Title": "@items('Apply_to_each')?['subject']", "item/Attendees": "@{items('Apply_to_each')?['requiredAttendees']}@{items('Apply_to_each')?['optionalAttendees']}", @@ -121,12 +127,8 @@ }, "host": { "apiId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", - "connectionName": "shared_sharepointonline", - "operationId": "PostItem" - }, - "authentication": { - "value": "@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']", - "type": "Raw" + "operationId": "PostItem", + "connectionName": "shared_sharepointonline" } } } diff --git a/samples/sharepoint-calendar-event-sync/sourcecode/src/environmentvariabledefinitions/sai_OutlookMeetings/environmentvariabledefinition.xml b/samples/sharepoint-calendar-event-sync/sourcecode/src/environmentvariabledefinitions/sai_OutlookMeetings/environmentvariabledefinition.xml new file mode 100644 index 00000000..38ba080e --- /dev/null +++ b/samples/sharepoint-calendar-event-sync/sourcecode/src/environmentvariabledefinitions/sai_OutlookMeetings/environmentvariabledefinition.xml @@ -0,0 +1,11 @@ + + Outlook Meetings + + + 1.0.0.0 + 1 + 0 + 0 + 100000000 + \ No newline at end of file diff --git a/samples/sharepoint-calendar-event-sync/sourcecode/src/environmentvariabledefinitions/sai_Sharepointurl/environmentvariabledefinition.xml b/samples/sharepoint-calendar-event-sync/sourcecode/src/environmentvariabledefinitions/sai_Sharepointurl/environmentvariabledefinition.xml new file mode 100644 index 00000000..c0274d3c --- /dev/null +++ b/samples/sharepoint-calendar-event-sync/sourcecode/src/environmentvariabledefinitions/sai_Sharepointurl/environmentvariabledefinition.xml @@ -0,0 +1,11 @@ + + https://tenant.sharepoint.com/sites/saitesting2 + + + 1.0.0.0 + 1 + 0 + 0 + 100000000 + \ No newline at end of file