ClientContext + camlQuery.ViewXml
-
16-10-2019 - |
Domanda
Io uso SP Cliente e voglio tornare ListItemCollection che verrà riempita con oggetti provenienti da specifiche punto di vista che ho scelto. Ottengo stringa ViewQuery inviando indice di vista in viewcollection. Il problema è in parte in cui mando camlQuery al metodo GetItems "ListItemCollection listItems = list.GetItems (camlQuery);" perché qualunque camlquery viene inviato al allways GetItems ho tutti gli elementi dalla lista al posto di quelle filtrato, nonostante il fatto che stringa di camlquery sono buoni e diverso ogni volta. Qualche suggerimento?
clientContext.ExecuteQuery();
List list = site.Lists.GetByTitle(SPList);
clientContext.Load(list);
clientContext.ExecuteQuery();
ViewCollection viewItems = list.Views;
clientContext.Load(viewItems);
clientContext.ExecuteQuery();
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = list.Views[index].ViewQuery;
ListItemCollection listItems = list.GetItems(camlQuery);
clientContext.Load(listItems);
clientContext.ExecuteQuery();
Soluzione
Ho avuto questo di recente.
La versione client di OM CamlQuery si comporta in modo diverso a come si pensa.
Controllare i risultati di list.Views [0] .ViewQuery.
Se ha un tag intorno ad esso, rimuoverlo prima di assegnare ad esso CamlQuery.ViewXml. (Forse un po 'complicato)
Se non ha un tag intorno ad esso, aggiungerne uno. (Facile)
Poi assegnarlo a CamlQuery.ViewXml. Quasi certo questo lavoro volontà, come i sintomi che si descrivono sono identici a quello che avevo, tranne che stavo usando il modello a oggetti di Silverlight. Stessi oggetti, tuttavia.
EDIT:
Inoltre, snellire il codice, hai un sacco di "blocco" le operazioni di là che probabilmente non c'è bisogno ...
clientContext.ExecuteQuery();
List list = site.Lists.GetByTitle(SPList);
ViewCollection viewItems = list.Views;
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = list.Views[index].ViewQuery;
ListItemCollection listItems = list.GetItems(camlQuery);
clientContext.Load(list);
clientContext.Load(viewItems);
clientContext.Load(listItems);
clientContext.ExecuteQuery();