Javascript 使用REST API在SharePoint Online中外部共享文件夹
我是SharePoint Online和REST API的新手 我目前正在开发一个SharePoint加载项,该加载项在宿主Web中的文档库中创建文件夹,并将权限共享给指定的外部用户。我目前正在尝试使用RESTAPI做所有事情 我已成功创建文件夹,但当前无法将文件夹共享给外部用户 尝试使用主机web上下文时,解析以下端点时遇到问题。下面的第一个端点用于解析外部电子邮件,第二个端点用于向外部用户实际共享文件夹Javascript 使用REST API在SharePoint Online中外部共享文件夹,javascript,jquery,rest,odata,sharepoint-online,Javascript,Jquery,Rest,Odata,Sharepoint Online,我是SharePoint Online和REST API的新手 我目前正在开发一个SharePoint加载项,该加载项在宿主Web中的文档库中创建文件夹,并将权限共享给指定的外部用户。我目前正在尝试使用RESTAPI做所有事情 我已成功创建文件夹,但当前无法将文件夹共享给外部用户 尝试使用主机web上下文时,解析以下端点时遇到问题。下面的第一个端点用于解析外部电子邮件,第二个端点用于向外部用户实际共享文件夹 [appUrl]/_api/SP.AppContextSite(@target)/SP.
[appUrl]/_api/SP.AppContextSite(@target)/SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerResolveUser?@target='[hostUrl]'
[appUrl]/_api/SP.AppContextSite(@target)/SP.Web.ShareObject?@target='[hostUrl]'
我收到错误404未找到
:找不到请求SP.UI.ApplicationPages.ClientPeoplerPickerWebServiceInterface.clientpeoplepickerresovuser的资源
。当我试图强制运行SP.Web.ShareObject时,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 && url.indexOf("$") > -1){
connector = "&";
}
url = url + connector + "@target='" + hostUrl + "'";
}
return url;
}
return{
getTargeturl: getTargeturl
}}
您能否帮助验证我是否正确使用端点,以及我尝试执行的操作是否可行?
谢谢你的帮助
干杯,
Neil添加了我的解决方案,以防其他人遇到此问题。 我能够通过以下方式使用API:
url=WebComponents().getTargetUrl(url,hostUrl)
和reqUrl=WebComponents().getTargetUrl(reqUrl,hostUrl)
李>