Yann GARIT – Technologies Microsoft & Co

Technologies Microsoft & Co

[SharePoint 2010] Faire une WebPart asynchrone

Dans une page SharePoint, il se peut que plusieurs WebParts soient disposées un peu partout.

Si vous lancez des requêtes sur des listes ou sur des bases de données par exemple, les temps de réponse peuvent être très longs, ce qui ralentira toute la page. Les temps de chargement seront de plus en plus longs pour l’utilisateur, puisqu’il faudra attendre la fin de tous les calculs pour que l’affichage apparaisse.

Si la WebPart n’est pas une des plus importantes, il y a une manière simple de la rendre asynchrone est ainsi nous pourrons charger la page très vite et avec un système de loading, faire apparaitre les données d’une WebPart plus gourmande quelques secondes après. L’utilisateur pourra alors parcourir la page tout en attendant que le dernier module se charge.

Il faut cependant savoir que le résultat de la callback, donc de l’événement, sera sous forme d’un “string”. Il faudra donc générer nous même le html afin de pouvoir afficher correctement des données. C’est le prix à payer pour pouvoir rentre votre WebPart asynchrone :)

Avec un peu plus de temps, nous pouvons réussir à réaliser ce que l’on souhaite.

Pour commencer, dans le code behind de votre WebPart, il faut override le Render afin d’afficher une image de chargement, le temps que la requête se fasse.

 

protected override void Render(HtmlTextWriter writer)
{
    // TODO: add custom rendering code here.
    this.datadiv = this.ClientID + "content";
writer.Write("<div id=\"" + this.datadiv + "\"><img src=\"_layouts/progressbar.GIF\" width\"300\"></div>"); }

Lire la suite

[SharePoint 2010] Edition d’une page avec une webpart erronée

Il vous est surement déjà arrivé d’insérer une webpart dans une page de votre site SharePoint, mais malheureusement, il peut arriver qu’elle ne fonctionne pas du premier coup.

Et vu que vous êtes bien sûr en mode debug (CutomError = off…) , vous avez un bel écran jaune comme on les aime !

image 

La solution?

Lire la suite

[MS] Concours Windows Phone 7–ProgTV

Avec Dorian Lamandé nous participons au concours de développement sur Windows Phone 7 : Rendez vous ici : http://www.facebook.com/home.php#!/video/video.php?v=445160459896&oid=129459787073480 et cliquez sur “J’aime” pour nous soutenir !

C’est à vous de jouer Sourire

[Windows Phone 7] Utilisation d’un contrôle “Panorama”

Afin de faire une application digne de ce nom pour Windows phone 7, il faut suivre la logique des “hubs” de l’interface Métro, qui propose des vues panoramiques de service.

Très pratique et design, elle n’est pourtant pas disponible par défaut dans le SDK de Windows Phone 7. Cependant, de nombreux développeurs l’ont mis en place, ce qui nous permet de réaliser des applications très simplement.

J’ai donc choisi de vous présenter le “Panorama” le plus efficace et simple d’implémentation que j’ai trouvé sur le net. Il s’agit du panorama codeplex disponible sur : http://phone.codeplex.com/

L’avantage majeur de ce projet, est qu’il a déjà été porté pour la version béta de Windows phone, ce qui nous simplifie grandement la vie !

Vous pourrez faire des contrôles pivots ainsi que le fameux panorama.

La seule différence entre les deux réside dans la navigation, en effet, avec le pivot control, il y a deux façons de naviguer d’une page à l’autre,- soit en cliquant sur l’en-tête, soit en “flickant” les pages -. C’est à dire en donner un petit coup avec votre doigt sur la gauche ou sur la droite.

Le site codeplex vous donnera une explication claire pour mettre en place votre panorama, mais j’ai quand même quelques conseils à vous donner:

  • Bien télécharger la version pour la Béta du SDK, car la version recommandée n’est pas migré. Il faut prendre à ce jour : http://phone.codeplex.com/SourceControl/changeset/changes/55373. (je me suis fait avoir la 1er fois :) ).
  • Ajouter la dll dans votre projet ou ne pas hésiter à ajouter directement le code source si vous voulez le modifier.
  • Afin d’avoir possibilité de scroller dans la page, c’est-à-dire de faire marcher une liste, ou un élément, et pouvoir scroller vers le haut ou le bas, il faut faire comme ci-dessous :
     <panorama:PanoramaItem x:Name="ItemsNow" Header="Page1" HorizontalAlignment="Left" Width="500">
                <ScrollViewer>
                     <!--Votre control-->
                 </ScrollViewer>
            </panorama:PanoramaItem>

ou encore:

   <panorama:PanoramaItem x:Name="ItemsNow" Header="Page1" HorizontalAlignment="Left" Width="500">
                <ListBox x:Name="Listbox1">
                     <!--Votre control-->
                </ListBox>
            </panorama:PanoramaItem>

En effet, placer un User control ou un stackpanel entre deux bloquera votre scroll, je n’ai pour le moment trouvé aucune autre possibilité pour le rendre fonctionnel différemment, il faut donc mettre tous le code dans la MainPage, après je ne suis pas non plus un killer en xaml !

Voilà, vous n’avez plus d’excuses pour vous lancer dans le développement sur Windows phone 7 !

[SharePoint 2010] Utilisation des Logs sous SharePoint

Vous avez peut être remarqué que pour pouvoir logger des actions d’une application SharePoint, c’est différent de l’ASP.NET classique.

Vous aurez très certainement une erreur d’accès: “Registry Access is not allowed” ou un problème avec les logs “Security”.

En fouillant un peu, j’ai trouvé une solution :

Ca ne suffit pas de créer une Source pour les logs directement dans la Webpart ou dans n’importe quel composant SharePoint.

      if (!EventLog.SourceExists("Customs Solutions"))
      {
          EventLog.CreateEventSource("Customs  Solutions", "Application");
      }

Ce code n’est pas faux mais il doit être mis au bon endroit,  c’est-à-dire à l’installation de la Feature.

public override void FeatureInstalled(SPFeatureReceiverProperties properties)
    {
        if(!EventLog.SourceExists("Customs Solutions"))
        {
            EventLog.CreateEventSource("Customs Solutions", "Application");
        }
        ;
    }

Une fois instancié, vous êtes sûr que la source existera et sera créée avec le plus haut privilège (à vérifier en production quand même que le compte avec lequel on déploie a assez de droits).

Mais ce n’est pas tout !

Lire la suite

[C# – ASP.NET] ProfileProvider – Ajouter un profil spécifique à son MemberShipProvider

Lorsque vous utilisez un MemberShipProvider, c’est pour sauvegarder des informations sur l’utilisateur, comme son nom d’utilisateur, le mot de passe de connexion, ou encore son adresse mail.

Cependant, il peut vous arriver de devoir rajouter des propriétés spécifiques à cet utilisateur. Nous verrons par exemple, comment rajouter le numéro de téléphone de l’utilisateur puis son intégration dans le formulaire d’inscription.

Au programme donc :

  • Génération d’un membership.
  • Configuration du Web.config.
  • Ajout d’un champ “Téléphone” dans un formulaire d’inscription.

Le MemberShipProvider n’est pas facile à maitriser, mais cet article vous permettra de mieux comprendre le principe.

Voici déjà une petite astuce pour générer un MemberShipProvider en ligne de commande :

En passant par cmd:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe

ou alors vous allez directement chercher ce fichier via l’explorateur :)

Lire la suite

[C# – ASP.NET] QueryString

Les QueryString sont très pratique en ASP, ils permettent de pouvoir utiliser des paramètres directement dans la barre d’adresse.

Vous avez surement déjà vu sur un site web : www.monsite.com/user.aspx?id=1 (n’essayer pas le lien, ça ne marchera pas :) )

Tous les paramètres après le ? sont des QueryString, et ils peuvent s’enchainer, on peut très bien faire : www.monsite.com/user.aspx?GroupId=2&user=1&Sexe=F .

La question est de savoir comment mettre en place ça :

Nous verrons :

  • Faire du QueryString par le designer.
  • Faire du QueryString sans designer.
  • Et aussi comment récupérer la valeur non pas en ASP mais coté serveur, en C#, ce qui pourrait peut être vous servir pour des validations ou encore dans vos différentes fonctions.

C’est avec des DataSource que vous pouvez faire une requête avec QueryString.

Lire la suite

[C# – ASP.NET] Bonne pratique : ConfigurationManager

Rendre son site web le plus configurable possible sans devoir recompiler une dll est un gain considérable lors du déploiement.

En effet, le site peut changer de site SharePoint, de compte smtp ou encore de  fichier xml par exemple, entre un serveur de dev / prep / prod ou pour tout autres raisons.

Pour cela, il existe un moyen très efficace, utiliser le fameux web.config (pas évident à maitriser) que l’on peut modifier à notre convenance et surtout sans devoir recompiler.

Il n’y a rien de plus simple pour utiliser des variables dans un web.config.

Il faut déjà les déclarer :

<appSettings>
  <add key="SPSiteURL" value="http://dev.sharepoint.com"/>
  <add key="XmlFile" value="~\Content\Xml\products.xml"/>
  <add key="SMTPServer" value="smtp.monsmtp.fr"/>
</appSettings>

Chaque valeur est référencé par une key récupérable n’importe où dans du code C#.

Lire la suite

[MS] Imagine Cup 2010 : French Bootcamp

 

La vidéo officielle du Bootcamp 2010

Revivez quelques instants du Bootcamp Imagine Cup 2010. Au menu : beaucoup de boulot, de belles rencontres et surtout beaucoup de fun !

 

 

L’équipe Emanon était bien sur présente cette année encore.

La suite le 5 mai à Paris pour notre finale française !

[SharePoint 2010] Création d’une bibliothèque de type document

 

J’ai mis pas mal de temps à trouver la bonne solution pour créer une bibliothèque de type document, donc je vais vous l’expliquer ici.

Dans un de mes posts précédent, je vous avais mis une fonction permettant de créer une bibliothèque si elle n’existe pas :

        if (!parentFolder.Exists)
        {
            SPFolder currentFolder = parentSite.RootFolder;

            foreach (string folder in parentFolderUrl.Split('/'))
            {
                currentFolder = currentFolder.SubFolders.Add(folder);
            }
        }

Cependant, vous l’avez peut être remarqué, elle n’apparait pas sur le menu de gauche dans “Documents”, ni dans la liste des librairies de documents, c’est normal, nous ne lui avons pas affecté de contentType (type de contenu).

On pense tout de suite à faire ce genre de choses :

  • SPFolder.Properties[“ContentTypeId”].
  • ou encore SPFolder.Items.Properties[“ContentTypeId”].

Mais ça ne fonctionne pas comme il faut.

J’ai essayé pas mal de propriétés avant de trouver la solution.

Il faut savoir qu’un SPFolder reste une liste à laquelle on affecte un type document, et pour les SPList, nous avons une propriété qui s’apelle : SPListTemplateType.DocumentLibrary.

Vous n’avez pas encore trouvé comment faire ?

Lire la suite

Suivre

Get every new post delivered to your Inbox.