为什么在使用 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' 而哪些不会?

对于 UserLookup 字段类型 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 IdTitle 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()
       }  
    });
}