Предполагая, что в вашей среде используется готовая иерархия сайта и точки доступа sharepoint, вы можете получить доступ к файлам One Note, используя следующую структуру ссылок:
[SharePointAbsoluteUrl]/[EntityLogicalName]/[RelativeUrl]_[RegardingObjectId]/[RelativeUrl]
- Как получить
[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 по умолчанию, поэтому этот запрос вернет одну запись.
- Как достать оставшиеся части:
Выборка для местоположений 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