Posts tagged Shared Service Provider
Mi sono perso l’ECM …
Aug 25th
Ho difficolta a ritrovare il sottosistema di Enterprise Content Management (ECM) in SharePoint 2010. Diversi paradigmi hanno accompagnato l’evoluzione del prodotto dal 2003 ad oggi: se all’inizio l’ECM ha composto la struttura portante di SharePoint PortalServer 2003 in MOSS l’Application Platform di riferimento lo ha messo in uno dei 6 livelli funzionali dell’architettura ed ora sembra ancora di più *rimpicciolito* nel nuovo paradigma di Business Collaboration Platform.
A dire il vero c’è ancora ma è difficile da trovare, occorre spulciare i nuovi livelli funzionali che sono: Sites, Communities, Content, Search, Insights, Composites. Lo abbiamo trovato (Content) ma ha perso un pezzo della sua definizione iniziale (Content Management) e questo ha una spiegazione molto chiara a mio avviso.
La risposta si trova nel nuovo concetto di collaborazione introdotto in Office 2010 cioè la re-visitazione del livello di intraoperabilità dei prodotti Microsoft. La famiglia di Office 2010 aumenta di nuovi tool di produttività individuale o di gruppo, non a caso abbiamo SharePoint Workspace 2010 (Groove con la cravatta) e punta sull’imposizione di un nuovo modello di condivisione dei contenuti (Office 2010 WebApplication). Tutto ciò significa che il concetto di *management* è stato spostato, quasi del tutto ridefinito verso i tool di Office Automation.
SharePoint 2010 si posiziona al centro di una architettura di collaborazione ri-definita dalla specializzazione dei tool client.
Non necessita di gestire direttamente i dati, creare correlazione tra essi ma semplicemente funge da *contenitore di content* (passatemi il termine). Una importante novità questa, non c’è che dire, sicuramente frutto di una visione di mercato molto netta.
Questa diversa struttura, dal punto di vista tecnico, permette ovviamente di spostare tutta la parte di elaborazione e ricerca in maniera molto *stretta* rispetto al sistema operativo (only x64 ovviamente). Prepariamoci a dover gestire n istanze di servizi di windows con la coscenza di aver del tutto distrutto la parte di shared services che esistevano nella versione precedente.
content source & search scope
Feb 17th
Per lavorare con gli Shared Service Provider occorre molta buona pratica, non solo per quanto riguarda la gestione delle risorse ma occorre anche considerare il tempo che il server impiega ad effettuare determinate operazioni. Una delle operazioni più comuni, circa la manutenzione del servizio di ricerca, sta proprio nel delineare una corretta politica di *alimentazione* di uno Shared Service Provider (SSP) attraverso l’aggiunta/manutenzione di Content Source e di eventuali Search Scope.
Nell’esempio sotto vi giro del codice che mostra come aggiungere un content source di tipo *web*, quindi di provvedere anche alla registrazione di un suo personale Search Scope.
1: public static void AddScopeToWebContentSource(Uri ssp_url, string cs_name, string scope_name)
2: {
3:
4: SearchContext ctx = null;
5:
6: using (SPSite site = new SPSite(ssp_url.ToString)) {
7:
8: ctx = SearchContext.GetContext(site);
9: }
10:
11: // Retrieve current SSP and its ContentSources
12: Content sspContent = new Content(ctx);
13: ContentSourceCollection sspCollection = sspContent.ContentSources;
14:
15: // If the new ContentSource already exists, no action
16: if ((!sspCollection.Exists(cs_name))) {
17:
18: WebContentSource webCS = (WebContentSource)sspCollection.Create(typeof(WebContentSource), cs_name);
19: }
20:
21:
22: Schema sspSchema = new Schema(ctx);
23: ManagedPropertyCollection props = sspSchema.AllManagedProperties;
24: Scopes scopes = new Scopes(ctx);
25: ScopeCollection sspScopes = scopes.AllScopes;
26: bool exist = false;
27:
28:
29: // Cicle through Scope collection to check if the new scope already exist
30: foreach (Scope sc in sspScopes) {
31:
32: if ((sc.Name == scope_name)) exist = true;
33: }
34:
35:
36: // If the new Scope already exist, no action
37: if (exist == false) {
38:
39: Scope newScope = sspScopes.Create(scope_name, "put a description here!!", null, true, null, ScopeCompilationType.AlwaysCompile);
40:
41: // Automatically this code add as "Rule" its Content Source
42: newScope.Rules.CreatePropertyQueryRule(ScopeRuleFilterBehavior.Include, props("ContentSource"), cs_name);
43: }
44:
45: }
Ancora di seguito, del codice che mostra come alimentare il Content Source con una lista di indirizzi url. Il metodo permette anche di specificare se si intende forzare il full crawl del Content Source non appena abbiamo aggiunto i nuovi start address.
1: public static void AddContentsToWebContentSource(Uri ssp_url, string cs_name, string[] startAddresses, bool startFullCrawl, int MaxSiteEnumerationDepth, int MaxPageEnumerationDepth)
2: {
3:
4: if ((MaxPageEnumerationDepth == 0)) MaxPageEnumerationDepth = 1;
5: if ((MaxSiteEnumerationDepth == 0)) MaxSiteEnumerationDepth = 1;
6:
7: SearchContext ctx = null;
8:
9: using (SPSite site = new SPSite(ssp_url.ToString)) {
10:
11: ctx = SearchContext.GetContext(site);
12: }
13:
14:
15: Content sspContent = new Content(ctx);
16: ContentSourceCollection sspCollection = sspContent.ContentSources;
17:
18: if ((sspCollection.Exists(cs_name))) {
19:
20: WebContentSource csWeb = sspCollection.Item(cs_name);
21:
22: for (int i = 0; i <= startAddresses.Count - 1; i++) {
23:
24: if ((!csWeb.StartAddresses.Exists(new Uri(startAddresses(i).ToString)))) {
25:
26: csWeb.StartAddresses.Add(new Uri(startAddresses(i).ToString));
27: csWeb.MaxSiteEnumerationDepth = MaxSiteEnumerationDepth;
28: csWeb.MaxPageEnumerationDepth = MaxPageEnumerationDepth;
29: csWeb.Update();
30:
31: if ((startFullCrawl)) csWeb.StartFullCrawl();
32: }
33: }
34: }
35: }
Magari lo potete rendere ancora più generico, facendo scegliere anche il tipo di Content Source che si intende registrare (Site, Web, Exchange Folder, File System, …).
