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 :
- VSeWSS pour le développement dans VS2008
- Je me base sur mes précédents posts (Créer un Delegate Control, Ressources dans une WSP, Vue WSP)
But:
- 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.
- Garder le Design (Masterpage et CSS) du site parent
- Avoir toutes la logique métier et le code-behind dans une Dll.
Solution envisagée :
- Création d’une feature/solution Sharepoint avec VSeWSS
- Création d’une page aspx lièe à la masterpage par défaut du site et contenant un delegate control
- Création des fichiers ascx pour les delegate control
- Création de l’ensemble des fichiers .cs pour le code-behind et autres classes nécessaires
- Ajout des Dlls supplémentaires nécessaires à l’application.
Résultat obtenu:
- Le delegate control est déployé dans le dossier “12/TEMPLATE/CONTROLTEMPLATES”
- Les pages ASPX seront déployés dans la bibliothèque “Pages” du site web
- 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
On créé ensuite l’arborescence suivante :
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 :
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" %>
[/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']
[/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']
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']
[/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.
Et le résultat obtenu tout en gardant le design choisit
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