2016-10-23 9 views
1

SharePoint OnlineおよびREST APIを初めて使用しています。REST APIを使用したSharePoint Onlineでのフォルダの外部共有

私は現在、SharePointのアドインで、ホストWebにあるドキュメントライブラリにフォルダを作成し、指定された外部ユーザーにアクセス許可を共有しています。現在、REST APIを使用してすべてを実行しようとしています。

フォルダを正常に作成できましたが、現在は外部ユーザーにフォルダを共有できません

ホストウェブコンテキストを使用しようとすると、次のエンドポイントを解決するのに問題があります。以下の最初のエンドポイントは外部電子メールを解決するためのもので、もう1つは外部ユーザーとのフォルダの実際の共有を行うためのものです。 Cannot find resource for the request SP.UI.ApplicationPages.ClientPeoplerPickerWebServiceInterface.clientPeoplePickerResoveUser

[appUrl]/_api/SP.AppContextSite(@target)/SP.UI.ApplicationPages.Clien[email protected]target='[hostUrl]' 

[appUrl]/_api/SP.AppContextSite(@target)/[email protected]='[hostUrl]' 

私はエラー404 Not Foundを取得しています。強制的に実行しようとすると、同じエラーがSP.Web.ShareObjectに発生します。以下は

私はエンドポイント

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 
}} 

ホストのURLを生成するための

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); 
     }); 
    }  
});} 

を使用していたJavaScriptは、あなたが私が正しく、私がしようとしていますどのような場合には、エンドポイントを使用していますかどうかを確認できる助けそれは可能ですか? ヘルプに感謝します。

乾杯、ケースの他の誰の出会いにだけ、この問題を私の解像度を追加 ニール

答えて

1

  1. url = WebComponents().getTargetUrl(url, hostUrl)reqUrl = WebComponents().getTargetUrl(reqUrl, hostUrl)を削除: 私はでAPIを使用することができました。 AppManifest.xml
経由 テナントでのApp フルコントロールを与える
  • 関連する問題