Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Le Blog (Vert) d'Arnaud JUND

Bienvenue sur mon éco blog

Actualités

MyTIC – SharePoint 2010 : déjà un mythe Microsoft ?

La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. 
Pendant presque une heure, nous parlerons de SharePoint 2010.
Voici un aperçu du programme.

Accueil : 17h30
Début de la session : 18h00

- Les nouvelles interfaces riches et la norme WCAG 2.0
- La gestion de contenu (metadonnées, règles de validation, …)
- L’intégration du rubban « Office »
- L’intégration avec la suite Office
- Les nouveaux concepts (Insights et Composites)
- Les outils de gestion offline (SharePoint Workspace)
- L’orchestration des workflow
- SharePoint Designer
- SharePoint Foundation 2010

Rafraichissement : 19h00

Notre partenaire du jour sera le BEP, le Bureau économique de la province de Namur.
L’adresse du jour : BEP (salle Vivace), avenue Sergent Vrithoff, 2 à 5000 Namur
 
Pour toute information complémentaire ou pour une inscription, merci de vous rendre sur le site de
MyTIC.

 

Hotmail et Live sur le domaine .be

Dépêchez-vous, il n’y a en aura pas pour tout le monde.  Une adresse hotmail ou live en .be, c’est maintenant possible.

Une adresse à votre nom ou celui de votre entreprise, sur hotmail.be ou live.be, c’est à ne pas manquer.

D’abord déconnectez-vous de votre compte live actuel, et suivez un de ces liens :

https://signup.live.com/signup.aspx?mkt=fr-be&rollrs=12&lic=1
https://signup.live.com/signup.aspx?mkt=nl-be&rollrs=12&lic=1

Il reste beaucoup de disponibilité, mais il ne faut pas attendre.

MyTic – Session Visual Studio 2010

Voici les photos de notre session du 4 février 2010, cet évènement s’est déroulé à Mons, dans les locaux du MIC (Microsoft Innovation Center)

Notre Speaker du jour : Johan Gard

001 002 

003 004

005 006

007 008

Création d’une base de donnée sous SQL Azure

Sans rentrer dans les détails, je me propose ici de faire un rapide tour de ce que propose SQL Azure.

SQL Azure est avant tout un service d’hébergement de base de données relationnelles construit sur SQL Server.  Il permet aux entreprises de mettre en place des bases de données sans se soucier de la maintenance des serveurs SQL, et ce à un coût relativement faible.


Pourquoi SQL Azure ?

- Dans le cadre de la construction de sites web dynamiques sur Windows Azure
- Le partage de données multiples au travers du nuage, tout en permettant un accès sécurisé à partir d’emplacements dispersés (bureaux ou dispositifs automatiques)
- Construire des applications dont les données doivent être partagées plutôt que synchronisées (services publics, ministères, sociétés internationales, entreprises multi sites, ...)


Les avantages de SQL Azure

- Pas besoin d'effectuer des tâches d’installation ou  d’administration d’un serveur de données
- Haute disponibilité et tolérance de panne assurée
- Intégration complète avec les outils de gestion SQL Server et Visual Studio
- Adaptation des ressources en fonction des besoins


Le prix de SQL Azure, est directement lié aux tarifs pratiqués sur Windows Azure.
A ce sujet là, il vaut mieux se référer au tableau fournit par Microsoft.
http://www.microsoft.com/windowsazure/offers/popup.aspx?lang=en&locale=en-US&offer=COMPARE_PUBLIC

Sinon pour ceux, qui comme moi ont un abonnement MSDN Premium, il existe une offre spécifique.
http://www.microsoft.com/windowsazure/offers/popup.aspx?lang=en&locale=en-US&offer=MS-AZR-0005P

Les étapes de création d’une base de donnée SQL Azure :
https://sql.azure.com

Lors de la création d’une base de données, les premières informations à fournir sont

- le compte qui sera utilisé pour administrer la DB.
- la localisation géographique de cette db

AdminAccount

Une fois ces informations introduites, vous arrivez sur l’inteface vous permettant d’administrer votre service SQL Azure.

DatabaseAdmin

A partir de là, rien de plus simple de créer une base de données.

CreateDatabase

En terme de taille, vous pouvez partir vers une DB de 1 Go ou de 10Go, selon l’offre Azure à laquelle vous avez souscrite.

On notera au passage, qu’à partir de là, j’ai des informations concernant le serveur qui héberge mon espace SQL Azure, et que pour chaque DB listée, j’ai la possibilité de récupérer la chaîne de connexion.

ConnexionDatabase

Grâce à cette connexion, je vais pouvoir me connecter depuis mes applications, mais aussi depuis mes outils d’administration SQL standards ou depuis mon Visual Studio.

Maintenant, il reste une dernière étape, car il faut configurer les paramètres de protection du Firewall d’Azure pour qu’il puisse laisser passer vos requêtes vers SQL Azure.

Firewall

Voilà en quelques lignes, un rapide aperçu de SQL Azure.

 

L’UE dans les nuages

Que ce soit via Windows Azure ou via SQL Azure, les deux plateformes permettent la mise en ligne de données, quelles soient relationnelles ou non.  Alors qu’il est facilement concevable de mettre en ligne dans le nuage des applications et services web, mettre sur le nuage des données semble plus difficile à concevoir.

Les directives sur la protection des données, quelles soient personnelles ou non, semblent être un frein à l’avancée du Cloud Computing.  Le problème est qu’il n’y a pas de législation commune sur ces problématiques.  Chaque pays a sa propre règlementation sur ces sujets.

Il est grand temps pour l’UE de s’en mêler, et d’aboutir à des directives afin de moderniser la législation numérique européenne.  Le client d’un fournisseur de nuage, doit pouvoir être protégé ainsi que les données mises en ligne, quelque soit la géo localisation des serveurs physiques qui hébergent les applications et les données du client. 

Il faut mettre en place des directives qui s'appliquent à un monde, dans lequel les données changent continuellement de place.  Il faut absolument faire abstraction de cette notion de localisation des données.  Pour une entreprise qui fait le pari d’héberger son environnement informatique via un nuage, elle ne peut pas et ne devrait pas se soucier de la législation de chacun des pays où ses données risquent d’être localisées.

Windows Azure, du bleu pour plus de vert ?

Dans le cadre de sa stratégie de Cloud Computing, Microsoft a fait le pari d’héberger ses serveurs non pas dans des data centers traditionnels, mais bien dans containers prêts à l’emploi, des containers de 4ème génération en l’occurence.

Azure container

Ces containers de nouvelle génération, répondent à un certains nombres de critères pour s’inscrire dans une mouvance de type Green IT. 

- mise en place en 4 jours par un seul homme
- consommation en énergie revue à la baisse
- situés dans des régions au climat « frais » afin de minimiser les besoins de climatisation
- refroidit par air et par eau

Une première vidéo sur le concept de base des containers :
http://www.microsoft.com/showcase/en/us/details/36db4da6-8777-431e-aefb-316ccbb63e4e

Une seconde vidéo plus détaillée sur le container lui-même :


Vouloir faire du Green IT est une chose louable, mais encore faut-il voir cela dans une approche plus large.  Même si le bilan carbone “direct” de ces containers est plus faible, qu’en est-il du bilan carbone complet.  Avoir un système prêt à l’emploi, donc pré-construit, veut-il dire qu’en cas de panne on remplace le container par un autre ?  Quelle durée de vie d’un container ?  Comment sera-t-il recyclé ? 

Toutes des questions qui auront certainement des réponses dans les semaines qui viennent.

Windows Azure, Cloud Computing et SaaS

Le Cloud Computing, l’informatique dans les nuages, à ne pas confondre avec le village dans les nuages, est un concept comparable à celui de la distribution de l’énergie électrique.  En d’autres mots, vous n’avez pas à vous soucier de qui et comment ont vous fournit votre électricité, et de plus on vous assure que vous aurez l’énergie dont vous avez besoin au moment où vous en avez besoin.

Le concept d'informatique dans le nuage est basé sur les mêmes principes, plutôt que d’avoir ses propres ressources, celles-ci sont réparties en ligne sur des serveurs dédiés ou mutualisés, et l’ensemble de ces ressources forment donc un nuage.  De plus la puissance de calcul et de stockage de l'information est proposée à la consommation, dans une logique “je paie ce que je consomme”, SaaS (Software as a service).

Ensuite selon l’activité que l’on a, on peut se diriger vers trois types de nuages.
- les nuages privés internes
- les nuages privés externes
- les nuages publics

Il est clair que la tendance actuelle, est la mise en place de nuages internes, mais beaucoup de compagnies,  comme Microsoft au travers de la plateforme Windows Azure, proposent des solutions pour créer des nuages externes, qu’ils soient privés ou publics.

MyTIC sur MSDN

Bon ça n’arrive pas tous les jours, donc sur ce coup-là, j’ai mon niveau de satisfaction qui est au plus haut.   Pour notre second évènement, Microsoft nous supporte, et nous avons même droit à une annonce sur le site MSDN

http://msdn.microsoft.com/fr-be/aa570302.aspx

La plateforme Windows Azure

Sans rentrer dans la technique, je vais essayer de vous expliquer ce qu’est Windows Azure.
C’est avant toute chose une plateforme d’hébergement de sites et de services web.

L’idée de base est que bien trop souvent la mise en place d’une infrastructure d’hébergement est trop complexe et couteuse pour le besoin que l’on en a.  D’autre part les solutions d’hébergement mutualisés ne sont pas assez flexibles que pour s’adapter à nos activités.

D’où l’idée de mettre en place une plateforme d’hébergement mutualisée (Cloud Computing) flexible, et c’est là que l’on trouve la solution de Microsoft, Windows Azure.

Les avantages d’une telle plateforme sont les suivants :

- Adaptabilité des ressources à la demande en fonction de la charge
- Mise en production très rapide sans impact sur une éventuelle infrastructure existante
- Partage et consolidation des données
- Ouverture des applications et des données aux partenaires et clients

Cette plateforme n’est pas une solution unique en soit, elle s’accompagne d’autres solutions, telle que
- SQL Azure, une base de données SQL hébergée dans les datacenters de Microsoft
- AppFabric, qui permet d’assurer l’inter connectivité entre les serveurs d’entreprises et le cloud

azure  sql azure

 

Pour plus de détail, je vous propose de lire, en français, le document officiel de présentation de la plateforme Windows Azure

Bonne lecture

Windows Azure vs Live Azure

Y a vraiment de quoi s’y perdre.  A partir du mois de janvier 2010, la nouvelle plateforme Azure a été mise en route.  Celle-ci est maintenant disponible via l’url https://windows.azure.com

Windows Azure Projects

On y retrouve les projets Azure, SQL Azure, AppFabric et le MarketPlace.
Et là, je vois que rien ne vous choque !  Je me trompe ?
 
Ben moi, y a un truc qui m’a choqué.  Je ne retrouve plus les Services Live.
Et de fait, ils ne seront plus intégré dans cette nouvelle plateforme Azure.

Quel avenir pour tous ceux qui comme moi, ont utilisé les API Live Services dans leurs applications.
Rien que mon blog s’appuye sur les API d’authentification LiveID.

Une lueur d’espoir existe tout de même.
Les Live Services sont toujours disponibles via l’url
https://live.azure.com

 

Windows Live Projects

Donc nous pouvons espérer que soit les Live Services soient intégrés plus tard sur la nouvelle plateforme Azure, soit qu’ils soient portés sur une plateforme dédiée aux Live Services uniquement.
Je n’ose pas croire que ceux-ci disparaissent.
Mais seul Microsoft possède la réponse à cette question.  Dès que j’ai des nouvelles officielles, je publierais un billet sur ce sujet.

Bon développement sur Azure à tous.

10 thèmes pour SharePoint – Déploiement manuel

Depuis Mars 2009, Microsoft mets à disposition gratuitement dix thèmes SharePoint, “TenThemesforSharePoint”.  Voici l’url pour les downloader : http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=0a87658f-20b8-4dcc-ad7a-09ad22641f3a

Mon but ici n’est pas de vous faire découvrir ces 10 thèmes, car les goûts et les couleurs, chacun a son opinion, on peut en discuter des heures.

Je suis plutôt là pour vous expliquer comment déployer ces thèmes.  Car en effet, ce n’est pas forcément simple.

Ces thèmes ont été créés pour être déployés comme une solution Visual Studio, et donc le déploiement doit se faire via Visual Studio.  Et c’est là que j’interviens, car tout le monde n’a pas sous la main un Visual Studio pour faire un déploiement sur un serveur SharePoint 2007.

Je me propose donc de vous décrire une méthode de déploiement manuelle.  Pour se faire, vous devez avoir accès au serveur front-end de votre plateforme SharePoint 2007.

Une fois le package downloadé du site Microsoft, il faut exécuter le MSI, qui va juste vous installer quelques fichiers.  Attention que pendant le processus d’installation il vous propose de copier les ressources dans le répertoire “c:\program files\….”, il vaut mieux choisir un autre répertoire plus convivial.  Pour ma part, j’ai un répertoire où je stocke toutes mes ressources SharePoint “d:\SharePoint Tools\” donc j’ai choisi ce répertoire là pour l’installation de mon package.

Vous trouverez dans ce répertoire un fichier ZIP, “TenThemesForSharePoint_March2009.zip”, qu’il faut décompresser dans le répertoire local.  Il va alors vous copier toutes les ressources nécessaires pour le déploiement de ces thèmes.

 

SiteTheme

 

Chaque dossier contient la définition et la solution Visual Studio de chaque thème.

 

image_thumb_1_001EB636  image_thumb_2_001EB636

Vous trouverez aussi une image de chaque thème proposé afin de vous faire une idée.

Pour mon exemple, je vais choisir le thème “Team”, et c’est donc lui que je vais déployer manuellement.

Si j’ouvre le répertoire “TeamSiteTheme”, je vais trouver un fichier “.sln” qui est donc bien un fichier de solution pour Visual Studio, et un répertoire contenant la définition du thème voulu.

En ouvrant ce répertoire, voilà ce que je trouve. 

 image_thumb_3_2E0C08EE

 La seule chose qui m’intéresse ici, c’est le répertoire “Templates” qui contient deux sous répertoires.
”LAYOUTS” qui contient les composants graphiques du thème, et “THEMES” qui contient la définition SharePoint du thème en question.  Et ce sont ces ressources là qu’il faut installer sur le serveur SharePoint.

Cela se fait en 4 étapes :

1) Déploiement des composants graphiques :
A partir du répertoire “LAYOUTS” vous allez trouvez un répertoire “Team” via le chemin “LAYOUTS\1033\IMAGES\Team”, il faut copier ce répertoire et son contenu dans le répertoire suivant : “C:\Program Files\Fichiers communs\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\1033\IMAGES”

 

2) Déploiement de la définition du thème :
Le répertoire “C:\Program Files\Fichiers communs\Microsoft Shared\web server extensions\12\TEMPLATE\THEMES” contient la définition de chaque thème disponible sur le serveur SharePoint.
Il faut donc aussi y copier le répertoire “Team” que vous trouverez dans le répertoire “THEMES” de votre thème à déployer.

 

3) Enregistrement de votre thème :
Les thèmes utilisables sont référencés dans un fichier xml spécifique, “C:\Program Files\Fichiers communs\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\1033\SPTHEMES.XML”.
Vous l’aurez compris, il existe un tel fichier par code langue.  Et chacun d’entre eux doit être mis à jour si vous voulez utiliser ce thème dans les autres langues. (Le code langue pour les sites français est 1036)

En ouvrant ce fichier xml avec un éditeur de texte quelconque, vous trouverez un ensemble de définition de “templates”, il s’uffit de définir votre propre template de référencement à votre thème.

Le TemplateID doit être le nom du répertoire où est stockée la définition de votre thème.
Pour le Thumbnail et le preview, je laisse ces noeuds vides.

    <Templates>
        <TemplateID>Team</TemplateID>
        <DisplayName>Team</DisplayName>
        <Description>Team – Ten Theme SharePoint</Description>
        <Thumbnail></Thumbnail>
        <Preview></Preview>
    </Templates>

 

4) Prise en compte du nouveau thème :
Pour que le nouveau thème soit pris en compte, il faut exécuter un redémarrage de SharePoint via un reset d’IIS.  La commande IISRESET via le prompt fera l’affaire.

 

Voilà en quelques ligne comment déployer ces 10 thèmes sans passer par un déploiement d’une solution Visual Studio.

J’espère que cela pourra vous aider.

MyTic : Visual Studio 2010
image

MyTIC, le premier Groupe Francophone  d’Utilisateurs des technologies Microsoft, (www.mytic.be) vous invite ce jeudi 04 Février 2010 à assister à son deuxième événement gratuit dans le cadre prestigieux du MIC (Microsoft Innovation Center) près de Mons.

 

image

 

Inscrivez-vous dès aujourd’hui via email à l’adresse evenements@mytic.be

Où se trouve le Microsoft Innovation Center ?

Le MIC se trouve Boulevard Initialis, 1 à 7000 Mons.

Sur l'autoroute E19 - Paris-Bruxelles, Sortie 24, suivre Imagix / LME puis le fléchage Microsoft Innovation Center.

Merci,
A bientôt

MyTic

En tant que co-fondateur de MyTic je suis heureux de vous annoncer la création de la première communauté francophone des utilisateurs des Technologies Microsoft.

Le but du Groupe d'Utilisateurs MyTIC est de favoriser les échanges autour des technologies les plus en vue afin de fournir aux utilisateurs de ces technologies des conseils sur l'exploitation des infrastructures ainsi que sur les outils et méthodes de développement.

Les objectifs de MyTIC sont e.a. :

- animer des séminaires portant sur des technologies utilisées par les membres
- fournir aux membres des informations, conseils et ressources au travers de réunions, rencontres,documentations, webcasts, ...
- développer un réseau entre les membres de la communauté :   éditeurs de logiciels, sociétés de services, services informatiques, ...

Pour plus d’informations sur MyTic merci de suivre ce lien http://www.mytic.be

WSS v3, Limitation taille DB

Il est connu que dans le cadre de l’exploitation de SQL Express 2005 Edition, les base de données sont limitées à une taille de 4Go.  D’ailleurs si on fait une installation avancée, que ce soit SharePoint Services v3 ou MOSS, et que l’on pointe vers un serveur SQL Express 2005 local, au bout d’un moment, SharePoint renvoi des erreurs SQL car la limite des 4Go est atteinte.

Par contre, si on effectue une installation par défaut de SharePoint Services v3 par défaut, le setup d’installation installera un moteur SQL Express 2005 un peu différent (MICROSOFT##SSEE).  Et dans ce cadre là, la limitation à 4Go est inexistante.

SharePoint - Envoi d'un document en pièce jointe

Avec SharePoint 2007, que ce soit SharePoint Services ou MOSS, vous pouvez depuis n'importe quel document faire un envoi par mail du document sous forme de lien.  C'est très pratique, mais cela a tout de  même un inconvénient majeur lorsque vous voulez envoyer un document à quelqu'un qui n'a pas accès au dit document, ou quelqu'un d'externe à votre plateforme SharePoint.

Voilà ce que je voulais arriver à faire : envoyer un document par mail mais en pièce jointe.

Les problèmes fonctionnels qui se sont présentés à moi :

1) L'adresse mail de destination
Tout simple, passer par une page ASPX, qui au travers d'une zone de texte demande à l'utilisateur d'introduire l'adresse mail de destination.

2) L'adresse mail de l'expéditeur :
Par défaut, l'adresse mail de l'expéditeur doit être celle de l'utilisateur qui effectue l'envoi du document.
Par contre, il se peut que l'on ne puisse pas identifier l'utilisateur (accès anonyme), alors l'adresse d'expédition sera celle configurée dans le services "Outgoing mail" de SharePoint.  Mais dans ce cas là, l'utilisateur peut lui-même introduire une adresse mail.

3) Avoir un menu personnalisé uniquement lié aux documents publiés dans mes librairies de documents. 

 

image_thumb_1_thumb_4C7B692B

4) Avoir une copie carbonne cachée :
L'envoi va se faire via un serveur SMTP, donc il faut une trace de l'envoi dans la boite mail de l'expéditeur.

Mon but ici n'est pas de faire un tutoriel sur comment écrire une feature SharePoint, de nombreux articles font ça bien mieux que moi.  Je vais juste décrire ma solution que je vous laisse étudier et utiliser à votre convenance.

Le cab file de déploiement : http://blog.jund.be/Ressources/SendDocument/SendDocument.cab
Le fichier zip avec le code source : http://blog.jund.be/Ressources/SendDocument/Send_Document.zip

Ma solution est fournie telle quelle, et ni moi, ni Vision EZOS sommes responsables de l'usage que vous en feriez.

 

Construction de la structure ma solution :

1) Nouveau projet de type "Class Library" en C# sous Visual Studio 2005, projet nommé "SendDocument"
- Ajout des référence Windows.SharePoint.Services, System, System.Data, System.Xml et System.Web
- Création de deux répertoires sur la racine du projet "DEPLOYEMENT" et "TEMPLATE"
- Création de deux répertoires dans le dossier "TEMPLATE", "FEATURES" et "LAYOUTS"
- Création d'un répertoire dans le dossier "FEATURES", "SendDocument"

 image_thumb_4_thumb_4C7B692B
 
2) Création de la page ASPX - SendDocument.aspx
- Création d'un fichier de type text nommé "SendDocument.aspx" dans le répertoire "TEMPLATE\LAYOUTS"
- Création du fichier contenant le code behind associé à la page, "SendDocument.aspx.cs" dans le répertoire "TEMPLATE\FEATURES\SendDocument"
 
Le code de la page aspx : SendDocument.aspx

<%@ Page Language="C#" MasterPageFile="~/_layouts/application.master" Inherits="SendDocument.SendDocument, SendDocument, Version=1.0.0.0, Culture=neutral, PublicKeyToken=Your Public Key Token" %>

<asp:Content ID="Title" runat="server" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea">
    Send Document in attach by Email
</asp:Content>

<asp:Content ID="ContentMain" runat="server" ContentPlaceHolderID="PlaceHolderMain">
    <asp:Panel ID="MailDocumentPanel" runat="server">
    Please enter the destination email address :<br />
    <asp:TextBox ID="EmailAddress" runat="server" Width="300"/><br /><br />
    The sender email address :<br />
    <asp:TextBox ID="SenderAddress" runat="server" Enabled="false"  Width="300"/>
    <asp:Button ID="SendButton" runat="server" Text="Send" OnClick="SendButton_Click" /></asp:Panel>
    <asp:Label ID="Information" runat="server"/>
</asp:Content>

 
Le code behind associé  : SendDocument.aspx.cs

using System;
using System.IO;
using System.Net.Mail;
using System.Net.Mime;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.WebControls;

namespace SendDocument
{
    public class SendDocument : LayoutsPageBase
    {
        //Private Members to control debugging information and error handling
        private string debugMessage = "";
        private bool isError = false;
        private bool displaySenderTextBox = false;

        private void Page_Load(object sender, System.EventArgs e)
        {
            string smtpFromAddress = "";
            ContentPlaceHolder mainContentPlaceholder = this.Master.FindControl("PlaceHolderMain") as ContentPlaceHolder;
          
          
//Set Sender Email Address
            smtpFromAddress = GetSenderEmailAddress();
            debugMessage = debugMessage + "<br>Mail Message From Address : " + smtpFromAddress;

            ((TextBox)mainContentPlaceholder.FindControl("SenderAddress")).Text = smtpFromAddress;
            if (displaySenderTextBox)
            {
                ((TextBox)mainContentPlaceholder.FindControl("SenderAddress")).Enabled = true;
            }
        }

        //Event Handler about the Send Button
        protected void SendButton_Click(object sender, EventArgs e)
        {
            debugMessage = "<br>SendButton_Click()";
            ContentPlaceHolder mainContentPlaceholder = this.Master.FindControl("PlaceHolderMain") as ContentPlaceHolder;

            try
            {
                //Get the current SharePoint List and cast it to a Document Library
                SPList list = SPContext.Current.Web.Lists[new Guid(Request.QueryString["ListId"])];
                SPDocumentLibrary docLib = (SPDocumentLibrary)list;
                //Get the current item from this SharePoint Document Library
                int id = System.Convert.ToInt32(Request.QueryString["ItemId"]);
                SPListItem listItem = docLib.Items.GetItemById(id);
                //If there is a file associated with the SharePoint Item, the file will be send bu email as attachment
                if (listItem.File != null)
                {
                    string destinationAddress = ((TextBox)mainContentPlaceholder.FindControl("EmailAddress")).Text.Trim();
                    string senderAddress = ((TextBox)mainContentPlaceholder.FindControl("SenderAddress")).Text.Trim();
                    SendDocumentbyEmail(destinationAddress, senderAddress, "Document : " + listItem.Name + " from " + list.Title, listItem, list);
                }
            }
            catch (Exception  ex)
            {
                isError = true;
                debugMessage = debugMessage + "<br>Error - SendButton_Click() : <br>Error Message : " + ex.Message + "<br>Stack Error : " + ex.StackTrace.ToString();
            }

            //Show all debug and error messages if an error occured, othewise show a successfull message
            ((Panel)mainContentPlaceholder.FindControl("MailDocumentPanel")).Visible = false;
            if (isError)
            {
                debugMessage = debugMessage + "<br>The document has not been sent in attachment by email.";
            }
            else
            {
                debugMessage = "The document has been sent in attachment by email.";
            }
            ((Label)mainContentPlaceholder.FindControl("Information")).Text = debugMessage;
        }

        //Create a new SMTP Message and send it
        private void SendDocumentbyEmail(string destinationAddress,string senderAddress, string messageSubject, SPListItem document, SPList list)
        {
            string smtpServerAddress = "";

            string documentAuhtor = "";
            string documentName = "";
            string documentMajorVersion = "";
            string documentMinorVersion = "";
            string documentLenght = "";
            string documentUrl = "";

            string listUrl = "";
            string listName = "";

            Stream stream = null;
            try
            {
                debugMessage = debugMessage + "<br>SendDocumentbyEmail(" + destinationAddress + "," + senderAddress + "," + messageSubject + ",File,List)";
                SPWebApplication currentWebApplication = SPContext.Current.Site.WebApplication;

                //Get Information about OutboundMailServiceInstance
                SPOutboundMailServiceInstance smtpServer = currentWebApplication.OutboundMailServiceInstance;
                smtpServerAddress = smtpServer.Server.Address;
                debugMessage = debugMessage + "<br>Get OutboundMailServiceInstance Name : " + smtpServerAddress;
                //Set Document Information
                documentAuhtor = document.File.Author.ToString();
                documentName = document.File.Name;
                documentMajorVersion = document.File.MajorVersion.ToString();
                documentMinorVersion = document.File.MinorVersion.ToString();
                documentLenght = document.File.Length.ToString();
                documentUrl = document.Url.ToString();
                debugMessage = debugMessage + "<br>Get Document Information (Author, Name, Version, Lenght and Url)";

                //Set List Information
                listUrl = SPContext.Current.Web.Url + list.DefaultViewUrl;
                listName = SPContext.Current.Web.Name;

                debugMessage = debugMessage + "<br>Create MailMessage : new MailMessage(" + senderAddress + "," + destinationAddress + ")";
                MailMessage message = new MailMessage(senderAddress, destinationAddress);
                message.Subject = messageSubject;
                message.Bcc.Add(senderAddress);
                message.IsBodyHtml = true;
                message.Body = "This document was sent from the following SharePoint list: " +
                "<a href=\"" + listUrl + "\">" + listName + "</a>.<br><br>Author = " + documentAuhtor + "<br>Name : " + documentName + "<br>Major Version : " + documentMajorVersion +
                "<br>Minor Version : " + documentMinorVersion + "<br>Url : " + documentUrl;

                stream = document.File.OpenBinaryStream();
                debugMessage = debugMessage + "<br>Document Stream Opened";

                //Create the attachment without mime type information
                Attachment attachment = new Attachment(stream,"");

                attachment.Name = document.File.Name;
                message.Attachments.Add(attachment);
                debugMessage = debugMessage + "<br>Document set as attachment to the mail";

                debugMessage = debugMessage + "<br>Create SmtpClient : new SmtpClient(" + smtpServerAddress + ")";
                SmtpClient client = new SmtpClient(smtpServerAddress);

                debugMessage = debugMessage + "<br>Send the message";
                client.Send(message);

            }
            catch (Exception ex)
            {
                debugMessage = debugMessage + "<br>Error - SendDocumentbyEmail() : <br>Error Message : " + ex.Message + "<br>Stack Error : " + ex.StackTrace.ToString();
                isError = true;
            }
            finally
            {
                try
                {
                    stream.Close();
                }
                catch { }
            }

        }

        //Get the Sender Email Address
        private string GetSenderEmailAddress()
        {

            string fromEmailAddress = "";
            try
            {
                //Try to get the current connected user email address
                debugMessage = debugMessage + "<br>Get CurrentUser Email Address";
                fromEmailAddress = SPContext.Current.Web.CurrentUser.Email;
            }
            catch (Exception ex)
            {
                debugMessage = debugMessage + "<br>Error - SendButton_Click() : <br>Error Message : " + ex.Message + "<br>Stack Error : " + ex.StackTrace.ToString();
                try
                {
                    //Try to get the Sender Address used by the OutBoundMail Configuration
                    displaySenderTextBox = true;
                    debugMessage = debugMessage + "<br>Get OutboundMail Sender Mail Address";
                    fromEmailAddress = SPContext.Current.Site.WebApplication.OutboundMailSenderAddress.ToString();
                }
                catch (Exception e)
                {
                    debugMessage = debugMessage + "<br>Error - SendButton_Click() : <br>Error Message : " + e.Message + "<br>Stack Error : " + e.StackTrace.ToString();
                    fromEmailAddress = "";
                }
            }

            return fromEmailAddress;
        }

    }
}

 
3) Création de la Custom Action : Positionnement du menu "E-Mail the document" associé à chaque document publié dans SharePoint : elements.xml

<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="
http://schemas.microsoft.com/sharepoint/">
    <CustomAction
        Id="SendDocument.Link"
        RegistrationType="ContentType"
        RegistrationId="0x0101"
        Location="EditControlBlock"
        Sequence="350"
        Title="E-mail the Document"
        ImageUrl="/_layouts/IMAGES/EML16.GIF"
        Description="Allows a user to send a document by email as attachment." >
        <UrlAction Url="~site/_layouts/SendDocument.aspx?ItemId={ItemId}&amp;ListId={ListId}"/>
    </CustomAction>
</Elements>


RegistrationType="ContentType" & RegistrationId = "0x0101", positionne donc cette action sur tout les éléments dont le content type est équivalent à un document.
Location="EditControlBlock", positionne dans le menu d'édition de chaque item concerné

4) Description de la feature : feature.xml

<?xml version="1.0" encoding="utf-8" ?>
<Feature xmlns="
http://schemas.microsoft.com/sharepoint/"
         Id="AF27505D-D3B0-4024-8576-CCACA3D66B06"
         Title="Send Document by Email"
         Scope="Web" Hidden="false" Version="1.0.0.0"
         Description="Allows you to e-mail a document as attachment from any Document Libraries">
    <ElementManifests>
        <ElementManifest Location="elements.xml"/>
    </ElementManifests>
</Feature>

 
5) Manifest de déploiement : manifest.xml

<?xml version="1.0" encoding="utf-8" ?>
<Solution xmlns="
http://schemas.microsoft.com/sharepoint/"
     SolutionId="87EA5682-EA48-4e19-B890-B8FF699985E4"
     ResetWebServer="TRUE">
    <FeatureManifests>
        <FeatureManifest Location="SendDocument\feature.xml"/>
    </FeatureManifests>
    <TemplateFiles>
        <TemplateFile Location="LAYOUTS\SendDocument.aspx"/>
    </TemplateFiles>
    <Assemblies>
        <Assembly DeploymentTarget="GlobalAssemblyCache" Location="SendDocument.dll" />
    </Assemblies>
</Solution>

 
Le reste est lié directement à la création et au déploiement de features pour SharePoint 2007 (Cab File, ddf et targets file).
 
La commande pour déployer le cab file est toujours la même :
stsadm -o addsolution -f "completecabfilepath"
 
J'espère que vous apprécierez cet outil, si vous avez la moindre question ou que vous rencontrez le moindre souci, n'hésitez pas à me contacter.
 
Je tiens à remercier Becky Bertram pour son article sur le sujet, Stéphane Eyskens pour ses conseils, et Ludovic Lefort pour son aide et son article sur les custom actions

 

 

Search Server 2008 - MSS(X)

Félicitation pour cette nouvelle naissance, le dernier né de la famille est lui aussi très prometteur.

Il en aura fallu du temps pour qu'il se joigne à nous, mais maintenant le voici, ou je devrais plutôt dire les voici, car ils sont deux.

Microsoft Search Server 2008 et Micorosoft Search Server Express 2008, ces deux frères ont la même vocation.  fournir à votre entreprise un outil de recherche sur vos données, efficace et robuste.

La seule différence entre les deux frangins, c'est que la version Express est mono serveur, une limitation qui ne dérangera pas la grande majorité des entreprises surtout les PME.

Pour le moment ces outils existent uniquement en version "release candidate" et les version "rtm" sont prévus pour très bientôt.

Petite démonstration en flash pour ceux qui veulent en voir plus :
http://www.microsoft.com/enterprisesearch/flash/MSSX.html

Pour downloader la rc de la version Express :
http://www.microsoft.com/enterprisesearch/serverproducts/searchserverexpress/download.aspx

Une image virtuelle afin d'en tester les fonctionnalités:
http://www.microsoft.com/downloads/details.aspx?familyid=6662c7be-d79b-475a-863c-f976239ac0af&displaylang=en&tm

Des exemples de connecteurs disponibles :
http://www.microsoft.com/enterprisesearch/connectors/federated.aspx

Que j'ai hâte de tester tout ça dans un environnement réel, de configurer cet outil afin de fournir enfin une solution de recherche pour les plateformes SharePoint Services.
 
Longue vie à MSS 2008, et encore félicitations aux parents.
Et enfin, une dernière pensée pour un de mes très vieux amis, Site Server 3.0 qui peut maintenant dormir en paix.


WSS v3 - Picture Library & Auto Start Slide Show

Depuis un moment, j'essaie de trouver un moyen d'avoir un Slide Show via une picture library de SharePoint Services v3, sans que l'utilisateur n'ai à démarrer le slide show lui-même. 

Beaucoup d'articles proposent des webparts implémentant une solution basée sur Flash.

Je n'aime pas forcément l'installation de composants externes (même gratuits), alors qu'en cherchant un peu on peut trouver d'autres alternatives.

Voilà ce que je peux proposer comme solution pour avoir un Slide Show automatique sous WSS 2007.

Lorsque que vous allez dans le menu 'Action' d'une librairie d'images et que vous cliquez sur 'View Slide Show', vous êtes redirigé sur la page 'slidshow.aspx' qui fait parti de la collection des formes de votre liste.  Avec SharePoint Designer, vous pouvez éditer cette page et faire la modification suivante :

- trouvez la ligne :
<script language="Javascript">if (IsImgLibJssLoaded()) SlideShowContent();</script>
Celle-ci initie le Slide Show mais ne le démarre pas.

Il suffit donc de la remplacer par :
<script language="Javascript">if (IsImgLibJssLoaded()) SlideShowContent(); StartSlideShow();</script>
Ainsi le Slide Show démarrera automatiquement.

En espérant que cela pourra vous aider.

SharePoint People Picker Problem

Comment perdre du temps, beaucoup de temps ....
Je ne suis pas à ma première installation et configuration de MOSS 2007, mais là je suis tombé sur un os.
Après avoir installé et configuré mon SharePoint, voilà que je veux allouer les droits d'accès.  Et là, rien ...
Le People Picker ne trouve aucun utilisateur de mon domaine, aucune vérification sur les comptes n'est possible.

J'ai dû passer facilement 3 jours sur des forums techniques pour essayer de comprendre ce qui n'allait pas.  Et de fait, beaucoup d'article mentionnent quelques soucis avec le People Picker quand les utilisateurs sont dans des OU spécifiques de l'AD, ou que SharePoint doit travailler sur plusieurs domaines différents, mais rien de tout cela ne me convenait.

Pour finir, j'ai retrassé tout l'historique d'installation du serveur SharePoint, et là, quelle ne fût pas ma surprise.  La personne chargée d'installé le serveur qui allait héberger SharePoint m'avait fait une farce.  Ce dernier avait pris en charge d'installer Windows 2003 Server, et d'intégrer ce serveur sur le domaine.  Ce qu'il avait oublié de mentionner, c'est qu'après l'installation de SharePoint et avant que je prenne la main pour le configurer, il avait renomer le serveur.

Donc, une fois qu'on a sorti le serveur du domaine pour le réintégrer, mon People Picker s'est mis à fonctionner sans aucun problème.

WSS v3, Anonymous access et Anonymous Search

Activer les accès anonymes sous SharePoint Services v3, rien de plus simple allez-vous me dire.

Et de fait, c'est la simplicité même, sauf qu'il va falloir vérifier certaines choses, dont par exemple l'outil de recherche.

Pour tous ceux qui ont déjà fait cette manipulation, quelle surprise de voir apparaître une fenêtre d'authentification lorsque qu'on clique sur le lien de recherche.


Cela s'explique par le fait que la page qui affiche les résultats, osssearchresults.aspx, n'est accessible que par des utilisateurs authentifiés. 

Mais bon, cela ne sert à rien de crier au loup trop vite, car une simple et innocente modification à cette page permet de contourner le problème.

Il suffit d'éditer cette page (C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS), et de retirer l'instruction 'Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase"' de la balise 'Page', ainsi celle-ci sera alors accessible même en anonyme.

Site Definitions ou Site Templates

Avec SharePoint 2007, lorsqu'on veut mettre en place un nouveau template applicatif, on est toujours confronté à un choix.  Que fait-on, un Site Definition ou un Site Template.

Ce billet a pour but de vous éclairer sur le choix à faire en fonction de ce que vous voulez faire et des droits que vous avez sur votre environnement SharePoint.

Les "Site Definitions" sont des collections de fichiers XML, assemblies .NET, et pages ASPX. Cette collection d'éléments est accessible via le filesystem, et donc peut très facilement être modifiée ou reproduite.

Les "Site Templates" sont des sites SharePoint qui ont été packagés dans un fichier unique (.stp), et qui pourra être déployé pour recréer un site à l'identique. Ce qui veut dire que pour créer un "Site Template", il faut d'abord créer un site SharePoint qui servira de modèle.

Voici les points qu'il faut prendre en compte, pour faire le meilleur choix :

Compléxité : si vous voulez juste travailler sur le cosmétique d'un site (couleur, images, ..) le "Site Template" est votre outil.  Maintenant, si vous voulez mettre en ligne de nouvelles "webparts", des workflows, de nouveaux type de champs, alors il vous faudra faire un "Site Definition"

Droits d'accès : Pour mettre en place un "Site Definition", il faut avoir accès au filesystem du serveur sur lequel est héberg" votre SharePoint, si ce n'est pas le cas, il vous faudra vous contenter de faire des "Site Templates" qui eux s'activent pas les interfaces d'admisnitration de SharePoint.

Maintenance : Modifier un "Site Template" n'affecte en rien les sites SharePoint déjà créés sur base de ce template.  Mettre à jour un "Site Definition" et le déployer met à jour tous les sites SharePoint basés sur ce modèle.

Pour plus d'information sur ce sujet, je vous renvois sur ce très bon document de Microsoft :
"Windows SharePoint Services Document: Application Templates for Windows SharePoint Services 3.0 – Under the Hood" que vous trouverez à l'adresse suivante :
http://www.microsoft.com/downloads/details.aspx?FamilyId=C49A6B00-E0AA-4102-B585-B25CD3CBB383&displaylang=en

Bonne lecture



Les 10 derniers blogs postés

- Comment mapper une vue SQL sur une collection de complex type? par Matthieu MEZIL le il y a 18 heures et 0 minutes

- SQL Server : Query Notification ou comment être notifié de modifications de données côté application (SqlDependency) par SQL Server vu par Christian Robert le il y a 23 heures et 59 minutes

- [WF4] Un Binding Activity/ActivityDesigner qui passe mal? par Blog de Jérémy Jeanson le 03-19-2010, 13:42

- MyTIC – SharePoint 2010 : déjà un mythe Microsoft ? par Le Blog (Vert) d'Arnaud JUND le 03-19-2010, 08:54

- TechDays 2010 Genève : Retrouvez-moi pour une session sur la Haute disponibilité et le ScaleOut avec SQL Server par SQL Server vu par Christian Robert le 03-18-2010, 15:45

- [MIX10] Keynote deuxième journée – Internet Explorer 9, Html5, Visual Studio 2010, OData par Atteint de JavaScriptite Aiguë [Cyril Durand] le 03-17-2010, 19:40

- Certifications beta .NET 4 par Kévin Gosse le 03-17-2010, 19:33

- [Mix 2010] – Microsoft Translator Technology Preview V2 par RedoBlog - The .NET Gentleman !!! le 03-17-2010, 18:53

- Lancement en Preview de Cyclone lors des TechDays 2010! par Blog de Frédéric Queudret le 03-17-2010, 16:30

- [WP7] Je ne veux pas d’un nouvel iPhone par Le blog de FremyCompany le 03-17-2010, 13:11