3 votes

SDK Graph .NET : Mise à jour des valeurs d'éléments de liste Sharepoint en ligne

Je suis en train d'essayer d'ajouter des valeurs à une colonne personnalisée sur un élément de liste après avoir téléchargé l'élément de liste dans la liste. Je peux placer l'élément dans la liste, et je peux interroger la liste et récupérer les données de l'élément, mais lorsque j'essaie d'ajouter les données pour le champ supplémentaire, j'obtiens l'erreur suivante Microsoft.SharePoint.Client.InvalidClientQueryException:

Une valeur sans nom de type a été trouvée et aucun type attendu n'est disponible. Lorsque le modèle est spécifié, chaque valeur dans la charge utile doit avoir un type qui peut être soit spécifié dans la charge utile, explicitement par l'appelant ou implicitement inféré à partir de la valeur parente.

Je ne suis pas sûr de quelle valeur ou modèle le message d'erreur fait référence. Voici mon code:

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);

À l'origine, lorsque je faisais fieldVals.AdditionalData.Add(), j'avais "Phase" et une List(string) et cela provoquait une erreur concernant le type de champ OData ne pas être défini mais je n'ai pas trouvé dans la documentation ce que les valeurs de champ OData attendues sont. J'ai essayé de le définir sur microsoft.graph.fieldValueSet mais cela n'a pas fonctionné.

Je suis en train de essayer de mettre à jour une colonne de choix qui permet plusieurs choix sous forme de cases à cocher.

5voto

Vadim Gremyachev Points 2370

Pour le type de champ multi-choix, en effet, la présence de l'annotation odata.type est obligatoire dans la charge de la requête, voici un exemple de comment le spécifier :

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

{
  "fields": {
    "@odata.type": "Collection(Edm.String)",
    "":["",""]
  }
}

  • ChoiceFieldName - nom du champ de choix
  • val1, val2 - valeurs de champ

Exemple

En supposant qu'une liste contienne un champ de choix nommé Categories, alors l'exemple suivant démontre comment mettre à jour un élément de liste via 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
            {
                { "Categories@odata.type", "Collection(Edm.String)" },
                { "Categories", choiceVals }
            }
      }
 }); 

Références

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X