Dovete sapere che la pagina di ricerca di una site collection SharePoint 2012 può cambiare in base a diversi fattori.
Se avete installato solamente SharePont Foundation 2010 sulla vostra macchina questa pagina sarà sempre la "searchresults.aspx", mentre se avete installato la versione Server avrete inizalmente la pagina "OSSSearchresults.aspx", che potete però cambiare a mano specificando una qualsiasi pagina a vostra piacimento all'interno della pagina di settings della site collection.
Ora, diciamo che per esempio state sviluppando un'applicazione che necessita di stampare un semplice link a quella pagina. Chiaramente sarebbe un errore cablare questo link nel codice o metterlo in qualche file di configurazione, in quanto può essere soggetto a cambiamento.
Purtroppo il modello ad oggetti di SharePoint non ci fornisce alcuna API per recuperare dinamicamente questa URL, ma abbiamo comunque la possibilità di leggerla spulciando le property bag del sito di root della site collection:
using (SPSite site = new SPSite("http://siteurl"))
{
using (SPWeb web = site.OpenWeb())
{
var searchCenterUrl = web.AllProperties["SRCH_ENH_FTR_URL"];
var scopeDropDown = web.AllProperties["SRCH_SITE_DROPDOWN_MODE"];
var searchPageUrl = web.AllProperties["SRCH_TRAGET_RESULTS_PAGE"];
}
}
Nell'esempio, abbiamo letto rispettivamente:
- L'url del Search Center legato alla site collection corrente (se presente)
- Lo scope di default della drop down list di ricerca
- L'url della pagina di ricerca
Chiaramente, come ogni property bag, avete anche la possibilità di aggiornare i valori di queste proprietà. A vostro rischio e pericolo chiaramente :)