Se utilizzate il Client Object Model di SharePoint, presente dalla versione 2010 del prodotto, avrete molto probabilmente utilizzato il metodo getSelectedItems() della classe SP.ListOperation.Selection.
L'abbiamo visto anche sul sito, più volte, quando parlavamo di Ribbon.
La sua funzione, in poche parole, è semplicemente quella di ritornare gli elementi di una lista/library che sono selezionati lato client tramite il meccanismo di (multi)selezione disponibile nativamente all'interno del prodotto.
Ultimamente mi è capitato che questo metodo, nonostante in pagina ci fosse una web part di tipo XsltViewWebPart (quindi una normale lista SharePoint) e nonostante ci fossero degli elementi che avevo selezionato, mi ritornasse un bell'array vuoto.
Ecco le prove (tramite la console di Chrome):
Eppure quando utilizzo quel metodo per decidere quando abilitare e quando disabilitare un pulsante nella Ribbon ha sempre funzionato senza neanche mai fiatare. Mah..
Il problema però cè e credo sia proprio un bug di SharePoint. Io l'ho notato su SharePoint 2013, ma sono più che sicuro che sia presente anche su SharePoint 2010.
Praticamente quel metodo si appoggia ad un campo di input nascosto che contiene l'ID della web part che rappresenta la nostra lista e che viene utilizzato per controllare quanti e quali elementi sono stati selezionati lato client.
Questo campo nascosto è il campo con identificativo "_wpSelected".
<input type="hidden" name="_wpSelected" id="_wpSelected" value="MSOZoneCell_WebPartWPQ1" />
SharePoint, quando abilita la Ribbon o quando la XsltViewWebPart è all'interno di una delle form di lista, si preoccupa sempre di valorizzare questo campo nascosto con l'ID della web part selezionata.
Quando si mette la web part all'interno di una web part page invece, quel campo nascosto non viene più valorizzato e il nostro metodo getSelectedItems() ritorna l'array vuoto.
Per far tornare l'elenco degli elementi selezionati ci basta riempire il campo nascosto con l'ID della nostra web part. Vedrete che così il metodo getSelectedItems() ritornerà l'array con all'interno gli elementi che avete selezionato sulla lista.
Per capire qual è l'identificativo della vostra web part basta che andate a spulciare il codice HTML prodotto da SharePoint. Se siete sicuri che in pagina ne avete una sola di web part di lista, potete utilizzare questo codice Javascript per valorizzare il campo nascosto:
$('#_wpSelected').val($("div[id^='MSOZoneCell_WebPartWPQ']").attr('id'));
Spero possa esser utile a qualcuno, io ho ci ho sclerato dietro per almeno un'ora...