RSS 2.0 Atom 1.0 CDF  
JASoft.org - October, 2005
El blog de José Manuel Alarcón Aguín. Programación .NET y mucho más...
 

En mi anterior post (Expresiones $ en ASP.NET 2.0) explicaba cómo utilizar las expresiones estándar de tipo $ en el HTML de las páginas ASP.NET 2.0. Ahora vamos a aprender a crear nuestras propias expresiones $ personales.

TEORÍA:
Para crear nuestra propia expresión $ debemos definir una nueva clase que herede de System.Web.Compilation.ExpressionBuilder. Lo mejor que podemos hacer es crearla dentro de App_Code de forma que se compilará automáticamente cuando se ejecute la aplicación ASP.NET. Al heredar de ExpressionBuilder nuestra clase debe sobreescribir el método GetCodeExpression de esta clase base. Este método se llama desde el compilador dinámico de ASP.NET al compilar la página que contiene nuestra etiqueta $ para que le devuelva la expresión que debe visualizar o asignar. De los parámetros de este método el más interesante es Entry, que es del tipo BoundPropertyEntry y que tiene una propiedad llamada Expression que nos da la expresión que se pretende evaluar. Una vez creada esta clase hay que registrar en web.config para poder usarla en nuestro sitio Web.

PRÁCTICA:
Bueno, después de esta breve teoría vamos a ver cómo se hace en la práctica. Vamos a crear una etiqueta $ que nos sirva para visualizar la fecha actual de diversas maneras. De este modo para que en una página nuestra aparezca una fecha o una hora podremos escribir alguna de estas expresiones:

<%$ Tiempo:FechaCorta %>
<%$ Tiempo:FechaLarga %>
<%$ Tiempo:Hora %>

Se trata de un ejemplo sencillo pero nos servirá muy bien para aprender a construir otras expresiones mucho más complejas pues se hace dela misma manera.

1.- Construir la clase heredada de ExpressionBuilder.

Dentro de la carpeta App_Code creamos un archivo ExtensionHoraria.cs que sobreescribe el método GetCodeExpression así:

    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
    {
        string comando = entry.Expression;
        string res = "";
        switch(comando.ToLower())
        {
            case "fechacorta":
                res = DateTime.Now.ToString("d");
                break;
            case "fechalarga":
                res = DateTime.Now.ToString("D");
                break;
            case "hora":
                res = DateTime.Now.ToString("t");
                break;
        }
        return new CodePrimitiveExpression(res);
    }

Nótese que lo que se debe devolver es un objeto de tipo CodePrimitiveExpression definido dentro del espacio de nombres System.CodeDom. Al constructor de esta clase se le pasa la cadena con el resultado a devolver.

2.- Registrar la expresión dentro del sistema de compilación de ASP.NET.

Para ello basta con añadir un nuevo nodo dentro de <compilation/> en web.config, que en este caso quedaría así:

<compilation debug="true">
    <expressionBuilders>
        <add expressionPrefix="Tiempo" type="ExtensionHoraria"/>
    </expressionBuilders>
</compilation>

Lo primero destacado en negrita define el prefijo que se usará en la expresión $, es decir, lo que va justo delante de los dos puntos en ésta. Lo segundo define el nombre del tipo que implementa la expresión, o sea, el nombre de la clase que hemos definido en el paso anterior.

Ya está. Si ahora colocamos un control en el formulario poemos asignar a cualquiera de sus propiedades una de las tres expresiones $ que hemos definido con este código.

En este archivo comprimido (2,73 KB) he incluído el ejemplo concreto creado con Visual Web Developer 2005 Express Edition, para que lopuedas probar y ver con calma en tu equipo.

Las posibilidades de este tipo de expresiones son enormes y nos pueden ahorrar cantidad de código para tareas comunes. Cada uno seguro que le encuentra sus propias aplicaciones. Si alguien hace chulo con esto, por favor, que me lo mande y, si quiere, lo compartimos aquí.

Por: José Manuel Alarcon | Saturday, October 29, 2005 11:44:00 AM (Hora de verano romance, UTC+02:00)  #    Comments [0] - Trackback
Tags: ASP.NET | Programación


Sígueme en:

:: Twitter JM Alarcón: tecnología, marketing, este blog y frikadas varias
:: Twitter campusMVP: los mejores recursos sobre tecnología Microsoft: trucos, artículos, noticias, vídeos...
:: Facebook campusMVP: los mismos mejores recursos pero en directamente en Facebook.
:: Boletín campusMVP Nuestra publicación electrónica, una vez al mes en tu buzón de correo.
 
Banner

Una de las nuevas características de ASP.NET 2.0 destinadas a reducir la cantidad de código de nuestros desarrollos son las expresiones de tipo $. Éstas nos permiten obtener directamente ciertos valores y funcionalidades desde dentro de la definición de la página, sin necesidad de escribir códigopara ello.

Su sintaxis es análogo a la siguiente:

<%$ Expresion:Accion %>

El uso típico de este tipo de expresiones es el de obtener directamente valores desde el archivo de configuración (web.config) y asignarlas directamente a propiedades de controles de la interfaz de usuario.

Por ejemplo:

<asp:Label Runat="server"
  Text="<%$ AppSettings:NombreEmpresa %>"

muestra el valor asignado al parámetro "NombreEmpresa" dentro de la configuración de la aplicación en web.config (<AppSettings/>).

También se pueden obtener valores de cadenas de conexión (ej: <%$ ConnectionStrings:MiConexion %>, ya que ahora hay una sección específica para ellas) o cosas que no tienen nada que ver con la configuración, como por ejemplo recursos dentro de archivos de recursos (ej: <%$ Resources:MisRecursos, Recurso1 %>).

Este tipo de expresiones tienen muchas posibilidades en todo lo que respecta a la interfaz de usuario y, sobre todo, nos pueden ahorran bastante escritura de código.

Lo que no todo el mundo sabe es que, además, es posible definir nuestras propias expresiones $. Se trata de una técnica llena de posibilidades. En el próximo "post" (mañana o pasado) mostraré cómo crear nuestras propias expresiones $ y colgaré un ejemplo con el código completo, así que ¡sigue atento a este blog!


Nota: Curiosamente la API que usamos en Krasis para aplicaciones con ASP 3.0 clásico tiene un tipo de expresión definida por nosotros que es exactamente igual a esta deASP.NET 2.0, sólo que sirve para más cosas y aemás nosotros llevamos usándola muchos años ;-)
Por: José Manuel Alarcon | Thursday, October 27, 2005 4:54:00 PM (Hora de verano romance, UTC+02:00)  #    Comments [0] - Trackback
Tags: ASP.NET | Programación


Sígueme en:

:: Twitter JM Alarcón: tecnología, marketing, este blog y frikadas varias
:: Twitter campusMVP: los mejores recursos sobre tecnología Microsoft: trucos, artículos, noticias, vídeos...
:: Facebook campusMVP: los mismos mejores recursos pero en directamente en Facebook.
:: Boletín campusMVP Nuestra publicación electrónica, una vez al mes en tu buzón de correo.
 
Banner

Si sigues mi blog habitualmente puede que recuerdes un par de "post" que hice hace unos meses en los que explicaba la manera de habilitar los estilos visuales de Windows XP en las aplicaciones de Windows para conseguir un aspecto más moderno.

La activación pasa ineludiblemente por el uso del método estático EnableVisualStyles de la clase Application combinado con la propiedad FlatStyle de los distintos controles.

Aunque esto funciona de maravilla en Windows XP hay un problema cuando la misma apliación se intenta ejecutar en sistemas operativos más antiguos en los que no esté presente la biblioteca responsable del efecto (uxtheme.dll). En .NET 2.0 han tenido en cuenta esta particularidad y la aplicación se degrada de maravilla, pero en .NET 1.x las aplicaciones rompen, lo cual no es muy recomendable ¿verdad?.

Bueno, la solución es bastante sencilla ya que basta con comprobar en que versión de Windows se ejecuta la aplicación antes de establecer la propiedad EnableVisualStyles, así:

Código C#:

if(Environment.OSVersion.Platform == PlatformID.Win32NT &&
   Environment.OSVersion.Version.Major >= 5)
  {
   if (OSFeature.Feature.IsPresent(OSFeature.Themes))
   {
    Application.EnableVisualStyles()
   }
  }

Código VB.NET:

  If ((Environment.OSVersion.Platform = PlatformID.Win32NT) _
    AndAlso (Environment.OSVersion.Version.Major >= 5)) Then
      If OSFeature.Feature.IsPresent(OSFeature.Themes) Then
        Application.EnableVisualStyles()
      End If
  End If

Con esto solucionamos el problema de un posible error de inicio de la aplicación.

Por: José Manuel Alarcón Aguín | Tuesday, October 25, 2005 9:49:00 AM (Hora de verano romance, UTC+02:00)  #    Comments [0] - Trackback
Tags: Programación


Sígueme en:

:: Twitter JM Alarcón: tecnología, marketing, este blog y frikadas varias
:: Twitter campusMVP: los mejores recursos sobre tecnología Microsoft: trucos, artículos, noticias, vídeos...
:: Facebook campusMVP: los mismos mejores recursos pero en directamente en Facebook.
:: Boletín campusMVP Nuestra publicación electrónica, una vez al mes en tu buzón de correo.
 
Banner

Una de las cosas nuevas que ha incorporado el entorno de Visual Studio es la posibilidad de refactorizar nuestro código para hacerlo más legible, mejorar su encapsulación y reutilización, etc...

El concepto es muy sencillo: se trata de escribir de nuevo un mismo código pero utilizando una estrategia diferente. Aunque no hayas oído la palabreja "Refactoring" en tu vida lo has hecho miles de veces seguro: desde cambiar el nombre de un método en TODO tu proyecto, hasta cambiar el ámbito de una variable para tener acceso a ella desde más sitios.

Es muy sencillo refactorizar, sólo que hasta ahora en Visual Studio era una tarea tediosa y propensa a errores ya que normalmente utilizábamos la opción de buscar y reemplazar, cruzábamos los dedos para que no nos hubiésemos pasado de la raya sustituyendo y dábamos a F5 para comprobarlo viendo si todo compilaba de nuevo ;-)

Las opciones añadidas a VS2005 no es que sean espectaculares pero son un buen comienzo y desde luego nos van a hacer la vida más fácil. En la siguiente demo en Flash que he preparado refactorizo un código de pruebas que está en Main de modo que se convierta en una función que pueda utilizar desde diversos lugares del proyecto.

En el segundo paso de la demo puedes ver las opciones disponibles para refactorización (7 en total). Hayalgunas muy interesantes, como por ejemplo la de extraer interfaz, que puede ser muy útil en ocasiones (por ejemplo e escenarios de Remoting o cuando queremos retocar un diseño orientado a objetos).


NOTA: Por cierto, este "post" cuenta por dos: en la demo anterior puedes ver el código que se necesita para, en .NET 2.0, enumerar todos los proveedores de acceso a datos que están instalados y disponibles en el sistema, cosa que puede resultar de muchísima ayuda cuando trabajamos con el nuevo modelo de enlazado a datos basado en DataSources, y más en concreto con el SqlDataSource que nos permite conectarnos a cualquier tipo de base de datos para el que haya proveedor.
Por: José Manuel Alarcón Aguín | Saturday, October 22, 2005 12:57:00 PM (Hora de verano romance, UTC+02:00)  #    Comments [0] - Trackback
Tags: Programación


Sígueme en:

:: Twitter JM Alarcón: tecnología, marketing, este blog y frikadas varias
:: Twitter campusMVP: los mejores recursos sobre tecnología Microsoft: trucos, artículos, noticias, vídeos...
:: Facebook campusMVP: los mismos mejores recursos pero en directamente en Facebook.
:: Boletín campusMVP Nuestra publicación electrónica, una vez al mes en tu buzón de correo.
 
Banner

¡Este blog ha resucitado!

Llevaba casi tres meses sin publicar, y creedme que lo siento. De hecho esto es tiempo suficiente como para declarar el blog legalmente desaparecido. Por suerte he podido sacar unos minutos para resucitarlo mediante este "post".

Lamentable o afortunadamente he estado demasiado ocupado. Estos tres últimos meses he hecho de todo: he desarrollado tres cursos on-line, un libro, media docena de artículos para revistas, he dado una charla técnica, he programado un componente enlazado a datos para Windows Forms y también un software bastante complejo para comunicaciones seguras, he hecho un viaje trasatlántico (a Seattle)... por no mencionar la actividad normal de la empresa en la que, por cierto, este verano hemos sacado al mercado versiones nuevas de casi todos los productos. Se me olvidaba: si te apuntas a alguno de nuestros cursos de campusMVP (quedan pocas plazas ya) seré tu tutor en cinco de los cursos ofertados.

Tengo la lengua fuera de sólo enumerar todo esto....

Ahora no es que vaya a estar precisamente tocándome las narices, pero creo que en breve dispondré de un poco más de tiempo y mi intención es retomar este blog y seguir publicando más o menos al ritmo al que os tengo acostumbrados. Hoy mismo intentaré poner algo interesante, así que como decía super-ratón: ¡Stay tuned!.

Jose.

Por: José Manuel Alarcón Aguín | Saturday, October 22, 2005 12:36:00 PM (Hora de verano romance, UTC+02:00)  #    Comments [0] - Trackback
Tags: Off-Topic


Sígueme en:

:: Twitter JM Alarcón: tecnología, marketing, este blog y frikadas varias
:: Twitter campusMVP: los mejores recursos sobre tecnología Microsoft: trucos, artículos, noticias, vídeos...
:: Facebook campusMVP: los mismos mejores recursos pero en directamente en Facebook.
:: Boletín campusMVP Nuestra publicación electrónica, una vez al mes en tu buzón de correo.
 
Banner
Copyright © 2010 José Manuel Alarcón Aguín. All rights reserved.