Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用REST API在SharePoint Online中外部共享文件夹_Javascript_Jquery_Rest_Odata_Sharepoint Online - Fatal编程技术网

Javascript 使用REST API在SharePoint Online中外部共享文件夹

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.

我是SharePoint Online和REST API的新手

我目前正在开发一个SharePoint加载项,该加载项在宿主Web中的文档库中创建文件夹,并将权限共享给指定的外部用户。我目前正在尝试使用RESTAPI做所有事情

我已成功创建文件夹,但当前无法将文件夹共享给外部用户

尝试使用主机web上下文时,解析以下端点时遇到问题。下面的第一个端点用于解析外部电子邮件,第二个端点用于向外部用户实际共享文件夹

[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)
  • 通过AppManifest.xml在租户中给予应用程序完全控制权