Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Le Blog de Carton Jerome

SharePoint Consultant

[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 :
Posted: vendredi 13 mars 2009 15:58 par cartonjer
Classé sous : ,

Commentaires

VANNESTE Xavier a dit :

Y a surement un truc qui doit m'echapper mais ou est l'avantage par rapport a la smartpart ??

# mars 13, 2009 21:09

gpommier a dit :

sans vouloir être rabat joie, oui, certainement que cela "peut" fonctionner, et peut être faire comprendre à un développeur asp.net débutant en sharepoint qu'il se trouve terrain connu. Mais quitte à sensibiliser les nouveaux arrivants au développement SharePoint (ce qui est le but de ton post sauf erreur ?), alors il faut aussi les pointer dès le départ vers les bonnes pratique de dev, en traitant un minimum les problématiques de déploiement/feature, et donc plutot les orienter (par exemple) vers des articles comme ça :

http://www.andrewconnell.com/blog/articles/UsingCodeBehindFilesInSharePointSites.aspx

Ou au moins mentionner ces problématiques à la fin de ton post.

je sais, c'est un peu plus long et un peu moins immédiat, mais tellement plus dans l'idée de ce que doit avoir à l'esprit un développeur SharePoint, surtout débutant, enfin c'est mon avis ...

# mars 14, 2009 06:50

Arnault Nouvel a dit :

En effet dans un contexte réel, une page SharePoint se déploie via un solution package (.wsp). Cela se fait très (trop?) facilement avec un outil de packaging comme WSPBuilder.

Déployer manuellement des fichiers dans le répertoire 12 est va à l'encontre des bonnes pratiques, rend un projet difficile à maintenir, et peut s'avérer dangereux dans une ferme disposant de plusieurs serveurs frontaux.

Il est d'ailleurs rare de voir l'administrateur d'une ferme SharePoint laisser un développeur toucher au file system de ses serveurs.

Je m'excuse de critiquer, car je sais que rédiger un tel billet part d'une bonne intention, mais comme le laisse entendre Gilles il serait dommage que des débutants tombant sur ce post se fassent de fausses idées sur le développement SharePoint. Pour moi, cette méthode est à proscrire.

# mars 15, 2009 18:03

ROMELARD Fabrice a dit :

D'accord avec tous les précédent commentaires. J'ajouterai aussi le fait que le titre de l'article n'est pas en rapport avec le sujet, tu parles de PAGES ASPX avec Code Behind et tu expliques ensuite la création d'un USER CONTROL.

De plus ce User control est déployé sans être compilé, ce qui veut dire qu'il le sera lors du premier chargement et c'est une très mauvaise procédure.

Enfin, pour information, il ne faut pas utiliser http://mysite.com dans ta démo, car dans le monde SharePoint les MySites sont un modèle très particulier de sites et donc cela ammène de la confusion.

Préfère plutôt http://myWebApplication.com

Romelard Fabrice [MVP]

# mars 16, 2009 11:12

cartonjer a dit :

Merci pour vos commentaires. La critique est toujours constructive.

Il est vrai que l'objectif de mon post était simplement de présenter cette solution. J'aurai du en effet préciser que ce n'est surtout pas la solution à utiliser.

Néanmoins, il est intéressant que chacun fasse part de ses experiences. Bonnes ou mauvaises toutes les solutions rencontrées par tous ont un interête à être partagées.

Merci

# mars 16, 2009 15:48
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [PowerShell 3] Télécharger et installer la documentation en ligne par Blog de SPBrouillet (Pierrick BROUILLET) le il y a 17 heures et 11 minutes

- [#SharePoint 2010][#SQLServer 2012] AlwaysOn pour SharePoint (1/4) : Configuration (1ère partie)… par Le blog de Patrick [MVP SharePoint] le il y a 22 heures et 37 minutes

- Job Day @MIC Brussels - .Net Developers on Mobile applications par Le Blog (Vert) d'Arnaud JUND le 05-15-2012, 20:26

- [SharePoint 2010] – SharePoint 2010, Windows (Server) 8 et des erreurs IIS sont dans une VM… par Blog de SPBrouillet (Pierrick BROUILLET) le 05-14-2012, 12:10

- [Event] Windows Azure dev Camp le 20 juin! par Fathi Bellahcene le 05-13-2012, 09:29

- Comment redimensionner une image avec WinRT : plusieurs solutions par Richard Clark le 05-11-2012, 15:43

- Event : Swiss SharePoint Club Meeting #20 à Yverdon par Blog Technique de Romelard Fabrice le 05-11-2012, 15:24

- Réflechissons un peu ce matin à propos des ORM par Richard Clark le 05-11-2012, 08:48

- #SharePoint Solutions Roadshow le 5 juin à Issy ! par Le blog de Patrick [MVP SharePoint] le 05-09-2012, 15:10

- SharePoint : Mes alertes ne marchent pas … Que faire ? Comment réparer ou agir ? par The Mit's Blog le 05-08-2012, 14:59