SharePoint Online LookUp 字段 PATCH 调用

SharePoint Online LookUp field PATCH call

我遇到的问题是当我对 SharePoint LookUp 字段进行 PATCH 调用时。每次我拨打电话时,多值查找列中的所有 ID 都会被覆盖。我的临时修复是检索 LookUp 字段中的所有 Id,然后将新 Id 添加到包含所有现有 Id 的数组,然后使用该数组进行 PATCH 调用。 PATCH 调用不应该只将新 ID 添加到 LookUp 字段而不删除该字段中已经存在的 ID 吗?这个问题感觉很难解释。希望我足够清楚。感谢大家的帮助!

代码:

    function linkContract(ajaxData) {

            var def = jQuery.Deferred();
            //Url
            var url = `${_spPageContextInfo.webAbsoluteUrl}/_api/web/lists/getbytitle('Avtal')/items('${window._cache.avtalsInfoId}')`;

            //requestHeaders
            var requestHeaders = {
                "accept": "application/json;odata=verbose",
                "content-type": "application/json;odata=verbose",
                "X-HTTP-Method": "PATCH",
                "IF-MATCH": `${window._cache.avtal_eTag}`,
                "X-RequestDigest": jQuery('#__REQUESTDIGEST').val()
            }
          //Array with old Id´s that I add the new Id to and then PATCH it to the column     
 window._cache.relateradeAvtalArray.push(parseInt(ajaxData.RelateradeAvtalId));

            //Data
            var data = {
                __metadata: {
                    "type": "SP.Data.AvtalItem"
                },
                RelateradeAvtalId: {
                    'results': window._cache.relateradeAvtalArray//<--Array with old and new id´s
                },

            };
            //requestBod
            var requestBody = JSON.stringify(data);

            //Post
            var postLookId = jQuery.ajax({
                url: url,
                type: "PATCH",
                headers: requestHeaders,
                data: requestBody
            });

            //Done
            postLookId.done(function (data, textStatus, jqXHR) {
                def.resolve(data);


            });
            //Fail
            postLookId.fail(function (jqXHR, textStatus, errorThrown) {

            })
            return def.promise();
        }

PATCH 方法允许部分更新实体而不是实体的属性,换句话说,请求负载 中指定的属性将被替换,而实体的当前状态将被保留.

例如,使用以下请求

Url: /_api/web/lists/getbytitle(Tasks)/items(1)
Method. POST
Headers: {"Accept":"application/json;odata=verbose","Content-Type":"application/json; odata=verbose","X-HTTP-Method":"MERGE","If-Match":"\"36\"","X-RequestDigest":"0x6B24D8B9C10F251812478A2D313EBD36D5373993A11CF9EF1D8414555C5E1CC1D0AD596633E2AEF4D5194CB534CF25006C913BDEC885F6914B4D2803DAB6FC04,27 Jan 2018 13:17:32 -0000"}
Data: {"__metadata":{"type":"SP.Data.TasksListItem"},"PredecessorsId":{"__metadata":{"type":"Collection(Edm.Int32)"},"results":[3]}}

任务列表

的现有列表项资源中的Predecessors字段值将被替换

合并查找字段值你可以考虑以下解决方案:

  • 提交获取查询以检索现有列表项
  • 通过在客户端合并现有查找 ID 和新查找 ID 来更新字段值
  • 提交更新查询以更新列表项资源