Monday, November 2, 2009

Guida Sharepoint – Usare le Features e Solutions

Precedenti post:
Feature e Solution sono due nuovi aspetti di SharePoint 2007 che aiutano lo sviluppatore nella customizzazione dei site.

 

Features

Una volta installata una Feature, al livello di farm, si avrà la possibilità di usarla all’interno di qualsiasi site.
Ciò permette di riusare la stessa funzionalità, che è stata creata e deploiata, senza bisogno di cambiare i site template, e li rende più semplici da gestire perchè non ci sarà più alcun riferimento diretto nei complessi file XML di configurazione.
Tramite una Feature possiamo rilasciare di tutto; da un link a una serie di pagine per il settaggio di un site.
L’Object Model mette a disposizioni vari metodi per recuperare la lista delle Feature installate e attive, attivarle/disattivarle e installarle/rimuoverle:

 

La Feature definition è un insieme di informazioni, inerenti la Feature, contenuti nella directory di installazione della Feature.
Queste definizioni sono installate a livello di farm o del server qual’ora non ci fosse una farm (allora la directory di installazione sarà: C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES).
La Feature è un’istanza della Feature definition installata.
La classe SPFarm contiene la proprietà FeatureDefinitions la quale contiene l’enco delle feature presenti nella nostra farm.
Per istanziare una SPFarm bisogna conoscere la string connection alla quale collegarsi o bisognerà far riferimento alla proprietà Local, sempre della classe SPFarm, se stiamo lavorando già a livello di farm.
Ecco un codice d’esempio con il quale possiamo ottenere la lista di feature e le rispettive proprietà:
using System;
using System.Collections.Generic;using System.Linq;
using System.Text;using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            SPFarm farm = SPFarm.Open("Data Source=.;Initial Catalog=SharePoint_Config;Integrated Security=True");
            Console.WriteLine("Site Feature Status ({0} Feature Definitions Installed)", farm.FeatureDefinitions.Count.ToString());
            SPSite rootCollection = new SPSite(args[0]);

            foreach (SPFeatureDefinition featureDefinition in farm.FeatureDefinitions)
            {
                string displayName = featureDefinition.DisplayName;

                if (featureDefinition.Hidden)
                    displayName += " (H)";

                displayName += " " + featureDefinition.Id;
                displayName += " " + GetFeatureEnabled(featureDefinition, rootCollection);

                Console.WriteLine(displayName);
            }

            Console.ReadLine();
        }

        private static string GetFeatureEnabled(SPFeatureDefinition featureDefinition, SPSite rootCollection)
        {
            foreach (SPFeature feature in rootCollection.Features)
            {
                if (feature.Definition.Id == featureDefinition.Id)
                    return "Enabled";
            }
            return "Disabled";
        }
    }
}


Non è possibile aggiungere/rimuovere istanze di SPFeature o SPFeatureDefinition; è possibile aggiungere e rimuovere le GUID associate, in modo da non renderle più disponibili.
Prima di attivare/disattivare le feature, vi consiglio di creare una Web Application di test; perchè disattivando le feature in uso otterremo pessimi risultati.
Per disattifare la feature dalla feature collection basta semplicemente rimuoverla:

currentSite.Features.Remove(new Guid("guid della feature"));


Per attivare ed installarne una nuova, in un site o in una web, è altrattanto semplice:

currentSite.Features.Add(new Guid("guid"));


Le proprietà delle feature

Le feature e le feature definition installate hanno una property bag accessibile tramite la proprietà Properties di tipo SPFeaturePropertyCollection.
Per ottenere e aggiungere un elemento alla property bag possiamo far riferimento al seguente codice:

// Lista
foreach (SPFeatureProperty property in myFeature.Properties)
{
    Console.WriteLine("{0} : {1}", property.Name, property.Value);
}

// Aggiungere
SPFeatureProperty prop = new SPFeatureProperty("Prop", "Value");
myFeature.Properties.Add(prop);

// Rimuovere
SPFeatureProperty prop = myFeature.Properties[0];
myFeature.Properties.Remove(prop);


Non esiste un metodo per committare i cambiamenti, questi verranno automaticamente aggiunti/rimossi.
Tramite lo SharePoint Property Bag Settings potete configurare la vostra applicazione facilmente :)

Installare/rimuovere una Feature Definition


Per installare una feature definition bisognerà far riferimento ad uno dei metodi Add della classe SPFeatureDefinitionCollection:
SPFeatureDefinitionCollection.Add (SPFeatureDefinition) SPFeatureDefinitionCollection.Add (String, Guid) SPFeatureDefinitionCollection.Add (String, Guid, Boolean)

SPFeatureDefinitionCollection installedFeatures = farm.FeatureDefinitions;
installedFeatures.Add("newfeature", new Guid("GUID"));

Per disinstallarla:

installedFeatures.Remove(new Guid("GUID"));


Solutions


Le Solution permettono la pacchettizzazione e la definizione di alcuni metadati, delle feature, in un file cabinet (.cab).
Dopo che la Solution è stata installata nel server farm si potrà usare la Solution management del Central Administration per automatizzare il deploy della solution sugli altri site della farm.

Per installare/rimuovere nuove solution è possibile usare il comando stsadm.exe.
Se invece state sviluppando un vostro tool dovrete utilizzare la classe SPFarm.
Una volta referenziata la nostra SPFarm, possiamo accedere alla lista delle soluzioni installate tramite la proprietà Solutions di tipo SPSolutionCollection.
Per aggiungere/rimuovere una soluzione aggiungerla/rimuoverla dalla proprietà:
SPSolutionCollection.Add (SPSolution) SPSolutionCollection.Add (String) SPSolutionCollection.Add (String, UInt32)
SPSolutionCollection.Remove (Guid) SPSolutionCollection.Remove (String) SPSolutionCollection.Remove (String, UInt32)

farm.Solutions.Add("myapplication.cab");
farm.Solutions.Add("myapplication.cab", 1033);
farm.Solutions.Remove(new Guid("..."));

Deployment

Abbiamo due metodi nella classe SPSolution per lavorare con le solution: Deploy e Retract.
Unica considerazione da fare, riguarda il metodo Retract. Questo non rimuoverà immediatamente la solution ma creare un job schedulato.
Possiamo ottenere una lista delle web application dove la solution è usata, tramite l’overload:

public void Retract(DateTime dt, Collection webApplications)








No comments:

Post a Comment