vendredi 3 octobre 2008

[Sharepoint] Créer une page ASPX et la déployer dans la Bibliothèque de Pages d'un site

Mon besoin était de développer des pages Asp.net de façon classique (style site web dans VS2008) mais de les avoir dans la bibliothèque de Pages d’un site.

Ainsi, je pouvais utiliser la navigation de Sharepoint et avoir une application web normale sans créer un répertoire vituel dans IIS.

Je vais donc présenter la solution que j’ai utilisée, ça n’est peut être pas la meilleure, mais pour ma part elle fonctionne bien et me permet d’avoir des applications métiers spécifiques.

Pré-requis :

But:

  1. Créer un site web MOSS avec une bibliothèque (Pages dans mon cas) dans laquelle je mettrai toutes les pages web de mon application.

  2. Garder le Design (Masterpage et CSS) du site parent

  3. Avoir toutes la logique métier et le code-behind dans une Dll.


Solution envisagée :

  1. Création d’une feature/solution Sharepoint avec VSeWSS

  2. Création d’une page aspx lièe à la masterpage par défaut du site et contenant un delegate control

  3. Création des fichiers ascx pour les delegate control

  4. Création de l’ensemble des fichiers .cs pour le code-behind et autres classes nécessaires

  5. Ajout des Dlls supplémentaires nécessaires à l’application.


Résultat obtenu:

  1. Le delegate control est déployé dans le dossier “12/TEMPLATE/CONTROLTEMPLATES

  2. Les pages ASPX seront déployés dans la bibliothèque “Pages” du site web

  3. Les Dll déployés dans le GAC ou dans le bin du site web Sharepoint selon choix.


On commence :

On créé un site vide Sharepoint

image

On créé ensuite l’arborescence suivante :

image

Pour la créer, on ajoute plusieurs éléments et dossiers dans la solution :

Le UserControl

  • Le dossier Templates qui permettra de définir les TemplateFiles du fichier manifest de la WSP

  • Le dossier CONTROLTEMPLATES  qui représente le dossier des usercontrols de MOSS

  • Dans ce dernier dossier, vous y ajouter le fichier .ascx
    Cette arborescence permet de générer correctement le fichier manifest.xml.


Le contenu de la feature

  • On ajoute un élément module (que l’on nomme UCForm ici) qui nous créé le répertoire de feature ainsi que l’ElementManifest Module.xml.

  • Un fichier .ascx.cs qui correspondra à notre classe partielle de notre userControl (donc son code-behind)

  • Un fichier .aspx qui contiendra toutes les infos nécessaires pour être liè au style du site


Les Dll supplémentaires

Si l’on doit ajouter des Dlls supplémentaires dans le déploiement, il suffit de les rajouter à la racine du projet (comme ici, xtr.toolbox.dll)
Attention, il ne faudra pas oublié de les rajouter dans le fichier manifest.xml, mais nous le verrons dans les étapes suivantes.

Les références

Pour pouvoir développer correctement du web (en gros, pouvoir compiler le code-behind), il ne faut pas oublier d’ajouter les références System.Web et System.Web.Extension.
Ici, les références comme xtr.ToolBox.dll seront aussi à ajouter aux Dlls supplémentaires car le projet en a besoin.

Voici la WSP générée :

image

Je vais maintenant montrer le contenu de chaque fichier CREE :

MonUC.ascx
[sourcecode language='html']

< %@ Assembly Name="MonDelegateControlEtMaPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" %>
< %@ Control Language="C#" AutoEventWireup="true" Inherits="MonDelegateControlEtMaPages.UCForm.MonUC" %>

   
       
       

       

       
       

       
   



[/sourcecode]

On précise l’assembly qui contient le code-behind du userControl et on lu définit sa classe partielle.

Et pour me faire plaisir, j'ai ajouté un updatePanel (Attention, masterpage contient le scriptmanager)

monUC.ascx.cs

[sourcecode language='c-sharp']

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MonDelegateControlEtMaPages.UCForm
{
    public partial class MonUC : System.Web.UI.UserControl
    {
        #region controls
        protected Button Button1;
        protected TextBox TextBox1;
        protected Label Label1; 
        #endregion

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            Button1.Click += new EventHandler(Button1_Click);
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            //On met le code MD5 de=u label soit toto dans la texbox à la suite du clic
            //Pour le faire j'utilise une classe de ma boite à outils qui a été mis en référence (Xtr.ToolBox.dll
            TextBox1.Text =  Xtr.ToolBox.Utils.Crypto.getHashMD5(Label1.Text);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = "toto";

        }
    }
}

[/sourcecode]

Dans ce code, on y définit les contrôles utilisés, l’événement clic et on utilise une dll extérieur pour Hasher le texte “toto”

MaPage.aspx
[sourcecode language='html']

< %@ Page Language="C#" Inherits="Microsoft.SharePoint.Publishing.PublishingLayoutPage,Microsoft.SharePoint.Publishing,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %>

< %@ Register TagPrefix="SharePointWebControls" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
< %@ Register TagPrefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages"
    Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
< %@ Register TagPrefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls"
    Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
< %@ Register TagPrefix="PublishingNavigation" Namespace="Microsoft.SharePoint.Publishing.Navigation"
    Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
< %@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

 
   
   
 

 
 


 


 


 




 
&nbsp;

 

  
 



[/sourcecode]

Dans mon cas, il s’agissait d’une page de publication donc je la fait hériter de la bonne classe : Microsoft.SharePoint.Publishing.PublishingLayoutPage,Microsoft.SharePoint.Publishing,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c

Je n’oublie pas tous les register nécessaire pour le bon fonctionnement de la page.
Ici j’en ai mis plus que besoin pour notre exemple, mais avec ceux-ci je couvre beaucoup de choses (Webpart, navigation,…)
Ne pas oublier surtout : <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

Car c’est ce register qui nous permet d’ajouter le delegate control.

Ensuite on garde bien tous les asp:Content pour éviter des erreurs suivant la masterpage choisi.

Module.xml

[sourcecode language='xml']

698-5627">698-5627ae24209a" xmlns="http://schemas.microsoft.com/sharepoint/" >
 
 
 
 
 
             RootWebOnly="false" >

     
              IgnoreIfAlreadyExists="TRUE" >
     
     
     
     
   

 




[/sourcecode]

Et le contenu des fichiers GENERES :

En sachant que nous allons compléter le fichier Feature.xml pour que le déploiement corresponde à nos besoins.

Feature.xml

[sourcecode language='xml']

         Title="MesPages" Scope="Web" Version="1.0.0.0" Hidden="FALSE"
         ActivateOnDefault="False" DefaultResourceFile="core" xmlns="http://schemas.microsoft.com/sharepoint/">
 
   
   
 



[/sourcecode]

Le scope de ma feature se situe au niveau du site web.
Par défaut je ne l'ai pas activée.
Pour l'exemple, je n'ai pas mis non plus de description dessus, ce qui n'est pas très pratique quand on doit l'actualiser.

manifest.xml

[sourcecode language='xml']

http://schemas.microsoft.com/sharepoint/">
 
   
 

 
   
   
 

 
   
 



[/sourcecode]

Ce fichier est généré automatiquement, on notera bien, qu'il a pris en compte notre dll xtr.ToolBox.
J'ai laissé le déploiement dans le GAC pour les dlls, mais vous pouvez le modifier.

Le développement est terminé, il nous suffit de déployer notre WSP générée et voici le résultat obtenu :

Nous avons bien MaPage.aspx dans notre bibliothèque.

image

 

Et le résultat obtenu tout en gardant le design choisit

image

 

Voila, c’est terminé, donc assez facilement on peut développer des applications asp.net et les intégrer dans Sharepoint.

Aucun commentaire:

Enregistrer un commentaire