Les slides de ma session « Power Pages : no/low code .. really ? »

J'ai eu l'occasion de présenter la session "Power Pages : low code .. really ?" le 21 Juin 2022 à Aix En Provence lors de l'aMS Aix / Marseille. Cet évènement, composé d'une bonne base de MVPs tous aussi sympa les uns que les autres (c'est aussi un critère de sélection non ? 🙄) était sous le signe de la convivialité et de partage. Alors dans cette tradition, voici mes slides (c'est une première version ... tout comme Power Pages ...) :

https://1drv.ms/p/s!ApqY-zke0ZFbgo9luwgiOxAwBSZYOQ?e=JBaweV

PnPJS 3.2.0 est sortie et liste des projets PnP recommandés

Ce n'est pas tout frais, mais ça valait le coup de s'arrêter quelques minutes dessus. Comme tout développeur SharePoint, la librairie PnPJS est l'une des pierres angiulaires de nos projets => pnp/pnpjs: Fluent JavaScript API for SharePoint and Microsoft Graph REST APIs (github.com)

C'est avec plaisir que la version 3.2.0 est sortie corrigeant quelques petites coquilles que j'avais pu voir lors de mes derniers projets, et apporte aussi quelques nouveautés qui nous faciliteront la vie pour la suite, je vous laisse consulter le CHANGELOG pour voir de quoi il en retourne spécifiquement.

Je vous partage aussi quelques uns des projets de PnP que je suis activement :

25 ans pour le meilleur IDE du moment : Visual Studio 🎂🍰

Ce mois de Mars 2022 marque les 25 ans d'un des meilleurs IDE du moment (et des dernières années) pour les projets .NET et bien d'autres : (sans suspens) Visual Studio !

Revivez l'expérience et l'histoire de l'évolution de cet IDE au travers d'un site dédié pour cet occasion ➡️Anniversaire Visual Studio 25e (microsoft.com)

Depuis, devenu une famille de produit, Visual Studio a donné lieu à une version plus légère et orientée éditeur de code multi-plateforme/multil-langage avec l'excellent Visual Studio Code, l'éditeur de code du moment tout lange de développement confondu comme le révèle le sondage stackoverflow de 2021 ➡️🤩https://insights.stackoverflow.com/survey/2021#section-most-popular-technologies-integrated-development-environment

Pour rappel, Visual Studio est disponible gratuitement dans sa version Community téléchargeable ici : Visual Studio 2022 Community Edition – Télécharger la dernière version gratuite (microsoft.com)

Bon anniversaire Visual Studio !

SharePoint maintenance mode to track webpart issue

As a SharePoint consultant, I often bump into issues with pages in SharePoint OnPrems and Online. To resolve these cases, we - SP consultants - need to deploy our super magic powers (what our clients think we have) 🙂

Most of the page, an error in a page is due to a bug in a webpart raising an exception, sometimes it's a delegate control but this is another story for another blog post. Here is one magic trick to debug the pages and identify which webpart is running wrong.

SharePoint OnPrems / Classic

Starting from SP 2010, and for next version of OnPrems installation, just add ?contents=1 at the end of the page URL. This will open the page in maintenance mode and display all webparts in this page.

Modern SharePoint

Like a lots of developers I tried the old way and failed ... thanks to this Microsoft support article, it gives you the right URL suffix to add to your URLs to enter the web part maintenance mode

In the address line of your browser, append ?maintenancemode=true to the end of the URL for the page. Checkout the Environment property in the mainten

You can find more documentation on these links ➡️ Maintenance mode for client-side web parts | Microsoft Docs and ➡️ Open and use the web part maintenance page (microsoft.com)

Bonus : how to disable SPFx web parts ans extensions

Ayt the end of this nice Microsoft article there is a golden tips ➡️ "If you need to troubleshoot a SharePoint page to see if there is a SharePoint Framework extension or web part causing issues you can append ?disable3PCode=1 to the URL to disable loading of SPFx components" that helped me a lot recently, so I share it to you.

Master piece : all useful SharePoint URLs

You can find every useful SharePoint URLs to save your life every day with SharePoint developement :Useful SharePoint URLs – SharePoint Stuff

Windows 11 : mes raccourcis préférés avec la touche Windows

Exploiter toute la puissance d'un système d'exploitation, c'est avant tout de savoir se servir des raccourcis de celui-ci, et Windows en est particulièrement doté !

Je vous livre quelques uns de mes raccourcis avec la touche Win(dows), mais sachez que Microsoft a doté chacune des lettres de notre alphabet avec des raccourcis et même des combinaisons avec Ctrl & co ... c'est pour dire la culture des raccourcis de cet OS !

Win + D : Afficher er masquer le bureau

Win + E : Ouvrir l'explorateur de fichiers

Win + I : Ouvrir les Paramètres Windows

Win + M : Réduire toutes les fenêtres

Win + P : Sélection du mode de présentation

Win + . OU Win + ;➡️ vous ouvre le panneau des emoticons + GIF + le raccourci indispensable pour les messageries😍

Win + flèches : positionner la fenêtre en cours sur l'écran ou les écrans

Win + espace : changer de langue du clavier

Pour les autres raccourcis, vous pourrez trouver ceux-ci et bien plus encore dans la Docs de Microsoft ➡️ Raccourcis clavier dans Windows (microsoft.com)

[20th anniversary of .NET] Best of C# : null operators

In this series, I'd like to share with you my best experiences with .NET / C# and the best evolutions the .NET team brings us over the time.

Today I'd like to talk about null operators 🙂 C# provides 3 operatrs to make it easier to with with nulls :

  1. Null conditional operator
  2. Null coalescing operator
  3. Null coalescing assignment (new in C# 8)

You can find more details about these operators in this great book => Amazon.fr - C# 10 in a Nutshell: The Definitive Reference - Albahari, Joseph - Livres

Null-conditional operator

The ?. operator is also called the Elvis operator and as originally introduced in C# 6. It allows you to call methods and access members like the . operator except that if the left operand is null, the expression is evaluate to null without throwing the killer exception 'NullReferenceException'.

string s = null;
string sUpper = sb?.ToUpper(); // sUpper is null

The only condition is that the final expression/assignment is capable of accepting a null (exit all value type) :

string s = null;
int lengthS = s?.Length; // Won't compile

Then use a Nullable :

string s = null;
int? lengthS = s?.Length; // Ok

Null-coalescing operator

The very useful ?? operator tells to return the value of the left operand if it's not null, else return the specify value (right operand - example : default value)

string s = null;
string sDefault = s ?? "My default value"; // sDefault is "My default value"

Another good use of this operator is to check an assignment and rise an exception if null (example in ASP.NET controller or anywhere else) :

_companyRepository = companyRepository ?? throw new ArgumentNullException(nameof(companyRepository));

Null-coalescing assignment (C# 8)

The ??= operator assigns a variable only if it's not null. So it's a sugar syntax to replace this :

if (s != null) s = "Hello world";

with this :

s ??= "Hello world";

Add data attributes in Razor view with HTML helper method

With HTML 5 and JS frameworks heavily using data attributes within HTML tags, Razor views could cause you a headache without this little tip for attributes.

For example Data attributes have a syntax like "data-*". If you add the hyphen within the name of an attribute in your anonymous class, Razor engine will interprets it simply as a minus sign ... and won't compile !

To add a Data attribute (or any other attribute with a hyphen within the name) within an HTML helper, you should replace the hyphen with an underscore. Hence, Razor engine will understand this and converts it to a hyphen in the HTML output.

@Html.DropDownList("Country", ViewData["Countries"] as SelectList, new { @class = "selectpicker", data_style = "btn-form-control" })

The HTML output will be:

<select id=”Country” name=”Country” class="selectpicker" data-style=”btn-form-control” />

O365 Echange ‘Your organization does not allow external forwarding’ issue

If you are receiving the following error in your email :

Delivery has failed to these recipients or groups:
Your message wasn’t delivered because the recipient’s email provider rejected it.

And then when you go into the message content you read this error:

Remote Server returned '550 5.7.520 Access denied, Your organization does not allow external forwarding. Please contact your administrator for further assistance. AS(7555)'

You might be experiencing the new security change Microsoft implemented on late 2020, which by default blocks forwarding to external recipients on a mailbox.

To resolve this issue, go to https://protection.office.com and go under Threat Management > Policy > Anti-Spam Policy > Anti-spam outbound policy > Edit Policy :

The future forward messages to any mailbox will now be process successfully by O365. Cuation : the settings can take several minutes to take effect.

Migrer vos applications vers .NET 5 avec l’assistant de migration (partie 1)

Même si toutes ne savent pas comment, les sociétés qui développent des logiciels souhaitent suivre le rythme effréné des montées de version, que ce soit des OS, des frameworks ou des bibliothèques. L’objectif est de ne pas être larguer, de pouvoir parfois gagner en performances, résoudre quelques problèmes de sécurité du framework ou encore permettre d’utiliser des technologies plus modernes (HTTP 2, etc) lors de ces passages.

Pour que les équipes de développement, l’objectif sera surtout de suivre les évolutions, d’identifier les breaking change, de refactoriser le code et également de garder la motivation de maintenir, ce qui deviendra quoiqu’on en veuille : ‘une vieille application à maintenir’.

Pour la société, l’objectif sera surtout de minimiser le coût de cette montée de version, qui si elle n’apporte pas de valeur ajoutée pour les utilisateurs (hormis de meilleurs performances et une sécurité parfois renforcé, concernant le framework en lui-même aka cela n’améliorera pas votre code dans ce domaine par magie) permet d’avoir sur le marché des ressources plus à même d’intervenir sur des technologies récentes qu’anciennes.

MAIS … la stratégie est souvent de faire un POC de mise à niveau d’un projet ‘pas trop gros’, et de se dire ‘voici une application A’, on essaye, et si ça ne coûte pas trop cher on fera l’application B, C, etc. Le biais dans lequel l’entreprise risque de tomber est qu’elle pensera que calculer le temps d’upgrade d’un premier projet, sur lequel l’équipe essuie tous les plâtres de la migration, pourra servir de référence de charges/coûts pour les suivantes. C’est du bon sens … mais c’est ce qui se passe tous les jours, dans d’autres domaines dans les sociétés …

En résumé, la migration d’un projet vers .NET Core 5 prendra beaucoup du temps et la décision sera de ne pas migrer les projets amenant une montagne de ‘vieilles applications à maintenir’ à être maintenu par des personnes dont la motivations égalera celle d’un paresseux au repos. Mais tada … Microsoft à créer l’upgrade assistant pour vous afin de vous aider au maximum à pouvoir évaluer la migration et vous assister dans cette tâche, surtout sur les parties simples et fastidieuses d’une migration de code. Mais attention, cet outil est votre assistant et le magicien c’est vous, pas lui !

Installation

L’assistant de migration est un outil dotnet (dotnet tool) qu’il suffit d’installer de cette manière :

image

Troubleshooting

Erreur “Impossible de charger l’index de service pour la source “/ “Unable to load the service index for source”

Cette erreur arrive lorsque vous avez déclaré un source Nuget dans votre configuration Nuget dont l’outil n’arrive pas à accéder (mauvaise URL, credentials outdated, etc).

image

Dans ce cas, rien de plus simple vous avez deux options :

1. Utilisez l’argument --ignore-failed-sources dans la ligne de commande

2. Supprimer la source dans votre fichier de configuration Nuget qui se trouve dans :

image

Windows Terminal : modifier le shell par défaut

A chaque fois que j’ouvre Windows Terminal, cela ouvre PowerShell pour Windows, ce qui ne correspond pas à mes habitudes d’utilisation (PowerShell Core ou Bash Linux/WSL Linux).

POur se faire, allez dans Paramètres :

image

Cela ouvre le fichier de configuration de Windows Terminal dans Code (ou Blocnote en fonction de votre configuration d’ouverture par défaut des fichiers) :

image

La ligne importante est le defaultProfile qui détermine le profile par défaut qui s’ouvre lorsque vous lancez Windows Terminal.

Si vous regardez un peu plus bas, vous trouverez la liste des profils dans la sections profiles/list.

image

Copiez le GUID du profile qui vous intéresse par défaut et copier le dans la valeur de defaultProfile.

Et tada, la fois d’après vous ouvrirez votre shell préféré au lancement de Windows Terminal.

image