michelc Blog

Just <strong>another</strong> WordPress.com weblog

Archive for mars 2006

Gestion des utilisateurs

leave a comment »

Modification de la fonction BindRoles() dans editUsers.ascx.cs pour ne plus proposer la sélection / déselection du rôle « Admins » lorsque l’utilisateur connecté n’a pas lui même le rôle « Admins » (sauf si l’utilisateur à modifier a déjà le rôle « Admins », auquel cas il est nécessaire de le faire apparaitre pour ne pas perdre l’information à la validation).

D’autre part, les rôles « All users » et « Anonymous » n’apparaissent plus dans le cas où l’on est en mode intranet, c’est à dire si la variable « logonRedirect » est définie à True dans le Web.config. Cela permet d’alléger la présentation étant donné qu’en mode intranet il est fréquent de définir des rôles « métiers » et qu’il devrait être exceptionnel de donner des droits à des utilisateurs non identifiés.

Written by michel

29 mars 2006 at 8:38

Publié dans QC

Application Error

leave a comment »

A faire avant la fin du mois : Capturing application-wide unhandled exceptions

Même pas fait 😦

Written by michel

27 mars 2006 at 11:38

Publié dans QC

Boite Flashfile et paramètres

leave a comment »

L’utilisation de la nouvelle méthode Common.MapPath() (après lui avoir apporté une dernière petite modification) permet dorénavant de définir une source dans laquelle il apparait des paramètres, sans que cela pose de problème par rapport au test d’existence du fichier.

Concrètement, cela permet par exemple de placer facilement un lecteur MP3 DewPlayer en indiquant une source de la façon suivante :

http://www.monsite.com/data/dewplayer.swf?mp3=http://www.monsite.com/data/music.mp3

Ce nouveau mode de fonctionnement est également applicable aux boites SvgFile et Image.

Written by michel

19 mars 2006 at 11:21

Publié dans QC

Correction de Google Sitemap

leave a comment »

Correction de deux problèmes qui empêchaient l’exploitation correcte du fichier sitemap.xml par Google.

  • enlevé le « / » de trop à la fin de l’url vers la page principale du site,
  • suppression de l’utilisation de UrlEncode dans l’adresse de toutes les autres pages.

Et modification de Common.TrackFileUpdate() pour employer la nouvelle méthode Common.MapPath() en lieu et place de Server.MapPath().

Written by michel

19 mars 2006 at 10:33

Publié dans QC

Boite Feedback

leave a comment »

Correction lors de l’initialisation de la variable {@screen.id} et ajout des deux variables {@user.ip} et {@user.dns} pour enregistrer l’adresse IP et le nom DNS de l’utilisateur connecté.

Written by michel

19 mars 2006 at 10:08

Publié dans QC

Un MapPath() plus souple

with 2 comments

La méthode MapPath() renvoie le chemin d’accès physique qui correspond à l’url qui lui est passé en argument.

Le problème est que Server.MapPath() n’accepte que les répertoires virtuels comme paramètre, qu’il s’agisse d’une url absolue (here/myfile.txt) ou relative (../yourdir/yourfile.txt) ou même d’une url commençant par un tilde (~/ourdir/ourfile.txt).

Mais elle provoque une erreur dès que son argument est une url complète (http://www.example.com/mydir/myfile.txt) ou correspond déjà à une adresse physique (D:\websites\example.com\mydir\myfile.txt).

Pour simplifier l’utilisation de la méthode MapPath() et éviter de tester ses arguments à chaque appel, ajout d’une méthode MapPath() améliorée à la classe Common.cs. :

///
/// Same as Server.MapPath but don't hang on physical path
///
public static string MapPath (string path) {
   string temp = path;
   try {
      temp = System.Web.HttpContext.Current.Server.MapPath(path);
   } catch (Exception ex) {
      try {
         System.Uri utemp = new System.Uri(path);
         if (utemp.IsFile == true) {
            temp = utemp.LocalPath;
         } else {
            temp = System.Web.HttpContext.Current.Server.MapPath(utemp.LocalPath);
         }
      } catch {
         throw ex;
      }
   }
   return (temp);
}

Màj du 19/03 : gère le cas où l’url passée en argument comprend des paramètres (here/myflash.swf?file=test.mp3).

public static string MapPath (string path) {
   string temp = path + "?";
   temp = temp.Split('?')[0];
   try {
      temp = Context.Server.MapPath(temp);
   } catch (Exception ex) {
      try {
         Uri utemp = new Uri(temp);
         if (utemp.IsFile == true) {
            temp = utemp.LocalPath;
         } else {
            temp = Context.Server.MapPath(utemp.LocalPath);
         }
      } catch {
         throw ex;
      }
   }
   return (temp);
}

Written by michel

14 mars 2006 at 7:51

Publié dans .net, QC

Fun Boxes

leave a comment »

Sur Listible, une liste des meilleurs trucs à placer sur son blogue.

Written by michel

9 mars 2006 at 9:21

Publié dans QC

TreeView et guillemets

leave a comment »

Mise à jour de la classe TreeView.cs qui génère le code javascript attendu par le script dTree et employé pour présenter les listes arborescentes comme celle des écrans ou celle des boites.

Il y avait un problème lorsque le nom de l’écran contenait un guillemet, ce qui faussait le code javascript généré.

tv.add(4, 2, "Croisière "Le Rhin Romantique"", "#", "GoTo(this, '/sejours/le-rhin-romantique.aspx');", "le-rhin-romantique");

Pour que tout rentre dans l’ordre, il suffit de préfixer les guillemets du javascript par un «\», mais étant donné que le javascript est généré depuis du C# il ne faut pas s’emmeler les pinceaux :

sbScript.Append("\"" + this.name.Replace("\"", "\\\"") + "\", ");

Grace à quoi il est enfin possible d’avoir des titres d’écrans avec des guillemets :

tv.add(4, 2, "Croisière \"Le Rhin Romantique\"", "#", "GoTo(this, '/sejours/le-rhin-romantique.aspx');", "le-rhin-romantique");

Written by michel

3 mars 2006 at 8:45

Publié dans QC

Throwing from XSLT

leave a comment »

Vu sur http://weblogs.asp.net/george_v_reilly/archive/2006/03/01/439402.aspx

I (George V. Reilly, not me) needed to add some declarative error checking to some XSLT templates recently. Specifically, I wanted to throw an error if my selects yielded an empty string, indicating that the input XML was wrong.

Unfortunately, there seems to be no easy way of doing this in XSLT, nor in XslTransform. The approved way is to validate against an XSD schema, but for various reasons, I didn’t want to go to the hassle of creating one.

I found a partial solution using xsl:message with the terminate= »yes » attribute. Under XslTransform.Transform() the following code throws an exception if the XPath expression is empty.

<xsl:if test="not(/some/xpath/expression)">
   <xsl:message terminate="yes">Missing expression</xsl:message>
</xsl:if>
<xsl:value-of select="/some/xpath/expression" />

It doesn’t do anything, however, in XMLSpy.

The downside, of course, is that you have to maintain the expression in two places, and the template becomes littered with those annoying tests.

(Publié à l’origine sur http://www.bigbold.com/snippets/posts/show/1613)

Written by michel

2 mars 2006 at 7:27

Publié dans Code Snippets, xml