SharePoint 2013列表项更新,列表名称中包含空格
SharePoint 2013 list item update with spaces in list name
我正在尝试为其中的单个项目更新名为"主管任务列表(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"]
}
};
这似乎有助于在列表中更新值。
谢谢你的帮助,瓦迪姆。
相关文章:
- 使用 中包含的 span 标记的内容对 href 标记的列表进行排序
- 如何使用 jQuery 触发对包含许多列表项的列表的单击
- 下拉列表包含图像
- Meteor:如何使用空格键创建包含两个集合数据的树列表
- 创建包含有限元素的列表
- 如何检查列表是否包含 javascript 中的字符串
- 如何检查字符串是否包含非英语字符列表
- Angular2中列表组件的自定义模板(不包含ng内容的transclusion)
- CKEDITOR-将粗体应用于包含数字的编号列表
- 我该如何在Rails中使下拉列表重定向到另一个包含特定信息的页面
- 创建一个包含复选框的下拉列表
- 如何同步包含克隆元素的jquery可排序列表
- 正在Jquery中的列表中不包含任何元素的列表中删除
- 对于列表中包含带文本的跨度的每个li,请从该li中删除另一个跨度
- 如何更新单词列表中搜索框中包含用户键入内容的单词/字母数
- jQuery 单击外部元素可向上或向下移动包含选中复选框的无序列表项
- 如果不包含字符串,则使用 jQuery 在下拉列表中选择空值
- 确定字符串是否包含不在字符列表中的字符,如果是,则确定哪些字符不匹配
- Javascript列表包含一个字符串
- 正则表达式逗号分隔列表包含九位电话号码