Domanda

Sto lavorando ad una soluzione in cui ho una lista con una colonna denominata LogIDNumber. Per ogni nuova voce nella lista, vorrei incrementare il LogIDNumber per uno. Potrei utilizzare l'ID generato da SharePoint, ma per questa soluzione ha bisogno di essere indipendente. Stavo pensando di utilizzare un ricevitore di eventi, ma il problema che sto avendo problemi con sta ottenendo il valore della voce precedente.

posso usare qualcosa come questo esempio per ottenere l'accesso alle voci di elenco, ma non sono sicuro di come procedere dopo.

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",);
    }
}

C'è un modo per afferrare l'ultimo valore?

È stato utile?

Soluzione

Si potrebbe utilizzare una query CAML e ordinare per il campo specifico, afferrare il valore più alto e aggiungere uno. Dovrebbe probabilmente avere un controllo distinta pure.

La query può essere qualcosa di simile:

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

Per un examle vedere qui: https://stackoverflow.com/questions/516073/max-query-using-caml

Altri suggerimenti

Non credo che il tuo approccio o l'idea di eseguire una query CAML avrebbe funzionato (... almeno non sempre), dovuto principalmente alla incapacità di gestire in modo nativo la concorrenza. Sarebbe abbastanza impegnativo da gestire in un unico ambiente WFE, ma se si dispone di più WFEs si sarebbe quasi sicuramente avere più istanze di un ricevitore di evento o una query in esecuzione allo stesso tempo, di ritorno lo stesso valore "ultimo ID" e poi tutti impostando le loro proprietà LogIDNumber allo stesso ultimo valore + 1.

Suppongo che si possa creare un elenco di ID con una colonna (LogIDNumber), ne fanno un tipo di numero, e assicurarsi che Applica valori unici = Sì . È quindi possibile aggiungere un elemento in tale elenco il ricevitore evento e se si soffoca poi si sa un'altra istanza EV arrivato prima ed è necessario rieseguire una query l'ultimo ID finché l'inserto nella lista ID non soffocare. Se non soffocare quindi l'istanza EV possiede l'ID e può aggiornare in modo sicuro la proprietà LogIDNumber per quella voce di elenco.

Posso chiedere quale requisito (s) stanno causando a creare il proprio colonna di auto-icrement rispetto all'utilizzo di ID?

Io suggerisco di usare un elenco di riferimento / colonna di ricerca. Nel vostro evento itemadding, aprire un elenco chiamato di docid, che ha 2 colonne, ListaURL e CurrentID. Prendi la voce corretta in base a lui elenco di URL (lista aggiornata url == elemento in ListaURL doc id del lib), ottenere il valore della CurrentID e incrementarlo. Quindi utilizzare il nuovo valore come nuovo documento id.

Ci sono un sacco di inconvenienti, però, che tutti hanno a che fare con 1 cosa: SharePoint non è "transazionale". Quindi, se ogni 2 utenti eseguire questa azione, allo stesso tempo, potrebbe accadere che entrambi ottenere lo stesso ID. Per cirumvent questo, avreste bisogno di un gestore di eventi ItemUpdating in poi lista doc id troppo, controllando se il nuovo valore! = Valore corrente (incremento da diversi utenti). Questo è, naturalmente, anche senza garanzia di successo ...

Un'altra opzione nel SP2010 è la caratteristica doc id, che garantisce ID unico di tutti i contenuti, e consente un facile accesso attraverso la ricerca / reindirizzamento URL ..

Suppongo che avrete bisogno di un qualche tipo di algoritmo per calcolare il vostro ID personalizzato quindi perché non semplicemente creare il proprio colonna e quindi utilizzare ID intero della voce o il GUID UniqueID come il 'seme' per il vostro algoritmo di ID e quindi popolare che colonna del ricevitore di eventi?

Si potrebbe utilizzare il servizio ID del documento per questo. Questo ID univoco è (credo) non generata in tempo reale, ma su una base timerjob. E funziona solo per i tipi di contenuto che sono derivati ??da un tipo di contenuto del documento. Nessuna programmazione richiesta per questo;)

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- caratteristica /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top