我正在尝试为其中的单个项目更新名为“主管的任务列表 (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);
}
关于javascript - SharePoint 2013 列表项更新,列表名称中有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33767526/