No se lanza evento Page_Load de una master page anidada…

Una de las novedades de Visual Studio 2008 son el soporte a las master page anidadas.

Esta misma mañana estaba depurando una aplicación que usaba esta funcionalidad e intentaba depurar el código del evento Page_Load de la master page anidada…..y nada, el evento que no se lanzaba….que no había manera.

Se lanzaba el evento Page_Load de la master page principal, incluso el de la página que usa las dos masterpage….

Solución? pues muy sencilla, el la propiedad AutoEventWireup de la master page anidada está desactivada por defecto. Con poner la propiedad a true ya vale!!.

Sencillo, pero es la típica cosa con la que te puedes tirar un buen rat0 hasta que te das cuenta!!

Accesibilidad ( III ). ASP.NET 2.0 CSS Friendly Control Adapters

En algunas ocasiones puede ocurrir que el código HTML que generan los controles de servidor de ASP.NET 2.0 no sea el que nos gustaría. Puede ser que este código provoque que nuestra web no sea accesible o que simplemente, consideremos que lo que se genera no sea muy limpio….

Pues si no nos gusta, siempre lo podemos cambiar.

En ASP.NET 2.0 podemos modificar la salida de estos controles sin necesidad de tener el código fuente, es decir, podemos hacer que el control se renderice de manera diferente y que el HTML generado sea diferente….más limpio, accesible o lo que queremos.

La forma de cambiar el HTML generado es usando los «Control Adapters» que se incluyen con ASP.NET 2.0.

Aunque podemos hacer desde cero los adaptares, para facilitarnos la vida existe «ASP.NET 2.0 CSS Friendly Control Adapters«. Este recurso ofrece una serie de adaptadores ya implementados que generar un HTML más limpio y accesible y que podemos atacar más fácilmente usando CSS.

Los controles disponibles son Menu, TreeView, GridView, DetailsView, FormsView, DataList, Login, ChangePassword , CreateUser, PasswordRecovery, y LoginStatus.

A continuación incluyo una serie de enlaces que os podrán ser de utilidad para poneros al día con esta característica. Explican en detalle como funcionan esta característica y como ponerla en funcionamiento. Merece la pena conocer la característica.

ASP.NET 2.0 CSS Friendly Control Adapters: The White Paper

ASP.NET 2.0 CSS Friendly Control Adapters: The Walkthrough

Tip/Trick: Use the ASP.NET 2.0 CSS Control Adapters for CSS friendly HTML output

Creating CSS Friendly Websites with ASP.NET 2.0

Usando CSS Controls Adapter en ASP.NET 2.0

Nuevas especificaciones de Rosario

Luis Fraile ya comentaba en geeks que ya había especificaciones de Rosario disponibles.

Pues en este caso, aumenta el número de especificaciones públicas existentes…

Add to Source Control Minor updates to the existing specification

Enterprise Team Foundation Server Management – A new spec that covers some of the architectural changes we are making to improve scale and managability in a large enterprise environment.  These features are also key to enabling multi-tenent hosting of TFS.

Organize team queries and my queries using a folder hierarchy – A new spec on how you can organize your work item queries into heirarchical folders.

Accesibilidad en aplicaciones ASP.NET ( II )

En un primer post presenté una lo que significa e implica la accesibilidad desde el punto de vista teórico, enseñando las principales directrices que existen.

Realmente hace una página accesible no es algo trivial y es conveniente saber de antemano si tu aplicación tiene este requisito porque ser o no ser accesible ( y en qué nivel )  no es tan sencillo como cambiar un check en el formulario web.

No es una tarea trivial pero con ASP.NET es completamente posible hacer aplicaciones accesibles si conocemos las implicaciones que supone.

Desde el punto de vista de diseño de tu aplicación accesible se hace necesario conocer los conceptos de accesibilidad pero en mayor medida, como estos conceptos se llevan al mucho real y qué implicaciones tiene sobre los desarrollos ASP.NET; conocer qué controles son accesibles, conocer qué propiedades y con qué contenido tengo que indicar, conocer qué tecnologías puedo usar, cómo tengo que maquetar mis páginas…

En los siguiente  enlaces se enumeran controles de servidor de ASP.NET y se proporciona información sobre la compatibilidad con la accesibilidad de cada control.

Controles y accesibilidad en ASP.NET

Compatibilidad de accesibilidad en ASP.NET

Controles de servidor Web ASP.NET que utilizan secuencias de comandos de cliente

Generalmente, los controles ASP.NET cumplen los requisitos de accesibilidad tal como se indica a continuación:

  • Proporcionan un medio de especificar un equivalente de texto para cualquier elemento que no es de texto.
  • No tienen dependencias con respecto a los colores.
  • Representan títulos y encabezados de columnas de tablas con tablas.
  • Representan los elementos fieldset y legend que tienen elementos div.
  • No necesitan hojas de estilos.
  • Admiten el establecimiento de posiciones mediante propiedades de estilo.
  • Asocian etiquetas con controles.
  • Generan secuencias de comandos de cliente independientes del dispositivo; por ejemplo, secuencias de comandos que no sólo responden a los clicks del ratón.

¿Qué es ser accesible? ( I )

Definición

«La accesibilidad web se refiere a la capacidad de acceso a la Web y a sus contenidos por todas las personas independientemente de la discapacidad (física, intelectual o técnica) que presenten o de las que se deriven del contexto de uso (tecnológicas o ambientales). Esta cualidad está íntimamente relacionada con la usabilidad.

Cuando los sitios web están diseñados pensando en la accesibilidad, todos los usuarios pueden acceder en condiciones de igualdad a los contenidos.»

WCAG

Las WCAG ( Web Content Accessibility Guidelines ) proporcionan una lista de 14 directrices para el diseño de sitios Web accesibles.

Las directrices propiamente dichas no detallan las acciones que hay que realizar para conseguir que un sitio Web sea más accesible. Se trata más bien de consideraciones de alto nivel que proporcionan comentarios sobre cómo garantizar la accesibilidad. 

Junto a cada directriz se incluye una serie de puntos de control. Los puntos de control detallan acciones que se pueden llevar a cabo para asegurarse de que se cumple la directriz de accesibilidad. A cada punto de control se le proporciona uno de los siguientes valores de prioridad:

  • Prioridad 1. Un desarrollador Web debe cumplir este punto de control, o de lo contrario uno o varios grupos de usuarios no podrán tener acceso al contenido.
  • Prioridad 2. Un desarrollador Web debería cumplir este punto de control, o de lo contrario a uno o varios grupos de usuarios les resultará difícil tener acceso al contenido.
  • Prioridad 3. Un desarrollador Web puede tener en cuenta este punto de control, o de lo contrario a uno o varios grupos de usuarios les podría resultar difícil tener acceso al contenido.

Además de estas directrices, las WCAG también proporcionan una clasificación de tres niveles para la accesibilidad a los sitios Web.

Los sitios que implementan todos los puntos de control de prioridad 1 se califican con el nivel de cumplimiento A. Aquellos que implementan todos los puntos de control de prioridad 1 y 2 se califican como doble A, mientras que los que implementan todos los puntos de control se califican como triple A.

Directrices de WCAG ( Web Content Accessibility Guidelines 1.0 specification )

  1. Proporcione alternativas equivalentes para el contenido visual y auditivo.
  2. No se base sólo en el color.
  3. Utilice marcadores y hojas de estilo y hágalo apropiadamente.
  4. Identifique el idioma usado.
  5. Cree tablas que se transformen correctamente.
  6. Asegúrese de que las páginas que incorporan nuevas tecnologías se transformen correctamente.
  7. Asegure al usuario el control sobre los cambios de los contenidos dependientes del tiempo.
  8. Asegure la accesibilidad directa de las interfaces de usuario incrustadas.
  9. Diseñe para la independencia del dispositivo.
  10. Utilice soluciones provisionales.
  11. Utilice las tecnologías y directrices de W3C.
  12. Proporcione información de contexto y orientación.
  13. Proporcione mecanismos claros de exploración.
  14. Asegúrese de que los documentos sean claros y sencillos.

Directrices de accesibilidad del gobierno de EE.UU

El gobierno de EE.UU. estableció una serie de reglas para la accesibilidad del contenido electrónico y en línea utilizado por el gobierno federal. A estas reglas se las suele denominar «reglas de la sección 508«, ya que es la sección 508 de la Ley de rehabilitación la que detalla los requisitos de accesibilidad.

El gobierno federal establece 16 reglas para la accesibilidad de los sitios Web. Las primeras 11 son puntos de control de las WCAG; las últimas cinco son específicas de la sección 508 y no forman parte de WCAG.

Estas 16 reglas creadas por el gobierno de EE.UU. son obligatorias únicamente para los sitios Web de Internet y de intranet de las agencias federales.

No obstante, EE.UU. no es el único país que obliga el cumplimiento de directrices de accesibilidad en los sitios Web de las agencias del gobierno. Otros países como Australia, Canadá, Francia, Alemania, Japón y el Reino Unido también disponen de leyes similares. Para ver una lista de directivas de accesibilidad por país puedes abrir la página Policies Relating to Web Accessibility de la WAI.

Reglas exclusivas de la sección 508

  1. Cuando las páginas utilizan lenguajes de secuencias de comandos para mostrar el contenido o para crear elementos de la interfaz, la información proporcionada por la secuencia de comandos debe identificarse con texto funcional que se pueda leer mediante tecnología de asistencia.
  2. Cuando una página Web requiera que haya un subprograma, complemento u otra aplicación en el sistema cliente para interpretar el contenido de la página, la página debe proporcionar un vínculo a dicho complemento o subprograma.
  3. Cuando los formularios electrónicos estén diseñados para rellenarlos en línea, el formulario debe permitir a los usuarios que utilicen tecnología de asistencia para tener acceso a la información, a los elementos de los campos y a la funcionalidad necesaria para rellenar y enviar el formulario, incluidas todas las instrucciones e indicaciones.
  4. Se debe proporcionar un método que permita a los usuarios omitir los vínculos de exploración repetitivos.
  5. Cuando se requiera una respuesta en un momento determinado, se debe avisar al usuario y darle tiempo suficiente para indicar que necesita más tiempo.

[Artalde.NET] ASP.NET Extensions

El próximo día 29 de abril, martes, se celebrará en la universidad de Deusto un nuevo evento del grupo de usuarios Artalde.net.

El objetivo del mismo será hacer una introducción a las funcionalidades que se incluyen en ASP.NET Extensions, entrando en mayor profundidad en algunas de ellas.

En esta ocasión Rodrigo Corral ( PlainConcepts ) y un servidor ( Avangroup ) haremos los honores.

Agenda:

  • 19:00 Registro.
  • 19:15 ASP.NET Extensions.
    • Introducción a ASP.NET Extensions
    • ASP.NET MVC. Framework que permite el desarrollo de aplicaciones ASP.NET usando el patrón Modelo-Vista-Controlador que ofrece una separación entre las diferentes capas que contiene una aplicación. ( interfaz-lógica de negocio-datos ).
    • ASP.NET Dymamic Data Support. Característica para la creación rápida de aplicaciones web dirigidas por datos. Permite generar webs orientadas a datos de una manera sencilla y personalizable.
    • ADO.NET Data Services ( Astoria ).  Permite la búsqueda y manipulación de datos a través de la web de una manera sencilla usando URLs. Esta funcionalidad expone la información usando REST.

Si estáis interesados en acudir no olvidéis registraros.

 

Artalde2

Personalizando el botón exportar del visor de Crystal Report

En una aplicación de escritorio en la que estoy trabajando uso el componente «Crystal Report Viewer» para visualizar mis informes.

El visor ofrece bastante funcionalidad, pero como muchas veces ocurre, no siempre se adecua al 100% a lo que quiere en cliente y toca buscar la mejor manera de personalizar.

En este caso, necesitaba personalizar algunos aspectos de la opción de exportar. Una opción es hacerte tu propia barra de herramientas pero en este caso, yo quería usar toda la funcionalidad posible y escribir simplemente el código para personalizar los aspectos que quería el cliente.

La solución que he encontrado después de navegar y pegarme un buen rato es sustituir el botón exportar por uno personalizado, pero sin que visualmente se vea afectado nada:


  1. Buscar una referencia al control de exportar que viene por defecto.
  2. Crear un botón nuevo y copiar las propiedades.
  3. Añadir el nuevo botón a la barra.
  4. Incluir un manejador del evento «Click» para el nuevo botón.
  5. Ocultar el botón de exportar por defecto.
  6. Incluir el código necesario en el manejado del evento Click para exportar el informe.

El código sería así…..


private void ChangeExportButton()
{

    foreach (Control ctrl in myCrystalReportViewer.Controls)
    {
        //Buscar toolstrip del visor de informes
        if (ctrl is ToolStrip)
        {
            ToolStrip ts = (ToolStrip)ctrl;

            foreach (ToolStripItem tsi in ts.Items)
            {

                //Buscar el botón exportar por un ImageIndex
                if (tsi is ToolStripButton && tsi.ImageIndex == 8)
                {

                 
                    ToolStripButton crXb = (ToolStripButton)tsi;

                    //Clonar el aspecto
                    ToolStripButton tsb = new ToolStripButton();
                    tsb.Size = crXb.Size;
                    tsb.Padding = crXb.Padding;
                    tsb.Margin = crXb.Margin;
                    tsb.TextImageRelation = crXb.TextImageRelation;

                    tsb.Text = crXb.Text;
                    tsb.ToolTipText = crXb.ToolTipText;
                    tsb.ImageScaling = crXb.ImageScaling;
                    tsb.ImageAlign = crXb.ImageAlign;
                    tsb.ImageIndex = crXb.ImageIndex;
                    tsb.Visible = crXb.Visible;
                    tsb.Enabled = crXb.Enabled;

                    //Añadir el nuevo botón
                    ts.Items.Insert(0, tsb);

                    tsb.Click += new EventHandler(Export_Click);


                    break;
                }
            }
        }
    }


    //Ocultar el botón por defecto
    this.myCrystalReportViewer.ShowExportButton = false;
}

private void Export_Click(object sender, EventArgs e)
{
    SaveFileDialog saveDiag = new SaveFileDialog();
    saveDiag.Title = «Exportar Informe»;
    saveDiag.Filter = «Adobe Acrobat (*.pdf)|*.pdf|Microsoft Excel (*.xls)|*.xls|Sólo datos de Microsoft Excel (*.xls)|*.xls|Microsoft Word (*.doc)|*.doc|Formato de texto enriquecido (*.rtf)|*.rtf»;
    saveDiag.FilterIndex = 1;


    if (saveDiag.ShowDialog() == DialogResult.OK)
    {
        DiskFileDestinationOptions crDiskFileDestinationOptions = new DiskFileDestinationOptions();
        ReportDocument rptDoc = (ReportDocument)crystalReportViewer1.ReportSource;
        ExportOptions crExportOptions = rptDoc.ExportOptions;
        crDiskFileDestinationOptions.DiskFileName = saveDiag.FileName;
        crExportOptions.ExportDestinationOptions = crDiskFileDestinationOptions;
        crExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;


        switch (saveDiag.FilterIndex)
        {
            case 1: // pdf
                crExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
                break;
            case 2: // xls
                crExportOptions.ExportFormatType = ExportFormatType.Excel;
                break;
            case 3: // xls
                crExportOptions.ExportFormatType = ExportFormatType.ExcelRecord;
                break;
            case 4: // doc
                crExportOptions.ExportFormatType = ExportFormatType.WordForWindows;
                break;
            case 5: // rtf
                crExportOptions.ExportFormatType = ExportFormatType.RichText;
                break;


        }
        rptDoc.Export(crExportOptions);
    }

Algunas respuestas a las dudas del evento de gestión de proyectos y Team System

El pasado viernes tuve la suerte de participar con Rodrigo Corral en un evento organizado por el CIIN y por el grupo de Nuberos.net sobre gestión de proyectos y Team System. ( fui un participante sorpresa de última hora..je,je)

En el evento surgieron algunas dudas que intentamos solucionar durante el evento. Aún así, aprovecho este post para incluir unos enlaces donde existe información completa sobre algunas de las dudas que se plantearon en el evento para que el que esté interesado pueda profundizar.

Migración de Source Safe a Team System

Bridge para usar TortoiseSVN con Team Foundation Server

Bridge para usar TortoiseSVN con Team Foundation Server ( II )

Teamprise Plugin-in for Eclipse

Add-in para conseguir «get last version» al hacer check-out con Team System 2005 ( con 2008 viene soportado esta funcionalidad ya directamente )

Profiler

Cómo: Instalar el generador de perfiles independiente

¿Por dónde empezar con Team System?

Aspectos básicos relativas a Microsoft Visual Studio 2005 Team System

Crear un proyecto nuevo

Tutorial de Team Explorer

Control de código fuente

Artículo de MSDN sobre control de código

Tutorial de control de código fuente

 

¿ El huevo o la gallina ?

El eterno dilema..¿ qué fue primero, el huevo o la gallina ? La gallina? El huevo?….Pero qué tiene que ver esto con el mundo del software? Pues ahí va mi reflexión….

¿Qué es primero, la metodologías y pruebas prácticas o Team System? La respuesta parece clara..incluso hace que la pregunta pueda resultar un poco tonta, no?

Lógicamente, la necesidad de emplear buenas prácticas o una metodología siempre ha estado ahí y en general, todos poder tener más o menos claro lo beneficioso que pueden llegar a ser para crear un software de calidad que satisfaga las necesidades de nuestros clientes y además, de la manera más productiva posible.

Pero si tan clara es la respuesta y todos tenemos claro que son anteriores y necesarias… ¿por qué no se utilizan? ¿por qué tantos proyectos no emplean ningún tipo de metodología? ¿Por qué no se usa tan poco prácticas recomendadas como las pruebas unitarias o como la compilaciones automáticas?

Pues realmente si analizamos las causas habrá infinidad de razones que podemos dar pero al menos en mi opinión, una de las razones es que realmente no se conocen tanto como podemos pensar.

Pruebas unitarias, compilaciones, revisiones de código, cobertura de código….¿ cuánta gente tiene que claro que son necesarias? ¿ cuánta gente sabe y comprende los beneficios que nos aportan? No tanta…y a los que les suena, no siempre llegan a ver la necesidad de emplearlas, porque no llegan a ver el beneficio….( y no vale decir que la culpa la tiene el jefe!! )

Y los que sí querrían usar este tipo de cosas, muchas veces se encuentran con la problemática de las herramientas, el no tener unas herramientas adecuadas y fáciles de utilizar, que nos puedan ayudar a usar este tipo de prácticas….

¿Y a dónde quiero llegar?

Hace ya un tiempo que nació Visual Studio Team System. Siempre ha habido dos cosas que me han gustado mucho de este producto; que ofrece diversas herramientas integradas que nos ayudan a emplear buenas prácticas en los desarrollos y que la metodología es un aspecto central del producto.

Todos sabemos que cuando Microsoft pone en marcha su maquinaria la pone a funcionar….y con la salida de este producto ha hecho que mucha gente empiece a interesarse por ella y por lo que contiene…..lo que en consecuencia, provoca que cada vez más personas se interesen por cómo hacer las cosas mejor y cómo puedan hacer para que sus proyectos se gestionen de una manera eficiente y que puedan superar los problemas que han tenido en el pasado.

¿Qué es primero, la metodologías y pruebas prácticas o Team System?

Pues después de todo lo que he comentado, sólo puede decir que aunque Team System es posterior, es una herramienta «nueva», para muchos ha sido el punto de inicio para interesarse sobre cómo puede hacer software de mejor calidad usando buenas prácticas o sobre qué metodología es la más adecuada para mi empresa…..

Realmente lo más importante es conocer y usar las buenas prácticas, conocer qué forma de trabajar me puede venir bien. Team System no deja de ser una herramienta pero tener una buena herramienta también es muy importante y en este caso Team System, aunque mejorable, es una buena herramienta.

Entonces….¿ qué fue primero, el huevo o la gallina ? Pues parece que ya no tiene tanto misterio… http://www.elmundo.es/elmundo/2006/05/26/ciencia/1148628977.html