SPQuery - champs (ViewFields) sont tenus de mettre à Jour l'élément de la liste?
-
10-12-2019 - |
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)?
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.