Обновление .NET Graph SDK Значения элемента онлайн-списка Sharepoint - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь добавить значения в пользовательский столбец элемента списка после загрузки элемента списка в список. Я могу получить элемент в список, и я могу запросить список и получить обратно данные элемента, но когда я пытаюсь добавить данные для дополнительного поля, я получаю следующую ошибку 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, но это не сработало.

Я пытаюсь обновить столбец выбора, который допускает несколько вариантов выбора в качестве флажков.

1 Ответ

2 голосов
/ 20 марта 2019

Для множественного выбора типа поля, действительно, наличие 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 - значения поля

Пример

Если предположить, что список содержит поле выбора с именем 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 }
            }
      }
 }); 

Ссылки

...