Question

Je travaille sur une solution où j'ai une liste avec une colonne nommée LogIDNumber. Pour chaque nouvelle entrée dans la liste, je voudrais augmenter le LogIDNumber par un. Je pourrais utiliser l'identifiant généré par SharePoint, mais pour cette solution, il doit être indépendant. Je pensais à l'aide d'un récepteur d'événements, mais le problème que je rencontre des problèmes avec est de récupérer la valeur de l'entrée précédente.

Je peux utiliser quelque chose comme cet exemple pour avoir accès aux éléments de la liste, mais je ne suis pas sûr de savoir comment procéder après.

using (SPSite siteCol = new SPSite("http://server/sites/Contoso"))
{
    using (SPWeb web = siteCol.RootWeb)
    {
        SPList list = web.GetList("/sites/Contoso/Lists/Books");
        SPListItemCollection items = list.GetItems("Title", "LogIDNumber",);
    }
}

Y at-il un moyen de saisir la dernière valeur?

Était-ce utile?

La solution

Vous pouvez utiliser une requête CAML et trier par le champ particulier, saisir la plus haute valeur et en ajouter un. On devrait probablement avoir un contrôle aussi bien distinct.

La requête peut être quelque chose comme ceci:

"<OrderBy><FieldRef Name='ColumnName' Ascending='False' /></OrderBy><RowLimit>1</RowLimit>"

Pour un examle voir ici: https://stackoverflow.com/questions/516073/max-query-using-caml

Autres conseils

Je ne pense pas que votre approche ou l'idée d'effectuer une requête CAML fonctionnerait (... au moins pas toujours), principalement en raison de votre incapacité à gérer nativement la concurrence. Il serait difficile assez pour gérer dans un seul environnement WFE, mais si vous avez WFES plusieurs vous auriez la plupart ont certainement plusieurs instances d'un récepteur d'événements ou d'une requête d'exécuter en même temps, le retour de la même valeur « dernier ID » et puis tout la mise en leur propriété LogIDNumber à la même dernière valeur + 1.

Je suppose que vous pouvez créer une liste d'ID avec une colonne (LogIDNumber), en font un type de numéro, et assurez-vous Imposer des valeurs uniques = Oui . Vous pouvez ensuite ajouter un élément à cette liste dans votre récepteur d'événements et si elle étrangle alors vous savez une autre instance EV est arrivé là d'abord et vous devez effectuer une nouvelle requête de la dernière ID jusqu'à ce que l'insertion dans la liste d'ID ne pas étouffer. Si elle ne s'étouffe pas alors votre instance EV possède l'ID et peut mettre à jour en toute sécurité la propriété LogIDNumber pour cet élément de liste.

Puis-je demander à ce besoin (s) sont à l'origine vous de créer votre propre colonne auto-icrement par rapport à l'aide d'ID?

Je suggère d'utiliser une liste de référence / colonne recherche. Dans votre événement ItemAdding, ouvrez une liste appelée de DocId, qui a 2 colonnes, listUrl et currentId. Obtenez le bon article basé sur la liste, il url (liste actuelle url == article dans listUrl de id doc lib), obtenir la valeur de la currentId et incrémenter. Utilisez ensuite la nouvelle valeur que votre nouvel identifiant doc.

Il y a beaucoup d'inconvénients cependant, que tous ont à voir avec 1 chose: sharepoint est pas « transactionnel ». Donc, si les 2 utilisateurs effectuent cette action en même temps, cela pourrait arriver ils ont tous deux obtenir le même id. Pour cirumvent cela, vous aurez besoin d'un gestionnaire d'événements sur ItemUpdating il liste id doc aussi, vérifier si la nouvelle valeur! = Valeur actuelle (incrément par utilisateur différent). Ceci est bien sûr également aucune garantie pour le succès ...

Une autre option est SP2010 la fonction id doc, ce qui garantit son identifiant unique sur l'ensemble du contenu, et permet un accès facile grâce à la recherche / url .. redirect

Je suppose que vous aurez besoin d'une sorte d'algorithme pour calculer votre ID personnalisé alors pourquoi ne pas simplement créer votre propre colonne puis utilisez soit l'entier de l'article ID ou Guid UniqueID comme la « graine » pour votre algorithme d'identification puis remplir cette colonne dans le récepteur de l'événement?

Vous pouvez utiliser le document service d'identification pour celui-ci. Cet identifiant unique est (je crois) pas généré en temps réel, mais sur une base de timerjob. Et il ne fonctionne que pour les types de contenu qui sont dérivés d'un type de contenu du document. Aucune programmation nécessaire à celui-ci;)

http://msdn.microsoft.com/en-us/library/ ee559302.aspx http://blogs.technet.com/b/blairb/archive/2009/10/20/new-document-id-feature-in-sharepoint-2010.aspx http://www.sharepointanalysthq.com/2010/04/document-id- fonctionnalité /

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top