为什么在使用SharePoint REST API处理列表项时,内部字段名不匹配?



当我使用列表项时,我需要使用内部字段名来设置字段值。我有几个不同数据类型的字段,让我们关注两个:"评论"(多行文本)和"分配"(个人或组)。这两个都是我自己创造的。

这是我用来创建/更新列表项,它都工作得很好:{ "__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'追加,哪些不会?

对于UserLookup字段类型,SharePoint REST返回lookup value part only而不是User/Lookup字段值(很可能是出于性能原因)。在这种情况下,字段名按照以下格式生成:<fieldInternalname>Id

引入新字段名是为了避免与原名称冲突,因为仍然可以返回原名称,如下所示:

以下查询返回AssignedTo字段的Id属性:

/_api/web/lists/getByTitle('Workflow Tasks')/items?$select=AssignedToId

返回AssignedTo字段的IdTitle属性:

/_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()
       }  
    });
}

最新更新