为什么在使用 SharePoint REST API 处理列表项时内部字段名称不匹配?
Why does the internal field names not match when working with list items using the SharePoint REST API?
当我处理列表项时,我需要使用内部字段名称来设置字段值。我有几个不同数据类型的字段,让我们关注两个:'Comment'(多行文本)和 'Assigned'(个人或组)。这两个都是我自己创造的。
这是我用来 create/update 列出项目的方法,一切正常:
{ "__metadata" : { "type" : "SP.Data.ListItem" }, "Comment" : "Hello", "gomsId" : 215 }
我知道通过获取现有列表项并查看我收到的格式来使用 "Comment" 和 "gomsId"。
问题是:'Assigned'的内部字段名是'goms'
。不是 'gomsId'
。因此,当我使用 /_api/web/lists/getByTitle('ListName')/fields/getByTitle('Assigned')/internalname
创建列表项时,它不起作用。
为什么要为该字段附加 'Id'
部分?是因为数据类型吗?我如何知道哪些字段将附加 'Id'
而哪些不会?
对于 User
和 Lookup
字段类型 SharePoint REST returns lookup value part only
而不是 User/Lookup 字段值(很可能是出于性能原因)。在这种情况下,字段名称根据以下格式生成:<fieldInternalname>Id
引入新字段名称是为了避免与原始名称发生冲突,因为仍然可以 return 如下所示:
以下查询 returns Id
属性 的 AssignedTo
字段:
/_api/web/lists/getByTitle('Workflow Tasks')/items?$select=AssignedToId
以下示例 returns Id
和 Title
AssignedTo
字段的属性:
/_api/web/lists/getByTitle('Workflow Tasks')/items?$select=AssignedTo/Id,AssignedTo/Title&$expand=AssignedTo
根据字段是否为多值,通过 SharePoint REST API 设置 User/Lookup
字段值时支持以下格式:
- 单值用户字段:
'<fieldname>Id' : <user id>
- 多值用户字段:
'<fieldname>Id' : { 'results': [<array of user ids>] }
以下示例演示如何使用 SharePoint 2013 REST 设置用户字段值 API
多个用户字段值
该示例演示了如何创建任务项并指定多值 AssignedTo
字段:
//Create a Task item
var taskProperties = {
'__metadata' : { 'type': 'SP.Data.TasksListItem' },
'Title': 'Order approval',
'AssignedToId' : { 'results': [10] }
};
createListItem(_spPageContextInfo.webAbsoluteUrl,'Tasks',taskProperties)
.done(function(data)
{
console.log('Task has been created successfully');
})
.fail(
function(error){
console.log(JSON.stringify(error));
});
单个用户字段值
该示例演示了如何创建任务项并指定单值 AssignedTo 字段:
//Create a Task item
var taskProperties = {
'__metadata' : { 'type': 'SP.Data.TasksListItem' },
'Title': 'Order approval',
'AssignedToId' : 10
};
createListItem(_spPageContextInfo.webAbsoluteUrl,'Tasks',taskProperties)
.done(function(data)
{
console.log('Task has been created successfully');
})
.fail(
function(error){
console.log(JSON.stringify(error));
});
哪里
function createListItem(webUrl,listName,itemProperties)
{
return $.ajax({
url: webUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
type: "POST",
processData: false,
contentType: "application/json;odata=verbose",
data: JSON.stringify(itemProperties),
headers: {
"Accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}
});
}
当我处理列表项时,我需要使用内部字段名称来设置字段值。我有几个不同数据类型的字段,让我们关注两个:'Comment'(多行文本)和 'Assigned'(个人或组)。这两个都是我自己创造的。
这是我用来 create/update 列出项目的方法,一切正常:
{ "__metadata" : { "type" : "SP.Data.ListItem" }, "Comment" : "Hello", "gomsId" : 215 }
我知道通过获取现有列表项并查看我收到的格式来使用 "Comment" 和 "gomsId"。
问题是:'Assigned'的内部字段名是'goms'
。不是 'gomsId'
。因此,当我使用 /_api/web/lists/getByTitle('ListName')/fields/getByTitle('Assigned')/internalname
创建列表项时,它不起作用。
为什么要为该字段附加 'Id'
部分?是因为数据类型吗?我如何知道哪些字段将附加 'Id'
而哪些不会?
对于 User
和 Lookup
字段类型 SharePoint REST returns lookup value part only
而不是 User/Lookup 字段值(很可能是出于性能原因)。在这种情况下,字段名称根据以下格式生成:<fieldInternalname>Id
引入新字段名称是为了避免与原始名称发生冲突,因为仍然可以 return 如下所示:
以下查询 returns Id
属性 的 AssignedTo
字段:
/_api/web/lists/getByTitle('Workflow Tasks')/items?$select=AssignedToId
以下示例 returns Id
和 Title
AssignedTo
字段的属性:
/_api/web/lists/getByTitle('Workflow Tasks')/items?$select=AssignedTo/Id,AssignedTo/Title&$expand=AssignedTo
根据字段是否为多值,通过 SharePoint REST API 设置 User/Lookup
字段值时支持以下格式:
- 单值用户字段:
'<fieldname>Id' : <user id>
- 多值用户字段:
'<fieldname>Id' : { 'results': [<array of user ids>] }
以下示例演示如何使用 SharePoint 2013 REST 设置用户字段值 API
多个用户字段值
该示例演示了如何创建任务项并指定多值 AssignedTo
字段:
//Create a Task item
var taskProperties = {
'__metadata' : { 'type': 'SP.Data.TasksListItem' },
'Title': 'Order approval',
'AssignedToId' : { 'results': [10] }
};
createListItem(_spPageContextInfo.webAbsoluteUrl,'Tasks',taskProperties)
.done(function(data)
{
console.log('Task has been created successfully');
})
.fail(
function(error){
console.log(JSON.stringify(error));
});
单个用户字段值
该示例演示了如何创建任务项并指定单值 AssignedTo 字段:
//Create a Task item
var taskProperties = {
'__metadata' : { 'type': 'SP.Data.TasksListItem' },
'Title': 'Order approval',
'AssignedToId' : 10
};
createListItem(_spPageContextInfo.webAbsoluteUrl,'Tasks',taskProperties)
.done(function(data)
{
console.log('Task has been created successfully');
})
.fail(
function(error){
console.log(JSON.stringify(error));
});
哪里
function createListItem(webUrl,listName,itemProperties)
{
return $.ajax({
url: webUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
type: "POST",
processData: false,
contentType: "application/json;odata=verbose",
data: JSON.stringify(itemProperties),
headers: {
"Accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}
});
}