如何从外部非SP应用程序在SharePoint 2013列表中插入数据

时间:2014-03-15 15:11:10

标签: sharepoint sharepoint-2013 office365

是否可以在不使用SP App的情况下在SharePoint 2013列表中插入数据? 我需要将CMS中的一些数据插入到SharePoint列表中,并且无法弄清楚如何连接到SP实例。

我已尝试使用提供的TokenHelper,但我的所有试用都会产生400 Bad Request403 Forbidden

更新:我更倾向于使用C#,而不是JavaScript库。

2 个答案:

答案 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的东西。在类似的情况下,我的工作做得很好。希望这会有所帮助。