Obtention de références aux sites, applications Web et autres objets clés
Dernière modification : jeudi 8 avril 2010
S’applique à : SharePoint Foundation 2010
Pour que votre code fonctionne avec un déploiement de Microsoft SharePoint Foundation, il doit d’abord obtenir une référence aux objets qu’il doit utiliser, notamment les sites Web, les collections de sites et les applications Web. Il existe deux méthodes pour cela : l’une s’applique lorsque votre code est utilisé dans une application console ou une application Windows ; l’autre s’applique lorsque votre code est utilisé dans une application hébergée dans un navigateur, par exemple, lorsque vous choisissez « Site Web » comme type de projet Microsoft Visual Studio.
Notes
La plupart des exemples de code dans Microsoft SharePoint 2010 Software Development Kit (SDK) sont écrits pour une application hébergée dans un navigateur, de sorte que si vous écrivez pour une application console ou Windows, vous devez modifier le code. Pour obtenir des conseils sur cette opération, voir « Applications console et Windows : utiliser les constructeurs d’objet » plus loin dans cette rubrique.
Applications hébergées dans un navigateur : établir le contexte du site
Pour fonctionner dans un déploiement de SharePoint Foundation au moyen d’une application hébergée par un navigateur, votre code doit d’abord établir le contexte du site ou le contexte de la collection de sites pour les demandes qui sont effectuées sur le serveur.
Vous devez obtenir le contexte HTTP de la demande dans le code. Microsoft recommande de l'obtenir en utilisant la classe Microsoft.SharePoint.SPContext et ses membres. Voici quelques exemples :
Pour renvoyer la collection de sites actuelle, vous pouvez utiliser la propriété Current.SPContext.Site.
Notes
Tous les exemples de cet article nécessitent une directive using (Imports dans Microsoft Visual Basic) pour l’espace de noms Microsoft.SharePoint.
Dim oSiteCollection As SPSite = SPContext.Current.Site
SPSite oSiteCollection = SPContext.Current.Site;
Pour retourner le site Web de la demande actuelle, vous pouvez utiliser SPContext.Current.Web.
Dim oWebSite As SPWeb = SPContext.Current.Web
SPWeb oWebSite = SPContext.Current.Web;
En outre, lorsque votre code est contenu dans un fichier .aspx ou dans le « code sous-jacent » d’un fichier .aspx.cs , vous pouvez utiliser les méthodes de l’objet SPControl avec la propriété Page.Context en tant que paramètre. Par exemple, utilisez la méthode GetContextWeb(HttpContext) pour obtenir une référence au site Web actuel.
Dim oWebSite As SPWeb = SPControl.GetContextWeb(Context)
SPWeb oWebSite = SPControl.GetContextWeb(Context);
Enfin, si votre page .aspx hérite de la classe LayoutsPageBase au lieu de la classe Page, vous pouvez utiliser les propriétés Site ou Web de la première classe pour obtenir respectivement les références à la collection de sites ou au site Web actuel. (Vous pouvez également utiliser la propriété Microsoft.SharePoint.WebControls.LayoutsPageBase.Context en tant que paramètre des méthodes GetContextWeb(HttpContext) et GetContextSite(HttpContext).) LayoutsPageBase vous offre des fonctionnalités orientées SharePoint supplémentaires, liées principalement à la gestion des droits utilisateur sur la page, qui ne sont pas disponibles avec Page.
Par exemple, le code ci-après, lorsqu'il est utilisé dans une page .aspx qui hérite de LayoutsPageBase (ou le code sous-jacent de la page) récupère une référence au site Web actuel.
Notes
Cet exemple requiert une directive using (Imports en Visual Basic) pour l’espace de noms Microsoft.SharePoint.WebControls.
Dim oWebSite As SPWeb = this.Web
SPWeb oWebSite = this.Web;
Attention |
---|
Vous ne devez pas supprimer les objets SPSite ou SPWeb obtenus par l’une des méthodes ci-dessus. Le runtime SharePoint Foundation les supprime une fois l’exécution de la page terminée. L’appel de la méthode Dispose ou Close de ces objets entraîne un comportement imprévisible. Ceci diffère de l’obtention des références à ces types d’objets à l’aide d’un constructeur, comme décrit dans la section « Applications console et Windows : utiliser les constructeurs d’objet », située plus loin dans cet article. Les meilleures pratiques concernant la suppression ou non des objets SharePoint Foundation contiennent des informations nuancées. Lisez attentivement la rubrique Suppression d’objets. |
Pour retourner l'objet de batterie de serveurs de niveau supérieur actuel, utilisez SPContext.Current.Site.WebApplication.Farm.
Dim oFarm As SPFarm = SPContext.Current.Site.WebApplication.Farm
SPFarm myFarm = SPContext.Current.Site.WebApplication.Farm;
Pour retourner le site Web de niveau supérieur de la collection de sites actuelle, utilisez la propriété RootWeb.
Dim oTopSite As SPWeb = SPContext.Current.Site.RootWeb
SPWeb oTopSite = SPContext.Current.Site.RootWeb;
La classe SPContext ne vous limite pas à obtenir l’objet actuel d’un type spécifié. Par exemple, vous pouvez utiliser la propriété SPSite.AllWebs pour obtenir une référence à un site Web autre que le site actuel. Le code suivant retourne le contexte d’un site spécifié en utilisant un indexeur avec la propriété AllWebs.
Attention |
---|
Vous devez supprimer de façon explicite les références aux objets qui sont obtenues via la propriété AllWebs. Les meilleures pratiques concernant la suppression ou non des objets SharePoint Foundation contiennent des informations nuancées. Lisez attentivement la rubrique Suppression d’objets. |
Dim oWebSite As SPWeb =
SPContext.Current.Site.AllWebs("myOtherSite")
...
oWebSite.Dispose();
SPWeb oWebSite = SPContext.Current.Site.AllWebs["myOtherSite"];
...
oWebSite.Dispose();
// Even better, take advantage of a "using" block to ensure
// that the object is disposed.
using (SPWeb oWebSite = SPContext.Current.Site.AllWebs["myOtherSite"])
{
...
}
Enfin, pour obtenir une référence à la batterie de serveurs ou au serveur physique actuel, vous pouvez utiliser les propriétés statiques SPFarm.Local et SPServer.Local. La ligne suivante est un exemple.
Dim oFarm As SPFarm = SPFarm.Local
SPFarm oFarm = SPFarm.Local;
Pour utiliser l’une des propriétés Local, vous devez ajouter la directive using (Imports dans Visual Basic) pour l’espace de noms Microsoft.SharePoint.Administration.
Vous pouvez utiliser l'une des techniques précédentes non seulement dans les applications Web et les pages .aspx, mais aussi dans les services Web et composants WebPart personnalisés.
Applications console et Windows : utiliser les constructeurs d'objet
La classe SPContext n'a aucune signification dans une application console ou Windows. Si vous écrivez du code pour l'un de ces types d'applications et que vous souhaitez utiliser une collection de sites spécifique, utilisez le constructeur SPSite pour instancier un objet qui représente la collection de sites, tel que dans l'exemple suivant :
Notes
Votre code doit supprimer un objet SPSite ou SPWeb obtenu à l’aide d’un constructeur. Les meilleures pratiques concernant la suppression ou non des objets SharePoint Foundation contiennent des informations nuancées. Lisez attentivement la rubrique Suppression d’objets.
Dim oSiteCollection As New SPSite("https://localhost")
...
oSitecollection.Dispose();
SPSite oSiteCollection = new SPSite("https://localhost");
...
oSitecollection.Dispose();
// Even better, take advantage of a "using" block to ensure
// that the object is disposed.
using (SPSite oSiteCollection = new SPSite("https://localhost"))
{
...
}
Notes
L’alias « localhost » est un alias Windows pour l’ordinateur sur lequel s’exécute le code. Pour les applications de console, Microsoft recommande d’utiliser systématiquement « localhost » à la place du nom du serveur actuel, car une application de console ne peut fonctionner que sur l’ordinateur local. Si vous codez en dur un nom de serveur, tel que « Mon_serveur », votre application de console ne peut pas être transférée vers un autre ordinateur et ne fonctionnera plus en cas de modification du nom du serveur.
Une fois que vous avez une référence à une collection, vous pouvez utiliser la collection AllWebs afin d'obtenir une référence à un site Web particulier dans la collection.
Dim oWebSite As SPWeb
oWebSite = mySiteCollection.AllWebs("mySite")
...
oWebSite.Dispose();
SPWeb oWebSite = mySiteCollection.AllWebs["mySite"];
...
oWebSite.Dispose();
// Even better, take advantage of a "using" block to ensure
// that the object is disposed.
using (SPWeb oWebSite = mySiteCollection.AllWebs["mySite"])
{
...
}
Ou bien, vous pouvez utiliser la méthode OpenWeb tel qu'indiqué dans la ligne suivante.
Dim oWebSite As SPWeb
oWebSite = mySiteCollection.OpenWeb("mySite")
...
oWebSite.Dispose();
SPWeb oWebSite = mySiteCollection.OpenWeb("mySite");
...
oWebSite.Dispose();
// Even better, take advantage of a "using" block to ensure
// that the object is disposed.
using (SPWeb oWebSite = mySiteCollection.OpenWeb("mySite"))
{
...
}
Si votre code contient déjà une référence à un objet SPSite ou SPWeb, vous pouvez l’utiliser pour obtenir une référence à ses objets parents. Cette technique est illustrée dans les lignes suivantes, dans lesquelles mySiteCollection est un objet ²SPSite et oWebSite est un objet SPWeb.
Dim parentSiteCollection As SPSite = oWebSite.Site;
Dim content As SPContentDatabase = mySiteCollection.CurrentDatabase;
Dim webApplication As SPWebApplication = mySiteCollection.WebApplication;
Dim farm As SPFarm = mySiteCollection.WebApplication.Farm;
SPSite parentSiteCollection = oWebSite.Site;
SPContentDatabase content = mySiteCollection.CurrentDatabase;
SPWebApplication webApplication = mySiteCollection.WebApplication;
SPFarm farm = mySiteCollection.WebApplication.Farm;
Toutefois vous devez éviter de construire un objet SPSite ou SPWeb simplement pour obtenir une référence à un objet parent. Ces objets occupent beaucoup de une grande quantité de mémoire. À la place, pour obtenir une référence à une application Web, utilisez la méthode Lookup(Uri) statique et transmettez-lui un objet SystemUri créé avec l’URI de l’application Web. Vous pouvez ensuite obtenir une référence à la batterie de serveurs en utilisant la propriété Farm de l’objet d’application Web. (Vous pouvez obtenir une référence à une batterie de serveurs distante en utilisant la méthode Open(String) statique.) La propriété ContentDatabases de l’objet d’application Web contient une collection des bases de données de contenu dans l’application Web. Vous pouvez obtenir une référence à une base de données de contenu particulière par le biais de cette propriété si vous connaissez son index dans la collection. Pour plus d’informations, voir la rubrique de référence pour la classe SPContentDatabaseCollection. Les lignes suivantes illustrent certains de ces points.
SPWebApplication webApplication = Lookup(new Uri("https://localhost/");
SPFarm farm = webApplication.Farm;
SPContentDatabase content = webApplication.ContentDatabases[0];
Voir aussi
Référence
Choix de l'emplacement de création d'une application personnalisée
Concepts
Tâches de développement SharePoint : comment faire...?