【问题标题】:SharePoint 2013 Custom file properties update using restSharePoint 2013 自定义文件属性更新使用休息
【发布时间】:2015-05-03 20:55:24
【问题描述】:

我正在尝试使用 REST 和 JavaScript 更新 SharePoint 2013 中文件的自定义文档属性

function uploadFileProp() 
{
             $.ajax({
                url: "https://sp/sites/xxxx/_api/web/getFileByServerRelativeUrl('/sites/xxxx/ta/cs_architecture_3_0.png')/ListItemAllFields",
                type: "POST",
                 data: "{ '__metadata': { 'type': 'SP.ListItem' }, 'OperatingGroup': 'New' }",
                headers: {
                    "accept": "application/json;odata=verbose",
                    "X-RequestDigest": $("#__REQUESTDIGEST").val(),
                    "X-HTTP-Method":"Merge"
                },
                complete: function (data) {
                    alert('succes');
                },
                error: function (err) {
                     alert('failed');
                }
        });
}

但它没有更新我的自定义属性。

回应:

{"错误":{"代码":"-1, Microsoft.SharePoint.Client.InvalidClientQueryException","message":{"lang":"en-US","value":"Invalid 请求。"}}}

【问题讨论】:

    标签: javascript sharepoint sharepoint-2013


    【解决方案1】:

    由于为X-HTTP-Method 指定了无效的标头值,因此发生此错误:

    X-HTTP-Method 的语法定义如下:

    XHTTPMethod  =   "X-HTTP-Method: " 
                    ("PUT" 
                    / "MERGE" 
                    / "PATCH"
                    / "DELETE") 
                    CRLF
    

    "X-HTTP-Method":"Merge" 替换为"X-HTTP-Method":"MERGE"

    不幸的是,这不是指定示例的唯一问题:

    • If-Match 标头是更新操作的强制
    • 很可能实体类型名称不正确(SP.ListItem),因为 您正在更新的列表项

    下面演示如何更新文件属性

    注意:您不必明确指定实体类型名称,因为它 是自动确定的

    function updateFileProperties(webUrl,fileUrl,properties) 
    {
        var endpointUrl = webUrl + "/_api/web/getFileByServerRelativeUrl('" + fileUrl + "')/ListItemAllFields";
        return executeJson(endpointUrl).then(function(data){
            var updateHeaders = {
                'X-HTTP-Method' : 'MERGE',
                'If-Match': data.d['__metadata']['etag']
            };
            var itemPayload = properties;
            itemPayload['__metadata'] = {'type': data.d['__metadata']['type']};
            return executeJson(endpointUrl,'POST',updateHeaders,itemPayload);    
        });
    }
    
    function executeJson(url,method,headers,payload) 
    {
        method = method || 'GET';
        headers = headers || {};
        headers["Accept"] = "application/json;odata=verbose";
        if(method == "POST") {
            headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
        }      
        var ajaxOptions = 
        {       
           url: url,   
           type: method,  
           contentType: "application/json;odata=verbose",
           headers: headers
        };
        if (typeof payload != 'undefined') {
          ajaxOptions.data = JSON.stringify(payload);
        }  
        return $.ajax(ajaxOptions);
    }
    

    用法

    更新位于Documents 库下的文件的Title 属性:

    var webUrl = 'https://contoso.sharepoint.com';
    var fileUrl = '/Documents/SharePoint User Guide.docx';
    var properties = {
        'Title': 'New title',
    };
    
    updateFileProperties(webUrl,fileUrl,properties)
       .done(function(){
           console.log('File has been updated');    
       })
       .fail(function(error){
           console.log(JSON.stringify(error));
       });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-13
      • 2015-01-11
      • 2014-11-08
      • 2015-08-11
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多