none
Récupérer l'ID de l'item nouvellement créer RRS feed

  • Question

  • Bonjour,

    J'utilise ce morceau de code pour ajouter un élément dans ma liste :

            SPSite vacationsSiteCollection = new SPSite(siteVacation);
    	SPWeb vacationsSite = vacationsSiteCollection.OpenWeb();
    	SPList vacationsList = vacationsSite.Lists["vacations"];
    	vacationsSite.AllowUnsafeUpdates = true;
    	SPListItem vacationsListItem = vacationsList.Items.Add();		        
    	vacationsListItem["daystaken"] = daysTaken;
    	vacationsListItem["hourstaken"] = daysTaken * 8;			
    	vacationsListItem.Update();
    
    Pour récupérer l'ID de cette item :

            lastVacationRequest = vacationsList.Items[vacationsList.ItemCount - 1].ID + 1;
    
    Que j'ai vu ici : http://www.codedigest.com/Articles/S...tem_ID_is.aspx

    Mais il y a certain restriction :

    This code will work well as long as you do not delete the last item and do not add more than one item simultaneously . If you do the sum you will get will be incorrect.

    Pour éviter cela, devrais-je utiliser le DisableEventFiring(); ?
    Comment indiquez ici : http://www.binarywave.com/blogs/eshu...st.aspx?ID=114 ?

    Que veux dire ce commentaire ?

    //Stop other events from firing while this method executes
    mercredi 17 février 2010 13:29

Toutes les réponses

  • Le commentaire indique qu'il faut désactiver la gestion des événements avant l'exécution de votre code puis la réactiver ensuite. Ce mécanisme est plutôt utilisé dans les workflows et les gestionnaires d'événements eux même pour éviter les événements en cascade.

    Dans votre cas, je ne vous conseille pas d'utiliser ce mécanisme. 

    Pour reccupérer l'ID, il vous faut faire une requête CAML pour d'abord obtenir votre item. Regardez si la propriété UniqueId (et non ID) contient une valeur. Si oui, celà vous fera un critère sûr pour obtenir votre item.

    http://blogs.developpeur.org/gribouillon/
    mercredi 17 février 2010 13:45
    Modérateur
  • On m'a dit aussi que l'on pouvait obtenir le dernier id d'une liste en faisant une requète sql directement dans la base de donnée SQL. A voir...
    jeudi 4 mars 2010 14:55
  • Bonjour,

    A tout hasard, si tu execute ce code dans un evenement sharepoint de type ItemAdded par exemple, il y a une manière tres simple de récupérer l'id de l'item qui s'ajoute à la liste :

    properties.ListItemId


    http://nallerhand.free.fr >> Trucs & Astuces développement
    mardi 9 mars 2010 13:05
  • J'avais posté ce sujet sur le forum en anglais :
    http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/0f2586b7-8db2-4563-829c-ba200110bfed
    Le properties.ListItemId indique effectivement l'id du dernier item mais si l'on supprimer un item (le dernier), le properties.ListItemId correspond au dernier item (pas celui supprimer mais celui juste "avant") mais pas au suivant qui va être créer.
    mardi 9 mars 2010 13:54
  • Bonjour,

    Vous pourriez définir une colonne cachée dans la liste en question.
    Cette colonne servirait à mettre un Guid permettant de récupérer l'item après sa création :

    Guid monGuid = Guid.NewGuid();
    
    SPListItem item = list.Items.Add();
    item["MaColonneGuid"] = monGuid;
    item.Update();
    
    SPQuery query = new SPQuery();
    query.Query = "Requete CAML qui retourne l'élément dont le champ MaColonneGuid est égal à monGuid"; 
    SPListItem monItem = list.Items.GetItems(query);
    Int32 jackpot = monItem.ID;
    (code non contractuel :p)

    Est-ce que cette technique vous convient ?


    http://blogs.developpeur.org/anouvel
    Merci de valider les réponses qui correspondent à votre problème afin qu'il apparaisse comme résolu.
    mercredi 10 mars 2010 13:26