是否可以在不使用SP App的情况下在SharePoint 2013
列表中插入数据?
我需要将CMS中的一些数据插入到SharePoint列表中,并且无法弄清楚如何连接到SP实例。
我已尝试使用提供的TokenHelper
,但我的所有试用都会产生400 Bad Request
或403 Forbidden
。
更新:我更倾向于使用C#
,而不是JavaScript
库。
答案 0 :(得分:1)
如果您的CMS是用.NET编写的,则可以使用客户端对象模型。您的代码看起来像这样:
function _createListItem(listName, values, logProgress) {
var context = new SP.ClientContext();
var dfd = $.Deferred();
var list = context.get_web().get_lists().getByTitle(listName);
context.load(list);
var itmCI = new SP.ListItemCreationInformation();
this.itm = list.addItem(itmCI);
for (fieldName in values)
{
this.itm.set_item(fieldName, values[fieldName]);
}
this.itm.update();
context.load(this.itm);
context.executeQueryAsync(
function () {
dfd.resolve();
},
function (sender, args) {
dfd.reject(sender, args, "Error creating ListItem");
});
return dfd.promise();
}
如果您的CMS是用其他东西编写的,则可以使用REST。代码看起来像这样:
function _createListItem(listName, values) {
var dfd = $.Deferred();
var baseUrl = SP.Utilities.UrlBuilder.urlCombine(
_spPageContextInfo.webServerRelativeUrl,
"_api/web/lists/");
baseUrl += "GetByTitle('" + listName + "')/items";
values["__metadata"] = { "type": "SP.Data." + listName + "ListItem" };
var itemData = JSON.stringify(values);
var headers = {
"accept": "application/json;odata=verbose",
"content-length": itemData.length,
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}
var dfd = $.ajax({
url: encodeURI(baseUrl),
type: "POST",
contentType: "application/json;odata=verbose",
data: itemData,
headers: headers
});
return dfd.promise();
}
由于您不在SP-App中,因此需要调用/ ContextInfo来获取X-RequestDigest值。此外,此代码是用JavaScript编写的,因此您需要使用跨域库来处理跨域问题。如果您使用其他语言执行REST,代码将类似,您可以指定REST调用的凭据,而不必处理跨域问题。
如果您需要更多信息,请说明您正在使用的语言,以便我可以专注于此。
HTH。
答案 1 :(得分:1)
您可以关注Kirk Evan的博客文章Call O365 Using CSOM with a Console Application。不必烦恼所有oAuth / App的东西。在类似的情况下,我的工作做得很好。希望这会有所帮助。