Программное добавление вкладки команд библиотеки SharePoint в канал Microsoft Teams

Я пытаюсь добавить вкладку SharePoint Library в канал Microsoft Team Channel программно через Microsoft Graph. Вот данные, которые я отправляю через Graph Explorer POST

{
    "teamsAppId": "com.microsoft.teamspace.tab.files.sharepoint",
    "name": "Documents3",
    "sortOrderIndex": "10300",
    "configuration": {
        "siteUrl": "https://baywet.sharepoint.com/sites/customerhub",
        "libraryServerRelativeUrl": "/sites/customerhub/Shared Documents",
        "selectedDocumentLibraryTitle": "Documents",
        "selectedSiteTitle": "customerhub",
        "dateAdded": "2018-10-05T16:56:59.169Z"
    }
}

Получаю ответ 201 статус, моя вкладка добавлена ​​в канал. Однако всякий раз, когда кто-то пытается загрузить файл из пользовательского интерфейса Teams, он получает следующее сообщение об ошибке The File {filename} is missing. Если они нажмут Open in SharePoint, а затем загрузят файл, он заработает.
 сообщение об ошибке команды
Если я сравню с вкладкой, созданной через пользовательский интерфейс (которая работает правильно), вот описание Я получил.

{
    "id": "a68e34db-9d43-4821-953b-2dec938ce785",
    "name": "Document%20Library",
    "teamsAppId": "com.microsoft.teamspace.tab.files.sharepoint",
    "sortOrderIndex": "10200",
    "webUrl": "https://teams.microsoft.com/l/channel/19%3ab2e05a0aae42487485b13e088d5d2f0f%40thread.skype/tab%3a%3aa63916e6-f252-477d-9696-7934980e7e47?label=Document%2520Library&groupId=71ed6a2e-67ca-4930-a3c2-abb25ca29fbf&tenantId=bd4c6c31-c49c-4ab6-a0aa-742e07c20232",
    "configuration": {
        "entityId": null,
        "contentUrl": null,
        "removeUrl": null,
        "websiteUrl": null,
        "siteUrl": "https://baywet.sharepoint.com/sites/customerhub",
        "libraryServerRelativeUrl": "/sites/customerhub/Shared Documents",
        "libraryId": "706FAD5678484E7B93B0855E52A0BCD9",
        "selectedDocumentLibraryTitle": "Documents",
        "selectedSiteImageUrl": "https://baywet.sharepoint.com/sites/customerhub/_api/GroupService/GetGroupImage?id='f9d430ca-4de3-42f1-9474-1427bfdb16b0'&hash=636743460492415245",
        "selectedSiteTitle": "customerhub",
        "dateAdded": "2018-10-05T16:56:59.169Z"
    }
}

Единственное отличие - это значение конфигурации libraryId. (вы не должны отправлять в webUrl и id). Этот идентификатор библиотеки не соответствует идентификатору библиотеки в SharePoint или идентификатору элемента диска в графике, поэтому мой вопрос: какое значение я должен установить для libraryId? Что еще мне не хватает?


person baywet    schedule 05.10.2018    source источник
comment
Я хотел сообщить вам, что мы изучаем это, и сообщим вам, как только мы это выясним.   -  person Jeremy Thake MSFT    schedule 10.10.2018


Ответы (2)


Следующий код создает команду для известного идентификатора группы (365, который при создании создает сайт группы) и добавляет 3 вкладки в существующий канал.

          IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
                                 .Create(GraphClientId)
                                 .WithTenantId(GraphTenantId)
                                 .WithClientSecret(GraphClientSecret)
                                 .Build();
            ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);
            GraphServiceClient graphClient = new GraphServiceClient(authProvider);

            var team = new Team
            {
                MemberSettings = new TeamMemberSettings
                {
                    AllowCreateUpdateChannels = true
                },
                MessagingSettings = new TeamMessagingSettings
                {
                    AllowUserEditMessages = true,
                    AllowUserDeleteMessages = true
                },
                FunSettings = new TeamFunSettings
                {
                    AllowGiphy = true,
                    GiphyContentRating = GiphyRatingType.Moderate
                }
            };

            Team addedTeam = await graphClient.Groups[GroupID].Team
                .Request()
                .PutAsync(team);

            ECGTeam ecgTeam = new ECGTeam {ProjectNumber= ProjectNumber ,GroupID = GroupID, TeamID = addedTeam.Id };

            string channelID = string.Empty;
            var channels = await graphClient.Teams[addedTeam.Id].Channels.Request().GetAsync();
            channelID = channels[0].Id;
            ecgTeam.ChannelID = channelID;

            TeamsTab newTab = addTab(targetWebUrl, "WorkingPapers", "Working Papers");
            var addedTab = await graphClient.Teams[addedTeam.Id].Channels[channelID].Tabs.Request().AddAsync(newTab);
            ecgTeam.TabWorkingPapersID = addedTab.Id;
            //DPC documents
            newTab = addTab(targetWebUrl, "DPCdocuments", "DPC documents");
            addedTab = await graphClient.Teams[addedTeam.Id].Channels[channelID].Tabs.Request().AddAsync(newTab);
            ecgTeam.TabDPCdocumentsID=addedTab.Id;
            //ContractDocuments //
            newTab = addTab(targetWebUrl, "ContractDocuments", "Contract Documents");
            addedTab = await graphClient.Teams[addedTeam.Id].Channels[channelID].Tabs.Request().AddAsync(newTab);
            ecgTeam.TabContractDocumentsID = addedTab.Id;
            //log.LogInformation(addedTab.Id);

Теперь, если вы можете помочь мне создать библиотеку для указанного сайта, которая использует настраиваемый тип контента, я куплю вам кофе :-) Обилие хорошей документации для MS Graph в .NET Core заставляет меня плакать :-(

person Ofer Gal    schedule 21.10.2019

Через некоторое время я нашел решение, извините за то, что не опубликовал здесь раньше.

POST https://graph.microsoft.com/beta/teams/{groupId}/channels/{channelId}/tabs

{
    "[email protected]": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/com.microsoft.teamspace.tab.files.sharepoint",
    "name": "test",
    "sortOrderIndex": "10400",
    "configuration": {
        "contentUrl": "https://baywet.sharepoint.com/sites/NYC/test"
    }
}

Где contentUrl - это URL-адрес библиотеки документов

person baywet    schedule 21.10.2019