【问题标题】:How to insert data in a SharePoint 2013 list from an external, non-SP app如何从外部非 SP 应用程序将数据插入 SharePoint 2013 列表
【发布时间】:2014-03-17 23:05:55
【问题描述】:

是否可以在不使用 SP 应用程序的情况下在 SharePoint 2013 列表中插入数据? 我需要将 CMS 中的一些数据插入到 SharePoint 列表中,但不知道如何连接到 SP 实例。

我尝试使用提供的TokenHelper,但我所有的试验结果都是400 Bad Request403 Forbidden

更新:我更愿意为此使用 C#,而不是 JavaScript 库。

【问题讨论】:

    标签: sharepoint sharepoint-2013 office365


    【解决方案1】:

    您可以关注 Kirk Evan 的博文 Call O365 Using CSOM with a Console Application。不必为所有 oAuth/App 的东西而烦恼。在类似的情况下对我来说效果很好。希望这会有所帮助。

    【讨论】:

    • 这看起来比我之前的试验要容易得多。 :-) 谢谢!
    • 确实 :) 我很高兴能帮上忙 :)
    【解决方案2】:

    如果您的 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();
    }
    

    您需要调用 /ContextInfo 以获取 X-RequestDigest 值,因为您不在 SP-App 中。此外,此代码是用 JavaScript 编写的,因此您需要使用跨域库来处理跨域问题。如果您使用另一种语言进行 REST,代码将类似,您可以为 REST 调用指定凭据,而不必处理跨域问题。

    如果您需要更多信息,请说明您使用的是哪种语言,以便我专注于此。

    HTH。

    【讨论】:

    • 很抱歉没有具体说明。我正在使用 C# - 我已经相应地更新了原始帖子:-)
    猜你喜欢
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多