Что на самом деле возвращает конечная точка местоположения документа Sharepoint? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь получить информацию о записной книжке OneNote, которая связана с учетными записями CRM моей организации.Для каждой учетной записи создана книга OneNote, доступ к которой можно получить из CRM.

Насколько я понимаю, я могу использовать конечную точку SharePointDocumentLocation (находится здесь: https://docs.microsoft.com/en-us/dynamics365/customer-engagement/web-api/sharepointdocumentlocation?view=dynamics-ce-odata-9), чтобы получить местоположение определенного файла, если я запрашиваю тип местоположения равным 1.

Однако SharePointDocumentLocationId и SiteCollectionId, похоже, не указывают ни на что на сайтах моей компании. Должен ли я получать свои данные где-то еще?

Я начал искать в структуре SharePoint моей компании, чтобы узнать, смогу ли я получить какие-либо данные.подсказки о том, где могут находиться эти документы. В моем первоначальном запросе Postman (удаление сайтов с корневого сайта) не отображается сайт, на котором размещены наши документы CRM (sites / crmdocs). Мне удалось найти, где это было сохранено.в конце концов, но попытка хранить записные книжки OneNote, хранящиеся там, возвращает ошибку, поскольку у нас там более 20 000 записных книжек, поэтому я не могу получить их все. Насколько я знаю, я могу получить записные книжки, если у меня есть конкретныйИдентификатор, который я хочу.

Как только я получаю информацию CRM, я пытаюсь отправить запрос вродеэто:

https://graph.microsoft.com/v1.0/sites/{myCompanyUrl},{siteCollectionId},{sharepointDocumentLocationId}/onenote/notebooks/

SiteCollectionId и SharePointDocumentLocationId взяты из моего запроса CRM SharePointDocumentLocation

Полученная ошибка:

The requested site was not found. Please check that the site is still accessible.

1 Ответ

0 голосов
/ 10 апреля 2019

Предполагая, что в вашей среде используется готовая иерархия сайта и точки доступа sharepoint, вы можете получить доступ к файлам One Note, используя следующую структуру ссылок:

[SharePointAbsoluteUrl]/[EntityLogicalName]/[RelativeUrl]_[RegardingObjectId]/[RelativeUrl]
  1. Как получить [SharePointAbsoluteUrl]:

Запроса для расположения sharepointdocument на самом деле недостаточно, поскольку Dynamics 365 хранит эту информацию в другом объекте, называемом sharepointsite. Вот как это можно получить:

        var query = new QueryExpression("sharepointsite")
        {
            ColumnSet = new ColumnSet("absoluteurl")
        };
        query.Criteria.AddCondition("IsDefault", ConditionOperator.Equal, true);
        var entityCollection = _service.RetrieveMultiple(query);

        var absoluteUrl = entityCollection[0].Attributes["absoluteurl"];

В веб-API это эквивалентно:

GET https://[Your Org]/api/data/v9.0/sharepointsites?$select=absoluteurl&$filter=isdefault%20eq%20true

Может быть только сайт sharepoint по умолчанию, поэтому этот запрос вернет одну запись.

  1. Как достать оставшиеся части:

Выборка для местоположений sharepointdocument, которые имеют тип местоположения, выделенный для интеграции одной заметки:

        var query = new QueryExpression("sharepointdocumentlocation")
        {
            ColumnSet = new ColumnSet("regardingobjectid", "relativeurl")
        };
        query.Criteria.AddCondition("locationtype", ConditionOperator.Equal, 1);

        var entityCollection = _service.RetrieveMultiple(query);

В веб-API это эквивалентно следующему запросу get, не забудьте добавить add Prefer: odata.include-annotations = "*" в заголовки HTTP-запроса, чтобы он мог искать поле lookuplogicalname:

GET https://[Your Org]/api/data/v9.0/sharepointdocumentlocations?$select=relativeurl,_regardingobjectid_value&$filter=locationtype%20eq%201

Этот запрос может вернуть много записей, я только использовал первую из приведенных ниже примеров для пояснения.

[EntityLogicalName] будет вашим ((EntityReference)entityCollection[0].Attributes["regardingobjectid"]).LogicalName; В Web Api будет ваше value._regardingobjectid_value@Microsoft.Dynamics.CRM.lookuplogicalname значение.

[RelativeUrl] будет вашим entityCollection[0].Attributes["relativeurl"]; В Web Api будет ваше value.relativeurl значение.

[RegardingObjectId] можно получить с помощью этого выражения ((EntityReference)entityCollection[0].Attributes["regardingobjectid"]).Id.ToString().Replace("-", "").ToUpper(); В Web Api id будет вашим значением _regardingobjectid_value, и вы должны удалить дефисы и преобразовать их в верхний регистр на любом языке, на котором вы делаете запрос.

В результате вы должны получить URL-адрес, подобный этому https://mycompany.sharepoint.com/account/A Datum Fabrication_A56B3F4B1BE7E6118101E0071B6AF231 / A Datum Fabrication

...