dimanche 9 mai 2010

Erreur dans un UserControl, comment gérer cela ?

Voilà une problématique à laquelle je me suis heurté plusieurs fois sans vraiment trouver de solution. Cet après-midi il me fallait absolument trouver une solution car je souhaite mettre en place une classe dont tous mes modules hériteraient et où les erreurs seraient gérées. Cela simplifierait grandement la gestion des erreurs dans l'absolue plus besoin de créer des blocs try-catch, toutes les erreurs seraient attrapées au vol par ma classe parente.

Après quelques minutes de recherche, je tombe sur le blog de Cyril Durand (que je ne connais pas personnellement) qui est très actif sur les forums de codes-sources. Il présente une solution intéressante qui dans mon cas devrait parfaitement convenir (l'avenir le dira en tout cas). Cliquez ici pour accéder au post de son blog.

Comment savoir si une classe implémente une interface

Alors quel est la rapport avec DNN ici ? Si ce n'est dotnet, il n'y en a pas vraiment.

J'ai voulu le référencer ici car ce n'est pas la première fois que je me pose la question, bien entendu on trouve facilement des ressources sur le net sur le sujet mais il faut aller les chercher et elles sont principalement anglophones, alors pourquoi pas le mettre ici sur un blog français (au moins je saurais où le trouver la prochaine fois) ?!

La syntaxe n'est pas vraiment naturelle, voilà ce que cela donne en vb.net (je vous laisse faire la conversion en c#) :

Dim oParent As Object
'oParent doit bien sur être valorisé, dans cet exemple ce n'est pas le cas
'Vérifie si l'objet oParent supporte l'interface IParent
If oParent.GetType.GetInterface(GetType(IParent).ToString) IsNot Nothing Then
     'oParent implémente l'interface IParent
End If

Dans le cas où, dans l'intellisense, vous n'avez pas accès à GetInterface, cliquez sur l'onglet "Tout".

vendredi 7 mai 2010

Fichier manifest - component "Cleanup" - suppression d'un dossier

Voici donc mon premier post purement technique, le sujet : les fichiers manifest et tout particulièrement les components de type "Cleanup".

Le fichier manifest d'un module permet de définir les éléments à mettre en place (fichiers, requêtes SQL, ...) lors de l'installation d'un module mais il permet aussi de supprimer des fichiers installés par des versions antérieurs de ce même module.

Deux syntaxes sont possibles pour ce type de component :
  • une syntaxe où les fichiers à supprimer sont définis directement dans le fichier manifest,
  • une syntaxe où les fichiers à supprimer sont définis dans un fichier texte accompagnant le module.
Je me pencherais plus particulièrement sur cette seconde syntaxe. Pour mon cas précis j'avais besoin de supprimer des dossiers et leur contenu, j'avais bien vu à droite à gauche sur le web que cela était possible mais sans vraiment savoir comment.

Je me suis finalement décidé à aller directement à la source pour trouver la réponse à mes questions, rien ne vaut un petit tour dans le code.

J'ai trouvé ma réponse dans la fonction DeleteFiles de la classe FileSystemUtils, cette dernière est appellée par la fonction ProcessCleanFile de la classe CleanupInstaller. Pour pouvoir supprimer le contenu du dossier il suffit de définir dans notre fichier texte utilisé par le cleanup la syntaxe suivante :

Dossier1\Dossier2\

Vous noterez bien le "\" en fin de ligne c'est ainsi que la fonction de nettoyage distingue un fichier d'un répertoire, et lorsqu'un répertoire est défini c'est tout son contenu qui est supprimé.

Version de DNN utilisée : 5.4.1

Création du blog

Pourquoi créer ce blog ? Je développe sous DNN depuis quelques années maintenant (depuis la version 3), j'ai donc suivi les évolutions de ce superbe outils de CMS. J'accumule les connaissances mais j'ai un regret : le manque de ressources francophone.
Autre raison qui m'a motivée à créer ce blog : il s'agit aussi d'une démarche personnelle. Je souhaite regrouper dans un seul et même endroits tous les points un peu tordus que j'ai pu aborder autour de DNN. Cela me permettra de les retrouver plus facilement, alors si cela peut aussi aider d'autres personnes pourquoi se priver ?!