Publié mardi 29 janvier 2008 00:44 par Adrien Siffermann

SPListItem.Update() jette une Exception "L'opération n'est pas valide en raison de l'état actuel de l'objet"

J'ai été confronté aujourd'hui à une exception jetée sur un bout de code pourtant bien anodin et commun : l'ajout d'un nouvel élément à une liste.
Pour être plus précis, c'est la mise à jour des champs de cet élément à l'intérieur d'un bloc SPSecurity.RunWithElevatedPrivileges qui provoquait cette exception.

Après quelques essais infructueux et quelques recherches, il s'avère que sortir la création et la mise à jour des champs de mon élément en dehors du bloc résout le problème. Ainsi, on ne fait que l'instanciation du SPSite et du SPWeb dans le bloc SPSecurity.RunWithElevatedPrivileges, comme dans l'exemple de code ci-dessous :

        public string CreateNewListItem()

        {

            string result = "";

            SPWeb rootWeb = null;

 

            SPSecurity.RunWithElevatedPrivileges(delegate()

            {

                using (SPSite site = new SPSite("http://localhost"))

                    rootWeb = site.RootWeb;

            });

 

            SPList list = rootWeb.Lists["Sample List"];

            if (list != null)

            {

                try

                {

                    rootWeb.AllowUnsafeUpdates = true;

 

                    SPListItem item = list.Items.Add();

                    item["Title"] = "Update OK";

                    item.Update();

 

                    rootWeb.AllowUnsafeUpdates = false;

                }

                catch (Exception ex)

                {

                    result = "ListItem cannot be created (" + ex.Message + ") !";

                }

            }

            else

                result = "List 'Sample List' cannot be found !";

 

            rootWeb.Dispose();

            return result;

        }

A vrai dire, je n'arrive pas à comprendre pourquoi faire la création et la mise à jour de l'élément dans le bloc SPSecurity.RunWithElevatedPrivileges ne fonctionne pas, et je trouvais ce "tourne-autour" assez particulier pour être publié...

Adrien

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Les 10 derniers blogs postés

- [Silverlight] En attendant Silverlight 2 RTW par Blog Technique d'Audrey PETIT le 10-11-2008, 21:55

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le 10-11-2008, 01:18

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le 10-10-2008, 17:52

- Hello CS par Le Blog de julz le 10-10-2008, 12:26

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35

- MVC Pratique #07 - Un projet concret et le transfert des objets avec les ModelBinders par #Rui le 10-09-2008, 23:39

- SQL Server 2008 : Certifié - TS Admin (70-432) par SQL Server vu par Christian Robert le 10-09-2008, 10:58

- [WPF] Comment changer la couleur utilisée pour sélectionner les éléments d’un ItemsControl ? par Thomas Lebrun le 10-09-2008, 10:49

- Hello World! par Hamid's Place le 10-08-2008, 23:38

- SQL Profiler - Configuration pour un développeur - tracer les requêtes SQL de votre application par Atteint de JavaScriptite Aiguë [Cyril Durand] le 10-08-2008, 15:52