{« Message »: »An error has occurred. »} en déployant votre site web Windows Azure

Je travaillais ces jours-ci sur le déploiement de quelques sites développés sur MVC4 API Web, en utilisant Entity Framework avec les types spatiaux (types Geometry et Geopraphy).

Tout allait bien sur ma machine de dev, mais cela ne fonctionnait as en déployant ma solution sur Azure.

La plupart de mes appels WebAPIs me donnaient comme erreur: {« message »: « An error has occurred. »}

Cela provient d’une assembly manquante dans les binaires qui sont déployés avec votre site.

Il suffit d’ouvrir votre gestionnaire de packages Nuget, de chercher le package  »Microsoft.SqlServer.Types » et de l’ajouter à votre projet.

Tada :)

Faites que le titre de vos webparts soit localisable

Dans de nombreux projets traitant de localisation, j’ai du localiser le contenu de WebParts, de User Controls ou d’Application Pages, et SharePoint 2010 au travers des APIs de ASP.NET le permet assez bien.

Mais pour localiser le titre d’une WebPart, là… Il n’y a pas vraiment de solution toute faite.

J’ai donc pris mes petites mains et j’ai écrit une joli classe abstraite, qui flanquée de quelques classes helper me permet de faire ceci; il me suffit tout simplement d’hériter de ma nouvelle classe LocalizableWebPart et le tour est joué !

Une fois la webpart héritée, il suffit de changer l’héritagede ses WebParts customs de WebPart en LocalizableWebPart.

Pour exemple, le code de cette classe:

public abstract class LocalizableTitleWebPart : WebPart
{
    [WebPartStorage(Storage = Storage.Shared)]
    public string LocalizedTitle { get; set; }

    private LangageContainer langContainer = null;

    protected string GetLocalizedProperty(LangageContainer container, string content)
    {
        if (container != null)
        {
            return container.GetOrInsertLanguage().EncodedLanguageContent;
        }
        else
        {
            container = LocalizationHelper.GetLanguagesContent(content);
            return container.GetOrInsertLanguage().EncodedLanguageContent;
        }
    }

    protected string SetLocalizedProperty(LangageContainer container, string content, string value)
    {
        container = LocalizationHelper.GetLanguagesContent(content);
        var lang = container.GetOrInsertLanguage();

        if (this.Page != null && this.Page.IsPostBack)
        {
            container.UpdateLanguage(lang.LanguageCode, value);
            return LangageContainer.Serialize(container);
        }
        return content;
    }

    public override string Title
    {
        get
        {
            return GetLocalizedProperty(langContainer, this.LocalizedTitle);
        }
        set
        {
            this.LocalizedTitle = SetLocalizedProperty(langContainer, this.LocalizedTitle, value);
        }
    }
}

Ce que vous pouvez voir dans le code au dessus:

  • une propriété WebPart automatiquement persistée qui stocke le contenu des langues du titre en XML,
  • deux méthodes pour récupérer et sauvegarder la valeur de la langue courante.

Vous pouvez trouver le code de cette classe avec un exemple de WebPart dans le repo Git suivant:

https://github.com/JaYmZ666/localizableTitleWebPart

Happy coding!

Rejoignez-nous aux Techdays 2013 à Lausanne !

Cher visiteur,

Cette année, les Microsoft Techdays se tiendront Conrès Beaulieu à Lausanne, du 6 au 7th novembre.

Yves Peneveyre et moi même vous présenteront une session autour de la gestion de contenu web avec SharePoint 2013.

Je serai présent sur le stand de CTP pour ceux qui souhaiteraient aborder plus longuement les sujets de notre sessions ou encore tout ce qui touche au Cloud Computing :)

Au plaisir de vous rencontrer là-bas !

MVP sur Windows Azure MVP pour une année de plus!

J’ai le plaisir de partager l’annonce de ma nouvelle année en tant que MVP sur Windows Azure.

Je suis très heureux de pouvoir partager mon enthousiasme et mes connaissance sur cette plate-forme pleine de potentiel et d’avenir, avec une équipe aussi compétente et efficace.

J’espère pouvoir offrir toujours plus dans cet optique de partage que j’affectionne particulièrement dans les mois qui viennent :)

Merci!

SharePoint 2010 et inconsistences de recherche : Phonetic Search

J’a eu un problème très intéressant ave la recherche de SharePoint 2010, qui peut être assez difficile à cerner.

J’ai donc un crawl content source pointant sur mon MySiteHost, tous les profils utilisateurs bien indexés.

Pour un étrange raison, J’avis certaines fois des résultats différents en entrant partiellement un nom ou prénom, ou parfois même pas de résultat du tout… Continue reading

Video de mon interview « Start Something » sur Windows Azure

Je me suis rendu à Paris pour enregistrer une vidéo avec Microsoft dans le cadre de la campagne « Start Something » avec Windows Azure.

Dans cette vidéo, je donne mon point de vue sur les intérêts de cette plateforme pour accélérer et simplifier de développement d’applications dans le nuage, avec une simplicité de Scaling impressionnante.

La vidéo se trouve ici.

Custom Timer Job pour SharePoint 2010 avec un scope Farm : « Cannot change a recurring schedule to a one-time schedule (and vice versa) for a job definition »

Durant un exercice de de style pour coder un Timer Job activable au scope « Farm », j’ai écrit ce code asez standard pour aciver mon Timer Job:

public override void FeatureActivated(SPFeatureReceiverProperties properties) 
{
    foreach (var s in SPFarm.Local.Services)
    {
        if (s.DisplayName.Contains("WSS_Administration"))
        {
            DeleteJob(s.JobDefinitions);
            CustomTimerJob job1 = new CustomTimerJob(s);

            SPMinuteSchedule schedule = new SPMinuteSchedule();
            schedule.BeginSecond = 0;
            schedule.EndSecond = 59;
            schedule.Interval = 1;
            s.JobDefinitions.Add(job1);
            job1.Schedule = schedule;
            job1.Update(true);
        }
    }
}

Lors du déploiement, j’obtenai cette erreur :

« Cannot change a recurring schedule to a one-time schedule (and vice versa) for a job definition. »

Continue reading