SharePoint 3.0 - Eccezione "Operation is not valid due to the current state of the object"

Può capitare di dover aggiornare tramite codice, degli Item su cui l’utente corrente non ha privilegi di scrittura. SharePoint 3.0 ci viene in aiuto con il metodo SPSecurity.RunWithElevatedPrivileges che permette di effettuare esattamente quello di cui abbiamo bisogno.

Tutto sembra facile, ma se proviamo ad eseguire questo codice:

 

SPSecurity.RunWithElevatedPrivileges(delegate()

{

      using (SPSite site = new SPSite(siteURL))

      {

            using (SPWeb web = site.OpenWeb())

            {

                  site.AllowUnsafeUpdates = true;

                  web.AllowUnsafeUpdates = true;

 

                  SPList list = web.Lists["Mia Lista"];

                  SPListItem item = list.GetItemById(2);

                  item["Titolo"] = "Nuovo titolo";

                  item.Update();

            }

      }

});

 

 

Otterremo la seguente eccezione: Operation is not valid due to the current state of the object.

 

Sembra che per qualche non meglio specificato motivo, non sia possibile chiamare il metodo Update della classe SPListItem all’interno di un blocco RunWithElevatedPrivileges.

Penso si tratti di un bug, comunque modificando un pochino il codice è possibile far funzionare il tutto:

 

SPWeb web = null;

try

{

      SPSecurity.RunWithElevatedPrivileges(delegate()

      {

            using (SPSite site = new SPSite(urlFolder))

            { web = site.OpenWeb(); }

      });

 

      web.AllowUnsafeUpdates = true;

 

      SPList list = web.Lists["Mia Lista"];

      SPListItem item = list.GetItemById(2);

      item["Titolo"] = "Nuovo titolo";

      item.Update();

}

finally

{

      if (web != null)

            web.Dispose();

}

 

Technorati Tags: ,
«gennaio»
domlunmarmergiovensab
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789