UPDATE:我现在明白了,通过在web范围内安装应用程序,它只能访问hostweb和appweb。所以我试着批量安装这个应用程序,现在这个应用程序可以工作了。但是,除了在应用程序目录中,应用程序部件不可用。是否有人知道将应用程序部分权限授予其他网站集的方法,或者批量安装应用程序部分以使其在应用程序目录以外的其他地方可用?
有这样的代码,我正在使用它从一个网站集下载文件,并试图将其上传到另一个网站集中的sharepoint在线。
我得到一个403,我不允许上传文件。下载很好。有人有线索吗?
var web;
var hostweburl;
var appweburl;
$(document).ready(function () {
sharePointReady();
});
function sharePointReady() {
hostweburl =
decodeURIComponent(
getQueryStringParameter('SPHostUrl')
);
appweburl =
decodeURIComponent(
getQueryStringParameter('SPAppWebUrl')
);
var scriptbase = hostweburl + '/_layouts/15/';
$.getScript(scriptbase + 'SP.Runtime.js',
function () {
$.getScript(scriptbase + 'SP.js',
function () { $.getScript(scriptbase + 'SP.RequestExecutor.js', copyAndUploadFile); }
);
}
);
}
function getQueryStringParameter(param) {
var params = document.URL.split("?")[1].split("&");
var strParams = "";
for (var i = 0; i < params.length; i = i + 1) {
var singleParam = params[i].split("=");
if (singleParam[0] == param) {
return singleParam[1];
}
}
}
function copyAndUploadFile() {
var targetUrl = "https://sogetiumea-my.sharepoint.com/personal/simonagren_sogetiumea_onmicrosoft_com";
var executor = new SP.RequestExecutor(appweburl);
var fileContentUrl = "_api/SP.AppContextSite(@target)/web/GetFileByServerRelativeUrl('/_catalogs/theme/15/fontscheme003.spfont')/$value?@target='" + hostweburl + "'";
var fileTargetUrl = "_api/SP.AppContextSite(@target)/web/GetFolderByServerRelativeUrl('_catalogs/theme/15')/Files/Add(url='fontscheme003.spfont', overwrite=true)?@target='" + targetUrl + "'";
$.ajax({
url: "_api/contextinfo",
type: "POST",
contentType: "application/x-www-url-encoded",
dataType: "json",
headers: {
"Accept": "application/json; odata=verbose",
},
success: function (data) {
var digest = data.d.GetContextWebInformation.FormDigestValue;
var getFileAction = {
url: fileContentUrl,
method: "GET",
binaryStringResponseBody: true,
success: function (getFileData) {
var results = data.body;
var copyFileAction = {
url: fileTargetUrl,
method: "POST",
headers: {
"Accept": "application/json;odata=verbose",
"X-RequestDigest": digest
},
contentType: "application/json;odata=vebose",
binaryStrinRequestBody: true,
body: getFileData.body,
success: function (copyFileData) {
alert("kopiering gick bra");
},
error: function (ex) {
alert(JSON.stringify(ex));
}
};
executor.executeAsync(copyFileAction);
},
error: function (ex) {
alert(JSON.stringify(ex));
}
};
executor.executeAsync(getFileAction);
},
error: function (ex) {
alert(JSON.stringify(ex));
}
});
}
我使用了排序的变通方法。
- 我将应用程序部分添加到应用程序目录中,并将硬编码值用于mysite网站集(用作下载/复制文件的源)
- 使用开发人员工具,我复制了iframe的html,用于在应用程序目录中显示应用程序部分
- 我激活了mysites根网站集上的发布
-
我添加了一个脚本编辑器Web部件。然后我添加了复制的iframe代码。Voila,现在"应用程序部分"工作了。
- 起初,该应用程序会监听当前用户,检查是否存在个人网站,否则就会创建该网站
- 将mysite"_catalogs/theme/15"中的cusom spcolor文件复制到当前用户个人网站上的同一文件夹中
- 在"Applythame"中应用spcolor文件
这是基于Vesa对提供商托管的应用程序所做的想法!