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

#Teams : mettre un fond personnalisé pour vos réunions et le personnaliser :)

Déjà en 2018, la fonctionnalité permettant de flouter l’arrière plan de nos vidéos était une belle innovation en soi. Depuis quelques jours, ce qui égaye notre confinement, Microsoft a délivré une nouvelle fonctionnalité : les images de fond personnalisé ! (Lien vers la roadmap Microsoft 365)

Maintenant vous avez la possibilité de pouvoir choisir plusieurs options de fond dans le client Teams :

  • Aucun
  • Flou
  • Image de fond personnalisé (galerie d’images proposée par Microsoft)

A ce stade, il n’existe aucune option pour administrer cette fonctionnalité mais Microsoft travaille dessus. En conséquence, il n’existe aucune option permettant d’ajouter vos propres images depuis le client Teams pour le moment. A voir si cela sera administrable au niveau de l’organisation ou via les stratégies de réunion. Cette fonctionnalité devrait arriver en Mai 2020 selon la roadmap.

En attendant on contourne problème … ou comment mettre ses propres fonds !

Vous pouvez contourner ce manque avec la procédure suivante :

  1. Naviguer dans le répertoire %APPDATA%\Microsoft\Teams\Backgrounds\Uploads
  2. Ajouter une image PNG (résolution 1920 x 1280) dans ce répertoire :

3. Et voilà, votre image apparaît en fin de liste des images de fond dans Teams :

Enjoy !

#Teams : utilisez la barre de commandes / recherche pour vous faciliter la vie ! (1/2)

Comme la plupart des produits et services Office 365, Teams propose une fonctionnalité de recherche et de commandes, souvent peu connue et mal exploitée par la majorité des utilisateurs. Pourtant la barre de recherche ou barre de commandes a été conçue avec quatre fonctions clés en tête : le multi-tâche, la prise d’action rapide, la requête de données et être extensible aux autres applications (à l’instar de Visual Studio Code et sa palette de commandes).

En une seule barre, Teams vous propose 3 axes d’actions :

  • La recherche de contenu (Chat, Documents (nom et contenu), Equipes, Canaux, Personne)
  • Personnes / Applications
  • Les commandes

Je finirai ce post en vous parlant des raccourcis dont regorge Teams.

La recherche de contenu

La recherche de contenu fournit un moyen efficace de rechercher des informations (messages, fichier, personnes) sur Microsoft Teams dans Exchange (messages), SharePoint Online (fichiers) et OneDrive Entreprise. Vous pouvez trouver la documentation technique ici pour plus d’informations.

Pour utiliser la recherche de contenu, saisissez un terme ou un ensemble de termes dans la barre supérieure de Teams et appuyez sur Entrée :

Les résultats de recherche s’affichent à gauche dans un panneau composé de 3 onglets : Messages, Personnes et Fichiers, qui vous permettent de retrouver les contenus par rapport à leur type :

Pour retrouver votre aiguille dans la meule d’informations que Teams et Office 365 est capable de stocker, Teams propose une interface de filtrage plutôt pas mal pensée :

Note importante : La recherche de contenu dans les messages et les fichiers de canaux privés ne fonctionne pas de la même manière que dans les canaux standard. Pour en savoir plus, voir recherche de contenu de canaux privés.

#Teams : Ajouter du stockage Cloud (Dropbox, Box, Google Drive, SharePoint) à votre canal Teams

Nous travaillons tous avec plusieurs services en ligne de stockage, d’éditeurs parfois différents de Microsoft, soit par héritage, soit parce que vous venez tout juste de déployer Office 365.

Une des possibilités plutôt très intéressantes de Microsoft Teams est que vous n’êtes pas dépendant de SharePoint Online pour le stockage de vos fichiers et que vous pouvez ajouter la consultation des fichiers hébergés dans les services SharePoint, Dropbox, Box, Google Drive et Citrix ShareFile (seuls services actuellement supportés).

Update 13/05/2020 : le support de Egnyte est annoncée par Microsoft avec une release courant Mai 2020.

1. Pour ajouter votre répertoires de fichiers externes, naviguez dans l’onglet Fichiers de votre canal, puis cliquez sur + Ajouter du stockage cloud :

2. Une fenêtre ‘ouvre pour que vous puissiez sélectionner le service que vous souhaitez ajouter (SharePoint, Dropbox, Box, Google Drive et Citrix ShareFile) :

3. Pour cet article, je vais utiliser Dropbox et donc cliquez sur Dropbox.

4. Une fenêtre de connexion Dropbox s’ouvre pour vous demander d’autoriser le service Microsoft teams à accéder aux informations de vos dossiers Dropbox. Entrez les informations de votre compte Dropbox pour autoriser Teams à vous lister vos répertoires Dropbox :

Et voilà !

Administration du partage de stockage des fichiers cloud

Pour administrer quels sont les services qui peuvent être partager ou non dans l’interface Teams, connnectez vous à l’administration de Teams puis Paramètres à l’échelle de l’organisation > Paramètres teams > Fichiers :