SharePoint 2013列表项更新,列表名称中包含空格

SharePoint 2013 list item update with spaces in list name

本文关键字:列表 包含 空格 2013 更新 SharePoint      更新时间:2023-09-26

我正在尝试为其中的单个项目更新名为"主管任务列表(DTL)"的SharePoint列表。我得到了以下代码:

var listName = 'Director''s Task List (DTL)';
var requestURI = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items(" + ID + ")";
$.ajax({
    uri: requestURI,
    type: "POST",
    contentType: "application/json; odata=verbose",
    data: JSON.stringify(data),
    headers: {
        "Accept": "application/json; odata=verbose",
        "X-HTTP-Method": "MERGE",
        "IF-MATCH": "*",
        "X-RequestDigest": $("#__REQUESTDIGEST").val()
    }
});

其中数据为:

var data = {
    '__metadata': { 'type': getItemTypeForListName(listName)},
    'Suspense_x0020_Status' : 
        {
            '__metadata': { 'type': 'SP.FieldUrlValue' },
            'Description': statusObject[ID]["color"],
            'Url': statusObject[ID]["html"]
        }
};

getItemTypeForListName(listName)为:

function getItemTypeForListName(listName) {
    var itemType = "SP.Data." + listName.charAt(0).toUpperCase() + listName.slice(1) + "ListName";
    var encItemType = itemType.replace(/'s/g,'_x0020_');
    return(encItemType);
}

我无法正确完成代码。我得到一个错误:

模型无法解析名为"SP.Data.Director"的类型s_x0020_Task_x0020_List_x0020_(DTL)ListName。当模型可用时,每个类型都必须解析为有效的类型。

我知道这与空格和单撇号有关,但我已经尝试了几种解决方案,但都没有成功。我已经看到双单撇号"''"是一种工作方法,它以前曾帮助我使此列表名称类型工作。所以不要马上指出这一点。

有什么想法吗?

似乎getItemTypeForListName函数返回了错误的列表项实体类型名称。

以下端点返回实际列表项实体类型名称:/_api/web/lists/GetByTitle('<list title>')?$select=ListItemEntityTypeFullName

对于列表标题:Director's Task List (DTL):

  • getItemTypeForListName函数返回SP.Data.Director''s_x0020_Task_x0020_List_x0020_(DTL)ListName
  • 而指定的端点返回:SP.Data.Directors_x0020_Task_x0020_List_x0020_DTLListItem

示例

该示例显示了如何返回列表项类型名称:

var listTitle = "Director''s Task List (DTL)"
function getItemTypeForListName(listTitle)
{
  return executeJson({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/?$select=ListItemEntityTypeFullName",
    method: 'GET'
  }).then(function(data){
       return data.d.ListItemEntityTypeFullName;
  });  
}
getItemTypeForListName(listTitle)
.done(function(name){
   console.log(name);
})
.fail(function(error){
  console.log(JSON.stringify(error));
});

其中

function executeJson(options) 
{
    var headers = options.headers || {};
    headers["Accept"] = "application/json;odata=verbose";
    if(options.method == "POST") {
        headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
    }   
    var ajaxOptions = 
    {       
       url: options.url,   
       type: options.method,  
       contentType: "application/json;odata=verbose",
       headers: headers
    };
    if(options.method == "POST") {
      ajaxOptions.data = JSON.stringify(options.payload);
    }  
    return $.ajax(ajaxOptions);
}
瓦迪姆,谢谢你的帮助。我想我终于像你要求的那样手动输入了工作请求。不过我不得不使用这个:
http://[server url]/_api/web/lists/GetByTitle('Director''s%20Task%20List%20(DTL)')listItemEntityTypeFullName

这返回了一个值SP.Data.TasksListItem。然后我更改了我的数据条目如下:

var data = {
    '__metadata': { 'type': SP.Data.TasksListItem},
    'Suspense_x0020_Status' : 
        {
            '__metadata': { 'type': 'SP.FieldUrlValue' },
            'Description': statusObject[ID]["color"],
            'Url': statusObject[ID]["html"]
        }
};

这似乎有助于在列表中更新值。

谢谢你的帮助,瓦迪姆。