当我使用列表项时,我需要使用内部字段名来设置字段值。我有几个不同数据类型的字段,让我们关注两个:"评论"(多行文本)和"分配"(个人或组)。这两个都是我自己创造的。
这是我用来创建/更新列表项,它都工作得很好:{ "__metadata" : { "type" : "SP.Data.ListItem" }, "Comment" : "Hello", "gomsId" : 215 }
我知道要使用"Comment"one_answers"gomsId"通过获取一个现有的列表项,并查看我收到的格式。
问题是:'Assigned'的内部字段名称是'goms'
。不是'gomsId'
。因此,当我使用/_api/web/lists/getByTitle('ListName')/fields/getByTitle('Assigned')/internalname
创建列表项时,它不起作用。
为什么'Id'
部分附加在这个字段?是因为数据类型的原因吗?我怎么知道哪些字段将有'Id'
追加,哪些不会?
对于User
和Lookup
字段类型,SharePoint REST返回lookup value part only
而不是User/Lookup字段值(很可能是出于性能原因)。在这种情况下,字段名按照以下格式生成:<fieldInternalname>Id
引入新字段名是为了避免与原名称冲突,因为仍然可以返回原名称,如下所示:
以下查询返回AssignedTo
字段的Id
属性:
/_api/web/lists/getByTitle('Workflow Tasks')/items?$select=AssignedToId
返回AssignedTo
字段的Id
和Title
属性:
/_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));
});
单用户字段值
该示例演示了如何创建任务项并指定单值 assigndto 字段:
//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()
}
});
}