3

在将列表项上传到列表后,我正在尝试将值添加到列表项的自定义列中。我可以将项目放入列表中,并且可以查询列表并取回项目的数据,但是当我尝试为额外字段添加数据时,出现以下Microsoft.SharePoint.Client.InvalidClientQueryException错误:

找到没有类型名称的值,并且没有可用的预期类型。指定模型时,有效负载中的每个值都必须具有可以在有效负载中指定、由调用者显式指定或从父值隐式推断的类型。

我不确定错误消息指的是什么值或模型。这是我的代码:

var item = await graphClient
    .Drives[driveId]
    .Root.ItemWithPath(fileName)
    .ListItem.Request()
    .Select("WebURL,Fields,SharepointIds")
    .Expand("Fields")
    .GetAsync();

var fieldVals = await graphClient
    .Sites[SPUrl + ":"]
    .Sites[SpPath + ":"]
    .Lists[libId]
    .Items[item.SharepointIds.ListItemId]
    .Fields
    .Request()
    .GetAsync();

fieldVals.AdditionalData.Add("Phase",
    JsonConvert.SerializeObject(tags));

await graphClient
    .Drives[driveId]
    .Root
    .ItemWithPath(fileName)
    .ListItem
    .Fields
    .Request()
    .UpdateAsync(fieldVals);

最初,当我这样做时,fieldVals.AdditionalData.Add()我有“阶段”和一个列表(字符串),这导致了关于未设置 OData 字段类型的错误,但我在文档中没有找到任何说明预期 OData 字段值的地方。我尝试将其设置为,microsoft.graph.fieldValueSet但没有奏效。

我正在尝试更新允许多个选择作为复选框的选择列。

4

1 回答 1

5

对于多选字段类型,确实,请求有效负载中必须存在odata.type注释,这是一个如何指定它的示例:

PATCH https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items/{item-id}/


{
  "fields": {
    "<ChoiceFieldName>@odata.type": "Collection(Edm.String)",
    "<ChoiceFieldName>":["<val1>","<val2>"]
  }
}

在哪里

  • ChoiceFieldName- 选择字段名称
  • val1, val2- 字段值

例子

假设一个 List 包含一个名为 的选择字段Categories,那么下面的示例演示了如何通过 更新列表项msgraph-sdk-dotnet

var choiceVals = new []{ "Cat1", "Cat2"};

await graphClient.Sites[siteId].Lists[listId].Items[itemId].Request().UpdateAsync(new ListItem()
{
      Fields = new FieldValueSet
      {
            AdditionalData = new Dictionary<string, object>
            {
                { "Categories@odata.type", "Collection(Edm.String)" },
                { "Categories", choiceVals }
            }
      }
 }); 

参考

于 2019-03-20T07:14:08.873 回答