#javascript #jquery #rest #odata #sharepoint-online
#javascript #jquery #rest #odata #sharepoint-online
Вопрос:
Я новичок в SharePoint Online и REST API.
В настоящее время я работаю над надстройкой SharePoint, которая создает папки в библиотеке документов, размещенной в веб-узле хостинга, и предоставляет разрешение указанным внешним пользователям. В настоящее время я пытаюсь сделать все, используя REST API.
Я успешно могу создавать папки, но в настоящее время я не могу предоставить общий доступ к папкам внешним пользователям.
У меня возникли проблемы с разрешением следующих конечных точек при попытке использовать веб-контекст хоста. Первая конечная точка, приведенная ниже, предназначена для разрешения внешнего сообщения электронной почты, а вторая — для выполнения фактического общего доступа к папке внешнему пользователю.
[appUrl]/_api/SP.AppContextSite(@target)/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerResolveUser?@target='[hostUrl]'
[appUrl]/_api/SP.AppContextSite(@target)/SP.Web.ShareObject?@target='[hostUrl]'
Я получаю сообщение об ошибке 404 Not Found
: Cannot find resource for the request SP.UI.ApplicationPages.ClientPeoplerPickerWebServiceInterface.clientPeoplePickerResoveUser
. Та же ошибка возникает для SP.Web.ShareObject
, когда я пытаюсь принудительно запустить его.
Ниже приведен javascript, который я использую
var ShareToRecipients = function(folder, recipient, appUrl, hostUrl){
var url = appUrl = "/_api/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerResolveUser";
url = WebComponents().getTargetUrl(url, hostUrl);
var sharedDocUrl = hostUrl "/ExternalShareDocLib/" foldername;
var checkUser = $.ajax({
url: url,
type: "POST",
contentType: "application/json;odata=verbose",
data: JSON.stringify({
'queryParams': {
"__metadata": {'type': "SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters"},
"AllowEmailAddresses": true,
"AllowMultipleEntities": false,
"AllUrlZones": false,
"MaximumEntitySuggestions": 50,
"PrincipalSource": 15,
"PrincipalType": 1,
"QueryString": recipient
}
}),
headers:{
"accept": "application/json;odata=verbose",
"X-RequestDigest": $('#__REQUESTDIGEST').val()
},
error: function(jqXHR, textStatus){
myapp.LogAPIError(jqXHR, textStatus)
}
});
checkUser.success(function(data){
var user = data.d.ClientPeoplePickerResolveUser;
var result = JSON.parse(users);
if(users !== undefined){
var reqUrl = appUrl "/_api/SP.Web.ShareObject";
reqUrl = WebComponents().getTargetUrl(reqUrl, hostUrl);
var shareCall = $.ajax({
url: reqUrl,
type: "POST",
contentType: "application/json;odata=verbose",
data: JSON.stringify({
"url": reqUrl,
type: "POST",
contentType: "application/json;odata=verbose",
data: JSON.stringify({
"url": sharedDocUrl,
"peoplePickerInput": '[' user ']',
"roleValue": "1073741827",
"groupId": 0,
"propagateAcl": false,
"sendEmail": true,
"includeAnonymousLinkInEmail": true,
"emailSubject": "A document folder has been shared to you",
"emailBody": "A document folder has been shared to you. The folder name is " folder
})
});
});
shareCall.success(function(data){
myApp.LogInformation("Successfully shared " folder " to " recipient);
});
shareCall.error(function(jqXHR, textStatus){
myApp.LogAPIError(jqXHR, textStatus);
});
}
});}
Для генерации конечной точки URL-адреса хоста
var WebComponents = function(){
var getTargeturl = function (url, hostUrl){
if(hostUrl){
var api = "_api/";
var index = url.indexOf(api);
url = url.slice(0, index api.length)
"SP.AppContextSite(@target)"
url.slice(index api.length);
var connector = "?";
if(url.indexOf("?") > -1 amp;amp; url.indexOf("$") > -1){
connector = "amp;";
}
url = url connector "@target='" hostUrl "'";
}
return url;
}
return{
getTargeturl: getTargeturl
}}
Можете ли вы помочь проверить, правильно ли я использую конечные точки и возможно ли вообще то, что я пытаюсь сделать?
Ценю помощь.
Приветствую, Нил
Ответ №1:
Добавляю свое решение на случай, если кто-нибудь еще столкнется с этой проблемой. Я смог использовать API с помощью:
- Удаление
url = WebComponents().getTargetUrl(url, hostUrl)
иreqUrl = WebComponents().getTargetUrl(reqUrl, hostUrl)
. - Предоставление приложению полного контроля в клиенте через AppManifest.xml