SharePoint列表项的AddAsync上无法识别的字段

时间:2018-07-11 20:45:46

标签: c# microsoft-graph

当我尝试使用基本的日历/列表字段创建一个新的列表项时,一切正常。但是,当我尝试使用“非标准”字段(即我添加的字段)进行操作时,出现了“无法识别的字段”错误。

该领域显然在那里!我是否需要一些特殊的方法来填充这些自定义字段?

// get a specific list
ISiteListsCollectionPage list = await graphClient.Sites["root"].Lists.Request()
    .Filter($"DisplayName eq 'Outlook Integration'").GetAsync();

// create a dictionary of [calendar] list properties
Dictionary<string, object> props = new Dictionary<string, object>();

// populate properties, all of these work just fine
props.Add("Title", evt.Subject);
props.Add("Location", evt.Location?.DisplayName);
props.Add("EventDate", utcStart.ToString("yyyy-MM-ddTHH:mm:ssK"));
props.Add("EndDate", utcEnd.ToString("yyyy-MM-ddTHH:mm:ssK"));
props.Add("Description", Regex.Replace(evt.Body.Content, "<.*?>", String.Empty)); // remove HTML content

// populate custom properties
props.Add("ResourceID", evt.Id); // throws error: Field 'ResourceID' is not recognized

// create list item with our properties dictionary
var newItem = new ListItem
{
    Name = "My New Event",
    Fields = new FieldValueSet()
    {
        AdditionalData = props
    }
};

// call the service and get the result
var newListItem = await graphClient.Sites["root"].Lists[list[0].Id].Items.Request().AddAsync(newItem);

这是我列表中字段的完整列表:

enter image description here

在这里您可以看到显示名称为“ ResourceID”,而API名称为“ O36​​5EventId”。但是,两者都导致相同的错误,“无法识别字段”。

enter image description here

注意:ResourceID是我添加的字段之一。如何通过Graph API设置此字段的值?

1 个答案:

答案 0 :(得分:1)

Marc正确地说,在有关列名称的注释中说,提供的屏幕截图显示Column.displayName,即

  

列的面向用户的名称。

但是FieldValueSet.AdditionalData实际期望的关键是Column.name,即:

  

列中面向API的名称,显示在fields的   项目清单。有关面向用户的名称,请参见displayName。

如果您的displayNamename属性很可能不同,则可以通过以下端点进行验证:  https://graph.microsoft.com/v1.0/sites/root/lists/Outlook Integration/columns

这就是发生此错误的原因。

通过Graph API客户端(C#),您可以看到任何给定列表的所有列的列表,如下所示:

// get specific list by name
ISiteListsCollectionPage list = await graphClient.Sites["root"].Lists.Request()
    .Filter($"DisplayName eq 'YOUR_LIST_NAME_HERE'").GetAsync();

// get columns and output them to the log as a serialized object
var listColumns = await graphClient.Sites["root"].Lists[list[0].Id].Columns.Request().GetAsync();
logger.LogInformation($"List Columns Object: {JsonConvert.SerializeObject(listColumns).ToString()}");