Posts
163
Comments
179
Trackbacks
5
SharePoint Tips: update delle proprietà di un SPItem via Object Model


Man mano che si lavora con SharePoint si scroprono tanti dettagli, tanti workaround, tanti “tarocchi”.
Nel post di oggi, voglio segnalare un comportamento “strano” che si verifica utilizzando l’Object Model di SharePoint. In particolare, volendo andare a modificare le proprietà di un elemento di una lista, si potrebbe utilizzare un frammento di codice tipo questo:

   1: using (SPSite site = new SPSite(SITE_URL))
   2: {
   3:   using (SPWeb web = site.OpenWeb())
   4:   {
   5:     SPList list = web.Lists[LIST_NAME];
   6:     if (list != null)
   7:     {
   8:       SPListItemCollection items = list.Items;
   9:       items[0]["Field1"] = "Val1";
  10:       items[0]["Field2"] = "Val2";
  11:       items[0]["Field3"] = "Val3";
  12:       // Aggiornamento dei valori
  13:       items[0].Update();
  14:     }
  15:   }
  16: }

Cosa c’e’ di sbagliato? Apparentemente niente, Visual Studio compila correttamente, ma quando si va a testare le modifiche non vengono salvate sull’elemento selezionato.
La particolarità dell’esempio è che si sta utilizzando una SPListItemCollection accedendo direttamente agli item della collection. Certo l’esempio è stupido, ma consideriamo ad esempio casi in cui la collection di Items è frutto di una SPQuery e che occorre iterare tra tutti gli elementi trovati andando a modificare una o più proprietà. Penso sia un caso abbastanza comune, o almeno a me è capitato più volte.

Debuggando il codice precedente, si nota che ogni volta che si accede all’elemento della collection, viene restituito l’oggetto originario, senza le modifiche fatte in precedenza. Per risolvere il problema, occorre modificare il codice nel modo seguente:

   1: using (SPSite site = new SPSite(SITE_URL))
   2: {
   3:   using (SPWeb web = site.OpenWeb())
   4:   {
   5:     SPList list = web.Lists[LIST_NAME];
   6:     if (list != null)
   7:     {
   8:       SPListItemCollection items = list.Items;
   9:       SPListItem li = items[0];
  10:       li["Field1"] = "Val1";
  11:       li["Field2"] = "Val2";
  12:       li["Field3"] = "Val3";
  13:       // Aggiornamento dei valori
  14:       li.Update();
  15:     }
  16:   }
  17: }

Sostanzialmente l’elemento della collection, va assegnato ad un oggetto SPListItem che sarà poi utilizzato per le modifiche e per la chiamata all’Update.

posted on martedì 10 marzo 2009 14:42 Print
Comments
Gravatar
# re: SharePoint Tips: update delle proprietà di un SPItem via Object Model
Simone Ferrazzo
10/03/2009 16:34
Questo comportamento avviene un po' con tutte le liste di sharepoint: SPListItemCollection, SPFieldLookupValueCollection, SPGroupCollection, ...
Gravatar
# re: SharePoint Tips: update delle proprietà di un SPItem via Object Model
asorcinelli@hotmail.it
10/03/2009 20:17
Buono a sapersi!
Ho approvato solo uno dei due commenti che hai messo. Scusa se ho inserito l'approvazione, ma ho un sacco di SPAM che non viene filtrato.
Comments have been closed on this topic.
News
Se volete sapere con chi avete a che fare eccomi qui in uno "scatto" lavorativo.

La mia foto

Logo MCAD
Logo MCTS