[SharePoint] Creer un user control dans page aspx avec le code behind pour SharePoint
Je vous présente ici une solution issue d'une expérience auprès d'un client. Avant toute chose, cet article est très loin des "best practice" de SharePoint mais, je pense que si cette expérience peut servir à certains d'entres vous, tant mieux. Dans mon cas, je ne souhaitais pas déployer ma page aspx sur l'ensemble des front-end, uniquement sur un serveur accessible depuis l'intranet et, je n'avais pas la possibilité de déployer des assembly dans le GAC ou dans le répertoire bin.
Présentation de l'environnement :
Objectif :
Je souhaite créer une page aspx qui récupère le contexte SharePoint afin de pouvoir ensuite faire ce que l'on veut. Je ne veux pas écrire ici beaucoup de code, ce n'est pas mon objectif.
Réalisation :
- Nous allons dans un prermier temps créer un website avec Visual Studio (j'ai utilisé la version 2005):

Dans ce website, nous allons ajouter un usercontrol:

- Ensuite, il faut ajouter une référence à SharePoint:

- Maintenant, passons au code du usercontrol:
WebUserControl.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<%@ Register Tagprefix="OSRVWC" Namespace="Microsoft.Office.Server" Assembly="Microsoft.Office.Server,
Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<div class="ms-sitetitle">My page</div><br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
WebUserControl.ascx.cs:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.SharePoint;
public partial class WebUserControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
test();
}
}
protected void test()
{
try
{
Label1.Text = SPContext.Current.Site.Url;
}
catch (Exception ex)
{
Label1.Text = ex.Message;
}
}
}
Compiler le tout pour voir si vous n'avez pas d'erreur dans votre code. A noter que la compilation n'est utile que pour cette vérification. En effet, nous ne déploierons pas d'assembly sur le site SharePoint, nous allons seulement déployer les fichiers sources et IIS fera de la compilation à la volée de notre code. J'attire votre attention sur le fait que cette solution n'est vraiment pas à conseiller car le fait que le code soit compilé à chaque chargement de la page, cela va avoir un effet négatif sur les performences du système.
- Avant dernière étape, déployer nos fichiers sur le site SharePoint. Pour cela, copier WebUserControl.ascx et WebUserControl.ascx.cs dans C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES\:

J'attire votre attention que le déploiement sous SharePoint doit se faire via le biais de features qui seront déployées dans une solution. Là encore, mon objectif n'est pas d'expliquer le déploiement via des features et solutions mais d'aller à l'essentiel et de rester concentrer sur l'objectif de mon article.
- Ultime et derniere étape, créer une page dans le site SharePoint avec SharePoint Designer.
Tout d'abord, connectez-vous au site:

Ensuite, créer une nouvelle page aspx (par exemple Untitled_1.aspx). Editer le contenu de cette page comme suit:
<%@ Page Language="C#" %>
<%@ Register TagPrefix="uc1" TagName="WebUserControl" Src="~/_controltemplates/WebUserControl.ascx" %>
<html dir="ltr" xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
<head id="Head1" runat="server">
<META name="WebPartPageExpansion" content="full">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled 1</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<uc1:WebUserControl ID="WebUserControl1" runat="server"/>
</div>
</form>
</body>
</html>
Volontairement c'est une page très simple. Je vous laisse ensuite la liberté de faire ce que vous voulez.
- C'est fini, il ne vous reste plus qu'a tester, http://mywebapplication.com/Untitled_1.aspx va vous afficher l'url du SPSite. Pas plus compliqué que cela. IIS aura donc compilé dynamiquement votre code C# situé dans le fichier WebUserControl.ascx.cs:

Si vous avez des questions ou des remarques, elles seront les bienvenues.
Merci.
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :