【问题标题】:SharePoint 2010 REST API JQUery Insert, Update, DeleteSharePoint 2010 REST API JQUery 插入、更新、删除
【发布时间】:2013-07-23 03:33:01
【问题描述】:

谁能解释或指向一个链接,其中包含使用 Jquery 和 SharePoint 2010 Rest API 进行更新、删除的示例?

自从 MSDN 文档解释和网络上的每个教程都解释查询以来,我有插入工作,当然还有查询,但只是想知道是否有人插入、更新、删除数据,而不仅仅是查询示例和教程?是的,我知道我可以使用 CSOM,但我想了解这是如何通过 jquery 和 sharepoint rest 完成的?

我也想使用 Merge 进行更新。

这是有效的插入代码:

function insertMilestone() {
            var mileStonesListUrl = "/_vti_bin/listdata.svc/Milestones";    
               var milestone = {};
               milestone.Title = "Testing from REST";

               var entry = JSON.stringify(milestone);

               $.ajax({
                   type: "POST",
                   url: mileStonesListUrl,
                   data: entry,
                   contentType: "application/json; charset=utf-8",
                   error: function (xhr) {
                       alert(xhr.status + ": " + xhr.statusText);
                   },

                   success: function () {
                       getAll();

                   }
               });
           }

【问题讨论】:

    标签: sharepoint sharepoint-2010


    【解决方案1】:

    这里是更新和删除,它并不像我想象的那么难,而且很有效。 希望这会对某人有所帮助,因为有太多关于使用 REST API 的虚假信息,我看到无数关于查询的帖子,但没有关于插入、更新、删除的帖子。

    //update
               function updateMilestone(id) {
    
                   var mileStonesUrl = "/_vti_bin/listdata.svc/Milestones";
                   mileStonesUrl = mileStonesUrl + "(" + id+ ")";
    
    
                   var beforeSendFunction;
    
                   var milestoneModifications = {};
                   milestoneModifications.Title = "Updated from REST";
    
                   var updatedMilestoneData = JSON.stringify(milestoneModifications);
    
    
                   //update exsiting milestone
                   beforeSendFunction = function (xhr) {
                       xhr.setRequestHeader("If-Match", "*");
                       // Using MERGE so that the entire entity doesn't need to be sent over the wire.
                       xhr.setRequestHeader("X-HTTP-Method", 'MERGE');
                   }
    
                   $.ajax({
                       type: "POST",
                       contentType: "application/json; charset=utf-8",
                       processData: false,
                       beforeSend: beforeSendFunction,
                       url: mileStonesUrl,
                       data: updatedMilestoneData,
                       dataType: "json",
                       error: function (xhr) {
                           alert(xhr.status + ": " + xhr.statusText);
                       },
    
                       success: function () {
                           alert("Updated");
                           getAll();
    
                       }
                   });
    
    
    
    
         function deleteMilestone(id) {
    
                   var mileStonesUrl = "/_vti_bin/listdata.svc/Milestones";
                   mileStonesUrl = mileStonesUrl + "(" + id+ ")";
    
                   $.ajax({
                       type: "DELETE",
                       contentType: "application/json; charset=utf-8",
                       processData: false,                       
                       url: mileStonesUrl,                     
                       error: function (xhr) {
                           alert(xhr.status + ": " + xhr.statusText);
                       },
                       success: function () {
                           alert("deleted");
                           getAll();
    
                       }
                   });
    
               }
    
    
    
    
               }
    

    【讨论】:

    • 你试过这个吗:spservices.codeplex.com 如果你想使用 javascript 与 Sharepoint 对话,那就太棒了
    • 是的,我见过 spservices,但它使用 CSOM 和 xml 以及所有爵士乐,CSOM 并不难,用于查询的 U2U CAML 构建器使它变得容易。这很酷,但是将 REST API 与 jquery 一起使用真的很棒。我真的在尝试学习内部工作原理,而不是使用别人的库来抽象所有学习,我宁愿编写自己的框架,我没有时间限制,而且理解所有这些都很好。我不明白 REST 合并,但现在我明白了。我有带有自定义 UI 的 jquery 数据表,并且在 sharepoint 中有几乎一个单页应用程序。
    • 当我在谷歌上搜索所有示例都用于 Gets 而其余示例用于 SPServices 时,我感到很惊讶。没有人使用 REST API 吗?为什么 CRUD 上没有帖子,甚至作者停止获取数据的 SP Pluralsight Course。
    • 我也在 SharePoint 中做单个应用程序。我做的第一件事是将服务堆栈连接到它并使用服务器对象模型进行我自己的实现。它工作得很好,加上淘汰赛、Sammy 和 Require,它在所有地方都取得了胜利
    • 嗨 Vadim Gremyachev。你有使用rest api和javascript将附件文件上传到自定义列表的解决方案吗?
    【解决方案2】:

    我最近使用 REST API for SP 2013,作为示例 POC,可用于任何调用实现,例如 JQuery、C# 等。

    使用 POSTMAN

    首先获取你的摘要令牌:

    在本站发现了一个方法:http://tech.bool.se/basic-rest-request-sharepoint-using-postman/[信用到期的信用]

    发布

    http://<SharePoint Domain Url>/sites/<Site name>/_api/contextinfo
    

    标题:

    Accept : application/json;odata=verbose
    

    正文: 清除尸体​

    从有效负载中使用“FormDigestValue”值并将其放入带有键的标题中:X-RequestDigest 进行更改 SharePoint 中项目的操作时。

    读取数据:

    获取

    http://<SharePoint Domain Url>/sites/<Site name>/_api/web/getfolderbyserverrelativeurl('/Sites/<Site Name>/Shared Documents/My Folder')/files?$select=Name
    

    标题:

    Accept : application/json;odata=verbose​
    

    当涉及到创建、更新、删除时,您需要摘要令牌或授权令牌来执行这些操作,此令牌在开始检索时会突出显示。

    ​创建数据 发布

    http://<SharePoint Domain Url>/sites/<Site Name>/_api/web/folders​
    

    标题:

    Accept : application/json;odata=verbose
    
    X-RequestDigest : 'GUID looking toking'
    
    Content-Type : application/json;odata=verbose
    

    主体:

    { '__metadata': { 'type': 'SP.Folder' }, 'ServerRelativeUrl': '/Sites/<Site Name>/Shared Documents/Some Folder/POC3'}​
    

    注意: 'ServerRelativeUrl' POC3 后面的文件夹就是我要创建的文件夹

    相关资源: http://msdn.microsoft.com/en-us/library/office/fp142380(v=office.15).aspx

    注意: PostMan 用于此示例,其他应用程序可能需要您对端点进行 url 编码。

    上述请求结构可用于所有请求,相关资源重点介绍了可与 REST Api 一起使用的一些标准方法

    【讨论】:

    • 这是 2013 年的,不是 2010 年的。2010 年使用 /_vti_bin/ListData.svc,而不是 /_api/web/folders​。无论如何,你会想要/_api/web/lists,在 2013 年。提供作品而不是工作示例,并提供参考链接不是我们想要回答问题的方式。
    • 感谢@vapcguy 的反馈,这已在 2014 年得到回答,这是我的第一个答案之一,如果我当时知道的话,会创建一个存储库
    • 是的,我想我应该想到这一点,因为那是 5 年前的事了。我只是想确保其他人知道 API 中的差异并引起注意,以防您(以及可能看到它的其他人)仍然做出类似的回答。很高兴你随着时间的推移而成长。和平。
    【解决方案3】:

    如何使用 SharePoint 2010 REST 接口执行 CRUD 操作

    创建

    为了通过 REST 执行创建操作,您必须执行以下操作:

    • 使用 POST 动词创建 HTTP 请求。
    • 使用要添加实体的列表的服务 URL 作为 POST 的目标。
    • 将内容类型设置为application/json
    • 将表示新列表项的 JSON 对象序列化为 字符串,并将此值添加到请求正文中

    JavaScript 示例:

    function createListItem(webUrl,listName, itemProperties, success, failure) {
    
        $.ajax({
            url: webUrl + "/_vti_bin/listdata.svc/" + listName,
            type: "POST",
            processData: false,
            contentType: "application/json;odata=verbose",
            data: JSON.stringify(itemProperties),
            headers: {
                "Accept": "application/json;odata=verbose"
            },
            success: function (data) {
                success(data.d);
            },
            error: function (data) {
                failure(data.responseJSON.error);
            }
        });
    }
    

    用法

    var taskProperties = {
        'TaskName': 'Order Approval',
        'AssignedToId': 12
    };
    
    createListItem('https://contoso.sharepoint.com/project/','Tasks',taskProperties,function(task){
        console.log('Task' + task.TaskName + ' has been created'); 
      },
      function(error){
        console.log(JSON.stringify(error));
      }
    );
    

    阅读

    为了通过 REST 执行读取操作,您必须执行以下操作:

    • 使用 GET 动词创建 HTTP 请求。
    • 使用您要添加的列表项的服务 URL 实体作为 GET 的目标。
    • 将内容类型设置为application/json

    JavaScript 示例:

    function getListItemById(webUrl,listName, itemId, success, failure) {
        var url = webUrl + "/_vti_bin/listdata.svc/" + listName + "(" + itemId + ")";
        $.ajax({
            url: url,
            method: "GET",
            headers: { "Accept": "application/json; odata=verbose" },
            success: function (data) {
                success(data.d);
            },
            error: function (data) {
                failure(data.responseJSON.error);
            }
        });
    }
    

    用法

    getListItemById('https://contoso.sharepoint.com/project/','Tasks',2,function(taskItem){
        console.log(taskItem.TaskName); 
      },
      function(error){
        console.log(JSON.stringify(error));
      }
    );
    

    更新

    要更新现有实体,您必须执行以下操作:

    • 使用 POST 动词创建 HTTP 请求。
    • 添加一个值为MERGEX-HTTP-Method 标头。
    • 使用要更新的列表项的服务 URL 作为目标 对于POST
    • 添加一个 If-Match 标头,其值为实体的原始 ETag。

    JavaScript 示例:

    function updateListItem(webUrl,listName,itemId,itemProperties,success, failure)
    {
       getListItemById(webUrl,listName,itemId,function(item){
    
          $.ajax({
             type: 'POST',
             url: item.__metadata.uri,
             contentType: 'application/json',
             processData: false,
             headers: {
                    "Accept": "application/json;odata=verbose",
                    "X-HTTP-Method": "MERGE",
                    "If-Match": item.__metadata.etag
             },
             data: Sys.Serialization.JavaScriptSerializer.serialize(itemProperties),
             success: function (data) {
                    success(data);
             },
             error: function (data) {
                    failure(data);
             }
          });
    
       },
       function(error){
           failure(error);
       });
    
    }
    

    用法

    var taskProperties = {
        'TaskName': 'Approval',
        'AssignedToId': 12  
    };
    
    
    updateListItem('https://contoso.sharepoint.com/project/','Tasks',2,taskProperties,function(item){
        console.log('Task has been updated'); 
      },
      function(error){
        console.log(JSON.stringify(error));
      }
    );
    

    删除

    要删除实体,您必须执行以下操作:

    • 使用 POST 动词创建 HTTP 请求。
    • 添加一个值为DELETEX-HTTP-Method 标头。
    • 使用要更新的列表项的服务 URL 作为目标 对于 POST
    • 添加带有实体原始 ETag 值的 If-Match 标头。

    JavaScript 示例:

    function deleteListItem(webUrl, listName, itemId, success, failure) {
        getListItemById(webUrl,listName,itemId,function(item){
            $.ajax({
                url: item.__metadata.uri,
                type: "POST",
                headers: {
                    "Accept": "application/json;odata=verbose",
                    "X-Http-Method": "DELETE",
                    "If-Match": item.__metadata.etag
                },
                success: function (data) {
                    success();
                },
                error: function (data) {
                    failure(data.responseJSON.error);
                }
            });
        },
       function (error) {
           failure(error);
       });
    }
    

    用法

    deleteListItem('https://contoso.sharepoint.com/project/','Tasks',3,function(){
        console.log('Task has been deleted'); 
      },
      function(error){
        console.log(JSON.stringify(error));
      }
    );
    

    请关注List Items manipulation via REST API in SharePoint 2010文章了解更多详情。

    【讨论】:

    • 我想添加附件,如何使用 SharePoint 2010 REST 接口添加多个附件?
    猜你喜欢
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 2014-10-26
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多