当我尝试使用基本的日历/列表字段创建一个新的列表项时,一切正常。但是,当我尝试使用“非标准”字段(即我添加的字段)进行操作时,出现了“无法识别的字段”错误。
该领域显然在那里!我是否需要一些特殊的方法来填充这些自定义字段?
// 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);
这是我列表中字段的完整列表:
在这里您可以看到显示名称为“ ResourceID”,而API名称为“ O365EventId”。但是,两者都导致相同的错误,“无法识别字段”。
注意:ResourceID是我添加的字段之一。如何通过Graph API设置此字段的值?
答案 0 :(得分:1)
Marc正确地说,在有关列名称的注释中说,提供的屏幕截图显示Column.displayName
,即
列的面向用户的名称。
但是FieldValueSet.AdditionalData
实际期望的关键是Column.name
,即:
列中面向API的名称,显示在fields的 项目清单。有关面向用户的名称,请参见displayName。
如果您的displayName
和name
属性很可能不同,则可以通过以下端点进行验证:
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()}");