Question

Dans un SPQuery dont les champs sont requis pour mettre à jour un élément de la liste?

SPQuery query = new SPQuery();
query.Query = @"
    <OrderBy>
        <FieldRef Name='ID' Ascending='true' />
    </OrderBy>";
query.ViewFields = string.Concat(
    "<FieldRef Name='ID' />",
    "<FieldRef Name='Title' />");
query.ViewFieldsOnly = true;
query.RowLimit = 2000; // Effective batch size.
query.QueryThrottleMode = SPQueryThrottleOption.Override;

Si je lance listItem.Update() sans modifier les champs, la mise à jour échoue avec l'erreur 'value does not fall within the expected range'.Mais si je change d' ViewFieldsOnly à false, la mise à jour réussit.Ma question est quels sont les champs requis pour mettre à jour un élément de la liste avec succès (à l'exclusion de tous les champs qui ont été modifiés)?

Était-ce utile?

La solution

Autant que je sache, il n'est pas documenté partout les champs qui doivent être inclus pour être en mesure de faire une mise à Jour après l'interrogation avec ViewFieldOnly défini à true, mais selon SPQuery.ViewFieldsOnly et mise à Jour d'un SPListItem c'est entre autres ID, id unique, type d'objet, ...

MAIS ma recommandation est certainement, n'essayez même pas, il suffit de définir ViewFieldsOnly à false, alors vous êtes sûr d'obtenir ce qui est nécessaire, même dans les futures versions de SharePoint.

Autres conseils

J'ai également eu ce problème, et ont réussi à obtenir autour d'elle.J'ai inclus la ListItem ID dans le ViewFields puis ont créé un nouveau SPListItem variable à l'aide de la Liste.GetItemByID.Vous pouvez ensuite faire une activité normale Élément de la Liste mise à jour à l'aide de cette nouvelle variable.

        SPQuery q = new SPQuery();
        q.Query = "Query here";
        q.ViewFields = "...Fields Here...<FieldRef Name='ID' />";
        q.ViewFieldsOnly = true;

        foreach (SPListItem item in list.GetItems(q))
        {
            SPListItem i = list.GetItemById(int.Parse(item["ID"].ToString()));
            //code to update item here
            i.Update();
        }

Il peut ne pas être la meilleure solution, mais il m'a fait et en cours d'exécution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top