Service | Microsoft Docs article | Related commit history on GitHub | Change details |
---|---|---|---|
platform | Manage Your Apps In Developer Portal | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/manage-your-apps-in-developer-portal.md | To install and render your app in Teams, you must include a set of configuration In the **Configure** section, you can see the following components to manage and access your app: -* **Basic information**: This section shows and allows you to edit the **App names**, **App ID**, **Descriptions**, **Version**, **Developer information**, **App URLs**, **Application (client) ID**, and **Microsoft Partner Network ID**. +* **Basic information**: This section shows and allows you to edit the **App names**, **App ID**, **Descriptions**, **Version**, **Developer information**, **App URLs**, **Application (client) ID**, and **Microsoft Partner Network ID** (CCP ID). * **Branding**: This section allows you to add **Color icon** and **Outline icon** in `.png` format. * **App features**: This section allows you to add the following features to your app: * Personal app |
platform | Manage Third Party Apps License | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/manage-third-party-apps-license.md | To determine if the tenant for the Microsoft Entra app is part of the Partner Ce 1. On the upper-right corner, select the **Settings** icon. 1. Select **Account Settings**. 1. On the left pane, select **Tenants**.- You can see all tenants associated with the Microsoft Partner Network (MPN) account. The tenant, who is the owner of the Microsoft Entra app, must be available in the list. If the tenant isnΓÇÖt on the list, you can use the **Associate Azure ID** button to link the tenant. + You can see all tenants associated with the Microsoft Cloud Partner Program (CCP) account. The tenant, who is the owner of the Microsoft Entra app, must be available in the list. If the tenant isnΓÇÖt on the list, you can use the **Associate Azure ID** button to link the tenant. ## Check license usage in Partner Center analytics |
platform | Teams Store Validation Guidelines | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md | The app manifest defines your app's configuration. * As part of Teams app certification, you must submit a production version of the app manifest. [*Mandatory Fix*] -* We recommend that you declare the Microsoft Partner Network (MPN) ID in the app manifest. The MPN ID helps identify the partner organization that builds the app. [*Suggested Fix*] +* We recommend that you declare the Microsoft Cloud Partner Program ID (CCP ID), formerly known as Microsoft Partner Network (MPN ID) in the app manifest. The CCP ID helps identify the partner organization that builds the app. [*Suggested Fix*] * Scopes and/or context declared in app manifest must be visible within the app. [*Mandatory Fix*] |
platform | Glossary | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/get-started/glossary.md | Common terms and definitions used in Microsoft Teams developer documentation. | Microsoft App Password | A secret string that the application uses to prove its identity when requesting a token. Also, it can be referred to as application password. <br> **See also**: [Client secret](#c) | | [Microsoft Graph Explorer](../graph-api/proactive-bots-and-messages/graph-proactive-bots-and-messages.md) | The gateway to data and intelligence in Microsoft 365. It provides a unified programmability model that you can use to access data in Microsoft 365, Windows 10, and Enterprise Mobility + Security. | | [Microsoft Partner Center](/partner-center/overview) | Microsoft Partner Center streamlines several business processes to make it easier for Microsoft partners to manage their relationship with Microsoft and their customers. Partner Center gives you access to the tools you need to get work done.|-| [Microsoft Partner Network ID](../concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md#uses-of-latest-app-manifest-schema) | The Microsoft Partner Network ID (MPN ID) that identifies the partner organization building the app. You can find your MPN ID by fetching the Partner Center ID.| +| [Microsoft Cloud Partner Program ID](../concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md#uses-of-latest-app-manifest-schema) | The Microsoft Cloud Partner Program ID (CCP ID) that identifies the partner organization building the app. You can find your CCP ID by fetching the Partner Center ID.| | [Microsoft Teams](../overview.md) | Microsoft Teams is a group collaboration software that can be used to help teams work together remotely. | | [Microsoft Teams Platform](../concepts/app-fundamentals-overview.md) | The Microsoft Teams developer platform makes it easy for developers to integrate their own apps and services with Teams. | | Microsoft Store | It's a digital distribution platform operated by Microsoft. it's also known as Windows Store. <br> **See also**: [Teams Store](#t) | |
platform | Deprecation Note | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/includes/deprecation-note.md | +> [!IMPORTANT] +> +> Microsoft 365 connectors (previously called Office 365 connectors) are nearing deprecation, and the creation of new Microsoft 365 connectors will soon be blocked. For more information on the schedule and how the Workflows app provides a more flexible and secure experience, see [retirement of Microsoft 365 connectors within Microsoft Teams](https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/). +> +> **How can you create a webhook in Teams?** +> +> * To automatically post to a chat or channel when a webhook request is received, use the predefined workflow templates or create a workflow from scratch using the **When a Teams webhook request is received** trigger. For more information, see [post a workflow when a webhook request is received in Microsoft Teams.](https://prod.support.services.microsoft.com/en-us/office/post-a-workflow-when-a-webhook-request-is-received-in-microsoft-teams-8ae491c7-0394-4861-ba59-055e33f75498). +> +> * For more information about the **When a Teams webhook request is received** trigger, see [Microsoft Teams - Webhook.](/connectors/teams#microsoft-teams-webhook) |
platform | Node Js Yeoman Prereq | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/includes/tabs/node-js-yeoman-prereq.md | In addition, this project requires that you have the following tools installed i **Enter your Microsoft Partner Id, if you have one? (Leave blank to skip)** - This field isn't required and should only be used if you're already part of the [Microsoft Partner Network](https://partner.microsoft.com). + This field isn't required and should only be used if you're already part of the [Microsoft Cloud Partner Program](https://partner.microsoft.com), formerly known as Microsoft Partner Network. **What do you want to add to your project?** |
platform | Publish | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/m365-apps/publish.md | Global admin can upload and preinstall the app package from [Microsoft admin](ht The [Microsoft commercial marketplace](https://appsource.microsoft.com/) (Microsoft AppSource) submission process for Teams apps enabled for Outlook and Microsoft 365 app is same as traditional Teams apps. The difference is you need to use app manifest (previously called Teams app manifest) [version 1.13](../tabs/how-to/using-teams-client-library.md) in your app package, which introduces support for Teams apps that run across Microsoft 365. > [!TIP]-> Use Teams Developer Portal to [validate your app package](https://dev.teams.microsoft.com/validation) to resolve any errors or warnings before submitting it to the Teams Store (through [Microsoft Partner Network](https://partner.microsoft.com/)). +> Use Teams Developer Portal to [validate your app package](https://dev.teams.microsoft.com/validation) to resolve any errors or warnings before submitting it to the Teams Store (through [Microsoft Cloud Partner Program](https://partner.microsoft.com/)), formerly known as Microsoft Partner Network. See the following video to learn more about multitenant apps: |
platform | Manifest Schema Dev Preview | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/schema/manifest-schema-dev-preview.md | Specifies information about the developer and their business. For Teams Store ap | `websiteUrl` | | 2048 characters | ✔️ | The `https://` URL to the app-specific page on your website. | | `privacyUrl` | | 2048 characters | ✔️ | The `https://` URL to the app's privacy policy. | | `termsOfUseUrl` | | 2048 characters | ✔️ | The `https://` URL to the app's terms of use. |-| `mpnId` | String | 10 characters | | The Microsoft Partner Network ID that identifies the partner organization creating the app. **Optional** | +| `mpnId` | String | 10 characters | | The Microsoft Cloud Partner Program (CCP) ID (formerly known as Microsoft Partner Network (MPN) ID) that identifies the partner organization creating the app. **Optional** | | `contactInfo` | Object | | | App developer's contact information. | ### developer.contactInfo |
platform | Manifest Schema | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/schema/manifest-schema.md | Specifies information about your company. For apps submitted to the Teams Store, |`websiteUrl`|String|2048 characters|Γ£ö∩╕Å|The https:// URL to the developer's website. This link must take users to your company or product-specific landing page.| |`privacyUrl`|String|2048 characters|Γ£ö∩╕Å|The https:// URL to the developer's privacy policy.| |`termsOfUseUrl`|String|2048 characters|Γ£ö∩╕Å|The https:// URL to the developer's terms of use.|-|`mpnId`|String|10 characters| |**Optional** The Microsoft Partner Network ID that identifies the partner organization building the app.| +|`mpnId`|String|10 characters| |**Optional** The Microsoft Cloud Partner Program ID (formerly known as Microsoft Partner Network (MPN) ID) that identifies the partner organization building the app.| ## name Indicates if or not to show the loading indicator when an app or tab is loading. **Optional** – Boolean -Indicates if a personal app is rendered without a tab header bar (signifying full screen mode). Default value: `false` +Indicates if a personal app is rendered without a tab header bar (signifying full screen mode). Default value: `false` > [!NOTE] > Defines the icon properties of a given dashboard card. |`iconUrl`| String | 2048 characters | | Location of the icon for the card, to be displayed in the toolbox and card bar. | |`officeUIFabricIconName`| String | 255 characters | | Office UI Fabric or Fluent UI icon's friendly name for the card. This value is used if `iconUrl` is not specified. | -### dashboardCards.dashboardCard.contentSource +### dashboardCards.dashboardCard.contentSource Defines the content source of a given dashboard card. |
platform | App With Collaboration Controls | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/app-with-collaboration-controls.md | - Title: Application with Collaboration controls- -description: In this module, learn how to build a model-driven app with Collaboration controls for Teams and how to add Collaboration controls to the app. -- Previously updated : 10/07/2022---# Create a new model-driven app with Collaboration controls for Teams ---Collaboration controls are designed for [model-driven applications](/power-apps/maker/model-driven-apps/model-driven-app-overview). Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). The following section covers how to create a model-driven app. --## Create a model-driven application --1. Open [https://make.powerapps.com.](https://make.powerapps.com/) or [https://make.preview.powerapps.com.](https://make.preview.powerapps.com/) --1. Select **Solutions** in the left pane. --1. Select **New solution**, so that you can provide a home for all your future customizations. -- :::image type="content" source="../assets/images/collaboration-control/new-solution.png" alt-text="Screenshot is an example that shows the new solution, which provides a home for all your future customization."::: --1. Provide the name and publisher of your new solution, this solution is going to hold your Custom Collaboration Manager. -- :::image type="content" source="../assets/images/collaboration-control/collaboration-manager.png" alt-text="Screenshot is an example that provides publisher details of your new solution."::: --1. Select **Create** --1. After the solution is created, it appears in your list of solutions. Select your solution to open it. --1. Before creating your app, create a home for your data. select **New** > **Table** to get started. -- :::image type="content" source="../assets/images/collaboration-control/create-table.png" alt-text="Screenshot describes how to create a new table."::: --1. Give your table a name. Under **Advanced options**, select **Creating a new activity**. -- :::image type="content" source="../assets/images/collaboration-control/new-activity.png" alt-text="Screenshot describes how to create new activity."::: --1. Select **Save**. --1. After you've created your table, you can customize it by adding extra columns, relationships, and more (Optional). --1. Now you can create a new model-driven app by selecting **New** > **App** > **Model-driven app.** -- :::image type="content" source="../assets/images/collaboration-control/model-driven-app.png" alt-text="Screenshot is an example that shows how to create a new model driven app."::: --1. Select new **Modern app designer (preview)** to open the new app. -- :::image type="content" source="../assets/images/collaboration-control/model-driven-app-blank.png" alt-text="Screenshot is an example that shows the new model driven app blank and you can select a creating experience."::: --1. Select **Create.** --1. Give your app a name and select **Create.** -- :::image type="content" source="../assets/images/collaboration-control/collaboration-manager-for-inspection.png" alt-text="Screenshot is an example that shows add the Collaboration manager for inspection and create a new model-driven app."::: --1. Select **Add page.** --1. Select **Table based view and form.** -- :::image type="content" source="../assets/images/collaboration-control/table-based.png" alt-text="Screenshot is an example that shows the table based view and form and you can select a page type."::: --1. Select **Next.** --1. Search and select the table you've created earlier. -- :::image type="content" source="../assets/images/collaboration-control/table-view-form-pages.png" alt-text="Screenshot is an example that shows the table view form pages and can select the table that you've created."::: --1. Select **Add.** --1. Select **Publish** to save and publish your app. --1. Select **Play** to test out your new app. --Now you’ve successfully built a model-driven app. --## Add Collaboration controls to your application --Following are the steps to add Collaboration control capabilities such as Tasks, Meetings, Files, and Notes experiences to the app created: --1. To include the Tasks, Meetings, and Notes tabs you need to edit the Main Information form. To begin, go back to the explorer and select your solution. --1. Select the table you created in [Create a new model-driven app for Teams.](#create-a-new-model-driven-app-with-collaboration-controls-for-teams) --1. Go to the Forms tab for your table. -- :::image type="content" source="../assets/images/collaboration-control/forms-tab.png" alt-text="Screenshot is an example that shows the forms tab for your table."::: --1. Select the Information form of form type **Main** to open it in the form designer. --1. Once you are in the form designer, press and drag in a **1-column tab** from the **Components** section. -- :::image type="content" source="../assets/images/collaboration-control/components.png" alt-text="Screenshot is an example that shows the components of power apps."::: --1. After selecting the tab, rename the tab to “Tasks” in the property pane. --1. Select the tab name to select the full section and select **Expand first component to full tab** in the Properties pane. This is required as the Collaboration controls are best viewed in full tab views. -- :::image type="content" source="../assets/images/collaboration-control/tasks-pane.png" alt-text=" Screenshot describes how to select first component to full tab."::: -- :::image type="content" source="../assets/images/collaboration-control/expand-first-component.png" alt-text=" Screenshot describes how to expand first component to full tab."::: --1. Expand the Collaboration (Preview) category on the controls drawer and drag the Tasks (Preview) control onto the section in Tasks form. -- :::image type="content" source="../assets/images/collaboration-control/collab-preview.png" alt-text="Screenshot describes how to preview control onto the section in tasks form."::: --3. Set the table to Activities & select Done. -- :::image type="content" source="../assets/images/collaboration-control/select-table-activities.png" alt-text="Screenshot shows how to select the table to activities."::: --5. Select ‘Hide Label’ on the Properties. -- :::image type="content" source="../assets/images/collaboration-control/hide-label-properties.png" alt-text="Screenshot shows how to select the Hide Label option."::: --1. The Tasks control appears now. -- :::image type="content" source="../assets/images/collaboration-control/new-collab-control.png" alt-text="Screenshot shows is an example of tasks control display."::: --1. Repeat the Tasks steps to add Approvals, Files, Meetings, and Notes controls to your app. -1. After you add all the controls, you'll see the controls rendered below in Form Designer. If a control doesn't render in Form Designer, for example shows a blank form, run your app in Power Apps and the presence of a 'configure' page or an 'empty state' means the control was successfully added. -- :::image type="content" source="../assets/images/collaboration-control/new-collab-approval.png" alt-text="Screenshot shows Controls form the designer are successfully added."::: --1. You can now run your power app in Power Apps by selecting it. -- :::image type="content" source="../assets/images/collaboration-control/collaboration-manager-for-inspections-power-apps.png" alt-text="Screenshot shows to run your power app by selecting Collaboration manager for inspections."::: --1. Create a new record by selecting **+ New** and then open the record. -- :::image type="content" source="../assets/images/collaboration-control/power-apps-open-the-record.png" alt-text="Screenshot shows to create a new record."::: --1. Now you can see views for each tab that appear similar to the following image: -- :::image type="content" source="../assets/images/collaboration-control/tabs.png" alt-text="Screenshot is an example that shows the view for each tab."::: -- > [!TIP] - > The controls are only visible after a record is saved in the application. If the control tabs don't appear in your record, try to refresh your browser or republish the app from Power Apps. --Now you’ve successfully added the Collaboration controls to your application. You can now run your application in Power Apps and launch the controls. As settings aren't configured yet, you can't create entities such as Tasks, or Meetings until those are added. --## Define Settings for your Collaboration --You can define settings for Collaboration controls for the business entity such as the table created in [new model-driven app](#create-a-new-model-driven-app-with-collaboration-controls-for-teams). --> [!NOTE] -> For information on how to configure Collaboration Manager for Loans product, see [Collaboration Manager for Loans](/industry/financial-services/collaboration-manager/configure). --The settings that you can apply are as follows: --|Settings|Used by| -||| -|Group ID|Tasks, Internal Meetings, Approvals.| -|Bookings business ID|External meetings using Bookings | -|Site ID|SharePoint files | -|Drive ID|SharePoint files| --> [!NOTE] -> Settings are critical to launch your app, so ensure that you follow the steps as suggested. If you have issues launching and saving the controls recheck the values. --You can get the Group ID by creating a new team or use an existing team in Microsoft Teams to host your application and create settings variables. --To create a new team, see [create a team from scratch](https://support.microsoft.com/en-us/office/create-a-team-from-scratch-174adf5f-846b-4780-b765-de1a0a737e2b). --Use the following instructions to retrieve the Group ID of your Teams team for Approvals, Tasks, and internal Meetings: --1. Find your team in your teams list. --1. Select the ellipse **...** and select **Get link to team**. -- :::image type="content" source="../assets/images/collaboration-control/get-link.png" alt-text="Screenshot describes how to get the linked to the team."::: --1. Copy the link and record the value of `groupId` from the URL. You'll use this value at a later stage while defining the settings of your solution. -- `https://teams.microsoft.com/l/team/19%3akk_TuKhjXu92yJvg4TZ10S6rouLSCgvHIb5NOOTfRjg1%40thread.tacv2/conversations?groupId=4310f270-1aa5-4089-99f3-47eb3b4d69ad&tenantId=b699419b-e0df-47e3-9909-24076fdcf68b` --Use the following instructions to retrieve the Retrieve the SharePoint Site ID and Drive ID for Files: --1. To use the Files control, you need to configure to an existing SharePoint site or create a new SharePoint site. To create a new site, see [create a site](/sharepoint/create-site-collection). --1. Now retrieve the Setting Values of Site ID and Drive ID, which can be called using the details in your SharePoint site. -- 1. **Site ID**: Using [Graph Explorer](https://developer.microsoft.com/graph/graph-explorer), sign in and give permissions to Directory.ReadWrite.All and User.ReadWrite.All -- :::image type="content" source="../assets/images/collaboration-control/graph-permissions.png" alt-text="Screenshot is an example that shows the Graph Explorer."::: -- 1. Ensure that you replace hostname with your hostname and relative path to the site path and make a graph call to `https://graph.microsoft.com/v1.0/sites/{hostname}:/{relative-path-to-site}`. Following is an example: - 1. If your Site URL = `https://myhostname.sharepoint.com/sites/MySiteName` - 1. Hostname = `myhostname.sharepoint.com` - 1. Relative path to site = `sites/MySiteName` -- :::image type="content" source="../assets/images/collaboration-control/graph-call.png" alt-text="Screenshot is an example that shows the Graph call."::: -- Graph call would be, `https://graph.microsoft.com/v1.0/sites/myhostname.sharepoint.com:/sites/MySiteName`. -- 1. The response received is a Json object representing the Site, for example Site ID would be `abcdef.sharepoint.com,0abe7394-6fce-4dcc-9884-7eaceb48cd41,8cb86762-16cd-495e-87cb-893cfdf94054`. -- 1. Save the Site ID value parameter. -- 1. **Drive ID**: Using [Graph Explorer](https://developer.microsoft.com/graph/graph-explorer), sign in and make the graph call to `https://graph.microsoft.com/v1.0/sites/{site-id}/drives` with the value of Site ID that you saved earlier. -- 1. A Json response is returned with a parameter value of type array or list of drive objects. Look through the Json for the Json object whose name parameter matches the name of your document library. Save the value of the Drive ID parameter. --To create meetings with users outside of your organization such as customers and use virtual visit features within your app you would need to provide a Bookings business. For more information, see [Microsoft Bookings](/microsoft-365/bookings/bookings-overview?view=o365-worldwide&preserve-view=true). --## Add Settings to your Collaboration Manager app --To apply settings and explore the collaborative features of your app in Power Apps, open the application that you've created earlier. You would see a view page, where you can select the existing records or create new one. To begin with open or create a record. --You would need to add the Settings IDs that you've saved earlier for your application. --|Settings|Used by| -||| -|Group ID|Tasks, internal Meetings, Approvals.| -|Bookings business ID|External meetings using Bookings | -|Site ID|SharePoint files | -|Drive ID|SharePoint files| --### Add Settings for Tasks, Meetings, and Files --1. Launch a control and you can see a window as following: -- :::image type="content" source="../assets/images/collaboration-control/launch-window.png" alt-text="Screenshot is an example that shows the control window."::: --1. Select **Configure** and go to the General tab to add the Group ID. -- :::image type="content" source="../assets/images/collaboration-control/groupid-general.png" alt-text="Screenshot describes how to add the Group ID in General tab."::: --1. Open Files tab to add Site ID and Drive ID. -- :::image type="content" source="../assets/images/collaboration-control/files-tab.png" alt-text="Screenshot describes how to add the site ID and drive ID in files tab."::: --The Notes control doesn't require a setting value. Now you can create entities such as Tasks and Meetings in your application. If you're facing issues launching and saving the controls recheck the settings values. --## Explore your new Collaboration Manager app --Following sections guides you on how to use the Task, Notes, Meetings, Files, and Approvals controls. --### Create Tasks --Explore collaboration in the Tasks tab by selecting the Tasks tab, which opens an empty page where users can add all the relevant tasks they need to complete. --1. To create a new task for the team, select **Add a task**. It opens a dialog where you can provide specifics about the task and assign it to the relevant people on the team and select Save. -- :::image type="content" source="../assets/images/collaboration-control/add-task.png" alt-text="Screenshot describes on how to add a task."::: --1. The saved task appears in the tasks list. --1. As all the tasks are backed by Microsoft Planner. Users can use the Tasks app within Microsoft Teams to see all the tasks that are assigned. To get started, select ellipses **…** in Teams left pane. Search and select Tasks by Planner and To Do. -- :::image type="content" source="../assets/images/collaboration-control/tasks-planner.png" alt-text="Screenshot is an example of the Tasks by Planner and To Do."::: --1. After opening the Tasks by Planner and To Do app, users can see all the tasks that were created in your app within the **Assigned to me** section of the app. Users can also view the details of a task, add attachments, and mark them as complete. --### Create notes --To create a note select **Notes** tab from your app, which would redirect to an empty screen where users can provide any relevant information. To add a new note, select **New note**. -After adding relevant details in the notes, select **Save**. --### Create meetings --Select **Meetings** tab in a record to schedule both internal and external meetings. --To schedule an internal meeting, select the dropdown next to the **New meeting** button and then select **Internal meeting**. ---> [!NOTE] -> -> Customer Booking is enabled, if you have configured the Microsoft Booking with a valid setting for your app. --Within the **New meeting** dialog, users can provide relevant information about the meeting and select **Save**. The meeting appears in the meetings list. ---To schedule an external meeting with the customer, select the dropdown next to the **New meeting** button and select **Customer Booking**. If the **Customer Booking** option isn't available in the **New Meeting** dropdown, confirm if the app is configured to Microsoft Bookings in the Settings and the user has the Bookings Administrator role. For more information, see [add staff to Bookings](/microsoft-365/bookings/add-staff?view=o365-worldwide&preserve-view=true). You can add additional booking types by adding additional services within your Bookings business. ---Users can see both Internal meetings and Customer Bookings on their meeting list. After the meeting is started, users can join by selecting the **Join** button, which opens the meeting directly in Microsoft Teams. --As the meetings are backed by Outlook, users can go to either Bookings, or Outlook Calendar to see all the meetings listed in a single calendar. Internal meetings are listed in shared calendar. --Following are the steps to add a shared calendar to your Outlook (optional): --1. On the Home tab of the ribbon, in the **Manage Calendars** section, select **Open Calendar** > **Open Shared Calendar**. --1. In the Open a Shared Calendar dialog, enter the person's name. Select the person you're looking for and then select **OK**. --In the left Pane, under Shared Calendars you should now see an additional calendar with the person's name. ---### Add files --Open the **Files** tab in your application and select **Upload** to upload files from OneDrive for Business or from your computer. When a file is successfully uploaded, the main list view automatically refreshes to show the files in the list. ---### Approvals --Approvals allow users to request sign out from others when working in a record. For example, request an approval to complete a task or close a record. --1. Go to the **Approvals** tab of the application. --1. When there are no approval requests, users see the following screen. -- :::image type="content" source="../assets/images/collaboration-control/no-approvals.png" alt-text="Screenshot is an example that shows no approval requests."::: --1. Select the **New approval request** to open the approval request form. -- :::image type="content" source="../assets/images/collaboration-control/approval-request-form.png" alt-text="Screenshot is an example that shows the new approval request form."::: --1. In the Approval request form, fill the required fields and select **Send**, which creates a request and added to the list. -- :::image type="content" source="../assets/images/collaboration-control/approvals-list.png" alt-text="Screenshot is an example that shows the list of approvals."::: --1. Select the approval to view the details. --For more information on Approvals, See [create an approval](https://support.microsoft.com/en-us/office/create-an-approval-6548a338-f837-4e3c-ad02-8214fc165c84). --## See also --* [Integrate web apps](integrate-web-apps-overview.md) -* [Understand the Microsoft Teams app structure](../concepts/design/app-structure.md) |
platform | Collaboration Api Reference | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/collaboration-api-reference.md | - Title: Collaboration Control & Settings API- -description: In this module, learn about Collaboration controls and Settings REST API reference to manage settings, start, map, and retrieve collaboration activities. -- Previously updated : 01/10/2023---# Collaboration control and Settings REST API reference ---Developers can use the Collaboration controls and Settings REST API to manage settings, start, map, and retrieve collaboration activities with their own business model entities. Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). --## REST Operations: Collaboration - Custom API --|Operation|Description| -||--| -|[Associate Collaboration Map](/rest/api/industry/collaboration-controls/collaboration-custom-apis/associate-collaboration-map)|Associates a collaborative entity to a collaboration session.| -|[Begin Collaboration Session](/rest/api/industry/collaboration-controls/collaboration-custom-apis/begin-collaboration-session)|Creates a collaboration session record linked to a business entity, application context, and optional metadata.| -|[Disassociate Collaboration Map](/rest/api/industry/collaboration-controls/collaboration-custom-apis/disassociate-collaboration-map-custom-api)|Disassociates a mapped entity from the given collaboration session.| -|[Retrieve Collaboration Maps](/rest/api/industry/collaboration-controls/collaboration-custom-apis/retrieve-collaboration-maps-custom-api)|Gets a list of collaboration maps for a session of a specific entity type.| -|[Retrieve Collaboration Session](/rest/api/industry/collaboration-controls/collaboration-custom-apis/retrieve-collaboration-session-custom-api)|Gets a collaboration session record based on the parameters provided.| -|[Update Collaboration Map](/rest/api/industry/collaboration-controls/collaboration-custom-apis/update-collaboration-map-custom-api)|Updates a collaboration map record and its metadata if provided.| -|[Update Collaboration Session](/rest/api/industry/collaboration-controls/collaboration-custom-apis/update-collaboration-session)|Updates a collaboration session record and optionally its metadata.| --## REST Operations: Collaboration - Standard OData APIs --|Operation|Description| -||--| -|[Get Collaboration Map By Id](/rest/api/industry/collaboration-controls/collaboration-standard-o-data-apis/get-collaboration-map-by-id)|Gets the details from a collaboration map record.| -|[Get Collaboration Metadata](/rest/api/industry/collaboration-controls/collaboration-standard-o-data-apis/get-collaboration-metadata)|Gets a list of the collaboration metadata records for a given collaboration map or a collaboration root entity name.| -|[Get Collaboration Root](/rest/api/industry/collaboration-controls/collaboration-standard-o-data-apis/get-collaboration-root)|Lists all the collaboration sessions created.| --## REST Operations: Settings - Custom APIs --|Operation|Description| -||--| -|[Create and Update Settings](/rest/api/industry/collaboration-controls/settings-custom-apis/create-update-setting-custom-api)|Creates or updates a setting that matches both the group path and the settings definition name.| -|[Retrieve Null Settings](/rest/api/industry/collaboration-controls/settings-custom-apis/retrieve-null-settings-custom-api)|Returns a list of settings definitions that do not have a value.| -|[Retrieve Settings](/rest/api/industry/collaboration-controls/settings-custom-apis/retrieve-settings-custom-api)|Returns a list of specific settings or settings in groups.| --## REST Operations: Settings - Standard OData APIs --|Operation|Description| -||--| -|[Delete Settings Definition](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/delete-settings-definition)|Deletes a settings definition.| -|[Delete Settings Group](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/delete-settings-group)|Deletes a settings group.| -|[Delete Settings Type](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/delete-settings-type)|Delete a settings type.| -|[Delete Settings Value](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/delete-settings-value)|Deletes a settings value.| -|[Get Settings Definitions](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/get-settings-definitions)|Lists settings definitions.| -|[Get Settings Groups](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/get-settings-groups)|Lists settings groups.| -|[Get Settings Types](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/get-settings-types)|Lists settings types.| -|[Get Settings Value](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/get-settings-value)|Lists settings values.| -|[Patch Settings Definition](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/patch-settings-definition)|Updates a settings definition.| -|[Patch Settings Group](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/patch-settings-group)|Updates a settings group.| -|[Patch Settings Type](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/patch-settings-type)|Updates a settings type.| -|[Patch Settings Value](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/patch-settings-value)|Updates a setting value.| -|[Post Settings Definition](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/post-settings-definition)|Creates a new settings definition.| -|[Post Settings Group](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/post-settings-group)|Creates a new settings group.| -|[Post Settings Type](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/post-settings-type)|Creates a new settings type.| -|[Post Settings Value](/rest/api/industry/collaboration-controls/settings-standard-o-data-apis/post-settings-value)|Creates a new setting value.| |
platform | Collaboration Control Power Automate | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/collaboration-control-power-automate.md | - Title: Power Automate in Collaboration Control- -description: In this module, learn about Power Automate in Collaboration control app in Microsoft Teams and how to create an Azure app. -- Previously updated : 01/11/2023---# Power Automate ---Power Automate can be used to automate workflows around your Collaboration Manager application. For example, automatically create tasks when a new record is created. --Collaboration control connector enables developers to access Collaboration control APIs by triggers or actions in automated workflows in Microsoft Power Automate, Microsoft Power Apps, and Azure Logic apps. Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). --In this version, the connector enables makers to set up triggers: --1. When a Collaboration session is created. -1. When a planner task is created or modified. --It also includes a set of Collaboration controls APIs and tasks that can be invoked with a flow. The connector actions are found in workflow step selections. The connector itself would be found on Custom connectors with configurable options. To use the connector in your solution, itΓÇÖs necessary to create an Azure App trusted by your environment to execute the flows. --## Create an Azure App --In the [Azure portal](https://ms.portal.azure.com/#home) for Microsoft Entra management, sign in to your account with adequate permissions to add a user application to your environment with the following steps: --1. In the home page of Azure portal, select **Microsoft Entra ID**. -- :::image type="content" source="../assets/images/collaboration-control/azure-active-directory-home-portal.png" alt-text="Screenshot shows how to add a new App Registration."::: --1. Select **+Add** dropdown and then select **App registration**. -- :::image type="content" source="../assets/images/collaboration-control/new-app-registration.png" alt-text="Screenshot shows how to add new app registration."::: --1. In the app registration, set your application name and add the Web redirect URI to `https://global.consent.azure-apim.net/redirect`. -- :::image type="content" source="../assets/images/collaboration-control/register-an-application.png" alt-text="Screenshot shows how to register an application."::: --1. In the Implicit Grant and hybrid flows section, select both Access Tokens and ID tokens. -- :::image type="content" source="../assets/images/collaboration-control/authorisation-endpoint-tokens.png" alt-text="Screenshot shows the tokens and ID tokens."::: --1. Select API Permission in the left pane and select **Add a permission**, and then search for **Dynamic CRM** permission. -- :::image type="content" source="../assets/images/collaboration-control/dynamic-crm.png" alt-text="Screenshot shows how to add a permission."::: --1. Ensure to select **user_impersonation** in Permissions after selecting the Dynamics CRM. -- :::image type="content" source="../assets/images/collaboration-control/admin-consent-required.png" alt-text="Screenshot shows how to enable the checkbox user_impersonation."::: --1. In the Certificates & Secrets page, add a **New client secret** and save the value for later use while setting up the connector security. -- :::image type="content" source="../assets/images/collaboration-control/copy-new-secret-value.png" alt-text="Screenshot shows how to copy new secret value."::: --1. In the application Overview page, copy the **Application (client) ID** and save it for later use while setting up the connector security. -- :::image type="content" source="../assets/images/collaboration-control/application-client-ID.png" alt-text="Screenshot shows how to save client ID"::: --Now your Azure app is all set and you need to add it as a user application in your environment. --## Add Azure app to Power Automate environment --1. Open Power Apps portal, in the upper right corner select **settings** and open **Admin center**. -- :::image type="content" source="../assets/images/collaboration-control/power-apps-interface.png" alt-text="Screenshot shows the Power apps interface."::: --1. In the admin center, select **Environment** from the left pane and select your environment in the list that you want to add the connector app. -- :::image type="content" source="../assets/images/collaboration-control/power-platform-admin-center.png" alt-text="Screenshot shows how to add connector app."::: --1. In the environment details page, select **Settings**. -- :::image type="content" source="../assets/images/collaboration-control/settings-environment.png" alt-text="Screenshot shows how to select settings."::: --1. In the settings details page, select **Users + permissions** section and select **Application users**. -- :::image type="content" source="../assets/images/collaboration-control/users-link.png" alt-text="Screenshot shows the application user link."::: --1. In the App users page, select the **+ New app user**. **Create a new app user** window appears. -- :::image type="content" source="../assets/images/collaboration-control/new-app-user.png" alt-text="Screenshot shows the new app user."::: --1. Select **+ Add an app**. -- :::image type="content" source="../assets/images/collaboration-control/create-new-app-user.png" alt-text="Screenshot shows how to create new app user."::: --1. Select your app from the search box and select add again. -- :::image type="content" source="../assets/images/collaboration-control/add-app-aad.png" alt-text="Screenshot shows how to add app from Microsoft Entra ID."::: --After the app is added, set the **Business unit** and **Security Roles** to your connector application. Select **Create** and your app is in the list. With the app user set in the environment, we can proceed to custom connector configuration. --## Custom connector configuration --1. Open PowerApps or Power Automate and select the **Custom Connectors** menu. Select **edit** for the Collaboration connector. -- :::image type="content" source="../assets/images/collaboration-control/collaboration-connector.png" alt-text="Screenshot shows how to select edit for custom connector menu."::: --1. In the General Information tab, enter the host with the address of Dynamic 365 instance domain (without the https://). -- :::image type="content" source="../assets/images/collaboration-control/general-information.png" alt-text="Screenshot shows the General information."::: --1. In the Security tab, enter the following inputs: -- * **Client secret**: Use your saved app secret value in the input. - * **Client id**: Your Azure app (Client ID). - * **Resource URL**: The URL of your Dynamic 365 instance (`https://org.crm.dynamics.com/`). - * **Scope**: Same as the resource URL with a `.default` suffix (`https://org.crm.dynamics.com/.default`). -- :::image type="content" source="../assets/images/collaboration-control/dynamic-365-instance.png" alt-text="Screenshot shows the Dynamic 365 instance."::: --1. Select **Update connector** to save the changes and allow your flow to establish connections. -- :::image type="content" source="../assets/images/collaboration-control/custom-connector.png" alt-text="Screenshot shows the custom connector."::: --## How to invoke the connectorΓÇ» --Triggers and actions are pre-defined with configurable input and output as a workflow step. Adding the workflow step to the proper workflow position with correct input and output configuration to define when the trigger or action is to be invoked. -- :::image type="content" source="../assets/images/collaboration-control/invoke-the-connector.png" alt-text="Screenshot shows how to invoke the connector."::: --### Triggers and actions supported with connector --The following triggers and actions are supported within a flow: --* **Triggers** -- 1. When a Collaboration Session is created. -- :::image type="content" source="../assets/images/collaboration-control/colab-session-created-preview.png" alt-text="Screenshot shows Collaboration session that is created."::: -- **Scope:** A scope to limit, which rows can trigger the flow. -- **Run as:** The running user for steps where invoker connections are used. -- 1. When a Task is created or modified. -- :::image type="content" source="../assets/images/collaboration-control/task-created.png" alt-text="Screenshot shows the task is created or modified."::: -- By default, the trigger Planner task is disabled and won't trigger. To enable it, the tenant admin must follow the steps: -- 1. Create a support ticket under the path Power Apps/Collaboration controls/Settings. - 1. Request that your environment is enabled for the Collaboration connector and provides your Environment URL (preferred) or Organization ID. - 1. You can add the following sample text to your support request: "Enable Environment URL: `url` for the Collaboration connector". - 1. To open a support ticket, see [Get Help + Support](/power-platform/admin/get-help-support). --* **Actions** -- 1. Begin Collaboration session -- :::image type="content" source="../assets/images/collaboration-control/begin-collab-session.png" alt-text="Screenshot shows how to begin collaboration session."::: -- This step action creates a new collaboration session for your Dataverse business entity: -- * **Application Name:** Name of the associated application, for example, could be ΓÇ£Collaboration Manager for LoansΓÇ¥ or ΓÇ£Collaboration Manager for Closed Loan AuditingΓÇ¥. - * **Collaboration Root Entity Name:** Type of application record (table name) for example, could be ΓÇ£msfi_loanapplicationΓÇ¥ for a Collaboration Manager for Loans application. - * **Collaboration Root Entity ID:** ID of the associated application record, e.g.could be the ID of a Loan Application record. -- ***Advanced options*** -- **Metadata (Advanced):** Adds metadata for a collaboration session. -- * **OData Type:** This field needs to be provided if the other key/value is set and needs to match exactly #Microsoft.Dynamics.CRM.m365_collaborationmetadata. - * **Key:** Key associated with the metadata attribute. - * **Value:** Value associated with the metadata attribute. -- 1. Retrieve Collaboration session -- :::image type="content" source="../assets/images/collaboration-control/retrieve-collab-session.png" alt-text="Screenshot shows how to Retrieve collaboration session."::: -- This step action returns the collaboration session that matches the provided inputs: -- * **Application Name:** The application name context for the collaboration session. - * **Collaboration Root Entity ID:** The business entity ID for the collaboration session. - * **Collaboration Root Entity Name:** The business entity type for the collaboration session. -- 1. Update Collaboration session -- :::image type="content" source="../assets/images/collaboration-control/update-collab-session.png" alt-text="Screenshot shows how to update collaboration session."::: -- This step action updates an existing collaboration session: -- * **Collaboration Root ID:** The GUID for the target collaboration session/root record. - * **Collaboration Root Entity ID:** The business entity ID that the collaboration session refers to. - * **Collaboration Root Entity Name:** The business entity type name that the collaboration session refers to. -- ***Advanced options:*** -- **Create Metadata (Advanced):** Adds more metadata to a collaboration session record. -- * **OData Type:** This field needs to be provided if the other key/value is set and needs to match exactly #Microsoft.Dynamics.CRM.m365_collaborationmetadata. - * **Key:** Key associated with the metadata attribute. - * **Value:** Value associated with the metadata attribute. -- **Update Metadata (Advanced):** Updates existing metadata on a collaboration session record. -- * **OData Type:** This field needs to be provided if the other key/value is set and needs to match exactly #Microsoft.Dynamics.CRM.m365_collaborationmetadata. - * **Key:** Key associated with the metadata attribute to update. - * **Value:** Value associated with the metadata attribute. -- **Delete Metadata (Advanced):** Removes any existing metadata on a collaboration session record. -- * **OData Type:** This field needs to be provided if the other key/value is set and needs to match exactly #Microsoft.Dynamics.CRM.m365_collaborationmetadata. - * **Key:** Key associated with the metadata attribute to remove. -- 1. Associate Collaboration Map (external) -- :::image type="content" source="../assets/images/collaboration-control/associate-collab-map.png" alt-text="Screenshot shows how to associate collaboration map."::: -- This step action creates a mapping of an external collaboration entity (outside Dataverse) with your collaboration session: -- * **Collaboration Root ID:** The collaboration session unique identifier to map to a collaborative entity. - * **Collaboration Map External ID:** The external collaborative resource ID to map. - * **Collaboration Map Entity Name:** The external collaborative entity type name to map. -- ***Advanced options:*** -- **Metadata:** Add metadata for a collaboration map. - * **OData Type:** This field needs to be provided if the other key/value is set and needs to match exactly #Microsoft.Dynamics.CRM.m365_collaborationmetadata. - * **Key:** Key associated with the metadata attribute. - * **Value:** Value associated with the metadata attribute. -- 1. Associate Collaboration Map (internal) -- :::image type="content" source="../assets/images/collaboration-control/associate-collab-map-internal.png" alt-text="Screenshot shows how to associate collaboration map internal."::: -- This step action creates a mapping of a collaboration entity (Dataverse table) with your collaboration session. Internal are intended to create mappings between internal Dataverse entities or tables only. -- * **Collaboration Root ID:** The collaboration session unique identifier to map to a collaborative entity. - * **Collaboration Map Entity ID:** The Dataverse collaborative entity ID to map. - * **Collaboration Map Entity Name:** The Dataverse collaborative entity type name to map. -- ***Advanced options:*** -- **Metadata (Advanced)** Add metadata for a collaboration map. -- * **OData Type:** This field needs to be provided if the other key/value is set and needs to match exactly #Microsoft.Dynamics.CRM.m365_collaborationmetadata - * **Key:** Key associated with the metadata attribute - * **Value:** Value associated with the metadata attribute -- 1. Update Collaboration Map -- :::image type="content" source="../assets/images/collaboration-control/update-collab-map.png" alt-text="Screenshot shows how to update collaboration map."::: -- This step action updates an existing collaboration map: -- * **Collaboration Map ID:** The collaboration map unique identifier to update. - * **Collaboration Map Entity ID:** The collaborative entity ID to map. This value must be empty if the external ID is Provided - * **Collaboration Map Entity Name** - * **Collaboration Map External ID:** The external collaborative resource ID to map. This value must be empty if the entity ID is provided. -- ***Advanced options:*** -- **Create Metadata:** Adds more metadata to a collaboration map record. -- * **OData Type:** This field needs to be provided if the other key/value is set and needs to match exactly #Microsoft.Dynamics.CRM.m365_collaborationmetadata. - * **Key:** Key associated with the metadata attribute. - * **Value:** Value associated with the metadata attribute. -- **Update Metadata:** Updates existing metadata on a collaboration map record. -- * **OData Type:** This field needs to be provided if the other key/value is set and needs to match exactly #Microsoft.Dynamics.CRM.m365_collaborationmetadata - * **Key:** Key associated with the metadata attribute to update - * **Value:** Value associated with the metadata attribute -- **Delete Metadata:** Removes any existing metadata on a collaboration map record. -- * **OData Type:** This field needs to be provided if the other key/value is set and needs to match exactly #Microsoft.Dynamics.CRM.m365_collaborationmetadata. - * **Key:** Key associated with the metadata attribute to remove. -- 1. Get Collaboration Metadata -- :::image type="content" source="../assets/images/collaboration-control/get-collab-metadata.png" alt-text="Screenshot shows how to get collaboration metadata."::: -- This step action lists all metadata matching the specified filter. -- **Filter:** A filter to apply to the metadata query. - Example retrieving all metadata related to a collaboration map entity ID - m365_entityname eq 'm365_collaborationmap' and m365_entityid eq 'GUID' -- 1. Create Planner Task -- :::image type="content" source="../assets/images/collaboration-control/create-planner-task.png" alt-text="Screenshot shows how to create planner task."::: -- This step action creates a Graph Planner Task using Collaboration controls Planner task virtual table: -- * **Collaboration Root ID (Required):** Collaboration session unique identifier - * **Plan ID (Required):** Plan ID that the task belongs - * **Title (Required):** Title of the task - * **Assignments:** A json formatted object that represents all the assignments of a Task. See, [plannerAssignments resource type](/graph/api/resources/plannerassignments) - * **Bucket ID:** Bucket ID to which the tasks belong. - * **Priority:** Priority of the task. 0 and 10 (inclusive) increasing value being lower priority. -- ***Advanced options:*** -- * **Active Checklist Item Count** (Advanced): Number of checklist items with value set to false representing incomplete items. - * **Applied Categories:** A json formatter object that represents all the categories to apply for the task. See, [plannerAppliedCategories resource type](/graph/api/resources/plannerappliedcategories). - * **Assignee Priority:** String value hints used to order items of this type in a list view. See, [using order hints in Planner](/graph/api/resources/planner-order-hint-format) - * **Checklist Item Count:** Number of checklist items that are present on the task. - * **Completed By:** A json formatted object that represents the identity of the user that completed the task. See, [identitySet resource type](/graph/api/resources/identityset) - * **Conversation Thread ID:** Thread ID of the conversation on the task. This is the ID of the conversation thread object created in the group. - * **Created By:** A json formatted object that represents the identity of the user that created the task. See, [identitySet resource type](/graph/api/resources/identityset) - * **Due Date Time:** Date and time at which the task is due. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on January 1, 2014 is 2014-01-01T00:00:00Z. - * **Order Hint:** Hint used to order items of this type in a list view. The format is defined as outlined in [using order hints in Planner](/graph/api/resources/planner-order-hint-format). - * **Percent Complete:** Percentage of task completion (0-100) - * **Preview Type:** This sets the type of preview that shows up on the task. The possible values are: automatic, noPreview, checklist, description, reference. - * **Reference Count:** Number of external references that exist on the task. - * **Start Date Time:** Date and time at which the task starts. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on January 01, 2014 is 2014-01-01T00:00:00Z. -- 1. Get Planner Task -- :::image type="content" source="../assets/images/collaboration-control/get-planner-task.png" alt-text="Screenshot shows the get planner task."::: -- This step action returns a Planner Task data using Collaboration controls Planner task virtual table: -- **Task ID (Required):** Task unique identifier -- 1. Update Planner Task -- :::image type="content" source="../assets/images/collaboration-control/update-planner-task-preview.png" alt-text="Screenshot shows Update planner task."::: -- This step action updates a planner task record using Collaboration controls planner task virtual table. -- * **Task ID (Required):** Task unique identifier. - * **Assignments:** A json formatted object that represents all the assignments of a Task. See plannerAssignments resource type - Microsoft Graph v1.0 | Microsoft Docs. - * **Bucket ID:** Bucket ID to where the task belongs. - * **Planner Task Details:** Represents the additional information about a task. - * **Due Date Time:** Date and time at which the task is due. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on January 01, 2014 is 2014-01-01T00:00:00Z. - * **Priority:** Priority of the task. 0 and 10 (inclusive) increasing value being lower priority. - * **Percent Complete:** Percentage of task completion (0-100). - * **Title:** Title of the task. -- ***Advanced options:*** -- * **Applied Categories:** A json formatted object that represents all the categories to apply for the task. See, [plannerAppliedCategories resource type](/graph/api/resources/plannerappliedcategories). - * **Assignee Priority:** String value hints used to order items of this type in a list view. See, [using order hints in Planner](/graph/api/resources/planner-order-hint-format). - * **Conversation Thread ID:** Thread ID of the conversation on the task. This is the ID of the conversation thread object created in the group. - * **Collaboration Root ID:** The collaboration session unique identifier. - * **Order Hint:** Hint used to order items of this type in a list view. The format is defined as outline here. - * **Start Date Time:** Date and time at which the task starts. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on January 1, 2014 is 2014-01-01T00:00:00Z. --**Example Flow Scenario** --The following are examples of flows: --1. Getting a response from Microsoft forms, creating a Collaboration session and a task associated. -- :::image type="content" source="../assets/images/collaboration-control/response-submitted.png" alt-text="Screenshot shows how to submit new response."::: --1. Every time a collaboration session is created, capture the details and send an e-mail notification. -- :::image type="content" source="../assets/images/collaboration-control/colab-session-created-preview.png" alt-text="Screenshot shows the Collaboration session created."::: --> [!NOTE] -> Multiple flows could be triggered in this way to perform different actions, using data from the response of the Collaboration session creation. --## See also --* [Integrate web apps](integrate-web-apps-overview.md) -* [Connectors](../webhooks-and-connectors/what-are-webhooks-and-connectors.md#connectors) |
platform | Collaboration Control | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/collaboration-control.md | - Title: Collaboration Controls Overview- -description: In this module, learn how Collaboration controls allow makers to build apps that integrate with Microsoft 365 services like Planner, Bookings, and Outlook. -- Previously updated : 01/18/2023---# Collaboration controls ---The Collaboration controls enable applying Microsoft 365 and Microsoft Teams for Approvals, Files, Meetings, Notes, and Tasks to enable contextual collaboration around business processes. These controls allow you to build custom collaborative experiences that can be surfaced right in Teams. The solutions that make up Collaboration controls allow makers to build applications that integrate with Microsoft 365 services like Planner, Bookings, Outlook, and SharePoint in a low code manner. Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). --These controls give you the power to simplify your users workflow collaboration by building custom apps for your org (LOB apps) and work without switching the context from app to app with the following: --* Approvals -* Files -* Meetings -* Notes -* Tasks --Following are some of the key capabilities of Collaboration controls: --* **Microsoft Planner tasks:** Create tasks and assign it to members of a record so that they can view a consolidated list of tasks in model driven app and tasks app in Microsoft Teams. --* **Dataverse Tasks:** Create tasks that can be assigned to users who are external to your organization. --* **Dataverse Notes:** Create notes that are assigned to a record in your app. --* **Outlook Meetings:** Schedule meetings with both customers and internal employees and seamlessly connect with others with Microsoft Teams with a select of a button. --* **SharePoint Files:** Share files with members of a record so that you can search, reference, and edit relevant artifacts in a centralized location backed by SharePoint. --* **Approvals:** Streamline requests within your team. --> [!NOTE] -> By configuring and using the various Microsoft 365 capabilities of Collaboration controls mentioned earlier, you are granting permission for user data to pass through the Graph API and accepting [Microsoft API terms of Use](/legal/microsoft-apis/terms-of-use?context=graph%2Fcontext). For more information, see [Microsoft Graph](/graph/overview). --## How Collaboration controls works --The controls run within a Power Apps Model Driven Application (MDA) that can be deployed to Microsoft Teams. MDA run on Microsoft Dataverse and can be integrated with a custom data model. The controls integrate with Microsoft Graph for Planner tasks, Outlook and Teams calendars, and SharePoint files. The Collaboration controls don't integrate directly with external sources, such as a system of record or a portal. --* Data can be added to Dataverse from external sources via standard OData APIs. --* Data can be read from Dataverse via standard OData APIs and submitted to external sources such as a system of record or a portal. ---## See also --* [Integrate web apps](integrate-web-apps-overview.md) -* [Microsoft Graph overview](/graph/teams-concept-overview) |
platform | Collaboration Controls Limitations | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/collaboration-controls-limitations.md | - Title: Limitations in Collaboration Controls- -description: Learn about limitations, known issues, and errors in the Collaboration controls app for Microsoft Teams including Booking Meetings, Tasks, and Files. -- Previously updated : 09/30/2022---# Limitations and known issues ---Following are the limitations for Collaboration controls: --* Components can't be used in Canvas apps. -* Components only support full tab views. -- :::image type="content" source="../assets/images/collaboration-control/tasks-tab.png" alt-text="The screenshot shows the tasks." border="true"::: --* The subgrid view selected isn't honored. All tasks, meetings, or notes for the collaborative record are displayed. -- :::image type="content" source="../assets/images/collaboration-control/subgrid-view.png" alt-text="The screenshot shows the subgrid view of the tasks." border= "true"::: --* Activities added to the timeline control don’t appear in the components, tasks, meetings, and notes created in the components aren't included in the timeline control. -* New records must be saved before accessing the components, otherwise you see an empty screen. -* The components don't inherit theming from the form or app they're added to. -* Localization is only available when running the app inside Microsoft Teams. -* Microsoft Edge strict mode isn't supported and cross-site cookies are required. --**Admin Center does not update when installation or upgrade is complete** --When following the installation steps in [install Collaboration controls](~/samples/install-collaboration-control.md), you're redirected to the Power Platform admin center. A banner is displayed when installation starts, but it isn't updated when installation completes. The status is listed during installation and after completion it might not be available in the list. You can view the solutions list at [https://make.powerapps.com/](https://make.preview.powerapps.com/) to confirm that installation is complete. --**View during installation:** - :::image type="content" source="../assets/images/collaboration-control/view-during-installation.png" alt-text="The screenshot shows the process during installation." border="true"::: --**View after installation:** - :::image type="content" source="../assets/images/collaboration-control/view-after-installation.png" alt-text="The screenshot shows the completion of the installation." border="true"::: --When upgrading the controls to a later version, the same installation started banner displays, but the control status remains installing even after the upgrade is complete. You can confirm the upgrade is complete by checking the solutions list at [https://make.powerapps.com/](https://make.preview.powerapps.com/), it must take approximately 15 minutes. --You can also see in the history for specific solutions that the later version was installed and then the previous version was removed: - :::image type="content" source="../assets/images/collaboration-control/history.png" alt-text="The screenshot shows the history for specific solutions of the versions that are installed and removed." border="true"::: --## Bookings Meetings --The Meetings control supports one on one meetings when using Bookings to engage with users outside of your organization. One to many meetings aren't supported at this time using Collaboration controls. --**Meeting attendee status is incorrect** --When an attendee RSVPs to a meeting, their response status might not display correctly in both the agenda view and the meeting details. Selecting the decline button might return an error message on screen. --## Tasks --**Tasks: Filter "clear" text is not translated** --The text on the “clear" button displayed on the Tasks filter isn't translated. --**Tasks: Grid context menu appears cropped** --When the Tasks grid is populated by a low number of Tasks the grid context menu might appear cropped and require use of scrollbars. --**Tasks: Keyword search filter use “BeginsWith” operator for “Guest” tasks** --When search Tasks using the keyword text filter, “Guest” tasks are returned using the “BeginsWith” operator. “Member” tasks are returned using the “Contains” operator. --## Files --When navigating into the Archive folder after archiving files, users might experience duplicate archive folders. Navigating from the archive folder(s) to the files main view resolves the issue, and files that are archived aren't removed. --## Controls --**Controls fail to save** --If a control fails to save a task or meeting, the likely cause is misconfigured Group ID or Channel ID. --Solution 1: Confirm the IDs are correct and the settings are applied as per the settings exercise. --Solution 2: Ensure that the Power Apps environment and Teams environment are on the same tenant. --**Controls fail to load or show an error** --If the controls fail to load or show an error, it might be a transient issue. --Example: ---This would render in the console log as: ---Solution: Refresh your browser or if in Teams app, reload the tab. --If you want to change the app name, icon, or description after uploading it to Teams, see [customize appearance of apps](/microsoftteams/customize-apps#customize-details-of-an-app) --## Error logging --The controls provide the following methods to debug your application. --1. **Trace logging** of plugin events when an API is invoked. This information is stored in your Dataverse environment. -- 1. To enable trace logging, follow these steps in [logging and tracing](/power-apps/developer/data-platform/logging-tracing?WT.mc_id=email). --1. **Browser logging** for UI controls. This is standard console logging. -- 1. It'sBrowser logging is supported when using a browser to run the Collaboration Manager app through Power Platform and Teams web. - 1. Within the console tab, you can search for errors using the Collaboration Manager error message or searching for Collaboration Manager control names such as Tasks. --> [!TIP] -> If an error occurs in a Teams desktop client, try to replicate in Teams web to capture the error log. --## FAQ --<br> --<details> --<summary><b>What are the Collaboration controls (Preview)?</b></summary> --Collaboration controls (Preview) enable you to add Microsoft 365 capabilities to your Power Apps custom app built for your org (LOB app) to simplify user workflows when collaborating on business processes in Teams or Power Apps. --<br> --</details> --<br> --<details> --<summary><b>What is the benefit of the Collaboration controls (Preview) for makers?</b></summary> --With these new controls, you as a maker can drag-and-drop controls that bring Microsoft 365 collaboration to your app. --<br> --</details> --<br> --<details> --<summary><b>What is the benefit of the Collaboration controls (Preview) for users?</b></summary> --Your users can experience productivity gains and stay in their flow by collaborating on approvals, files, meetings, notes, and tasks without leaving the context of your app. --<br> --</details> --<br> --<details> --<summary><b>How do I get access to the Collaboration controls (Preview)?</b></summary> --Request that your Power Platform administrator installs the controls from AppSource to your Power Apps environment. --<br> --</details> --<br> --<details> --<summary><b>How do I add the controls to a Model Driven App?</b></summary> --Go to Form Designer and drag the controls from the Component pane onto a form. --<br> --</details> |
platform | Configure Tasks | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/configure-tasks.md | - Title: Configure Tasks - Collaboration Control- -description: Learn how to configure Tasks for external clients in Collaboration control app in Microsoft Teams and configure XML schema. -- Previously updated : 09/30/2022---# Configure Tasks for external clients ---External tasks that can be assigned to users who aren't part of your organization or don't have access to your application such as assigning a task to a customer. --To enable, you need an extra step of passing an XML string to each instance of Tasks PCF control attached to the sub grid component on desired MDA form. XML string is a parametrized query that allows the control to extract the required data from a table that contains customer information. --To create external tasks, follow the steps: --1. Create a new custom entity such as Customer or reuse an existing customer entity like Contacts. --1. Create new fields that hold the following information: - 1. Name - 1. Email - 1. Parent (Lookup to the parent table such as Inspections) - > [!NOTE] - > The customer entity created is where the task control pulls the customer information from when assigning an external task. The Parent field ensures that the customer entity is linked to an Inspection record. --1. Generate a Fetch XML file to allow the PCF control to pull the right customer information. -- **Configure XML schema** -- Following is the schema definition for the tasks configuration Fetch XML. Any Fetch XML needs to be designed to meet the following requirements: -- * Query result shall return the following properties for each user object: - * ID - * displayname - * email, use alias if needed. - * Query shall contain the **@top** parameter to allow caller to limit the number of results. - * Query shall have **@rootEntityId** parameter to filter results by only related records, if needed. - * Query shall have **@useName** parameter to allow result filtering by name - * Query shall have **@useIdentifier** parameter to allow fetching only selected users. -- **Configuration XML schema and example** -- Configuration of XML schema pulls data from the customer table. You can adjust the `<fetch/>` node to specify your own query to display users from any other custom table. -- > [!NOTE] - > The above entity and attribute name and order attribute in the XML are in **PublisherPrefix_TableColumn** format. -- ```xml - - <custom-tasks> - <custom-task id="external" name="External" for="guest"> - <fetch top="@top"> - <entity name="[Name of table, e.g. Crb2891_customer]"> - <attribute name="[Name of ID column, e.g. Crb2891_customerid]" alias="id" /> - <attribute name="[Name of primary name column, e.g. Crb2891_name]" alias="displayname" /> - <attribute name="[Name of email column, e.g. Crb2891_email]" alias="email" /> - <order attribute ="[Name of primary name column, e.g. Crb2891_name]" descending="false" /> - <filter type="and"> - <condition attribute="[Name of parent lookup column, e.g. Crb2891_parent]" operator="eq" value="@rootEntityId" /> - <condition attribute="[Name of primary name column, e.g. Crb2891_name]" operator="like" value="@userName" /> - <condition attribute="[Name of email column, e.g. Crb2891_email]" operator="like" value="@userIdentifier" /> - </filter> - </link-entity> - </entity> - </fetch> - </custom-task> - </custom-tasks> - - ``` --1. Bind the Task controls to the subgrid within the classic form designer. Select **Save** and then select **Switch to classic**. --1. Move through in the classic form designer, until you find the **Tasks** tab. Double-click the subgrid to open its property dialog. -- :::image type="content" source="~/assets/images/collaboration-control/subgrid-property.png" alt-text="Screenshot shows the tasks property dialog."::: --1. In the property dialog, set the properties as shown in the following image: -- :::image type="content" source="~/assets/images/collaboration-control/tasks-property.png" alt-text="Sceenshot shows an example of the updated properties in the Tasks property settings."::: --1. Go to the Controls tab and select :::image type="icon" source="~/assets/images/collaboration-control/edit-icon.png" alt-text="Screenshot shows how to edit the tasks."::: on Custom Tasks property to add the Fetch XML generated. --1. Paste the Fetch XML -- :::image type="content" source="~/assets/images/collaboration-control/set-fetchproperties.png" alt-text="Screenshot shows how to paste Fetch XML."::: -- :::image type="content" source="~/assets/images/collaboration-control/custom-tasksproperty.png" alt-text="Screenshot shows how to configure Custom property settings."::: --1. Select **Ok** in Configure Property "Custom Tasks" and Set Properties windows. --1. Save and Publish. --## See also --* [Integrate web apps](integrate-web-apps-overview.md) -* [Public developer preview manifest schema for Teams](../resources/schem) |
platform | Deploy Collaboration Control In Teams | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/deploy-collaboration-control-in-teams.md | - Title: Deploy App with Collaboration Controls- -description: In this module, learn how to deploy your app with Collaboration control in Microsoft Teams and how to enable others to use your app. -- Previously updated : 10/04/2022---# Deploy Collaboration controls to Microsoft Teams ---Collaboration controls work best within Microsoft Teams. You can create a new app that can be embedded inside Teams app as both, a personal app and a tab app. Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). --## Configure the app for Teams --The app that you've created in [create a model-driven application](~/samples/app-with-collaboration-controls.md#create-a-model-driven-application) only have a single left pane and there are no complex commands. So before adding your app into Teams, you can hide the left pane and make more comprehensible header view. --> [!NOTE] -> Don't enable the following steps if you want to display the left pane and high-density header to your users. --To do so, we'll use Power Apps **new app** settings. --1. Go to **Solutions** in the left pane. --1. Go to the bottom of your solutions list and select **Default solution**. --1. Search for and select **Setting definition**. -- :::image type="content" source="../assets/images/collaboration-control/settings-defnition.png" alt-text="Screenshot shows searching and setting definition in Power apps."::: --1. Search and select **Hide the navbar** from the list of settings definitions. This hides the left pane in your application. -- :::image type="content" source="../assets/images/collaboration-control/hide-the-nav-bar.png" alt-text="Screenshot shows the Hide the navbar option."::: --1. On the lower right of your application in the edit pane, there's a section titled **Setting app values**. If you created your app using the modern app designer, your app appears on the list. Select **New app value** under your app. --1. Change the value from **No** to **Yes.** -- :::image type="content" source="../assets/images/collaboration-control/value-to-yes.png" alt-text="Screenshot displays dropdown to select change value to yes."::: --1. Select **Save.** --1. Search and select **App high density page header** from the list of settings definitions and repeat the process. -- :::image type="content" source="../assets/images/collaboration-control/density-page-header.png" alt-text="Screenshot shows how to select app high density page header."::: --1. Select **Back to solutions**. -- :::image type="content" source="../assets/images/collaboration-control/default-solution.png" alt-text="The screenshot shows default solution."::: --1. Select **Publish all customizations**. -- :::image type="content" source="../assets/images/collaboration-control/publish-cusomization.png" alt-text="Publish all customizations."::: --## Add the app to Microsoft Teams app catalog --As the settings are defined, you can now add the app to Microsoft Teams. To start with, browse to the **Apps** page in the Power Apps maker portal and find the app that you created and select ellipse **…**. --To add the app to Teams, select **Add to Teams**. ---Selecting **Add to Teams** opens a dialog where you can review the details and select **Download app**, which saves the app manifest (previously called Teams app manifest) to your device. ---To upload your app to Teams, see [upload your app in Team](~/concepts/deploy-and-publish/apps-upload.md). --## Enable others to use your application --Following are required to enable users to run the deployed Collaboration Manager applications built using the Collaboration controls: --* Create a Collaboration team -* Add members to the team -* Create a security role -* Assign security roles to team members --### Create a Collaboration team --1. Sign into [Power Platform admin center](https://admin.powerplatform.microsoft.com/environments). -- 1. Select the environment where the app is deployed. - 1. Select **Settings** > **Users** + **permissions**. - 1. Select **Teams**. --1. Select the **+ Create team** button from the top of the page. --1. Add all the required fields: - 1. **Team name:** Ensure the name is unique within the business unit. - 1. **Description:** Enter a description of the team. - 1. **Business unit:** Select a business unit from the dropdown list. - 1. **Administrator:** Search for the user within your organization that you want to assign as the administrator by entering characters. - 1. **Team type:** Select the team type. The following steps assume that you've selected Owner from the dropdown list. The other team types (Microsoft 365 team and Microsoft Entra team) auto populates team members from Microsoft Entra ID. -- :::image type="content" source="../assets/images/collaboration-control/new-team.png" alt-text="Screenshot to select new team type."::: -- 1. Ensure that you note the team name. You'll need it later to assign this team as the owner of a record. -- 1. Select **Next.** --### Add members to the team --> [!NOTE] -> Adding members to the team isn't necessary if your team type is Microsoft Entra ID or Microsoft 365. --1. Select a team, and then select **Manage team members**. --1. To add new team members, select **+ Add team members** and choose users from your organization to add. -- :::image type="content" source="../assets/images/collaboration-control/add-team-members.png" alt-text="The screenshot describes how to add team members."::: --1. To delete a team member, select the user and then choose **Remove**. --### Create a security role --1. Select **Settings** > **Users** + **permissions** in the environment where the app is deployed. --1. Select **Security roles**. -- :::image type="content" source="../assets/images/collaboration-control/users-permission.png" alt-text="Screenshot displays to add new team members for users permission."::: --1. Select on **New role** at the upper left of the page, which now opens a new page. --1. On the **Details tab**, provide a name for your security role. --1. Go to **Custom Entities** tab. -- 1. Give organization permissions (full green circle) for each of the collaboration entities, **Collaboration Map**, **Collaboration Metadata**, and **Collaboration Root**. -- :::image type="content" source="../assets/images/collaboration-control/collab-map.png" alt-text="Screenshot shows how to create a security role on collaboration map."::: --1. Select **Save** and **Close**. --### Assign Security roles --1. Select **Settings** > **Users** + **permissions** in the environment where the app is deployed. --1. Select **Teams**, select then the team you created in [create a Collaboration team](#create-a-collaboration-team). --1. Choose **Manage security roles** from the header. -- :::image type="content" source="../assets/images/collaboration-control/edit-team.png" alt-text="Screenshot displays collaboration map, collaboration metadata, and collaboration root. for edit team."::: --1. Select the roles [created in a security role](#create-a-security-role). --1. Select **Save**. --For more information on role privileges, see [configure user security in an environment](/power-platform/admin/database-security). --## See also --[Integrate web apps](integrate-web-apps-overview.md) |
platform | Install Collaboration Control | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/install-collaboration-control.md | - Title: Steps to Install Collaboration Controls -description: In this module, learn how to install Collaboration controls with power apps and Microsoft 365 E3 and how to install collaboration controls solutions. Previously updated : 10/04/2022-----# Install Collaboration controls ---In this article, you'll learn how to install Collaboration Controls. The following are required to build and deploy Collaboration Manager applications using the Collaboration controls: --* **Power apps**: To build and run Model Driven Applications using the Collaboration controls. -* **M365 E3 or higher**: To deploy custom applications to Microsoft Teams and store tasks in Planner, files in SharePoint, and meetings in Outlook. --Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). To install the components into a Power Platform environment, the following roles are required: --* System customizer -* Environment maker --For more information on role privileges, see [Configure user security in an environment](/power-platform/admin/database-security#predefined-security-roles) --## Install the Collaboration controls solutions --You install the Collaboration controls into your dataverse environment through [Microsoft AppSource.](https://appsource.microsoft.com/en-us/product/dynamics-365/mscm.collaboration-toolkit-preview?flightCodes=collaborationcontrols&signInModalType=2&ctaType=1) --You'll be able to configure and use the components within your own model-driven app only after browsing to [Microsoft AppSource](https://appsource.microsoft.com/en-us/product/dynamics-365/mscm.collaboration-toolkit-preview?flightCodes=collaborationcontrols&signInModalType=2&ctaType=1) and installing Collaboration controls into your dataverse environment. --Collaboration Controls include the following solutions: --|**Settings' solutions** | **Purpose** | -||| -| Collaboration controls Settings | Hold the settings infrastructure that powers Collaboration controls | -| Collaboration controls Settings Objects | Provides predefined settings values that are used by the Collaboration controls.| --|**Collaboration solutions** | **Purpose** | -||| -| Collaboration controls Tasks | Includes the Tasks PCF (Power Apps component framework) control. | -| Collaboration controls Events | Includes the Events PCF control for Outlook and Teams meetings and bookings appointments. | -| Collaboration controls Notes | Includes the notes PCF control, which stores notes in Dataverse. | -| Collaboration controls Files | Includes the Files PCF control for accessing files on SharePoint. | -| Collaboration controls Core |Includes custom Collaboration APIs, the Collaboration Data Model and Virtual Tables for Events, Files and Task controls. | -| Collaboration controls Approvals | Includes the new Approvals PCF control. | -| Collaboration controls connector | Includes the new Collaboration Power Automate connector | --> [!NOTE] -> If you have an existing version of the controls installed in your environment, you might need to create a fresh environment and complete a new install to successfully upgrade to the latest version. --Before installation, you must be in a Power Platform environment or admin tenant. You need a dataverse environment with a database. If you don't have one, you need to [create a new one](/power-platform/admin/create-environment) to continue with the installation. --To install the solutions, browse to [Microsoft AppSource](https://appsource.microsoft.com/en-us/product/dynamics-365/mscm.collaboration-toolkit-preview?flightCodes=collaborationcontrols&signInModalType=2&ctaType=1) and complete the following steps: --1. Select **Get it now** button. -- :::image type="content" source="../assets/images/collaboration-control/preview-form.png" alt-text="Screenshot of Get it now button to show Collaboration control."border="true"::: --1. Sign in with your account, fill in the form and select **Continue**. -- :::image type="content" source="../assets/images/collaboration-control/overview.png" alt-text="Screenshot of overview Collaboration control." border="true"::: -- :::image type="content" source="../assets/images/collaboration-control/collaboration-controls-preview.png" alt-text="Screenshot of install Collaboration control preview." border="true"::: --1. You're directed to Power Platform Admin Center. Select an environment from the dropdown menu and agree to the terms and policy statements. -- > [!TIP] - > If you see a permissions error when you select the environment, try selecting outside the environment dropdown menu to see if that resolves the issue. -- :::image type="content" source="../assets/images/collaboration-control/install-environment.png" alt-text="Screenshot is an example of install collaboration control environment." border="true"::: --1. Select **Install**, installation might take approximately 15 minutes to complete. --1. Go to [https://make.powerapps.com/](https://make.powerapps.com/), [https://make.preview.powerapps.com/](https://make.preview.powerapps.com/) is also supported if you're signed up to Power Apps preview. --1. Ensure that you're in the environment where the controls are installed. You can view the environment and can change the environment on the upper-right corner of the Power Apps portal if necessary. --1. Select the **Solutions** tab to view all the solutions that you installed in the right environment. -- :::image type="content" source="../assets/images/collaboration-control/solutions.png" alt-text="Screenshot shows solutions tab to view all solutions collaboration control." border= "true"::: --> [!NOTE] -> The Collaboration controls are preview and elements may change over time with potential for breaking changes. The Collaboration controls aren't supported in production environments. --After successful installation of all the Collaboration solutions into your environment, you'll be able to build a new model-driven app that can take advantage of the Collaboration control capabilities. --## See also --[Integrate web apps](integrate-web-apps-overview.md) |
platform | Virtual Table Entity References | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/virtual-table-entity-references.md | - Title: Virtual table entity references- -description: Learn about Collaboration controls virtual entities such as Graph Planner Task, Event, Drive, and Booking Appointment in Teams to Microsoft Graph resources. -- Previously updated : 09/30/2022---# Virtual tables entity reference --Collaboration controls virtual entities and their attributes have a one-to-one mapping with a specific Microsoft Graph resource type. For example, the Graph Planner Task entities maps to the [Microsoft Graph Planner Task resource type](/graph/api/resources/plannertask). The virtual entity shares the same attributes as the resource type. --> [!NOTE] -> Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). --## Collaboration controls virtual entities --| Name | Description | -||| -| Graph Planner Task | The Graph Planner Task table represents a Planner task in Microsoft 365. | -| Graph Planner Plan | The Graph Planner Plan table represents a Planner plan in Microsoft 365. | -| Graph Event | The Graph Event table represents an event in a user calendar, or the default calendar of a Microsoft 365 group. | -| Graph Booking Appointment | The Graph Booking Appointment table represents a customer appointment for a Booking Service, performed by a set of staff members, provIDed by a Microsoft Bookings business. | -| Graph Drive | The Graph Drive table represents the top-level object that represents a user's OneDrive or a document library in SharePoint. | -| Graph Drive Item | The Graph Drive Item table represents a file, folder, or other item stored in a drive. | --## Graph Planner Task --* Entity name: m365_graphplannertask. -* Graph resource: [plannerTask resource type](/graph/api/resources/plannertask) -* Sorting isn't supported. -* Filtering isn't supported. -* Server driven pagination is supported, with maximum page size being 400. --### Attributes for Graph Planner Task --| Column | Dataverse Type | Details | -|||| -| `m365_collaborationrootid` | String | Collaboration root ID of the collaboration session record is associated with multiple collaboration sessions. This is returned as a comma delimited string. This attribute isn't returned when retrieving multiple records. | -| `m365_activechecklistitemcount` | Int32 | Number of checklist items with value set to false, representing incomplete items. | -| `m365_graphplannertaskId` | Guid | Unique identifier of the graph planner task. | -| `m365_appliedcategories` | String | Number of checklist items with value set to false, representing incomplete items. | -| `m365_appliedcategories` | String | The categories to which the task has been applied. This attribute is a JSON encoded string, for example "{ \"category1\": true, \"category6\": true, \"category9\": true }" | -| `m365_assigneepriority` | String | Hint used to order items of this type in a list view. The format is defined as outlined in [using order hints in Planner](/graph/api/resources/planner-order-hint-format). | -| `m365_assignments` | String | The set of assignees, the task is assigned to. This attribute is a JSON encoded string for example "{\" 7be...\": {\"assignedBy\": {\"user\": {\"displayName\", \"email\", \"ID\":\" 7be...\"}, \"group\": null, \"application\": null \"device\": null}" | -| `m365_bucketid` | String | Bucket ID to which the task belongs. The bucket needs to be in the plan that the task is in. It's 28 characters long and case-sensitive. [Format validation](/graph/api/resources/planner-identifiers-disclaimer) is done on the service. | -| `m365_checklistitemcount` | Int32 | Number of checklist items that are present on the task. | -| `m365_completedby` | String | Identity of the user that completed the task. This attribute is a JSON encoded string, for example {\"user\": {\"displayName\",\"ID\":\"d55...\"}} | -| `m365_completeddatetime` | DateTime | Read-only. Date and time at which the 'percentComplete' of the task is set to '100'. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z | -| `m365_conversationthreadid` |String | Thread ID of the conversation on the task. This is the ID of the conversation thread object created in the group. | -| `m365_createdby` | String | Identity of the user that created the task. This attribute is a JSON encoded string, for example {\"user\": {\"displayName\",\"ID\":\"d55...\"}} | -| `m365_createddatetime` | DateTime | Read-only. Date and time at which the task is created. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z | -| `m365_duedatetime` | DateTime | Date and time at which the task is due. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z | -| `m365_hasdescription` | Boolean | Read-only. Value is true if the details object of the task has a nonempty description and false otherwise. | -| `m365_id` | String | Read-only. ID of the task. It's 28 characters long and case-sensitive. [Format validation](/graph/api/resources/planner-identifiers-disclaimer) is done on the service.| -| `m365_orderhint` | String | Hint used to order items of this type in a list view. The format is defined as outlined in [using order hints in Planner](/graph/api/resources/planner-order-hint-format). | -| `m365_percentcomplete` | Int32 | Percentage of task completion. When set to 100, the task is considered completed. | -| `m365_priority` | Int32 | Priority of the task. The valid range of values is between 0 and 10, with the increasing value being lower priority (0 has the highest priority and 10 has the lowest priority). Planner interprets values 0 and 1 as "urgent", 2, 3 and 4 as "important", 5, 6, and 7 as "medium", and 8, 9, and 10 as "low". Additionally, Planner sets the value 1 for "urgent", 3 for "important", 5 for "medium", and 9 for "low". | -| `m365_planid` | String | Plan ID to which the task belongs. | -| `m365_previewtype` | String | This sets the type of preview that shows up on the task. The possible values are: automatic, noPreview, checklist, description, reference. | -| `m365_referencecount` | Int32 | Number of external references that exist on the task.| -| `m365_startdatetime` | DateTime | Date and time at which the task starts. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z | -| `m365_title` | String |Title of the task. Primary lookup column | --## Graph Planner Plan --* Entity name: m365_graphplannerplan. -* Graph resource: [plannerPlan resource type](/graph/api/resources/plannerplan). -* Sorting isn't supported. -* Filtering isn't supported. -* Server driven pagination is supported, with maximum page size being 400. --### Attributes for Graph Planner Plan --| Column | Dataverse Type | Details | -|||| -| `m365_collaborationrootid` | String | Collaboration root ID of the collaboration session the record is associated with. If the record is associated with multiple collaboration sessions this is returned as a comma delimited string. This attribute isn't returned when retrieving multiple records.| -| `m365_graphplannerplanid` |Guid |Unique identifier of the graph planner plan.| -| `m365_createdby` | String | Identity of the user that created the task. This attribute is a JSON encoded string, for example {\"user\": {\"displayName\",\"ID\":\"d55...\"}} | -| `m365_createddatetime` | DateTime | Read-only. Date and time at which the task is created. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z | -| `m365_id` | String | Read-only. ID of the plan. It's 28 characters long and case-sensitive. [Format validation](/graph/api/resources/planner-identifiers-disclaimer) is done on the service.| -| `m365_owner` | String | ID of the [group](/graph/api/resources/group) that owns the plan. After it's set, this property can’t be updated.| -| `m365_title` | String | Title of the plan. Primary lookup column | --## Graph Event --* Entity name: m365_graphevent -* Graph resource: [event resource type](/graph/api/resources/event) -* Sorting is supported on the following columns: - * m365_lastmodifieddatetime - * m365_createddatetime - * m365_hasattachments - * m365_importance - * m365_responserequested - * m365_sensitivity - * m365_showas - * m365_subject -* Filtering is supported on the following columns: - * m365_allownewtimeproposals - * m365_lastmodifieddatetime - * m365_createddatetime - * m365_icaluID - * m365_importance - * m365_isallday - * m365_iscancelled - * m365_isdraft - * m365_responserequested - * m365_sensitivity - * m365_showas - * m365_subject - * m365_type -* Server driven pagination is supported. --### Attributes for Graph Event --| Column |Dataverse Type |Details | -|||| -|`m365_collaborationrootid` |String |Collaboration root of the collaboration session the record is associated with. If the record is associated with multiple collaboration sessions this is returned as a comma delimited string. This attribute isn't returned when retrieving multiple records. | -|`m365_allownewtimeproposals` |Boolean |True, if the meeting organizer allows invitees to propose a new time when responding. Otherwise false, which is optional. Default is true. | -|`m365_attendees` |String |The collection of attendees for the event. This attribute is a JSON encoded string, 15000 max in length. For example, [{{\"type\":\"required\",\"status\":{{\"response\":\"none\",\"time\":\"0001-01-01T00:00:00Z\"}},\"emailAddress\":\"test@contoso.com\"}}] | -|`m365_body` |String |The body of the message associated with the event. It can be in HTML or text format. This attribute is a JSON encoded string, 15000 max in length. For example {\"contentType\":\"html\",\"content\":\"html/html\"} | -|`m365_bodypreview` |String |The preview of the message associated with the event. It is in text format. | -|`m365_categories` |String |The categories associated with the event. Each category corresponds to the displayName property of an outlookCategory defined for the user. For example [\"string\"] | -|`m365_changekey` |String |Identifies the version of the event object. Every time the event is changed, ChangeKey changes as well. This allows Exchange to apply changes to the correct version of the object. | -|`m365_createddatetime` |DateTime |The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z | -|`m365_start` |DateTime |The start date, time, and time zone of the event. This attribute is a JSON encoded string, 100 max in length. For example {\"dateTime\":\"2022-01-19T11:00:00+00:00\",\"timeZone\":\"UTC\"}| -|`m365_end` |DateTime |The date, time, and time zone that the event ends. This attribute is a JSON encoded string, 100 max in length. For example {\"dateTime\":\"2022-01-19T11:00:00+00:00\",\"timeZone\":\"UTC\"} | -|`m365_hasattachments` |Boolean |Set to true if the event has attachments. | -|`m365_hideattendees` |Boolean |When set to true, each attendee only sees themselves in the meeting request and meeting Tracking list. Default is false. | -|`m365_icaluid` |String |A unique identifier for an event across calendars. This ID is different for each occurrence in a recurring series. Read-only. | -|`m365_isallday`|Boolean |Set to true if the event lasts all day. If true, regardless of whether it's a single-day or multi-day event, start and end time must be set to midnight and be in the same time zone. | -|`m365_iscancelled` |Boolean |Set to true if the event has been canceled. | -|`m365_id`| String |Read-only. ID of the event. | -|`m365_isdraft` |Boolean |Set to true if the user has updated the meeting in Outlook but hasn't sent the updates to attendees. Set to false if all changes have been sent, or if the event is an appointment without any attendees.| -|`m365_isonlinemeeting`|Boolean|True if this event has online meeting information (that is, onlineMeeting points to an onlineMeetingInfo resource), false otherwise. Default is false (onlineMeeting is null). Optional. After you set isOnlineMeeting to true, Microsoft Graph initializes onlineMeeting. Later Outlook ignores any further changes to isOnlineMeeting, and the meeting remains available online.| -|`m365_isorganizer`|Boolean|Set to true if the calendar owner (specified by the owner property of the calendar) is the organizer of the event (specified by the organizer property of the event). This also applies if a delegate organized the event on behalf of the owner.| -|`m365_isremindero`n|Boolean|Set to true if an alert is set to remind the user of the event.| -|`m365_lastmodifieddatetime`|DateTime|The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z| -|`m365_location`|String|The location of the event. JSON encoded string, max 4000 in length. For example[{\"address\":null,\"coordinates\":null,\"displayName\":\"Harry\'s Bar\",\"locationEmailAddress\":null,\"locationType\":\"default\",\"locationUri\":null,\"uniqueId\":\"Harry\'s Bar\",\"uniqueIdType\":\"private\"}| -|`m365_locations`|String|The locations where the event is held or attended from. The location and locations properties always correspond with each other. If you update the location property, any prior locations in the locations collection would be removed and replaced by the new location value. JSON encoded string, max 4000 in length.for example[{\"address\":null,\"coordinates\":null,\"displayName\":\"Harry\'s Bar\",\"locationEmailAddress\":null,\"locationType\":\"default\",\"locationUri\":null,\"uniqueId\":\"Harry\'s Bar\",\"uniqueIdType\":\"private\"}]| -|`m365_onlinemeeting`|String|Details for an attendee to join the meeting online. Default is null. Read-only. After you set the isOnlineMeeting and onlineMeetingProvider properties to enable a meeting online, Microsoft Graph initializes onlineMeeting. When set, the meeting remains available online, and you can't change the isOnlineMeeting, onlineMeetingProvider, and onlneMeeting properties again. JSON encoded string, max 4000 in length.for example{\"conferenceId\": \"String\",\"joinUrl\": \"String\",\"phones\": [{\"@odata.type\": \"microsoft.graph.phone\"}],\"quickDial\": \"String\",\"tollFreeNumbers\": [\"String\"],\"tollNumber\": \"String\"}| -|`m365_onlinemeetingprovider`|String|Details for an attendee to join the meeting online. Default is null. Read-only. After you set the isOnlineMeeting and `onlineMeetingProvider` properties to enable a meeting online, Microsoft Graph initializes onlineMeeting. When set, the meeting remains available online, and you can't change the isOnlineMeeting, `onlineMeetingProvider`, and onlneMeeting properties again.| -|`m365_onlinemeetingurl`|String|A URL for an online meeting. The property is set only when an organizer specifies in Outlook that an event is an online meeting such as Skype. Read-only. To access the URL to join an online meeting, use `joinUrl`, which is exposed via the `onlineMeeting` property of the event. The `onlineMeetingUrl` property will be deprecated in the future.| -|`m365_organizer`|String|The organizer of the event.JSON encoded string, max 4000 in length. {\"emailAddress\":{\"@odata.type\":\"microsoft.graph.emailAddress\"}}| -|`m365_originalendtimezone`|String|The end time zone that was set when the event was created. A value of tzone://Microsoft/Custom indicates that a legacy custom time zone was set in desktop Outlook.| -|`m365_originalstart`|DateTime|Represents the start time of an event when it's initially created as an occurrence or exception in a recurring series. This property isn't returned for events that are single instances. Its date and time information is expressed in ISO 8601 format and is always in UTC. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z| -|`m365_originalstarttimezone`|String|The start time zone that was set when the event was created. A value of tzone://Microsoft/Custom indicates that a legacy custom time zone was set in desktop Outlook.| -|`m365_recurrence`|String|The recurrence pattern for the event. JSON encoded string, max 4000 in length.for example{\"pattern\":{\"dayOfMonth\":0,\"daysOfWeek\":[\"monday\",\"wednesday\",\"friday\"],\"firstDayOfWeek\":\"sunday\",\"index\":\"first\",\"interval\":1,\"month\":0,\"type\":\"weekly\"},\"range\":{\"startDate\":\"2017-08-14\",\"endDate\":\"2018-08-14\",\"numberOfOccurrences\":0,\"recurrenceTimeZone\":\"Eastern Standard Time\",\"type\":\"endDate\"}}| -|`m365_reminderminutesbeforestart`|Int32|The number of minutes before the event start time that the reminder alert occurs.| -|`m365_responserequested`|Boolean|Default is true, which represents the organizer would like an invitee to send a response to the event.| -|`m365_responsestatus`|String|Indicates the type of response sent in response to an event message. JSON encoded string, max 4000 in length.{\"response\": \"String\",\"time\": \"String (timestamp)\"}| -|`m365_sensitivity`|String|Possible values are: normal, personal, private, confidential.| -|`m365_seriesmasterid`|String|The ID for the recurring series master item, if this event is part of a recurring series.| -|`m365_showas`|String|The status to show. Possible values are: free, tentative, busy, oof, workingElsewhere, unknown.| -|`m365_subject`|String|The text of the event's subject line. Primary lookup column| -|`m365_transactionid`|String|A custom identifier specified by a client app for the server to avoid redundant POST operations if client retries to create the same event. This is useful when low network connectivity causes the client to time out before receiving a response from the server for the client's prior create-event request. After you set `transactionId` when creating an event, you can't change transactionId in a subsequent update. This property is only returned in a response payload if an app has set it. Optional.| -|`m365_type`|String|The event type. Possible values are: singleInstance, occurrence, exception, seriesMaster. Read-only| -|`m365_weblink`|String|The URL to open the event in Outlook on the web. Outlook on the web opens the event in the browser if you're signed in to your mailbox. Otherwise, Outlook on the web prompts you to sign in. This URL can't be accessed from within an iFrame.| -|`m365_grapheventid`|Guid|Unique identifier of the graph event.| -|`m365_groupid`|String|Group ID to which the event belongs.| --## Graph Booking Appointment --* Entity name: m365_graphbookingappointment -* Graph resource: [bookingAppointment resource type](/graph/api/resources/bookingappointment) -* Sorting isn't supported. -* Filtering is supported on the following columns: - * m365_bookingbusinessID - * m365_collaborationrootID - * m365_customertimezone - * m365_optoutofcustomeremail - * m365_price - * m365_pricetype - * m365_serviceID - * m365_servicename -* Pagination isn't supported. --### Attributes for Graph Booking Appointment --| Column | Dataverse Type | Details | -|||| -| `m365_collaborationrootid`| String| Collaboration root ID of the collaboration session the record is associated with. If the record is associated with multiple collaboration sessions this will be returned as a comma delimited string. This attribute isn't returned when retrieving multiple records.| -| `m365_graphbookingappointmentid` | Guid | Unique Identifier of the graph booking appointment.| -| `m365_bookingbusinessid` | String | The unique Identifier of the booking business the appointment is scheduled under.| -| `m365_additionalinformation` | String | Extra information that is sent to the customer when an appointment is confirmed.| -| `m365_customers` | String| It lists down the customer properties for an appointment. Appointment contains a list of customer information and each unit indicates the properties of a customer who is part of that appointment. Optional[{\"customerID\":\"d243c77b-f1ff-4615-a01f-1660b5cb0e79\",\"customQuestionAnswers\":[],\"emailAddress\":\"jordanm@contoso.com\",\"location\":{\"address\":{\"city\":\"\",\"countryOrRegion\":\"\",\"postalCode\":\"\",\"postOfficeBox\",\"state\":\"\",\"street\":\"\",\"type\" },\"coordinates\":{\"accuracy\",\"altitude\",\"altitudeAccuracy\",\"latitude\",\"longitude\" },\"displayName\":\"\",\"locationEmailAddress\",\"locationType\",\"locationUri\":\"\",\"uniqueID\",\"uniqueIDType\" },\"name\":\"Jordan Miller\",\"notes\",\"phone\",\"timeZone\",\"@odata.type\":\"#microsoft.graph.bookingCustomerInformation\"}] | -| `m365_customertimezone` | String | The time zone of the customer. For a list of possible values, see [dateTimeTimeZone resource type](/graph/api/resources/datetimetimezone). | -| `m365_duration` | String | The length of the appointment, denoted in ISO8601 format.| -| `m365_enddatetime` | DateTime | The date, time, and time zone that the appointment ends.| -| `m365_filledattendeescount` | Int32 | The current number of customers in the appointment.| -| `m365_id` | String | The ID of the bookingAppointment. Read-only.| -| `m365_islocationonline` | Boolean | True indicates that the appointment is held online. Default value is false.| -| `m365_joinweburl` | String | The URL of the online meeting for the appointment.| -| `m365_maximumattendeescount` | Int32 | The maximum number of customers allowed in an appointment.| -| `m365_optoutofcustomeremail` | Boolean | True indicates that the bookingCustomer for this appointment doesn't wish to receive a confirmation for this appointment.| -| `m365_postbuffer` | String | The amount of time to reserve after the appointment ends, for cleaning up, as an example. The value is expressed in ISO8601 format.| -| `m365_prebuffer` | String | The amount of time to reserve before the appointment begins, for preparation, as an example. The value is expressed in ISO8601 format.| -| `m365_price` | DecimalType | The regular price for an appointment for the specified bookingService.| -| `m365_pricetype` | String | A setting to provide flexibility for the pricing structure of services. Possible values are: undefined, fixedPrice, startingAt, hourly, free, priceVaries, callUs, notSet.| -| `m365_reminders` | String | The collection of customer reminders sent for this appointment. The value of this property is available only when reading this bookingAppointment by it's ID. [{\"message\":\"We look forward to seeing you!\",\"offset\":\"P1D\",\"recipients\":\"customer\"},{\"message\":\"Reminder that you have an appointment!\",\"offset\":\"P1D\",\"recipients\":\"staff\"}] | -| `m365_selfserviceappointmentid` | String | Another tracking ID for the appointment, if the appointment has been created directly by the customer on the scheduling page, as opposed to by a staff member on the behalf of the customer.| -| `m365_serviceid` | String | The ID of the bookingService associated with this appointment.| -| `m365_servicelocation` | String | The location where the service is delivered. {\"address\":{\"city\":\"\",\"countryOrRegion\":\"\",\"postalCode\":\"\",\"postOfficeBox\",\"state\":\"\",\"street\":\"\",\"type\" },\"coordinates\":{\"accuracy\",\"altitude\",\"altitudeAccuracy\",\"latitude\",\"longitude\" },\"displayName\":\"Our office address\",\"locationEmailAddress\",\"locationType\",\"locationUri\":\"\",\"uniqueID\",\"uniqueIDType\" } | -| `m365_servicename` | String | The name of the bookingService associated with this appointment. This property is optional when creating a new appointment. If not specified, it's computed from the service associated with the appointment by the serviceID property. | -| `m365_servicenotes` |String | Notes from a bookingStaffMember. The value of this property is available only when reading this bookingAppointment by its ID.| -| `m365_smsnotificationsenabled` | Boolean | True indicates SMS notifications are sent to the customers for the appointment. Default value is false.| -| `m365_staffmemberids` | String | The ID of each bookingStaffMember who is scheduled in this appointment. Stored as a comma separated string.[\”string\”] | -| `m365_startdatetime` | DateTime | The date, time, and time zone that the appointment begins.| --## Graph Drive --* Entity name: m365_graphdrive -* Graph resource: [drive resource type](/graph/api/resources/drive) -* Sorting isn't supported. -* Filtering isn't supported. -* Server driven pagination is supported. --### Attributes for Graph Drive --|Column |Dataverse Type |Details | -|||| -|`m365_collaborationrootid` |String | Collaboration root ID of the collaboration session the record is associated with. If the record is associated with multiple collaboration sessions this is returned as a comma delimited string. This attribute isn't returned when retrieving multiple records. | -|`m365_createdby` |String |Identity of the user, device, or application that created the item. Read-only. This attribute is a JSON encoded string for example { "user": { "displayName": "System Account" } } | -|`m365_createddatetime` |DateTime |Date and time of item creation. Read-only. | -|`m365_description` |String |Provide a user-visible description of the drive. Read-only. | -|`m365_drivetype` |String |Describes the type of drive represented by this resource. OneDrive personal drives return personal. OneDrive for Business returns business. SharePoint document libraries return documentLibrary. Read-only. | -|`m365_graphdriveid` |Guid |Unique Identifier of the graph drive. | -|`m365_id` |String |The unique Identifier of the drive. Read-only. | -|`m365_lastmodifiedby` | String |Identity of the user, device, and application, which last modified the item. Read-only. This attribute is a JSON encoded string for example { "user": { "email": “user@contoso.com”, "ID": "61de164e-21ff-4b1c-8cbd-77ac440894f8", "displayName": "User Name" } } | -|`m365_lastmodifieddatetime` |DateTime |Date and time the item was last modified. Read-only.| -|`m365_name` |String |The name of the item. Read-only. | -|`m365_owner` |String |Optional. The user account that owns the drive. Read-only. This attribute is a JSON encoded string. For example { "group": { "ID": "76c7286f-8645-4ba8-bc0f-c65a16424aaa", "displayName": "Group Name" }} | -|`m365_quota` |String |Optional. Information about the drive's storage space quota. Read-only. This attribute is a JSON encoded string. For example { "deleted": 482586, "remaining": 27487788645969, "state": "normal", "total": 27487790694400, "used": 1565845 } | -|`m365_sharepointids` |String |Returns Identifiers useful for SharePoint REST compatibility. Read-only. This property isn't returned by default and must be selected using the $select query parameter. This attribute is a JSON encoded string. For example "sharePointIDs": { "listID": "29d8457a-8e26-4291-9901-09718a388aaa", "siteID": "93618739-b3ca-4107-a77c-fba278c48aaa", "siteUrl": “<https://contoso.sharepoint.com>”, "tenantID": "53986071-de92-43ad-a41f-f3c4adb2beef", "webID": "a0d0e9ec-e547-4338-92d9-4c2c62e5beef" } | -| `m365_siteid` |String |The Identifier for the site that contains the document library. -|`m365_system` |String |If present, indicates that this is a system-managed drive. Read-only. -|`m365_weburl` |String |URL that displays the resource in the browser. Read-only. --### Graph Drive Item --* Entity name: m365_graphdriveitem -* Graph resource: [driveItem resource type](/graph/api/resources/driveitem) -* Sorting is supported on the following column: - * m365_name -* Filtering is supported on the following column: - * m365_name -* Server driven pagination is supported. --### Attributes for Graph Drive Item --|Column |Dataverse Type |Details | -|||| -|`m365_audio` |String |Audio metadata, if the item is an audio file. Read-only. Only on OneDrive Personal. This attribute is a JSON encoded string. { "album": "string", "albumArtist": "string", artist": "string", bitrate": 128, "composers": "string", copyright": "string", "disc": 0, "discCount": 0, "duration": 567, "genre": "string", "hasDrm": false, "isVariableBitrate": false, "title": "string", "track": 1, "trackCount": 16, "year": 2014 }| -|`M365_bundle` |String |Bundle metadata, if the item is a bundle. Read-only. This attribute is a JSON encoded string. For example, { "childCount": 3, "album": { "@odata.type": "microsoft.graph.album" }, } | -|`m365_collaborationrootid` |String |Collaboration root ID of the collaboration session the record is associated with. If the record is associated with multiple collaboration sessions this is returned as a comma delimited string. This attribute isn't returned when retrieving multiple records. | -|`m365_copy` |String |If present in the request then a copy operation is performed. | -|`m365_createdby` |String |Identity of the user, device, and application, which created the item. Read-only. This attribute is a JSON encoded string. For example, {"user":{"displayName":"User Name","email":"alias@contoso.com","ID":"a298b975-3493-4d9e-b2d4-3cad78f00000"},"group": null,"application","device" } | -|`m365_createddatetime` |DateTime |Date and time of item creation. Read-only. | -|`m365_ctag` |String |An eTag for the content of the item. This eTag isn't changed if only the metadata is changed. Note. This property isn't returned if the item is a folder. Read-only. | -|`m365_deleted` |String |Information about the deleted state of the item. Read-only. This attribute is a JSON encoded string. For example, { "state": "string" } | -|`m365_description` |String |Provides a user-visible description of the item. Read-write. Only on OneDrive Personal. | -|`m365_driveid` |String |The Identifier for the drive that contains the drive item.| -|`m365_etag` |String |eTag for the entire item (metadata + content). Read-only. | -| `m365_file` |String |File metadata, if the item is a file. Read-only. This attribute is a JSON encoded string. For example, {"hashes":{"crc32Hash","quickXorHash":"Biuzvwdu+Tmu6yRefayD27hD9vD=","sha1Hash","sha256Hash" },"mimeType":"application/vnd.openxmlformats-officedocument.wordprocessingml.document","processingMetadata" } | -| `m365_filesysteminfo` |String |File system information on client. This attribute is a JSON encoded string. For example, {"createdDateTime":"2022-07-21T15:02:47+00:00","lastAccessedDateTime","lastModifiedDateTime":"2022-07-21T15:02:55+00:00"} | -|`m365_folder` |String | Folder metadata, if the item is a folder. Read-only. This attribute is a JSON encoded string. For example, {"childCount":0,"view" } | -|`m365_graphdriveitemid` |Guid |Unique Identifier of the graph drive item. | -|`m365_id` |String |The unique Identifier of the item within the Drive. Read-only. | -|`m365_image` |String |Image metadata, if the item is an image. Read-only. This attribute is a JSON encoded string. For example, {"height","width" } | -|`m365_lastmodifiedby` |String |Identity of the user, device, and application, which last modified the item. Read-only. This attribute is a JSON encoded string. For example, {"user":{"displayName":"User Name","email":"alias@contoso.com","ID":"a298b975-3493-4d9e-b2d4-3cad78f9a00e"},"group","application","device" } | -|`m365_lastmodifieddatetime` |DateTime |Date and time the item was last modified. Read-only. | -|`m365_location` |String |Location metadata, if the item has location data. Read-only. This attribute is a JSON encoded string. For example, "location": { "altitude": 1.0, "latitude": 1.0, "longitude": 1.0 } | -|`m365_malware` |String |Malware metadata, if the item was detected to contain malware. Read-only. This attribute is a JSON encoded string. For example, { "description": "string" } | -|`m365_name` |String |The name of the item (filename and extension). Read-write. | -|`m365_package` |String |If present, indicates that this item is a package instead of a folder or file. Packages are treated like files in some contexts and folders in others. Read-only. This attribute is a JSON encoded string. For example, { "type": "oneNote" } | -|`m365_parentreference` |String |Parent information, if the item has a parent. This attribute is a JSON encoded string. For example, {"driveID":"b!qgK-8nOzX0qISvfGCiC2Smbv0m0RlNhDvNQDZsCMpbSnchFAhWAaQoiTLZcSo1gq","driveType":"documentLibrary","ID":"01EYDCV4YHV77FE3EDDFHIVD6WJ2ETT3PP","name","path":"/drives/b!qgK-8nOzX0qISvfGCiC2Smbv0m0RlNhDvNQDZsCMpbSnchFAhWAaQoiTLZcSo1no/root: /folder name","shareID","sharepointIDs":{"listID":"401172a8-6085-421a-8893-2d9712a35c3c","listItemID","listItemUniqueID":"52feaf12-836c-4e19-8a8f-d64e8939ee52","siteID":"f34e02aa-b373-4a5f-884a-f7c60a20b64a","siteUrl":"https://contoso.sharepoint.com/sites/Contoso","tenantID","webID":"6dd2ef66-9411-43d8-bcd4-0366c08ccabd"},"siteID" } | -|`m365_parentreferenceid` |String |The Identifier for the drive item that is the parent of the drive item. | -|`m365_pendingoperations` |String |If present, indicates that one or more operations that might affect the state of the driveItem are pending completion. Read-only. This attribute is a JSON encoded string. For example, { "pendingContentUpdate": {"@odata.type": "microsoft.graph.pendingContentUpdate"} } | -|`m365_photo` |String |Photo metadata, if the item is a photo. Read-only. This attribute is a JSON encoded string. For example, { "cameraMake": "Camera Make", "cameraModel": "Camera Model", "exposureDenominator": 1000000, "exposureNumerator": 41671, "focalLength": 4.38, "fNumber": 1.73, "iso": 70, "orientation": 6, "takenDateTime": "2020-04-29T14:17:39Z" } | -|`m365_publication` |String |Provides information about the published or checked-out state of an item, in locations that support such actions. This property isn't returned by default. Read-only. This attribute is a JSON encoded string. For example, {"level":"published","versionID":"2.0"} | -|`m365_remoteitem` |String |Remote item data, if the item is shared from a drive other than the one being accessed. Read-only. This attribute is a JSON encoded string. For example, { "ID": "string", "createdBy": { "@odata.type": "microsoft.graph.IdentitySet" }, "createdDateTime": "timestamp", "file": { "@odata.type": "microsoft.graph.file" }, "fileSystemInfo": { "@odata.type": "microsoft.graph.fileSystemInfo" }, "folder": { "@odata.type": "microsoft.graph.folder" }, "image": { "@odata.type": "microsoft.graph.image" }, "lastModifiedBy": { "@odata.type": "microsoft.graph.IdentitySet" }, "lastModifiedDateTime": "timestamp", "name": "string", "package": { "@odata.type": "microsoft.graph.package" }, "parentReference": { "@odata.type": "microsoft.graph.itemReference" }, "shared": { "@odata.type": "microsoft.graph.shared" }, "sharepointIDs": { "@odata.type": "microsoft.graph.sharepointIDs" }, "specialFolder": { "@odata.type": "microsoft.graph.specialFolder" }, "size": 1024, "video": { "@odata.type": "microsoft.graph.video" }, "webDavUrl": "url", "webUrl": "url" } | -|`m365_root` |String |If this property is non-null, it indicates that the driveItem is the top-most driveItem in the drive. | -|`m365_searchresult` |String |Search metadata, if the item is from a search result. Read-only. This attribute is a JSON encoded string. For example, { "onClickTelemetryUrl": "url" } | -|`m365_shared` |String |Indicates that the item has been shared with others and provides information about the shared state of the item. Read-only. This attribute is a JSON encoded string. For example, { "scope": "users", "owner": { "user": { "displayName": "User Name", "ID": "bbbb6fa48aaaaaaa" } } } | -|`m365_sharepointids` |String |Returns Identifiers useful for SharePoint REST compatibility. Read-only. This attribute is a JSON encoded string. e.g{"listID":"401172a7-6085-421a-8893-2d9712a35aba","listItemID":"338","listItemUniqueID":"0edc89e5-24ea-4c6b-a019-dc51f45eeccc","siteID":"f2be02aa-b373-4a5f-884a-f7c60a20bddd","siteUrl":"https://contoso.sharepoint.com/sites/Contoso","tenantID":"1c137272-0581-487f-b195-aeeb93cc4ccc","webID":"6dd2ef66-9411-43d8-bcd4-0366c08caaaa"} | -|`m365_siteid` |String |The Identifier for the site that contains the document library. | -|`m365_size` |IntType |Size of the item in bytes. Read-only. | -|`m365_specialfolder` |String |If the current item is also available as a special folder, this facet is returned. Read-only. This attribute is a JSON encoded string. For example, { "name": "documents" } | -|`m365_thumbnail` |String |If present in the request then the drive item thumbnails are retrieved. | -|`m365_video` |String |If the current item is also available as a special folder, this facet is returned. Read-only. This attribute is a JSON encoded string. For example, {"bitrate": 10646968, "duration": 1050683, "height": 720, "width": 1280, "audioBitsPerSample": 16, "audioChannels": 1, "audioFormat": "PCM", "audioSamplesPerSecond": 32000, "fourCC": "H264", "frameRate": 60} | -|`m365_webdavurl` |String | WebDAV compatible URL for the item. | -|`m365_weburl` |String |URL that displays the resource in the browser. Read-only. | --## See also --* [Integrate web apps](integrate-web-apps-overview.md) -* [Microsoft Graph overview](/graph/teams-concept-overview) |
platform | Virtual Tables Api | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/virtual-tables-api.md | - Title: Introduction to Virtual Tables Web API- -description: In this module, learn about Virtual Tables web API for Collaboration control app, virtual table sorting, and filtering in Microsoft Teams. -- Previously updated : 09/30/2022---# Virtual tables Web API --When using the Dataverse Web API to retrieve multiple records from a virtual table additional query parameters can be included to support sorting, filtering, and pagination. These features aren't supported uniformly across the Collaboration controls virtual tables because they rely on the support provided by the Microsoft Graph API. See Virtual Tables Entity Reference for details on what each virtual table supports. --> [!NOTE] -> Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). --## Virtual table sorting --With the virtual tables, you can use the OData $orderby query parameter to set criteria for how the result set should be sorted. Use the asc or desc suffix to specify ascending or descending order respectively. The default is ascending if the suffix isn't applied. --**Supported Tables**: Each virtual table supports the same sorting functionality as it’s respective Graph resource. The virtual tables, which support sorting are:  --* Graph Drive Item -* Graph Event --> [!NOTE] -> Sorting is not supported on all the attributes of the respective Graph resources. If a user tries to sort on a virtual table with an unsupported attribute, the result set maintains its default order. This is the same behaviour as the Dataverse Web API on columns that don't support sorting. --Examples: --* GET [Organization URI]/api/data/v9.2/m365_graphdriveitems?$filter=m365_collaborationrootid eq ‘00000000-0000-0000-0000-000000000000’&$orderby=m365_name desc -* GET [Organization URI]/api/data/v9.2/m365_graphevents?$filter=m365_groupid eq ‘00000000-0000-0000-0000-000000000000’$orderby=m365_subject asc --## Virtual table filtering --With the virtual tables, you can use the OData $filter query parameter to set criteria for which rows are returned. The virtual tables are queried using the same OData operators that are supported by the Dataverse Web API. --* **Comparison operators** -- |Operator|Description|Example| - |-|-|-| - |eq|Equal|$filter=m365_name eq ‘Contoso’| - |ne|Not Equal|$filter=m365_name ne ‘Contoso’| - |gt|Greater Than|$filter=m365_price gt 50.0| - |ge|Greater Than or Equal|$filter=m365_price ge 50.0| - |lt|Less Than|$filter=m365_price lt 50.0| - |le|Less Than or Equal|$filter=m365_price le 50.0| --* **Logical operators** -- |Operator|Description|Example| - |-|-|-| - |and|Logical and |$filter=m365_name eq ‘Contoso’ and m365_price eq 50.0| - |or|Logical or |$filter=m365_name ne ‘Contoso’ or m365_price eq 50.0| - |not|Logical negotiation |$filter=not contains(m365_name,’Contoso’)| --* **Grouping operators** -- |Operator|Description|Example| - |-|-|-| - |( )|Precedence grouping |$filter=(m365_name eq ‘Contoso’ and m365_price eq 50.0) or contains(m365_subject,’Team Sync’)| --* **Query Functions** -- |Function |Example | - |-|-| - |contains|$filter=contains(m365_name,’Contoso’)| - |endswith|$filter=endswith(m365_name,’Contoso’)| - |startswith|$filter=startswith(m365_name,’Contoso’)| --**Supported Tables**: Each virtual table supports the same filtering functionality as it’s respective Graph resource. The virtual tables, which support filtering are: --* Graph Booking Appointment -* Graph Drive Item -* Graph Event --> [!Note] -> Filtering is not supported on all the attributes of the respective Graph resources. If a user tries to filter on a virtual table with an unsupported attribute, this filter is ignored. This is the same behaviour as the Dataverse Web API on columns that don't support filtering. --Examples: --* GET [Organization URI]/api/data/v9.2/m365_graphbookingappointments?$filter=m365_bookingbusinessid eq ‘ContosoBank@Contoso.onmicrosoft.com’ and m365_price eq 100.0 -* GET [Organization URI]/api/data/v9.2/m365_graphdriveitems?$filter=m365_collaborationrootid eq ‘00000000-0000-0000-0000-000000000000’ and m365_name eq ‘Meeting Notes.docx’ -* GET [Organization URI]/api/data/v9.2/m365_graphevents?$filter=m365_groupid eq ‘00000000-0000-0000-0000-000000000000’ and m365_subject eq ‘Monthly Sync’ --## Virtual table pagination --Pagination is a useful resource for fetching a large set of records. Virtual Table pagination can be achieved in three different ways. --You can specify the page size by using the `odata.maxpagesize` preference value in the request header. If the result set spans multiple pages, the response includes the `@odata.nextLink` property. Sample request and response are as following: --# [Request](#tab/request) --```http - GET [Organization URI]/api/data/v9.2/m365_graphdriveitems - Accept: application/json - Prefer: odata.maxpagesize=2 -``` --# [Response](#tab/response) --```json -{ -- "@odata.context": "[Organization URI]/api/data/v9.0/$metadata#m365_graphdriveitems", - "value": [ - { - "@odata.etag": "W/\"{FA93AF7C-1F45-4714-85A5-BB95EB86E1E5}\"", - "m365_name": "Review.doc", - "m365_graphdriveitemid": "f50aae23-6644-3d35-66d7-e3c5a979dad3", - … - }, - { - "@odata.etag": "W/\"{3938D549-1AEF-46A5-BF3C-38472AD934C2}\"", - "m365_name": "Review.doc", - "m365_graphdriveitemid": "3d59a7e2-ec83-d0b3-270e-8ad676622027", - … - } - ], - "@odata.nextLink": "[Organization URI]/api/data/v9.0/m365_graphdriveitems &$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22UGFnZWQ9VFJVRSZwX1NvcnRCZWhhdmlvcj0xJnBfRmlsZUxlYWZSZWY9dGVzdCZwX0lEPTI5%22%20istracking=%22False%22%20/%3E" -} -``` ----The following Virtual Tables support the `odata.maxpagesize` preference: --* Graph Booking Appointment -* Graph Calendar Event -* Graph Drive -* Graph Drive Item --You can specify the number of records to return by passing the `$top` option in the URL. If you also need to specify the page number, you can do so by passing a paging cookie as an XML-encoded string as the `$skiptoken` option. To fetch a specific page number, you can pass the paging cookie in the following format: -- `<cookie pagenumber=3 />` --# [Request](#tab/request1) --```http - GET [Organization URL]/api/data/v9.2/m365_graphevents?$top=2&$skiptoken=<cookie pagenumber='3' /> -``` --# [Response](#tab/response1) --```json --{ - "@odata.context": "[Organization URI]/api/data/v9.0/$metadata#m365_graphevents", - "value": [ - { - "@odata.etag": "W/\"{FA93AF7C-1F45-4714-85A5-BB95EB86E1E5}\"", - "m365_graphdeventid": "3d59a7e2-ec83-d0b3-270e-8ad676622027", - "m365_subject": "Important meeting", - … - }, - { - "@odata.etag": "W/\"{3938D549-1AEF-46A5-BF3C-38472AD934C2}\"", - "m365_graphdeventid": "f50aae23-6644-3d35-66d7-e3c5a979dad3", - "m365_subject": "Another important meeting", - … - } - ] -} --``` ----> [!Note] -> The response won't include the `@nextLink` property. If your use case requires the next page link to be returned, you can use the odata.maxpagesize preference header described in section 1 instead of passing the $top URI parameter. --The following virtual tables support fetching a specific page: --* Graph Booking Appointment -* Graph Calendar Event --You can pass a fetch XML as an XML-encoded string. With the fetch XML option, you can specify several query preferences. The pagination specific options are page (page number) and count (page size). The following XML specifies the page number and size: -- `<fetch version="1.0" mapping="logical" returntotalrecordcount="true" page="<Page Number>" count="<Page Size>"></fetch>` --# [Request](#tab/request2) --```http -GET [Organization URL]/api/data/v9.2/m365_graphevents?$fetchXml=<fetch version="1.0" mapping="logical" returntotalrecordcount="true" page="3" count="2"></fetch> --``` --# [Response](#tab/response2) --```json -{ -- "@odata.context": "[Organization URI]/api/data/v9.0/$metadata#m365_graphdevents", - "@Microsoft.Dynamics.CRM.fetchxmlpagingcookie": "<cookie pagenumber=\"3\" pagingcookie=\"\" istracking=\"False\" />", - "value": [ - { - "@odata.etag": "W/\"{FA93AF7C-1F45-4714-85A5-BB95EB86E1E5}\"", - "m365_graphdeventid": "3d59a7e2-ec83-d0b3-270e-8ad676622027", - "m365_subject": "Important meeting", - … - }, - { - "@odata.etag": "W/\"{3938D549-1AEF-46A5-BF3C-38472AD934C2}\"", - "m365_graphdeventid": "f50aae23-6644-3d35-66d7-e3c5a979dad3", - "m365_subject": "Another important meeting", - … - } - ] -} --``` ----The following virtual tables support the count property to be passed as part of the fetchXml option: --* Graph Drive -* Graph Drive Item --The following virtual tables support the page property as part of the fetchXml option: --* Graph Booking Appointment -* Graph Calendar Event --## See also --* [Integrate web apps](integrate-web-apps-overview.md) -* [Get meeting transcripts using Graph APIs](../graph-api/meeting-transcripts/overview-transcripts.md) |
platform | Virtual Tables For Tasks | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/virtual-tables-for-tasks.md | - Title: Virtual Tables in Collaboration Control- -description: In this module, learn about Virtual tables for Tasks, Meetings, and Files in Collaboration control app in Microsoft Teams. -- Previously updated : 01/11/2023---# Virtual tables for Tasks, Meetings, Files ---A new capability with this release is a set of Virtual tables. These enable developers to interact with Graph via OData APIs. --The Collaboration controls core solution includes a set of [virtual tables](/power-apps/developer/data-platform/virtual-entities/get-started-ve), which can be used for programmatic access to the data created by the Collaboration controls. Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). --The external system that is used by the Collaboration controls is Microsoft Graph. There are virtual tables for group calendar events, booking appointments, planner plans or tasks and SharePoint drives, folders, and files. --This article provides samples, which demonstrate how to access the virtual tables using the Dataverse REST API to perform CRUD (Create, Read, Update, and Delete) operations. --> [!TIP] -> -> * [Virtual tables](/power-apps/developer/data-platform/virtual-entities/get-started-ve) also known as virtual entities, enable the integration of data residing in external systems by seamlessly representing that data as tables in Microsoft Dataverse, without replication of data and often without custom coding. -> * For more information on the Dataverse REST API, see [use the Microsoft Dataverse Web API](/power-apps/developer/data-platform/webapi/overview). --* Virtual tables use the standard Dataverse Web API, which makes it easy to use the virtual tables to populate data in your application. -* Virtual tables implement complex workflows required to support Collaboration controls and these execute within Microsoft data centers for optimum performance. -* Virtual tables use the standard Dataverse logging and monitoring capabilities. --After you install the Collaboration controls, the virtual tables can be treated as another service to your application that can depend on. ---**Pre-requisites** --To follow along with this article, you need: --1. A Dataverse environment where the Collaboration controls have been installed. -1. A user account in the Dataverse environment, which has the **Collaboration controls User** role assigned to it. -1. A third-party tool, for example, Post man or some custom C# code that allows you to authenticate to Microsoft Dataverse instances and to compose and send Web API requests and view responses. --> [!TIP] -> Microsoft provides information on how to configure a Postman environment that connects to your Dataverse instance and use Postman to perform operations with the Web API. See [Use Postman with Microsoft Dataverse Web API](/power-apps/developer/data-platform/webapi/use-postman-web-api). --## Virtual tables sample scenario --The scenario described in this guide uses the Planner Plan and Task virtual tables. The scenario described is the same one that the Tasks Collaboration control uses. From a user perspective the scenario shows how a Planner Plan, and several Tasks are created and associated with a specific business record. The scenario goes on to show how to retrieve the tasks associated with the business record and how to read, update, and delete a specific planner task. --The following sequence diagram explains the interaction between the client, which could be the Tasks collaboration control, the [Collaboration API](/rest/api/industry/collaboration-controls/) and the Planner Plan and Task virtual tables. ---## Virtual tables basic operations --This section describes the HTTP requests and responses for each step in the sample scenario. --**Task 1: Retrieve the Group ID** --Retrieve the Group ID used in [settings for your Collaboration](~/samples/app-with-collaboration-controls.md#define-settings-for-your-collaboration). --> [!NOTE] -> The user you use to create the Plan in the subsequent tasks, must be a member of this group. If not you will get 403 Forbidden response. --**Task 2: Begin a Collaboration session** --A collaboration session is a record in the collaboration root table, which allows you to associate multiple collaborations, for example, tasks, events, appointments with a business record. --A collaboration session allows you to perform operations such as list of the calendar events associated with a business record, for example, an inspections application. --# [Request](#tab/request) --```http - HTTP/1.1 POST https://[Organization URI]/api/data/v9.0/m365_begincollaborationsession -``` --```json -{ - "applicationName": "{{applicationName}}", - "collaborationRootEntityId": "{{collaborationRootEntityId}}", - "collaborationRootEntityName": "{{entityName}}" -} -``` --* `applicationName`: Unique name for the application -* `collaborationRootEntityName`: Name of the business record entity -* `collaborationRootEntityId`: Primary key (ID) of the specific business record --# [Response](#tab/response) --```http - HTTP/1.1 200 OK -``` --```json -{ - "@odata.context": "https:// [Organization URI]/api/data/v9.0/$metadata#Microsoft.Dynamics.CRM.m365_begincollaborationsessionResponse", - "collaborationRootId": "72fc6b52-39d5-ec11-a7b6-0022481bfe8f" -} -``` ----Keep track of the `collaborationRootId` as it is needed in subsequent requests. --**Task 3: Create a Planner Plan** --Create a Planner Plan and associate it with the collaboration session created above with `Group ID` and `collaborationRootId`. --# [Request](#tab/request1) --```http - HTTP/1.1 POST https://[Organization URI]/api/data/v9.0/m365_graphplannerplans -``` --```json --{ - "m365_collaborationrootid": "{{collaborationRootId}}", - "m365_owner": "{{groupId}}", - "m365_title": "{{planTitle}}" -} --``` --* `collaborationRootId`: Identifies the collaboration session we want to associate this plan with, use the value from task 2 --* `groupId`: Identifies the group who owns this plan, use the value from step 1 --* `planTitle`: Title for the plan --# [Response](#tab/response1) --```http - HTTP/1.1 201 Created -``` --```json --{ - "@odata.context": "https:// [Organization URI]/api/data/v9.0/$metadata#m365_graphplannerplans/$entity", - "@odata.etag": "W/\"JzEtUGxhbiAgQEBAQEBAQEBAQEBAQEBARCc=\"", - "m365_createdby": "{\"user\":{\"displayName\":null,\"email\":null,\"id\":\"be330617-0e2b-48e9-8bf7-429a09c78e65\"},\"group\":null}", - "m365_createddatetime": "2022-05-16T16:58:33.1833561Z", - "m365_owner": "03614cef-8f5b-4265-9944-080d013c55d6", - "m365_title": "Multi-byte plan", - "m365_id": "8I6fu1kNS0elsbTxd67bi2UADnJu", - "m365_collaborationrootid": "72fc6b52-39d5-ec11-a7b6-0022481bfe8f", - "m365_graphplannerplanid": "5c9c3ecf-f157-0f67-dcd9-733a77ad593e", - "m365_details": null -} --``` ----Keep track of the`m365_id` as it is needed in subsequent requests. --**Task 4: Create a Planner Task** --Create a Planner Task with `PlanId` and `collaborationRootId`. you can create several Planner Tasks and associate them with the collaboration session created earlier. --# [Request](#tab/request2) --```http - HTTP/1.1 POST https://[Organization URI]/api/data/v9.0/m365_graphplannertasks -``` --```json -{ - "m365_collaborationrootid": "{{collaborationRootId}}", - "m365_planid": "{{planId}}", - "m365_title": "{{taskTitle}}", - "m365_duedatetime": "2022-05-04T08:00:00Z", - "m365_assignments": "{\"me\":{\"orderHint\":\" !\",\"@odata.type\":\"#microsoft.graph.plannerAssignment\"}}" -} --``` --* `collaborationRootId`: Identifies the collaboration session we want to associate this plan with, use the value from task 2 -* `planId`: Identifies the plan this task is assigned to, use the value from the previous step -* `taskTitle`: Title for the task --# [Response](#tab/response2) --```http - HTTP/1.1 201 Created -``` --```json --{ - "@odata.context": "https://mwtmarkwallaceunmanaged.crm10.dynamics.com/api/data/v9.0/$metadata#m365_graphplannertasks/$entity", - "@odata.etag": "W/\"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=\"", - "m365_activechecklistitemcount": 0, - "m365_appliedcategories": "{}", - "m365_assigneepriority": "8585488865579062167", - "m365_assignments": "{\"be330617-0e2b-48e9-8bf7-429a09c78e65\":{\"assignedBy\":{\"user\":{\"displayName\":null,\"email\":null,\"id\":\"be330617-0e2b-48e9-8bf7-429a09c78e65\"},\"group\":null},\"assignedDateTime\":\"2022-05-16T16:58:47.571364+00:00\",\"orderHint\":\"8585488866179218449P`\",\"@odata.type\":\"#microsoft.graph.plannerAssignment\"}}", - "m365_checklistitemcount": 0, - "m365_createdby": "{\"user\":{\"displayName\":null,\"email\":null,\"id\":\"be330617-0e2b-48e9-8bf7-429a09c78e65\"},\"group\":null}", - "m365_createddatetime": "2022-05-16T16:58:47Z", - "m365_duedatetime": "2022-05-04T08:00:00Z", - "m365_hasdescription": false, - "m365_orderhint": "8585488865579062167", - "m365_percentcomplete": 0, - "m365_priority": 5, - "m365_planid": "8I6fu1kNS0elsbTxd67bi2UADnJu", - "m365_previewtype": "automatic", - "m365_referencecount": 0, - "m365_title": "Team-oriented discrete time-frame", - "m365_id": "8WSKWaEqAU-aZV4h9VUn0GUALXbH", - "m365_collaborationrootid": "72fc6b52-39d5-ec11-a7b6-0022481bfe8f", - "m365_graphplannertaskid": "0a2115b9-8b03-90ee-b450-42005d906ce8", - "m365_completedby": null, - "m365_details": null, - "m365_completeddatetime": null, - "m365_conversationthreadid": null, - "m365_bucketid": null, - "m365_startdatetime": null -} --``` ----Keep track of the `m365_graphplannertaskid` as it is needed in subsequent requests. --> [!NOTE] -> The `m365_graphplannertaskid` is the primary key of the record in the Planner Task virtual table. All subsequent requests to the virtual table to interact with this record must use this primary key. This will be referred to as the `plannerTaskId` in subsequent steps in this document. --You should repeat this step to create multiple tasks in the plan. --**Task 5: Retrieve Associated Planner Tasks** --Retrieve Associated Planner Tasks with `collaborationRootId` associated with the collaboration session created previously. --# [Request](#tab/request3) --```http - HTTP/1.1 GET https://[Organization URI]/api/data/v9.0/ m365_graphplannertasks?$filter=m365_collaborationrootid eq '{{collaborationRootId}}'&$select=m365_graphplannertaskid,m365_title,m365_createddatetime -``` --* `$filter`: Use the $filter system query to request records associated with the collaboration session (by specifying the ID of the collaboration root record). -* `$select`: Use the $select system query option to request specific properties. --# [Response](#tab/response3) --```http - HTTP/1.1 200 OK -``` --```json --{ -- "@odata.context": "https://mwtmarkwallaceunmanaged.crm10.dynamics.com/api/data/v9.0/$metadata#m365_graphplannertasks(m365_graphplannertaskid,m365_title,m365_createddatetime)", - "value": [ - { - "@odata.etag": "W/\"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=\"", - "m365_graphplannertaskid": "8537731e-9414-1091-8d7d-ce5b74fc2477", - "m365_title": "Diverse executive core", - "m365_createddatetime": "2022-05-16T16:58:45Z", - "m365_id": "N_A2qmo3j0uvZZY1yd6V_GUADDEg", - "m365_collaborationrootid": "72fc6b52-39d5-ec11-a7b6-0022481bfe8f" - }, - { - "@odata.etag": "W/\"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=\"", - "m365_graphplannertaskid": "4a89895a-050e-9165-a6e4-19c3850f22ec", - "m365_title": "Cloned didactic open architecture", - "m365_createddatetime": "2022-05-16T16:58:41Z", - "m365_id": "--U0zbgsO0us084C0yCyEWUALbWw", - "m365_collaborationrootid": "72fc6b52-39d5-ec11-a7b6-0022481bfe8f" - }, - { - "@odata.etag": "W/\"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=\"", - "m365_graphplannertaskid": "20a08b8c-394b-b3fb-f9d1-47496df7a67b", - "m365_title": "Synergized zero defect interface", - "m365_createddatetime": "2022-05-16T16:58:43Z", - "m365_id": "AMn3RtbmV0m6cvkp5HKDCWUAKI0_", - "m365_collaborationrootid": "72fc6b52-39d5-ec11-a7b6-0022481bfe8f" - } - ] -} --``` ----Keep track of the `m365_id‘s` as IDs will be needed in subsequent requests. --**Task 6: Retrieve a Planner Task** --Retrieve a Planner Task with `PlannerTaskID` to perform a Read operation on one of the planner tasks created earlier. --# [Request](#tab/request4) --```http - HTTP/1.1 GET https://[Organization URI]/api/data/v9.0/m365_graphplannertasks({{plannerTaskId}}) -``` --* `plannerTaskId`: The primary key for the planner task record is the `m365_graphplannertaskid` property. --# [Response](#tab/response4) --```http - HTTP/1.1 200 OK -``` --```json -{ - "@odata.context": "https://mwtmarkwallaceunmanaged.crm10.dynamics.com/api/data/v9.0/$metadata#m365_graphplannertasks/$entity", - "@odata.etag": "W/\"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=\"", - "m365_activechecklistitemcount": 0, - "m365_appliedcategories": "{}", - "m365_assigneepriority": "8585488204334528131", - "m365_assignments": "{\"be330617-0e2b-48e9-8bf7-429a09c78e65\":{\"assignedBy\":{\"user\":{\"displayName\":null,\"email\":null,\"id\":\"be330617-0e2b-48e9-8bf7-429a09c78e65\"},\"group\":null},\"assignedDateTime\":\"2022-05-17T11:20:52.0247676+00:00\",\"orderHint\":\"8585488204934840644P2\",\"@odata.type\":\"#microsoft.graph.plannerAssignment\"}}", - "m365_checklistitemcount": 0, - "m365_createdby": "{\"user\":{\"displayName\":null,\"email\":null,\"id\":\"be330617-0e2b-48e9-8bf7-429a09c78e65\"},\"group\":null}", - "m365_createddatetime": "2022-05-17T11:20:52Z", - "m365_duedatetime": "2022-05-04T08:00:00Z", - "m365_orderhint": "8585488204334528131", - "m365_percentcomplete": 0, - "m365_priority": 5, - "m365_planid": "8I6fu1kNS0elsbTxd67bi2UADnJu", - "m365_previewtype": "automatic", - "m365_referencecount": 0, - "m365_title": "Secured content-based customer loyalty", - "m365_id": "SXmz1hxiOk-E3MKJUyhj0mUABvix", - "m365_details": "{\"@odata.context\":\"https://graph.microsoft.com/beta/$metadata#planner/tasks('SXmz1hxiOk-E3MKJUyhj0mUABvix')/details/$entity\",\"@odata.etag\":\"W/\\\"JzEtVGFza0RldGFpbHMgQEBAQEBAQEBAQEBAQEBARCc=\\\"\",\"description\":null,\"previewType\":\"automatic\",\"id\":\"SXmz1hxiOk-E3MKJUyhj0mUABvix\",\"references\":{},\"checklist\":{}}", - "m365_graphplannertaskid": "1b326015-bb43-945c-85bc-9b2a4ed16c73", - "m365_completedby": null, - "m365_hasdescription": null, - "m365_collaborationrootid": null, - "m365_completeddatetime": null, - "m365_conversationthreadid": null, - "m365_bucketid": null, - "m365_startdatetime": null -} --``` ----Keep track of the `@odata.etag` property and the`m365_graphplannertaskid` property as these are needed to perform update or delete operations. --**Task 7: Update a Planner Task** --Update a Planner Task with `PlannerTask ID` to perform an Update operation on one of the planner tasks created in the previous step. To update a planner task, execute the following request: --# [Request](#tab/request5) --```http - HTTP/1.1 PATCH https://[Organization URI]/api/data/v9.0/m365_graphplannertasks({{plannerTaskId}}) -``` --* Header: If-Match: {{@odata.etag}} --```json --{ - "m365_title": "{{$planTitle}}" -} --``` --* `@odata.etag`: Etag for the task, you must perform a read to retrieve the most up-to-date version. --* `planTitle`: Updated title for the task --# [Response](#tab/response5) --```http - HTTP/1.1 204 No Content -``` ----**Task 8: Delete a Planner Task** --Delete a Planner Task with `PlannerTask ID` to perform a Delete operation on one of the planner tasks created in the previous step. To delete a planner task, execute the following request: --# [Request](#tab/request6) --```http - HTTP/1.1 DELETE https://[Organization URI]/api/data/v9.0/m365_graphplannertasks({{plannerTaskId}}) -``` --* `@odata.etag`: Etag for the task, you must perform a read to retrieve the most up-to-date version. --# [Response](#tab/response6) --```http - HTTP/1.1 204 No Content -``` ----**Task 9: Update a Planner Task details** --Update a Planner Task with `PlannerTask ID` to perform an update operation on one of the planner tasks created in the previous step. --# [Request](#tab/request7) --```http - HTTP/1.1 PATCH https://[Organization URI]/api/data/v9.0/m365_graphplannertasks({{plannerTaskId}}) -``` --Header: If-Match: {{@odata.etag}} --```json --{ -- "m365_title": "{{$planTitle}}", - "m365_details": "{\"@odata.etag\":\"{{details.etag}}\",\"description\":\"Updated Task Description\"}" --} -``` --* `@odata.etag`: Etag for the task, you must perform a read to retrieve the latest version. -* `planTitle`: Updated title for the task. -* `@details.etag`: Etag for the task details, you must perform a read using the query $select query parameter to include the `m365_details` column to retrieve the latest version. This value is included in the `m365_details` column of the response. This value isn't the same as the `@odata.etag` because in the Planner backend, the Task and its details are stored separately. --# [Response](#tab/response7) --```http -HTTP/1.1 204 No Content -``` ----> [!NOTE] -> You can set the `If-Match` header to be '*' and then you won't need to provide any etag values, but your changes will always overwrite the task and it’s details. --## Virtual tables authorization --Following are the authorization steps required to make HTTP requests using the Virtual tables in the Collaboration controls solution. --### Azure app registration --To acquire the correct bearer token, an app registration in Azure is required. For more information on app registrations, see [register an app](/azure/active-directory/develop/quickstart-register-app). --1. Create an app registration in the Azure portal to authenticate. -1. Browse to **Certificates & secrets**. -1. Create a new client secret. -- > [!IMPORTANT] - > Make sure to copy the secret value and store for later use. You will not be able to access it again after leaving the current page. --1. Browse to **API Permissions**. -1. Add the **user_impersonation** delegated permission from Dynamics CRM. -1. Grant admin consent for this permission. -- :::image type="content" source="../assets/images/collaboration-control/power-automate-api-permission.png" alt-text="Screenshot shows the Power Automate API permission."::: --1. Browse to **Manifest**. -1. Set the value of the following attributes to true: -- * oauth2AllowIdTokenImplicitFlow - * oauth2AllowImplicitFlow --1. Select Save. -- :::image type="content" source="../assets/images/collaboration-control/power-automate-manifest.png" alt-text="Screenshot shows the Power Automate manifest."::: --### PowerApps environment permissions --After the app registration has been set up, you must set up an application user in PowerApps environment. This allows you to authenticate with the correct Dynamics scopes that were configured earlier. --1. Open the [Power Platform Admin Center](https://admin.powerplatform.microsoft.com/). -1. Browse to **Environments** > **Your_Environment** > **Users** > **App Users List**. -1. Select **New App User** and select your Azure app registration. -1. Select **Edit Security Roles** and assign the **System Administrator** role to the app user. -- 1. The **System Administrator** role is applied to allow authentication for any users that have a lower security role. For example, **Collaboration controls User**. - 1. This can be restricted by applying a lower role to the application. For example, **Collaboration controls Administrator**. -- :::image type="content" source="../assets/images/collaboration-control/power-automate-admin-center.png" alt-text="Screenshot shows the Power automate admin center."::: --### Getting the bearer token --After completion of Azure app registration and PowerApps environment permissions, send the following HTTP request to get the Bearer token. --```http -POST https://login.microsoftonline.com/<AZURE_APP_TENANT_ID>/oauth2/token -``` --* **Content-Type**: application/x-www-form-urlencoded -* **client_id**: <AZURE_APP_CLIENT_ID> -* **&client_secret**: <AZURE_APP_CLIENT_ID> -* **&resource**: https://\<RESOURCEURL\>/ -* **&username**: \<USERNAME\> -* **&password**: \<PASSWORD\> -* **&grant_type**: Password --> [!IMPORTANT] -> Make sure to include the trailing forward slash on the resource parameter. If not you will get an error related to Graph scopes when calling the virtual table. --From the response payload, copy the value of the **access_token** property. You can then pass this Bearer token as the part of the authorization header when making requests to the Virtual tables. ---## Virtual tables error handling --Virtual tables error handling describes common error scenarios and how the virtual tables respond. --### Attempt to create a virtual record without a Collaboration session --A valid collaboration session is required for every request to create a virtual record. When a virtual record is created, the virtual table creates a collaboration map record, which includes the virtual record primary key, entity name and the external ID that is, Graph resource ID. This collaboration map is associated with a collaboration session, and this is how the Collaboration controls keep track of the collaborations associated with a business record. --# [Request](#tab/request8) --```http - HTTP/1.1 POST https://[Organization URI]/api/data/v9.0/m365_graphplannertasks -``` --```json --{ - "m365_planid": "{{planId}}", - "m365_title": "{{taskTitle}}", - "m365_duedatetime": "2022-05-04T08:00:00Z", - "m365_assignments": "{\"me\":{\"orderHint\":\" !\",\"@odata.type\":\"#microsoft.graph.plannerAssignment\"}}" -} --``` --The `collaborationRootId` property is missing from the request. --# [Response](#tab/response8) --```http - HTTP/1.1 400 Bad Request -``` --```json --{ - "error": { - "code": "0x80048d0b", - "message": "Parameter 'm365_collaborationrootid' is null, empty, or white-space." - } -} --``` ----To resolve this issue, you must always provide a valid `collaborationRootId` property when creating a virtual record. --### Attempt to read a virtual record without a Collaboration map --Virtual tables allow you to execute requests, which return collections of virtual records. We saw this earlier in this document where we requested all the planner tasks associated with a specific collaboration session. It's also possible to request all the planner tasks associated with a specific planner plan by using a `$filter` system query like `$filter=m365_planid eq {{planId}}`. One issue that happens if you use such a query is that records are returned for planner tasks, which aren't associated with a collaboration session that is, planner tasks that were created by a means other than using a Collaboration control. If you attempt to read, update, or delete such a record, the request fails because the virtual table can't find the associated collaboration map. --# [Request](#tab/request9) --```http - HTTP/1.1 GET https://[Organization URI]/api/data/v9.0/m365_graphplannertasks({{plannerTaskId}}) -``` --The `plannerTaskId` property is associated with a planner task, which was created using the Planner web interface and so doesn't have a collaboration map record. --# [Response](#tab/response9) --```http - HTTP/1.1 404 Not Found -``` --```json -{ - "error": { - "code": "0x80048d02", - "message": "A record with the specified key values does not exist in m365_collaborationmap entity" - } -} -``` ----To resolve this issue, you must check the error message in the response and if it's set to the message shown above this means the virtual record isn't associated. To create an association for this record, you must call [Associate Collaboration Map - REST API](/rest/api/industry/collaboration-controls/collaboration-custom-apis/associate-collaboration-map). --### Attempt to read a virtual record and the Graph resource has been deleted --Related to the previous error, you need to handle the case where a Graph resource has been deleted but the client still has a reference to the deleted virtual record. This can happen if another user deleted the record. If you attempt to read, update, or delete such a record, the request fails because the virtual table can't retrieve the resource from Graph. --# [Request](#tab/request10) --```http - HTTP/1.1 GET https://[Organization URI]/api/data/v9.0/m365_graphplannertasks({{plannerTaskId}}) -``` --The `plannerTaskId` property is associated with a planner task, which was deleted. --# [Response](#tab/response10) --```http - HTTP/1.1 404 Not Found -``` --```json -{ - "error": { - "code": "0x80048d02", - "message": "REST call failed because: Reason - NotFound, Full error - {\"error\":{\"code\":\"\",\"message\":\"The requested item is not found.\",\"innerError\":{\"date\":\"2022-05-17T16:30:51\",\"request-id\":\"b692a31a-312d-490c-8dce-d258459a0211\",\"client-request-id\":\"b692a31a-312d-490c-8dce-d258459a0211\"}}}." - } -} -``` ----This case must be handled by any client code, which retrieves virtual records as another user can delete the associated Graph resource at any time. --### Attempt to update a virtual record with an invalid @odata.etag --The `@odata.etag` property is used for data concurrency and to prevent the over writing of the same record if it has been updated by another user. When, a record is read the current etag is returned, and remains valid until the record is changed. The etag should be included in any update request and are checked before the operation completes. If the record was changed by another user since the current user read the record, then the current users update request fails. --If you perform two updates requests using the same @odata.etag, then the second request fails: --# [Request](#tab/request11) --```http - HTTP/1.1 PATCH https://[Organization URI]/api/data/v9.0/m365_graphplannertasks({{plannerTaskId}}) -``` --Header: If-Match: {{@odata.etag}} --```json -{ - "m365_title": "{{$planTitle}}" -} --``` --# [Response](#tab/response11) --```http - HTTP/1.1 409 Conflict -``` --```json -{ - "error": { - "code": "0x80048d08", - "message": "REST call failed because: Reason - Conflict, Full error - {\"error\":{\"code\":\"\",\"message\":\"The attempted changes conflicted with already accepted changes. Read the latest state and resolve differences.\",\"innerError\":{\"date\":\"2022-05-18T06:54:55\",\"request-id\":\"dc6cd2b7-1509-4e81-91ff-22cf35b86e18\",\"client-request-id\":\"dc6cd2b7-1509-4e81-91ff-22cf35b86e18\"}}}." - } -} -``` ----### Querying for Associated Virtual Records --In Task 5, described how to Retrieve Associated Planner Tasks. This operation is supported for all of the virtual tables. When executing this request, you must include a `$filter` query, which specifies the Collaboration Root ID as follows: --# [Request](#tab/request12) --```http - HTTP/1.1 GET https://[Organization URI]/api/data/v9.0/ m365_graphplannertasks?$filter=m365_collaborationrootid eq '{{collaborationRootId}}'&$select=m365_graphplannertaskid,m365_title,m365_createddatetime -``` ----* Other filtering options can't be combined with this `$filter` query and if there they're ignored. -* Other filtering must be performed directly on the response from the request. --### Querying for Virtual records with required key attributes --When the Dataverse Web API is called to retrieve multiple records from the following virtual tables, a mandatory key attribute is required. Graph Booking Appointments requires a valid `m365_bookingbusinessid` is included in the query. If the key attribute isn't provided, then the request fails as follows: --# [Response](#tab/response13) --```http - HTTP/1.1 400 Bad Request -``` --```json --{ - "error": { - "code": "0x80048d0b", - "message": "Key attribute is missing: 'm365_bookingbusinessid'.", - …. - } -} --``` ----To fix this problem, change the request to this format: --# [Request](#tab/request14) --```http - HTTP/1.1 GET https://[Organization URI]/api/data/v9.0/ m365_graphbookingappointments?$filter=m365_bookingbusinessid eq '{{bookingBusinessId}}' -``` ----### Creating virtual records and Graph access control --The virtual tables honor the access control specified for Microsoft Graph. The virtual tables won't permit operations that the user couldn't perform using the Microsoft Graph API. For example, if the user you use to create the Plan is Task 3 and isn't a member of group you use then you get 403 Forbidden responses. --## See also --* [Integrate web apps](integrate-web-apps-overview.md) -* [App manifest schema for Teams](../resources/schem) -* [Microsoft Graph overview](/graph/teams-concept-overview) |
platform | Create Channel Group Tab | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/create-channel-group-tab.md | Ensure that you've all the [prerequisites](~/tabs/how-to/tab-requirements.md) to * **Enter your Microsoft Partner Id, if you've one? (Leave blank to skip)** - This field isn't required and must be used only if you're already part of the [Microsoft Partner Network](https://partner.microsoft.com). + This field isn't required and must be used only if you're already part of the [Microsoft Cloud Partner Program](https://partner.microsoft.com), formerly known as Microsoft Partner Network. * **What do you want to add to your project?** |
platform | Create Personal Tab | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/create-personal-tab.md | Following are the steps to create a personal tab: * **Enter your Microsoft Partner Id, if you've one? (Leave blank to skip)** - This field isn't required and must be used only if you're already part of the [Microsoft Partner Network](https://partner.microsoft.com). + This field isn't required and must be used only if you're already part of the [Microsoft Cloud Partner Program](https://partner.microsoft.com), formerly known as Microsoft Partner Network. * **What do you want to add to your project?** |
platform | Teams Faq | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/teams-faq.md | No, Adaptive Card Previewer is available in Visual Studio Code only. </details> +<!-- ## App validation <details>-<summary>How can I connect Microsoft Entra ID to an MPN account?</summary> +<summary>How can I connect Microsoft Entra ID to CCP ID for Microsoft Cloud Partner Program?</summary> <!--Question: Publisher Attestation issue - the app needed to be published first (I attached the screenshot when I tried to submit the attestation). Before doing the Publisher Attestation. I think this is most likely to connect the Azure AD to an MPN account.-->-+<!-- Follow the steps in the pages given here: 1. [Publisher verification overview - Microsoft Entra](/azure/active-directory/develop/publisher-verification-overview). 1. [Microsoft LearnMark an app as publisher verified - Microsoft Entra](/azure/active-directory/develop/mark-app-as-publisher-verified). 1. [Microsoft Learn-Resolution - Connect Microsoft Entra ID to MPN settings](/partner-center/mpn-benefits-azure-cloud). +Resolution - Connect Microsoft Entra ID to Microsoft Cloud Partner Program](/partner-center/mpn-benefits-azure-cloud) <!--Links found: 1. [Update preferred email](/partner-center/partner-center-account-setup.md#update-preferred-email) No, the landscape mode support in Teams doesn't have any negative effect on app ## Partner Center <details>-<summary>Where do you find MPN ID?</summary> +<summary>Where do you find CCP ID?</summary> -You can find your MPN ID by fetching the Partner Center ID. +You can find your CCP ID by fetching the Partner Center ID. <br> </details> For more information about raising a ticket, see [Get help or open a support tic You can create a Partner Center account one of the following ways: * If you're new to Partner Center and don't have a Microsoft Network Account, [create an account using the Partner Center enrollment page](/office/dev/store/open-a-developer-account#create-an-account-using-the-partner-center-enrollment-page).-* If you're already enrolled in the Microsoft Partner Network, [create an account directly from Partner Center using existing Microsoft Partner Center enrollments](/office/dev/store/open-a-developer-account#create-an-account-using-an-existing-partner-center-enrollment). +* If you're already enrolled in the Microsoft Cloud Partner Program, [create an account directly from Partner Center using existing Microsoft Partner Center enrollments](/office/dev/store/open-a-developer-account#create-an-account-using-an-existing-partner-center-enrollment). <br> |
platform | Publish Your Teams Apps Using Developer Portal | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/publish-your-teams-apps-using-developer-portal.md | If there are any changes related to Teams app's manifest file, you can update th You can do the following configuration for your app in the Developer Portal: -* **Basic information**: This section shows and allows you to edit the **App names**, **Descriptions**, **Version**, **Developer information**, **App URLs**, **Application (client) ID**, and **Microsoft Partner Network ID**. +* **Basic information**: This section shows and allows you to edit the **App names**, **Descriptions**, **Version**, **Developer information**, **App URLs**, **Application (client) ID**, and **Microsoft Partner Network ID** (CCP ID). * **Branding**: This section allows you to add **Color icon** and **Outline icon** in `.png` format. * **App features**: This section allows you to add the following features to your app: * Personal app |
platform | Add Incoming Webhook | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/webhooks-and-connectors/how-to/add-incoming-webhook.md | Last updated 01/25/2023 # Create Incoming Webhooks -> [!IMPORTANT] -> -> The existing Microsoft 365 (previously called Office 365) connectors across all cloud platforms are nearing deprecation, and the creation of new Microsoft 365 connectors will soon be blocked. For more information on the schedule and how the Workflows app provides a more flexible and secure experience, see [retirement of Microsoft 365 connectors within Microsoft Teams](https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/). An Incoming Webhook lets external applications share content in Microsoft Teams channels. The webhooks are used as tools to track and notify. The webhooks provide a unique URL to send a JSON payload with a message in card format. Cards are user interface containers that include content and actions related to a single article. You can use cards in the following capabilities: |
platform | Connectors Creating | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/webhooks-and-connectors/how-to/connectors-creating.md | Last updated 04/16/2023 # Create connectors for Microsoft 365 Groups -> [!IMPORTANT] -> -> The existing Microsoft 365 (previously called Office 365) connectors across all cloud platforms are nearing deprecation, and the creation of new Microsoft 365 connectors will soon be blocked. For more information on the schedule and how the Workflows app provides a more flexible and secure experience, see [retirement of Microsoft 365 connectors within Microsoft Teams](https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/). With Microsoft Teams apps, you can add your existing connector for Microsoft 365 Groups or build a new one within Teams. For more information, see [build your own connector](/outlook/actionable-messages/connectors-dev-dashboard#build-your-own-connector). |
platform | Connectors Using | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/webhooks-and-connectors/how-to/connectors-using.md | Last updated 12/09/2022 # Create and send messages -> [!IMPORTANT] -> -> The existing Microsoft 365 (previously called Office 365) connectors across all cloud platforms are nearing deprecation, and the creation of new Microsoft 365 connectors will soon be blocked. For more information on the schedule and how the Workflows app provides a more flexible and secure experience, see [retirement of Microsoft 365 connectors within Microsoft Teams](https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/). To create and send actionable messages, use either an Incoming Webhook or a Microsoft 365 connector. However, the actionable messages are accessible only to users with an Exchange Online license. |
platform | What Are Webhooks And Connectors | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/webhooks-and-connectors/what-are-webhooks-and-connectors.md | Last updated 11/23/2022 # Build webhooks and connectors -> [!IMPORTANT] -> -> The existing Microsoft 365 (previously called Office 365) connectors across all cloud platforms are nearing deprecation, and the creation of new Microsoft 365 connectors will soon be blocked. For more information on the schedule and how the Workflows app provides a more flexible and secure experience, see [retirement of Microsoft 365 connectors within Microsoft Teams](https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/). Webhooks and connectors help to connect the web services to channels and teams in Microsoft Teams. Webhooks are user-defined HTTP callback that notifies users about any action that has taken place in the Teams channel. It's a way for an app to get real-time data. Connectors allow users to subscribe to receive notifications and messages from your web services. They expose an HTTPS endpoint for your service to post messages in the form of cards. |
platform | Whats New | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/whats-new.md | Discover Microsoft Teams platform features that are deprecated. You can now get Teams platform features that aren't available. +* ***August 02, 2024***: The Collaboration controls for model-driven applications are retired. + * ***July 25, 2024***: Teams, Outlook, and Microsoft 365 web domains are migrating to `*.cloud.microsoft` domain. [Configure your app](m365-apps/extend-m365-teams-personal-tab.md#configure-content-security-policy-headers) before September 2024 to ensure continued functionality. * ***July 16, 2024***: The existing [Microsoft 365 (previously called Office 365) connectors](webhooks-and-connectors/what-are-webhooks-and-connectors.md) across all cloud platforms are nearing deprecation, and the creation of new Microsoft 365 connectors will soon be blocked. For more information on the schedule and how the Workflows app provides a more flexible and secure experience, see [retirement of Microsoft 365 connectors within Microsoft Teams](https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/). |