Publié
mardi 29 janvier 2008 00:44
par
Adrien Siffermann
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 :