dotnetmanía - tecnología, tips de programación y datos ... · tica”, ha declarado bill gates....

60
WebParts en ASP.NET 2.0 (II) • Modelos de seguridad en dispositivos móviles • Detección de problemas de rendimiento en SQL Server 2000 y 2005 (III). Qué consultas procesa mi servidor SQL Server • Acceso asistido a datos con ADO.NET 2.0 y Visual Studio 2005 dotNetManía nº27 junio 2006 • 6,50 (España) Visual Basic • C# • ASP.NET • ADO.NET • .NET Framework • Windows Server System dotNetManía www.dotnetmania.com Dedicada a los profesionales de la plataforma .NET

Upload: others

Post on 16-Mar-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

WebParts en ASP.NET 2.0 (II) • Modelos de seguridad en dispositivos móviles • Detección deproblemas de rendimiento en SQL Server 2000 y 2005 (III). Qué consultas procesa miservidor SQL Server • Acceso asistido a datos con ADO.NET 2.0 yVisual Studio 2005

dotNetManíanº

27 ju

nio

2006

• 6

,50

€ (E

spañ

a)Visual Basic • C# • ASP.NET • ADO.NET • .NET Framework • Windows Server System

dotNetManíawww.dotnetmania.com Dedicada a los profesionales de la plataforma .NET

Page 2: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles
Page 3: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Bienvenido al número 27, de junio de2006, de dotNetManía.

Este mes tenemos la suerte de habercharlado con una leyenda de la historiade la informática (o con un viejo pro-gamador, como prefiere definirse élmismo): David Intersimone. OctavioHernández, con amplia experiencia enlos entornos de desarrollo de Borland-entre otras materias-, ha sido el encar-gado de realizar la entrevista para loslectores de dotNetManía. David esactualmente vicepresidente de relacio-nes con los desarrolladores de Borland,aunque pronto dejará de serlo. Como yasabrá, Borland ha decidido desprender-se de la línea de entornos de desarrolloy esta parte del negocio la retomará unanueva empresa creada ex profeso a la quepertenecerá David, fiel a sus orígenes, ytambién Jason Vokes, quien participóactivamente en la entrevista. Así queBorland ya no será lo que fue y lo quevenga será lo que un día fue Borland...Nos queda desearle suerte a David, aJason y a todos los que se embarquen enesta nueva aventura. Les mantendremosinformados.

Seguimos con los artículos seriados“WebParts en ASP.NET 2.0” y “Detec-ción de problemas de rendimiento enSQL Server 2000 y 2005 (III)”, de JoséManuel Alarcón y Eladio Rincón.Como quizá sepa, no me gustan mucholas series, pero esta vez creo que merecela pena realmente.

El artículo central de este mes es“Estilos en XAML”. Un fenomal artícu-lo de Luis Miguel Blanco que reco-miendo vivamente a quien quiera comen-zar a usar estilos en XAML. Le recuerdoque no necesita Windows Vista; descár-guese la última CTP de WinFX y prue-be los ejemplos.

Como cada mes, y siempre quepodemos, damos la bienvenida a estu-pendos nuevos autores: a Unai Zorrillaque se estrena con su “Modelos deseguridad en dispositivos móviles” y aFrancisco Javier Rodríguez recien-temente nombrado MVP de IronSpeed, el único español que lo es porahora –quién mejor que él para evaluareste producto–.

Pero, por supuesto, dentro hay más.Espero que le guste.

dotN

etM

anía

<<

3

Leyendas de la Informática

dotNetManíaDedicada a los profesionales de la plataforma .NET

Vol. III •Número 27 • Junio 2006Precio: 6,50€

EditorPaco Marín

([email protected])

Atención al suscriptorPilar Pérez

([email protected])

Redactor JefeMarino Posadas

([email protected])

Consejo de RedacciónDino Esposito, Guillermo 'guille' Som, José

Manuel Alarcón, Lorenzo Ponte, LuisMiguel Blanco, Miguel Katrib (Grupo

Weboo) y Octavio Hernández

Colaboradores habitualesAntonio Quirós, Braulio Díez, Carlos

Quintero, Eladio Rincón, Javier Aragonés,Jorge Serrano, José Miguel Torres, PepeHevia, Salvador Ramos y Sergio Vázquez

Además colaboran en este númeroFrancisco Javier Rodríguez y Unai Zorrilla

IlustracionesYamil Hernández

Edición, suscripciones y publicidad.netalia

c/ Robledal, 13528529 Rivas-Vaciamadrid (Madrid)

www.dotnetmania.com

Tf. (34) 91 666 74 77Fax (34) 91 499 13 64

ImprimeGráficas Vallehermoso

www.graficasvallehermoso.com

ISSN1698-5451

Depósito LegalM-3.075-2004

>>

<<

dnm.editorial

Paco MarínEditor de dotNetManía

Page 4: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

27dnm.sumario

dnm

.sum

ario

Entrevista a David Intersimone y Jason Vokes 12-14Con motivo del seminario efectuado en Madrid el pasado 8 de mayo como parte delDeveloper Studio 2006 World Tour, dotNetManía entrevistó a David Intersimone,actual Vicepresidente de Relaciones con los Desarrolladores de Borland y a JasonVokes, Director para Europa de la línea de productos Delphi/C++. La entrevistaganaba aún más interés con motivo del reciente anuncio por parte de Borland dedesprenderse de la línea de entornos de desarrollo para concentrarse únicamente enlas herramientas de Ciclo de Vida del Software.

WebParts en ASP.NET 2.0 (II) 16-19En esta segunda entrega sobre la creación de páginas personalizables con WebParts, vamosa estudiar algunas características que van más allá de los conceptos básicos estudiadosanteriormente.

Modelos de seguridad en dispositivos móviles 20-24Los modelos de seguridad en dispositivos móviles son los grandes desconocidos para losdesarrolladores de software; sin embargo, entenderlos es fundamental para comprenderciertos problemas en el desarrollo y realizar aplicaciones más seguras. Mediante este artículotrataremos de explicar, tanto desde el punto de vista teórico como práctico, cómo funcionanlos distintos modelos impuestos por los fabricantes y operadoras de telefonía.

Estilos en XAML 25-36Con la llegada de Windows Vista se presentará también oficialmente WinFX, lanueva plataforma para la creación de aplicaciones, que cubre dos grandes áreas deldesarrollo: interfaces de usuario con WPF(Avalon), y comunicaciones con WCF(Indigo); tecnologías ambas que se perfilan como claves para la próxima generaciónde aplicaciones. En el presente artículo vamos a realizar una revisión de los elementosque WPF pone a disposición del desarrollador para aplicar estilos a los controles denuestras ventanas.

Detección de problemas de rendimiento en SQL Server 2000 y 2005 (III)Qué consultas procesa mi servidor SQL Server 38-42

Este es el tercer artículo de la serie, y en él nos vamos a centrar en cómo y qué “cosas”auditar de las conexiones de usuario que llegan al servidor. Para auditar las peticionesque realizan los clientes utilizaremos SQL Server Profiler (existente en SQL Server2000 y SQL Server 2005).

Acceso asistido a datos con ADO.NET 2.0 y Visual Studio 2005 43-47Como ya adelantamos en el artículo anterior, en éste veremos cómo utilizar los asistentes deVisual Studio 2005 relacionados con el acceso a datos. En particular, veremos los pasosnecesarios para crear formularios tanto para introducir datos como para mostrar el resultadode la llamada a un procedimiento almacenado de SQL Server 2005.

dnm.laboratorioIron Speed Designer 48-51

En la era del desarrollo fugaz y las tareas repetitivas CRUD (Create, Restore, Update,Delete), Iron Speed nos ofrece su particular visión centrada en ASP.NET. Aunquea muchos ni siquiera les sonará este nombre, lo cierto es que son muchos los desarro-lladores, empresas y organizaciones gubernamentales que lo utilizan.

dnm.todotnet.qaCuando la IU se viste de gala 52-54

Este mes tenemos tres preguntas relacionadas con la Interfaz de Usuario (IU). Veremoscómo añadir una ventana corporativa (splash window) a las aplicaciones WindowsForms, cómo suministrar un alto nivel de descripción para la API Ink (tinta) enTablet PC y la localización de mapas de sitios Web en ASP.NET.

dnm.biblioteca.net 55Microsoft ASP.NET Coding Strategies with the Microsoft ASP.NET TeamMCAD/MCSD Self-Paced Training Kit: Implementing Security for Applicationswith Microsoft Visual Basic .NET and Microsoft Visual C# .NET

dnm.desvan 58

Page 5: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles
Page 6: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

dotN

etM

anía

<<

6

dnm.noticias<<n

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s

Microsoft anuncia la disponibilidad de la beta 2 de WindowsVista, 2007 Microsoft Office system y Windows Server

La conferencia anual de inge-niería de hardware de Microsoft,WinHEC, ha sido el escenario ele-gido por Bill Gates, presidente yarquitecto jefe de Microsoft, paraanunciar la disponibilidad inme-diata de la beta 2 de WindowsVista, Microsoft Office System2007 y Windows Server “Long-horn”.

“El lanzamiento de la beta deestos tres productos supone unimportante hecho para Microsoft,así como un gran paso para garan-tizar las plataformas que harán rea-lidad la próxima década informá-tica”, ha declarado Bill Gates.

La beta 2 de Windows Vista yde Windows Server “Longhorn”se encuentran ya disponibles paralos desarrolladores y profesionalesen tecnologías de la información,a través de MSDN y las suscrip-ciones TechNet, así como para losmiembros del Programa de Adopciónde Tecnología (TAP) y del proyectoTechBeta. Además, en las próximassemanas, Microsoft dará comien-zo al programa previo de análisisde Windows Vista para aquellosdesarrolladores y profesionales deTI que no formen parte de los pro-gramas anteriormente citados, yque deseen disponer de los requi-sitos necesarios para comenzar aanalizar los productos. Como par-te del programa de análisis previo,Microsoft concederá, a un ampliogrupo de entusiastas de la tecno-logía, una muestra del sistema ope-rativo para que puedan comenzar

a analizar losdiversos escena-rios de WindowsVista. La beta 2 delos diferentes com-ponentes de 2007Microsoft OfficeSystem estará dis-ponible para sudescarga en españolen la siguiente direc-ción: www.micro-soft.com/spain/office/preview apartir del miércoles,24 de mayo.

Bill Gates tam-bién ha dado aconocer los planes de lanzamien-to de la versión beta del kit dedesarrollo de software (SDK) paraeste verano, que permitirá a lospartners desarrollar dispositivos,que van desde cámaras Web hastaequipos de mano que trabajan conlos servicios Live tanto en PC odirectamente sobre la plataformaWindows Live. Más informaciónen http://dev.live.com/hard-ware.

Disponibilidad de la beta 2 de WinFX y lalicencia Go-Live

Microsoft también ha dado aconocer la beta 2 de WinFX y lacorrespondiente licencia Go-Live,ambas disponibles para los desa-rrolladores en MSDN.

La licencia Go-Live tambiénincluye la primera licencia paraWindows Presentation Foundation ypermite a los clientes el desplieguede aplicaciones para Windows

Vista haciendo uso de algunas delas tecnologías principales deWinFX –Windows PresentationFoundation, Windows WorkflownFoundation, Windows CommunicationFoundation e “InfoCard”, el nombreclave de una tecnología diseñadapara simplificar y mejorar la segu-ridad en el acceso a los recursos, yla información compartida enInternet– antes del lanzamientofinal de WinFX.

Además de todos estos anun-cios, durante la celebración delWinHEC también se han desvela-do nuevos detalles sobre la virtua-lización en Windows Server, quese espera esté disponible con la lle-gada de Windows Server “Long-horn”. Una beta de este productoestará disponible a finales de 2006.Más información sobre la virtuali-zación en Windows Server en:http://www.microsoft.com/presspass/features/2006/may06/05-22Virtualization.mspx.

Bill Gates ha dado a conocer en el WinHEC 2006 las características de sus tres productos insigniay sus ventajas para empresas y usuarios.

Access 2007 corriendo bajo Windows Vista

Page 7: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Inés Arbolí, directora de la División deDesarrolladores y Plataforma de MicrosoftIbérica y José María Soler, director deMovilForum y Aplicaciones Sectoriales deTelefónica Móviles España, han renovadopor segundo año consecutivo la firma delacuerdo de colaboración que ambas enti-dades alcanzaron en marzo de 2005, y cuyoprincipal objetivo es el de potenciar las ayu-das para la comunidad técnica de desarro-lladores de software.

Ambas entidades han establecido suspropios programas de acercamiento a estecolectivo técnico: MSDN (MicrosoftDeveloper Network), la principal herramientade la compañía de software para comuni-carse y formar a los desarrolladores en susúltimas propuestas tecnológicas; yMovilForum, el foro de TelefónicaMóviles que garantiza a este colectivo elacceso a todo lo que necesita para realizaraplicaciones exitosas sobre la red MoviStar.

Dentro del acuerdo alcanzado porambas compañías se incorporan diversasactividades de colaboración mutua, algu-nas de las cuales han sido renovadas tras el

éxito obtenido el pasado año.Entre ellas se encuentran laparticipación de TelefónicaMóviles en el Developer Day, elprincipal evento anual deMicrosoft con los desarrolla-dores; el patrocinio de la com-pañía de software en la FeriaMovilForum, promoviendo lacreación de soluciones con tec-nología móvil Microsoft sobrela red MoviStar; la participa-ción conjunta en los talleresMSDN Workshops de Madridy Barcelona, con especial atención a lassesiones centradas en Windows Mobile;así como el soporte técnico y la formaciónen movilidad por parte de TelefónicaMóviles a los ISV del laboratorio tecnoló-gico Aragón Microsoft Technology Center.

“El pasado año más de 6.000 desarro-lladores españoles participaron en algunode los eventos MSDN organizados porMicrosoft, lo que indica el interés que estecolectivo muestra hacia las iniciativas dela compañía”, ha declarado Inés Arbolí.

Para José María Soler, “las más demil empresas que visitaron la FeriaMovilforum 2005 pudieron comprobarque la innovación en el campo de lassoluciones móviles es una realidad con-solidada y con espectaculares casos deéxito, y esto ha sido posible por el con-tinuo avance de la tecnología móvil y ladecisiva aportación de las nuevas plata-formas móviles, como Windows Mobilede Microsoft y el respaldo de la comu-nidad MSDN”.

dnm.noticias

Microsoft y Telefónica Móviles renuevan su acuerdo decolaboración dirigido a los desarrolladores de software

dnm.noticias

dotN

etM

anía

<<

7

Nueva CTP de LINQ de mayo 2006Microsoft ha puesto a disposición

del público una nueva presentaciónpreliminar de LINQ (LanguageIntegrated Query), tecnología sobre laque dotNetManía ha venido escri-biendo en los últimos meses y quejugará un papel muy importante en elmodelo de programación que se ave-cina con la futura aparición de Orcasy WinFX. Entre las características mássobresalientes que aparecen por pri-mera vez en esta versión podemosmencionar: • En LINQ:

- Nuevas construcciones sintácti-cas en las expresiones de con-sulta.

- Nuevo modelo para el desarrollode procesadores de consulta amedida.

- Nuevos operadores estándar.- Enlace a datos de consultas.

• En DLINQ:- Soporte para el diseño de clases

de entidad dentro de VisualStudio 2005.

- Soporte para la herencia entreentidades y escenarios de múlti-ples capas.

- Soporte mejorado para procedi-mientos almacenados y funcionesdefinidas por el usuario.

- Soporte mejorado para la resolu-ción de conflictos de concurrencia.

• En XLINQ:- Soporte mejorado para conteni-

dos XML complejos.- Soporte para anotaciones.

Esta nueva CTP puede ser descarga-da desde: http://www.microsoft.com/downloads/details.aspx?familyid=1e902c

21-340c-4d13-9f04-70eb5e3dceea&dis-

playlang=en

Inés Arbolí y José María Soler

Liberado ROTOR 2.0

Microsoft ha liberado la versión 2.0de SSCLI (Shared Source CommonLanguage Infrastructure), popularmenteconocida como ROTOR. Se trata de unaimplementación de referencia (en códi-go fuente) de las especificaciones ECMAde la infraestructura de .NET Frame-work y el lenguaje C#, que será de utili-dad a investigadores y desarrolladoresque deseen profundizar en el funciona-miento interno de esas tecnologías. Estaimplementación está destinada a ser com-pilada y ejecutada sobre Windows XP.

Entre las principales novedades queaporta esta segunda versión está elsoporte para todas las nuevas carac-terísticas incorporadas en C# 2.0 (gené-ricos, iteradores, métodos anónimos) ylas nuevas funcionalidades añadidas ala Librería de Clases Base (BCL) en.NET Framework 2.0.

Además...

Page 8: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

dotN

etM

anía

<<

8

dnm.noticias<<

dnm.noticias

Expo:QA trae por primera vez a Españaa Michael Bolton,el mayor experto mun-dial en Rapid Software TestingEn un curso de tres días,escrito por JamesBach y presentado por Michael Bolton,los asistentes obtendrán las claves delRapid Software Testing.

Michael Bolton es la única personaautorizada para impartir las enseñanzasde James Bach. Posee 15 años de expe-riencia en la industria informática, teste-ando, desarrollando, gestionando y escri-biendo sobre software. James Bach es unode los fundadores de Context-DrivenSchool of Software Testing.

La filosofía de Rapid Testing, pre-sentada en este curso, no se parece alos métodos tradicionales de test, queignoran la parte racional del mismo y,en cambio, abogan por un papeleointerminable. Actualmente, los pro-ductos son demasiado complejos paraeso y los testeadores resultan demasia-do caros. Rapid Testing utiliza un méto-do cíclico, así como métodos heurísti-cos para optimizar constantemente eltest y adecuarlo a los requisitos de susclientes. Rapid Testing no es solo un testde urgencia, es un test centrado en unamisión, que elimina el trabajo innece-sario, garantiza que se lleve a cabo todolo necesario, y constantemente pre-gunta qué puede hacer el test para ace-lerar el proyecto en su integridad.

El curso se celebrará el 28,29 y 30 dejunio en las instalaciones de inQA.labsen el Fòrum Nord de la Tecnologia.

Más información y reservas en:http://www.expoqa.com.

Además...

SQLU Summit Madrid 2006

El evento se dividirá en dos salas:• La sala de los Cubos: donde se

impartirá un track dedicado exclusi-vamente a Inteligencia de Negocio (BI)

• La sala de los Índices: donde seimpartirá un track dedicado a sistemasde bases de datos relacionales conSQL Server 2005.

En estas salas se impartirán las confe-rencias de forma simultánea, y los asis-tentes tendrán la flexibilidad de cambiarde sala tantas veces como sea necesariopara asistir a sesiones de ambos tracks encualquier momento.

Para aquellos interesados en temasmuy específicos, se ofrece la posibilidadde organizarse de modo que se pueda asis-tir de forma ordenada a sesiones con eltema deseado. Estos tracks virtuales pue-den ofrecer sesiones en diferentes salascuando así sea conveniente, ya que algu-

nas sesiones podrían ser marcadamenteDBA, mientras que otras tendrán mayororientación en BI.

Laboratorio de prácticas

Existe un laboratorio especial, conel patrocinio de Dell, para que practi-que las nuevas tecnologías que SQLServer 2005 aporta. En este laboratoriose impartirán en primicia en España loslaboratorios de actualización de SQLServer 2000 a 2005 que Solid QualityLearning preparó para MicrosoftCorporation, para el nuevo Kit deRecursos de Actualización a SQL Server2005 (de próxima aparición), así comoejercicios específicos para practicar lasnuevas tecnologías disponibles en SQLServer 2005.

Información y reservas en:http://www.sqlu.com/summits.aspx

Solid Quality Learning celebra el segundo SQLU Summit Madrid entre el 19y el 23 de junio de la mano de expertos de gran prestigio en SQL Server.

MSDN y Spain.NET presentan una nueva edición del CODECAMP

Si eres inquieto, emprendedor, tegusta lo que haces y además quieres vivirde ello, te proponemos pasar un fin desemana en Vic y compartir con gentecomo tú dos días donde sólo se hará unacosa: ¡escribir código!

Tendrás la oportunidad de aprenderlas últimas tecnologías que más sedemandan en la actualidad, con ponen-tes muy cualificados y con carácter

100% práctico, sin transparencias niadornos, sólo código.

Además si tienes alguna idea quequieras poner en práctica te ayudare-mos a hacerlo. Hablaremos de las dis-tintas posibilidades para escribir soft-ware por tu cuenta y tendrás a exper-tos que te podrán asesorar en tus pri-meros pasos. Y por supuesto cuentacon pasar un fin de semana divertido,con actividades y en un entorno pri-vilegiado.

MSDN y Spain.NET patrocinan el CodeCamp,un evento de fin de semana dirigido a desarrolladores de software.

Borland Day 2006El día 6 de junio, en el Palacio

Municipal de Congresos de Madrid,Borland celebrará la tercera edición delBorland Day.

En las distintas ponencias se mos-trarán las soluciones para la Optimizacióndel Desarrollo del Software de Borland ycasos reales de implementación de susherrramientas para el ciclo de vida delas aplicaciones. Este año contamos con

la presencia de Bill Curtis, director deprocesos de Borland, miembro del SEIy experto en implementaciones CMMI.La Calidad y la Metodología de Procesosestarán muy presentes durante la jor-nada, donde podrá ver el valor que apor-ta para su negocio la implementaciónde estas buenas prácticas.

Puede registrarse en la Web del even-to: http://www.borlandday.com.

Page 9: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles
Page 10: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Nuevas tecnologías y nuevas propuestas formativas

Alhambra-Eidos prepara un ambicioso programa de formación blended paracubrir la formación en Visual Studio 2005, SQL Server 2005, y otros nuevosproductos Microsoft.

una vorágine de cambios y cuandoalguien contribuye a asentar las cosas, todos debemosagradecerlo. Y eso es lo que están haciendo desdeAlhambra-Eidos con esa nueva oleada de tecnologíasque Microsoft está promoviendo: Visual Studio 2005,SQL Server 2005, BizTalk 2006, Sharepoint 2007, etc.

Lo mismo sucede con las certificaciones paradesarrolladores: están siendo cambiadas, ya no ten-dremos más MCAD y MCSD, nuevas siglas comoMCPD aparecen ahora, y es una imperiosa necesi-dad la existencia de centros donde éstas se puedanpreparar debidamente.

Para aclararnos lo que este líder de la formación tec-nológica está realizando para ayudar a los desarrollado-res, tenemos con nosotros a Antonio Quirós, su direc-tor de operaciones, que es, históricamente hablando,quien arrancó y ha impulsado durante muchos años losservicios de formación de la compañía.

¿Qué programas formativos está desarrollandoAlhambra-Eidos ante todos estos nuevos retos?

Somos conscientes de que estamos ante cambiosmuy importantes. Un cambio tecnológico relevante,ya que tenemos una oleada de productos como desdehace años no se daba. Visual Studio 2005, SQL Server2005, BizTalk 2006, SharePoint 2007, etc. Un cambioacadémico notorio, ya que Microsoft ha cambiado lastitulaciones para desarrolladores y ya no tendremosmás MCAD y MCSD. Por último, también un cam-bio cultural notorio en el entorno de cómo los técni-cos se forman. Cada vez la formación presencial esmenos posible de hacer, todos estamos muy ocupadosy no podemos restar mucho tiempo a nuestro trabajodiario para formarnos. Por otro lado la formación vir-tual ha demostrado que no siempre es la solución, yaque muchas personas necesitan más labor de transmi-sión de contenidos y tutorización. Nuestra respuesta

ante todos estos cambios es un nuevo panel de cursosenfocados a estas nuevas tecnologías, con el objetivode que el desarrollador alcance el máximo nivel de cer-tificación que Microsoft ofrece para desarrolladores (elMCPD orientado a Enterprise Applications Developers)y que esto se haga pensado para ser impartido en unprograma de tipo blended, con una mezcla proporcio-nada de la asistencia presencial a clases y del autoestu-dio de contenidos virtualizados.

Algunos centros de su competencia están ya ofre-ciendo cursos para la obtención de las nuevas certifi-caciones y ustedes están aún preparando su progra-ma. ¿Van más lentos que los demás?

Ni mucho menos. Simplemente tratamos de serhonestos. En este momento ni la propia Microsofttiene desarrollada la documentación oficial para cubriruna buena parte de los cursos oficiales y ni siquieraestán accesibles los exámenes oficiales, por tanto, sialguien dice que puede ofrecer este tipo de accionesformativas con los niveles de calidad adecuadas está

<< Estamos sumidos en

dotN

etM

anía

<<

10

Antonio Quirós, director de operaciones de Alhambra-Eidos

Page 11: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

faltando a la verdad. Nosotros estamoshaciendo bien las cosas. Hemos puestoa trabajar a nuestro mejor equipo deprofesionales, muchos de ellos bienconocidos por los lectores de esta revis-ta en tanto que son desarrolladores dereconocido prestigio y de los que apor-tan cosas continuamente a la comuni-dad de desarrolladores de Microsoft. Merefiero a Marino Posadas (MVPMicrosoft), a Luis Miguel Blanco, aÁngel Esteban, a Pepe Hevia y a otrosvarios algo menos populares hoy, peroque lo serán pronto. Ellos están desa-rrollando nuestro material formativo,nuestro asesoramiento para superar losexámenes oficiales y, además, todo ellodesde la nueva perspectiva de la forma-ción blended. Yo creo que podremos afir-mar sin riesgo de equivocarnos que deAlhambra-Eidos, como casi siempresucede, saldrán los primeros y mejorestitulados.

¿Cómo incide todo este proyectocon su ya popular Máster Alhambra-Eidos en Desarrollo de Software?

Bien, lo que realmente estamoshaciendo es reorientar nuestro másterpara que se enfoque hacia el objetivode lograr la certificación MCPDEnterprise Application Developer. Todoel courseware se está desarrollandoespecíficamente para formación blen-ded y, por tanto, habrá muchos módu-los específicos que se podrán impartirpor separado para lograr certificacio-nes de menos nivel.

¿En qué consiste ese nuevo forma-to blended?

Tratamos de confeccionar un pro-grama de alto nivel, comparable con elexecutive de una escuela de negocios yque se base en los mismos principios deestos cursos. Es decir, 40% de horas pre-senciales de clase frente a un 60% deautoestudio, orientación al caso, muchoslabs, etc. Para llevar esto adelante, nece-sitamos, por un lado, un buen coursewa-re, que es el que estamos confeccionan-do, un reconocido sistema de segui-miento de la autoformación, como esnuestro www.ElCampusDigital.com, porotro lado los formadores más cualifica-dos en cada tecnología y, por último, unabordaje de todo el programa enfocadoa la consecución de la certificación, conexámenes de prueba, sesiones de aseso-ramiento, etc. En resumen, los alumnossólo tienen que asistir a clase los vier-nes por la tarde y los sábados por la

mañana, el resto es autoestudio por suparte y tutorización por la nuestra.

¿Realmente es tan importante acce-der a la nueva certificación?

Bueno, te contestaré con otra pre-gunta: ¿conoces algún MCSD desem-pleado o con lo que se denomina empleobasura? Yo no conozco a ninguno, des-de luego. Son los profesionales másdemandados, mejor pagados y conmejor consideración en las compañías.Pues imagínate lo que sucederá cuandotengamos las primeras hornadas de titu-lados MCPD y aún no exista ningunoen el mercado. El progreso profesionalpara estas personas está garantizado y,desde luego, las empresas que cuentencon ellos tendrán la mejor garantía posi-ble en el desarrollo de sus proyectos desoftware.

En cuanto al ámbito tecnológico,¿Qué remarcarías de estos nuevos pro-gramas vuestros?

Yo remarcaría el enfoque industrialsobre el ciclo de vida del desarrollo desoftware que tratamos de imprimir. EnVisual Studio 2005 tenemos TeamSystem, que está totalmente enfocadohacia la coherencia en el proceso dedesarrollo de software, comenzando porla fase de diseño y garantizando la cohe-rencia a lo largo de todo el ciclo de vida.Este es nuestro principio fundamental.Nuestros cursos no sólo enseñan lopráctico de VB o C#, sino que tratan deenseñar cómo construir soluciones demodo organizado y coherente.

Más información: www.alhambra-eidos.com/master06-07.

dotN

etM

anía

<<

11

dnm.publireportaje

Yo creo que podemos afirmar sin riesgo de equivocarnos, que de Alhambra-Eidos, como casi siempre

sucede, saldrán los primeros y mejores titulados

Fundamentos para desarrolladores de los sistemas operativos Windows.Ingeniería de producto basada en Visual Studio 2005 Team System y en el estándar UML.Introducción a Visual Studio 2005 y al Framework 2.0.Diseño y programación de bases de datos con SQL Server 2005.Despliegue y mantenimiento de bases de datos con SQL Server 2005.Acceso a datos con ADO.Desarrollo de aplicaciones Windows.Aspectos básicos.Desarrollo de aplicaciones Web.Aspectos básicos.Desarrollo de aplicaciones Windows.Aspectos avanzados.Desarrollo de aplicaciones Web.Aspectos avanzados.Desarrollo de aplicaciones para dispositivos móviles.Desarrollo de aplicaciones distribuidas.Sharepoint Portal Server.Integración de soluciones con Biztalk Server.

Tabla de contenidos del Máster Alhambra-Eidos en Desarrollo de Software

Page 12: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Entrevista a David Intersimoney Jason Vokes

Con motivo del seminario efectuado en Madrid el pasado 8 de mayo como parte delDeveloper Studio 2006 World Tour,dotNetManía entrevistó a David Intersimone,actual Vicepresidente de Relaciones con los Desarrolladores de Borland y a JasonVokes,Director para Europa de la línea de productos Delphi/C++.La entrevista gana-ba aún más interés con motivo del reciente anuncio por parte de Borland de des-prenderse de la línea de entornos de desarrollo para concentrarse únicamente en lasherramientas de Ciclo de Vida del Software.

de la historia de lainformática en los últimos 30 años. ¿Puede contarnosalgo sobre sus inicios en este exigente mundo?

David. Yo no me considero ninguna leyenda, sinosólo un viejo programador que disfruta interactuandocon otros programadores. Entré en la universidad en1969 para estudiar Informática, y mi primer programafue escrito en FORTRAN. De eso hace ya 36 años, quees mucho tiempo. Conocí a Phillip Kahn en la feriaCOMDEX de Las Vegas de noviembre de 1983, y allíme enseñó un nuevo producto que tenía llamado TurboPASCAL. Yo lo probé y me di cuenta de que aquellorevolucionaría completamente la tecnología de pro-gramación del momento, así que decidí que tenía quetrabajar para esa empresa.Tomó algún tiempo, pero enjunio de 1985 ya estaba traba-jando para Borland. Siempreme ha apasionado el desarrollode herramientas de software, ypor eso sigo aún aquí despuésde tantos años.

Usted, Jason, también seha convertido desde hacemucho en un referente para laextensa comunidad de desa-rrolladores de Delphi y C++Builder. ¿Cómo fueron suscomienzos?

Jason. Bueno, yo vengo delmundo de la consultoría, y yahace diez años desde que entré

en Borland para trabajar en una línea de productos quesiempre me ha apasionado, la de Delphi y C++ Builder.

¿Cómo van las cosas en relación con la separaciónde la línea de productos de desarrollo de Borland? ¿Hayalgún plazo prefijado para la finalización del proceso?

David. Ahora mismo estamos en un punto en el quecomienzan las reuniones con los inversores. Se ha cons-tituido formalmente el Developer Tools Group, embriónde la futura empresa, del que Nigel Brown ha sido nom-brado Director General. Hemos reunido toda la docu-mentación necesaria sobre nuestros productos, las finan-zas, la distribución de los equipos de desarrollo en todoel mundo, nuestras expectativas para el futuro, etc. Enlas próximas semanas comenzaremos a hacer estas pre-

Octavio Hernández

dnm.directo.entrevistas

<< David, usted es una leyenda viva

David Intersimone,Vicepresidente de Relaciones con los Desarrolladores de Borland

Octavio Hernándezes redactor de

dotNetManía, Ingenieroen Informática de

Sistemas y MVP de C#.

Page 13: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

sentaciones, y luego vendrán las negocia-ciones. Esperamos que el proceso estéconcluido para el verano. Pero mientrastanto, el trabajo sigue avanzando en todoslos frentes.

Jason. Y por eso nosotros estamosaquí, visitando a nuestros clientes entodo el mundo, interactuando con ellosy al mismo tiempo potenciando nues-tras estructuras corporativas y las rela-ciones con nuestros partners, que con-tinúan aquí, trabajando más fuerte quenunca. Es realmente muy excitanteconstatar eso.

Una de las características que másnos impresionó del BDS 2006 fue laestrecha integración con la tecnologíade Borland Together, en la que se apo-yan características como la generaciónde código y la ingeniería inversa a par-tir de diagramas UML, o las auditoríasy métricas. ¿Afectará de alguna maneraa la disponibilidad de estas característi-cas en las próximas versiones del BDSla futura separación de Borland?

David. Está garantizado que dis-pondremos de licencias de utilizaciónde todas las tecnologías de Borland.Nuestros clientes pueden estar tran-quilos en este sentido. Cuando ToddNielsen (presidente de Borland) anun-ció la separación, también resaltó quecontinuaríamos siendo partners muy cer-canos. Así que en la medida en que avan-cen las tecnologías de Borland, porejemplo las relacionadas con el mode-lado UML, nosotros iremos recibiendolas actualizaciones correspondientes.

Adicionalmente, el equipo de desarro-lladores en San Petersburgo que traba-ja en todo lo relacionado con la inte-gración de los productos ALM en elBorland Developer Studio y JBuilderseguirá perteneciendo a nuestro reciénanunciado Grupo de Herramientas deDesarrollo.

Otra característica presente enDelphi 2005 y 2006 y que ha tenido ungran reconocimiento es la tecnologíaECO. ¿Qué puede decirnos sobre ella?

Jason. ECO provee un marco detrabajo corporativo completo y adapta-ble para el desarrollo de aplicaciones.NET guiadas por modelos paraWindows y la Web, que se apoya enestándares reconocidos como UML yOCL, del Object Management Group(OMG). Se trata de una tecnología yamadura (9 años), y de su desarrollo seencarga otro equipo nuestro localizadoen Estocolmo, que ya está trabajandoen la próxima versión, ECO IV.

¿Cómo van avanzando los trabajospara ofrecer el soporte para .NET 2.0en Highlander ?

David. El equipo principal en ScottsValley, California está desarrollandoahora todo lo necesario para garantizarese soporte, en particular todo lo rela-cionado con la incorporación al lenguajede los tipos genéricos y ese tipo de cosas.También hay gente trabajando en elsoporte para las tecnologías especifícas,como Windows Forms (incluyendo suencapsulado en la VCL) o ASP.NET2.0. Los trabajos se están desarrollandosegún la planificación prevista, y algomás adelante durante este año presen-taremos los resultados en las confe-rencias de desarrolladores y pondremosa disposición del público presentacio-nes preliminares.

La adición de nuevas característicasa Object Pascal para dar soporte a lasnuevas características del CLR como losgenéricos o los iteradores parece ser algonecesario, ¿no? ¿Estarán también dis-ponibles estas características para lasaplicaciones Win32?

David. Absolutamente. Yo y algunosotros miembros del equipo hemos veni-do abogando desde hace tiempo por poderdisponer de contenedores genéricos e ite-radores sobre esos contenedores, y sinduda se trata de una de las característicasmás solicitadas por los desarrolladores.Tenemos otras novedades más para el len-guaje en mente, aunque por supuesto loprimero es garantizar el soporte para.NET 2.0 y más allá. Por ejemplo, ahoraMicrosoft está promoviendo LINQ, y nocreo que nos sea muy difícil dar soporte aesa tecnología ya que tenemos desde hacemucho los class helpers, que permiten inyec-tar código dentro de las clases. Por supues-to, tenemos licencias de utilización detodas las tecnologías presentes y futurasde Microsoft, y esas licencias seguirán connosotros en la nueva empresa.

Nuestro objetivo es siempre mante-ner las implementaciones de Delphi para

Tenemos el firme compromiso de dar soporte a todaslas tecnologías y subsistemas de Microsoft

dotN

etM

anía

<<

13

dnm.directo.entrevistas<<

Jason Vokes, Director para Europa de la línea de productos Delphi/C++

Page 14: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Win32 y .NET sincronizadas en lo queal lenguaje se refiere, y aunque puede queen ciertas ocasiones algunas característi-cas aparezcan primero en una de las ver-siones, más adelante se implementan enla otra. Fue el caso, por ejemplo, de lasobrecarga de operadores.

¿Para cuándo debemos esperar elsoporte para las nuevas API de WindowsVista como WPF (Avalon) o WCF(Indigo)?

David. El soporte para Vista puedeverse como un proceso de varias fases. Loprimero es garantizar que el propio BDSy las aplicaciones que se generen con élfuncionen correctamente en WindowsVista. Ya eso garantiza que se puedan apro-vechar en cierta medida las ventajas delnuevo sistema operativo. Pero por supues-to, la segunda fase del soporte para Vistaen nuestra planificación consiste en imple-mentar el soporte directo para WPF, asícomo una versión de la VCL para WPF,y en extender nuestros servicios Web paraque funcionen sobre WCF. Even-tualmente, implementaremos también elsoporte para WinFS.

Hemos venido utilizando C++ Builderprácticamente desde su aparición. ¿En quédirecciones de futuro se trabaja actual-mente? ¿Tenéis planes para hacer posibleel desarrollo para .NET Framework uti-lizando C++? ¿Habéis pensado en incluirsoporte para C++/CLI en versiones futu-ras del BDS?

David. Continuaremos trabajando enC++ principalmente para seguir estre-chamente los avances del estándar ISO,del que se avecina una actualización. Ahoramismo ya ofrecemos en BDS 2006 sopor-te para algunas librerías que muy proba-blemente pasarán a formar parte de la

librería estándar de C++ en un futuro,como Boost o TR1 (implementada porDinkumware).

Jason. Nuestros clientes utilizan C++Builder principalmente para desarrollaraplicaciones y servicios nativos de alto ren-dimiento, con acceso directo y eficiente atodos los recursos de bajo nivel, y es muyimportante que continuemos sirviendo lo

mejor posible a esos clientes. Creo que esaes nuestra preocupación fundamental conrelación a C++ en este momento. A losprogramadores de C++ les es general-mente muy fácil adaptarse a C# para losdesarrollos en código manejado.

David. Con relación al soporte paraC++/CLI, creo que deberíamos esperarun tiempo para ver qué aceptación tieneentre los desarrolladores esta nueva tec-nología de Microsoft (que algunos vencomo un nuevo lenguaje por las exten-siones que incorpora), y qué posturatomará el Comité de Estandarización deC++ con relación a ella. Pienso que dada

nuestra relación con Microsoft, es posi-ble que simplemente licenciáramos en elmomento adecuado la tecnología en lugarde implementarla nosotros mismos. Perode momento no hay nada de eso en nues-tra hoja de ruta.

Por favor, unas palabras finales parala comunidad .NET en general.

David. A los desarrolladores .NETles decimos que nosotros tenemos el fir-me compromiso de dar soporte a todas lastecnologías y subsistemas de Microsoft,cosa que venimos haciendo desde los tiem-pos de Windows 3.1, luego Win32, COMy ahora .NET. Tenemos también el com-promiso de permitir a nuestros clientesno sólo avanzar hacia delante aprove-chando las nuevas tecnologías que apa-rezcan, sino también de mantener susinversiones y experiencia de muchos añosen el desarrollo de aplicaciones basadasen Windows y la VCL. Por eso intenta-mos ofrecer implementaciones de la VCLsobre las diferentes API, sin impedir elacceso directo a ellas cuando el progra-mador así lo requiera, y ofrecer un len-guaje común para la generación tanto decódigo nativo (que mucha gente aún sigueutilizando) como de código manejado.Esos son nuestros compromisos de caraal futuro, para así continuar ayudando almáximo a nuestros clientes.

Jason. Durante el seminario de hoymostraremos un montón de tecnologíasque ofrecen una gran potencia, flexibili-dad y alta productividad al desarrollador.Invitamos a todos los que no han visto aúnel BDS 2006 a que lo prueben, quedarángratamente sorprendidos.

dotN

etM

anía

<<

14

dnm.directo.entrevistas<<

Octavio Hernández con David Intersimone, durante la entrevista

Figura 1. Hoja de ruta para las futuras versiones de Delphi (BDS)

Page 15: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles
Page 16: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

qué son los WebParts y cómopodemos usarlos para personalizar nuestras páginasASPX sin apenas código. Ahora vamos a presentar algu-nas otras cuestiones más avanzadas para sacarle mayorpartido a los bloques de funcionalidad.

Personalización de bloquesCon lo visto hasta ahora, es el programador el que

decide de qué manera se van a comportar los bloquesdentro de la página o qué aspecto van a tener. Si estascapacidades las pudiésemos extender a nuestros usuariossería de gran utilidad, ya que serían ellos mismos los quedecidirían cómo quieren que sea cada bloque. La infra-estructura de WebParts de ASP.NET 2.0 nos propor-ciona todo lo necesario para facilitar esta capacidad.Veamos un ejemplo de cómo hacerlo.

En la página que hemos estado desarrollando ante-riormente añada, en la celda de la derecha, un controlEditorZonedesde la barra de herramientas de “ElementosWeb”. Sitúelo encima o debajo del catálogo de bloquesque ya teníamos. Por defecto, este control contenedorsólo muestra un espacio en blanco (para arrastrar otroscontroles) y un grupo de botones (“Aceptar”, “Cancelar”y “Aplicar”). En la barra de herramientas disponemosde varios controles que habilitan la edición de ciertascaracterísticas de nuestros bloques:• AppearanceEditorPart: se utiliza para personalizar las

propiedades de apariencia de cada bloque. Contemplacuestiones como el título a mostrar, las dimensiones,los bordes, etc.

• BehaviorEditorPart: personaliza el comportamien-to de cada bloque, ofreciendo gran cantidad de ajus-tes como la URL a la que se enviará al usuario cuan-do pulse en el título del bloque, el icono a mostrar

al lado del título, si se permitirá o no exportar el blo-que, o qué acciones se permitirán en el mismo (cerrar-lo, conectarlo, editarlo...).

• LayoutEditorPart: fundamentalmente sirve para con-trolar en qué zona de la página se ubicará el control.Evita tener que arrastrar los bloques, y es indispen-sable si queremos trabajar con navegadores que nosean Internet Explorer, ya que la distribución visualde bloques sólo funciona con este navegador por elmomento.

Arrastre un controlde cada uno de estostipos sobre la zona deedición que acabamosde crear. Podrá hacerseuna idea de qué propie-dades permite tocar cadauno con sólo leer sucontenido en la superfi-cie de diseño (figura 1).

En la lista de opcio-nes de la parte superiorañadiremos un nuevoenlace que servirá paraque la página se pongaen modo de edición:

WebPartManager1.DisplayMode =

WebPartManager.EditDisplayMode

Al pulsar este botón en tiempo de ejecución, el menúdesplegable de cada bloque tendrá una nueva opción“Editar”, que hará que aparezca la nueva zona de edi-ción de propiedades que acabamos de crear (figura 2).

WebParts en ASP.NET 2.0 (II)

En esta segunda entrega sobre la creación de páginas personalizables con WebParts,vamos a estudiar algunas características que van más allá de los conceptos básicos estu-diados anteriormente.

<< Hasta ahora hemos visto

José M.Alarcón

dnm.asp.net

José Manuel Alarcón es redactor de dotNetManía.

Es ingeniero industrial yespecialista en consultoría de

empresa.Ha escrito varios libros,y ha publicado más de

doscientos artículos sobreinformática e ingeniería en

revistas especializadas.Visita sublog en www.jasoft.org.

Figura 1

Page 17: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Pero... ¡un momento!, si se fija veráque el editor de comportamiento (delsegundo tipo) que habíamos arrastrado noaparece al editar las propiedades de unbloque. ¿Qué está pasando aquí?

Personalización global y porusuario

Por defecto, los usuarios de nuestraaplicación únicamente pueden efectuarpersonalizaciones que les afecten a ellosmismos. Es decir, los cambios que reali-cen sólo serán efectivos para su perfil deusuario. Los demás visitantes verán la con-figuración por defecto y podrán a su vezpersonalizarla sin afectar a otros.

El editor de propiedades de compor-tamiento sirve para decidir cosas comoque un bloque se pueda o no cerrar, edi-tar, etc. Este tipo de ajustes tiene una res-ponsabilidad importante, ya que afecta aqué cosas se pueden o no hacer en el por-tal. Como es lógico, esto no es algo quecualquier usuario debiera tocar, puestoque de ser así podría condicionar el usoque los demás usuarios hacen de los blo-ques. Por ello sólo determinados usuarioso grupos de usuarios tienen acceso a estaspropiedades.

A la hora de personalizar una pági-na existen dos modos de hacerlo: pági-na compartida (Shared) o por usuario(User). Cuando estamos en modo com-partido todos los cambios que hagamosen el portal se convertirán en carac-terísticas predeterminadas para éste y losnuevos usuarios (o los que no hayan per-sonalizado nunca) se verán afectados porellos. Se puede averiguar en qué modoestamos consultando la propiedad

Personalization.Scope del gestor deWebParts. Dado que esta propiedad es desólo lectura, para cambiar entre ellas sedebe emplear el método ToggleScope delmismo objeto Personalization. De todosmodos, como hemos dicho, no todos losusuarios pueden personalizar la página enámbito compartido, por lo que si inten-tamos el cambio y el usuario no tiene per-miso se producirá una excepción. Para evi-tarlo, debemos consultar la propiedadCanEnterSharedScope, que precisamentenos indica si es posible la edición en for-ma compartida para el usuario actual.

Aclarémoslo continuando con nues-tro ejemplo. Agregue dos botones de radiodebajo de los enlaces de la parte superior.Nómbrelos como rUsuario y rCompartiday asígneles el texto “Personal” y“Compartida” respectivamente. Esta-blezca su propiedad AutoPostback en ver-dadero y GroupName como “TipoPer-sonalización”. Ahora agregue el fuente 1al evento de carga de la página.

Es decir, si el usuario actual no tienederecho a personalizar el ámbito global(compartido) de la página desactivamos laopción correspondiente. Además, marca-mos la opción que está actualmente habi-litada con el segundo condicional.

En los eventos de cambio de selecciónde ambos controles agregue el código delfuente 2.

Es decir, si podemos, llamamos alcambio de ámbito al seleccionar cadacontrol.

Si ahora ejecutamos la aplicación,veremos que no nos deja pasar al modocompartido. De hecho, si lo intentásemosobtendríamos una excepción. El motivoes que hay que indicar de alguna maneraqué usuario o usuarios tienen derecho autilizar ese ámbito compartido. La formade hacerlo es mediante una entrada en elarchivo de configuración de la aplicación,como la del fuente 3.

El atributo roles de la etiqueta allowsirve para indicar una lista de grupos deusuario (o roles) que tienen permitida lapersonalización global del sitio. Podemos

dotN

etM

anía

<<

17

dnm.asp.net<<

Figura 2

If Not WebPartManager1.Personalization.CanEnterSharedScope ThenrCompartida.Enabled = False

End If

If WebPartManager1.Personalization.Scope = PersonalizationScope.User ThenrUsuario.Checked = True

ElserCompartida.Checked = True

End If

Fuente 1

Protected Sub rUsuario_CheckedChanged(ByVal sender As Object, _ByVal e As System.EventArgs) Handles rUsuario.CheckedChangedIf WebPartManager1.Personalization.CanEnterSharedScope And _

rUsuario.Checked ThenWebPartManager1.Personalization.ToggleScope()

End IfEnd Sub

Protected Sub rCompartida_CheckedChanged(ByVal sender As Object, _ByVal e As System.EventArgs) Handles rCompartida.CheckedChangedIf WebPartManager1.Personalization.CanEnterSharedScope And _

rCompartida.Checked ThenWebPartManager1.Personalization.ToggleScope()

End IfEnd Sub

Fuente 2

<WebParts><personalization><authorization><allow verbs=”enterSharedScope”

roles=”Admins”/></authorization>

</personalization></WebParts>

Fuente 3

Page 18: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

quitar “roles” y usar la opción “users” paraindicar usuarios concretos en lugar de gru-pos. De hecho, se pueden combinar ambasy también se puede emplear una etiquetadeny análoga para negar el permiso explí-citamente a usuarios o grupos. Si usamosel valor “*” para estos atributos, permiti-remos o denegaremos a todo el mundo lapersonalización compartida. En el ejem-plo incluido se ha dejado así para permi-tir las pruebas, pero en una aplicación realjamás deberíamos dejar un asterisco.

Si entramos en el ámbito compartidoveremos que, ahora sí, al editar un bloqueaparece también la zona de propiedadesde comportamiento que son globales(figura 3).

Propiedades personalizadasLos editores de propiedades que

hemos visto ofrecen muchas posibilida-des de personalización, pero aún así eshabitual que se nos queden cortas. Si tene-mos un WebPart de diseño propio segu-ramente tendremos la necesidad de adap-tar su funcionamiento a las particularida-des del dominio de nuestra aplicación. Porejemplo, si construimos un WebPart paramostrar el listado de las últimas facturasde nuestra empresa, podríamos crear unapropiedad personalizada que permitiera alos usuarios decidir la fecha de la facturamás antigua a mostrar, elegir entre variasseries de facturas, etc. Cada caso tendránecesidades particulares.

Para ello, es indispensable poder defi-nir propiedades especiales en nuestros blo-ques y habilitar su edición de un modoanálogo al que hemos visto para las pro-piedades genéricas.

Vamos a construir un sencillo controlcuyo objetivo será el de visualizar un men-saje que el usuario pueda escoger. A losusuarios les será útil, por ejemplo, paraapuntar en él cosas que deban recordar yque así verán cada vez que entren en elportal.

Cree un nuevo control de usuario denombre Notas.ascx. Arrastre sobre él unaetiqueta de ancho 100% y de nombrelblNota.

En realidad, definir una propiedadpersonalizable para un WebPart no difie-re de la creación de una propiedad comúnde un control, más que en el hecho de quese decora con ciertos atributos. Éstos indi-can a la infraestructura cómo debe tratarla propiedad. En nuestro caso, crearemosuna propiedad llamada Nota con el códi-go del fuente 4.

Con esto es suficiente. El primer atri-buto (Personalizable) indica el ámbito dela personalización (global o por usuario).El segundo de ellos (WebBrowsable) sirvepara indicar que la propiedad se debevisualizar durante la edición de propieda-des, mientras que los dos últimos(WebDisplayName y WebDescription) indi-can el encabezado de la propiedad y sudescripción para el editor.

Antes de poder usar éste o cualquiercontrol con propiedades no estándar,debemos añadir a nuestra zona de ediciónde propiedades un tipo de editor que antesno se ha mencionado: el PropertyGridEditorPart. Éste solo aparece si el bloqueque se está editando tiene propiedades noestándar, como es el caso.

Agregue nuestro nuevo control denotas al catálogo de la página como yahicimos con los anteriores. Arranque laaplicación y pulse el enlace “Catálogo”para añadir uno o varios controles de notasa la página. Pase a modo de edición de

propiedades (enlace “Propiedades”) y edi-te un control de notas. Escriba un textoen la propiedad personal y verá cómo sevisualiza en la página (sólo para usted, cla-ro). La figura 4 lo ilustra bien. La infra-estructura de WebParts se encarga de per-sistir el valor de la propiedad para que ensucesivas visitas a la página el usuario sigaviendo sus notas.

Según el tipo de la propiedad el edi-tor mostrará un control u otro. Si es unacadena (como en este ejemplo) será unacaja de texto, una lista desplegable con losvalores disponibles en el caso de una enu-meración, o una casilla de verificación parapropiedades booleanas. Se pueden creareditores personalizados para nuestras pro-piedades, pero ello se sale del ámbito deeste artículo.

Acciones personalizadasEn función del modo en el que se

encuentre la página, cada bloque mues-tra unas u otras acciones asociadas, comocerrar, editar, etc. Otra interesante posi-bilidad es la de crear nuestras propias

dotN

etM

anía

<<

18

dnm.asp.net<<

Figura 3

Private _Nota As String

<Personalizable(PersonalizationScope.User), _WebBrowsable(), WebDisplayName(“Nota a visualizar”), _WebDescription(“Ajuste el contenido de la nota”)> _Public Property Nota() As String

GetReturn _Nota

End GetSet(ByVal value As String)

_Nota = valueEnd Set

End Property

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadIf _Nota = “” Then

lblNota.Text = “Actualmente no hay notas disponibles”Else

lblNota.Text = _NotaEnd If

End Sub

Fuente 4

Figura 4

Page 19: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

acciones para, por ejemplo, ofrecer dife-rentes modos de visualización delWebPart, inicializar sus contenidos o loque nuestra imaginación decida en cadamomento.

Ello sólo es posible si hemos creadoun WebPart puro (no nos sirven los con-troles de usuario), ya que en este caso, alheredar de la clase WebPart, podremossobrescribir su propiedad Verbs.

Vamos a hacer un ejemplo sencillopara verlo en la práctica. Si recuerda, antescreamos un control UsuarioWebpart queservía para mostrar el nombre del usua-rio actual. Vamos a añadir una acción per-sonalizada a dicho control para que nospermita escoger en cada momento si elnombre del usuario se mostrará en mayús-culas o tal como lo devuelve el sistema. Sielegimos la opción de mayúsculas, la deja-remos marcada para indicarlo.

Lo primero que hay que hacer es cre-ar una nueva propiedad personalizable quellamaremos Mayusculas (fuente 5).

También tocamos el código de ren-derización para que muestre el nombrede usuario en mayúsculas en caso de queesta propiedad sea verdadera (se trata deun código trivial, por lo que no se mues-tra aquí).

Ahora debemos sobrescribir la pro-piedad de sólo lectura Verbs de nuestroWebPart, añadiendo las acciones persona-lizadas que deseemos (fuente 6).

Lo único que se hace es crear unacolección de elementos WebPartVerb quecontienen la definición de nuestras accio-nes personalizadas. El constructor de estetipo de elementos toma normalmente dosparámetros que son el identificador úni-co de la acción (así la podremos distinguirsi hay varias que comparten el mismoevento) y un delegado que apunta a unafunción que se llamará cuando un usua-

rio escoja esa acción. También establece-mos el texto y la descripción a mostrar ylo marcamos en el caso de que la propie-dad Mayusculas sea verdadera.

La definición del método que se lla-mará como resultado de usar esta acciónes el siguiente:

Como se puede observar, nada mássencillo. El efecto conseguido se puedever en la figura 5. Fíjese en que la opciónestá marcada, la descripción aparece aldejar el cursor encima y en que el nom-bre de usuario aparece en mayúsculas.

Inicialización de páginas

Es conveniente facilitar a los usuariosla posibilidad de dejar todo como estaba,ya que en muchas ocasiones, a base de

tocar en todas partes, la página puede que-dar irreconocible.

Es muy fácil proporcionar un botónde inicialización (o “reset” de la página).Agregue un enlace al lado de todos losanteriores con el texto “Reset”. En suevento de pulsación se llamará al métodoestático ResetUserState de la clasePersonalizationAdministration, pasán-dole bien el nombre de la página cuya per-sonalización queremos inicializar, bien elnombre del usuario cuya personalizaciónqueremos eliminar, o bien ambos.

El nombre de la página siempre sedebe indicar precediéndolo por “~/”, quehace referencia a la raíz de la aplicación(que no tiene por qué ser la raíz del ser-vidor). Nuestro código queda como se veen el fuente 8.

En este caso inicializamos sólo la pági-na actual. Redirigimos de nuevo a la pro-pia página para forzar la recarga de la mis-ma y que se vean los efectos de la inicia-lización.

En resumenEn esta segunda parte de la serie

sobre WebParts hemos visto con deta-lle algunas características avanzadas dela infraestructura que ASP.NET 2.0 nosproporciona. Todavía nos quedan algu-nas cosas interesantes por estudiar,como por ejemplo la conexión y tras-paso de datos entre los bloques. Esto loveremos en la próxima (y definitiva)entrega de la serie.

dotN

etM

anía

<<

19

dnm.asp.net<<

Private _mayusculas As Boolean<WebBrowsable(), Personalizable()> _Public Property Mayusculas() As Boolean

GetReturn _mayusculas

End GetSet(ByVal value As Boolean)

_mayusculas = valueEnd Set

End Property

Fuente 5

Public Overrides ReadOnly Property Verbs() AsSystem.Web.UI.WebControls.WebParts.WebPartVerbCollection

GetDim accion As WebPartVerbaccion = New WebPartVerb(“CambiaMays”, New WebPartEventHandler(AddressOf CambiaMayusculas))accion.Text = “Mayúsculas”accion.Description = “Mostrar el nombre de usuario en mayúsculas”accion.Checked = Me.MayusculasDim colAcciones() As WebPartVerb = New WebPartVerb() {accion}Return New WebPartVerbCollection(colAcciones)

End GetEnd Property

Fuente 6

Public Sub CambiaMayusculas(_ByVal sender As Object, _ByVal e As WebPartEventArgs)

Me.Mayusculas = Not Me.MayusculasEnd Sub

Fuente 7

Figura 5

Protected Sub LinkButton5_Click( ByVal sender As Object, ByVal e As System.EventArgs) _Handles LinkButton5.Click

PersonalizationAdministration.ResetUserState(“~/dotNetMania.aspx”)Response.Redirect(Request.FilePath)

End Sub

Fuente 8

Page 20: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

de dispositivos móviles como SmartPhoney Pocket PC ha aumentado en gran medida el desa-rrollo para este tipo de dispositivos. Visual Studio 2005representa un avance incuestionable en este sentido,al proporcionarnos distintas herramientas para losdesarrollos.

Hoy en día casi cualquier desarrollador con unteléfono móvil o Pocket PC con Windows Mobilese ha puesto manos a la obra para realizar sus “pro-gramas caseros”. En la mayoría de los casos, uno seencuentra con ciertas sorpresas cuando realmente vaa implementar estos programas en el dispositivo real,y la mayoría de estas sorpresas hacen referencia almodelo de seguridad. Frases como: “ mi Smartphoneno me permite instalar las aplicaciones; éstas tienenque tener un certificado digital…”, “no puedo depu-rar en el dispositivo real… ¿qué está pasando?…”son de las más usuales en los foros de desarrollo conCompact Framework.

A lo largo de este artículo trataremos de desglo-sar el modelo de seguridad de los dispositivos móvi-les y de mostrar una serie de recomendaciones quenos ayudarán a solventar todos estos problemas.

Procesos confiables y procesos normalesPodríamos decir que los procesos en Windows

Mobile corren de dos formas distintas: como proce-sos confiables (trusted) o como procesos normales.Los procesos confiables son aquellos que pueden lla-mar a cualquier elemento de la API de WindowsMobile o leer y escribir en cualquier sección del regis-tro. Por el contrario, los procesos normales no tie-

nen permitido invocar a ciertas librerías del sistema,un ejemplo sería invocar a la API de telefoníatapi.dll, ni escribir en ciertas zonas del registro deWindows Mobile.

Esta diferencia permite agregar un valor de segu-ridad a los dispositivos móviles, puesto que los pro-cesos corriendo en forma normal reducen el riesgode ejecución de código malicioso y de provocar algúnerror que dañe al dispositivo.

En la tabla 1 puede encontrarse una relación delibrerías que solamente pueden ser llamadas por pro-cesos confiables.

Una vez hecha la diferencia entre procesos con-fiables y normales es fácil entender el concepto dedispositivos One Tier y Two Tier. En los dispositi-vos One Tier, la mayoría de dispositivos PocketPC, cualquier proceso que se pueda ejecutar esconfiable. Por el contrario en el modelo Two Tier,ampliamente usado por dispositivos SmartPhoney previamente establecido por las operadoras, losprocesos pueden ejecutarse como procesos con-fiables o procesos normales.

Modelos de seguridad en dispositivos móviles

Los modelos de seguridad en dispositivos móviles son los grandes desconocidospara los desarrolladores de software; sin embargo, entenderlos es fundamentalpara comprender ciertos problemas en el desarrollo y realizar aplicaciones másseguras. Mediante este artículo trataremos de explicar, tanto desde el punto devista teórico como práctico, cómo funcionan los distintos modelos impuestospor los fabricantes y operadoras de telefonía.

<< Con la proliferación

Unai Zorrilla

dnm.movilidad

Unai Zorrillaes MVP en Compact

Framework y colaborafrecuentemente con MSDN

España en diversas iniciativas.Actualmente es Development

Advisor en Plain Concepts,empresa especializada en

plataforma .NET desde la cualimparte formación y

consultorías especializadas.

Componente API

ShortMessageService SmsSetMessageNotification

SmsClearMessageNotification

...

SIM Manager simUnlockPhone

simSetLockingStatus...

Tabla 1. Ejemplo de API restringidas a procesos confiables

Page 21: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Política de seguridad

La política de seguridad en los dispositivosWindows Mobile está marcada por una serie deconstantes especiales que se pueden encontrar enel header secpol.h. Estas constantes están repre-sentadas por un par clave/valor, hay aproximada-mente dos docenas de pares; algunas de ellas se des-criben en la tabla 2.

Teniendo en cuenta estas constantes clave/valor sepueden realizar distintas configuraciones de los disposi-tivos. Windows Mobile tiene por defecto 5 posibles con-figuraciones, tal y como se puede observar en la tabla 3.

Poniendo en práctica loaprendido

Llegados a este pasopodemos decir que enten-demos el modelo de segu-ridad expuesto en los dis-

positivos móviles. Sin embar-go, como suelepasar en casi

todos los casos, lomejor es pasar a la prác-

tica y ver realmentecómo podemos probar los

distintos modelos de seguridad.

Primeros pasos

La primera tarea a realizar será la creación de unnuevo proyecto para dispositivos móviles. En nues-tros ejemplos usaremos un proyecto para WindowsMobile 5.0 SmartPhone tal y como se puede obser-var en la figura 1.

Una vez creado el nuevo proyecto para dispositi-vo móvil arrancaremos el emulador adecuado y lo sin-cronizaremos mediante ActiveSync: para ello segui-mos los siguientes pasos:

dotN

etM

anía

<<

21

dnm.movilidad<<

ConstanteSECPPOLICY

Política de seguridad

4102 ¿Pueden ejecutarse aplicaciones no firmadas?

4122 ¿Se le pregunta al usuario cuando intenta arran-car una aplicación no firmada?

4123 ¿Es One Tier o Two Tier el dispositivo?

4097 ¿Qué permisos para llamadas RAPI se tienen?

Tabla 2. Constantes de SecPol.h

Configuración 4102 4122 4123 4097 Observaciones

Locked No (0) No (1) Two Tier (0) One Tier (1)

Desactivado(0) No incluye certificado de Mobile2Market

Third-Party-Signed No (0) No (1) Two Tier (0) One Tier (1)

Desactivado(0) Incluye el certificado de Mobile2Market

Two-Tier-Prompt Si(1) Si(0) Two Tier(0) Restringido(2) El emulador de SmartPhone de Visual Studio 2005 posee esta con-figuración por defecto.

One-Tier-Prompt Si(1) Si(0) One-Tier(1) Restringido(2) El emulador de Pocket PC de Visual Studio posee esta configuración

Security-Off Si(1) No(1) One-Tier(1) Allowed(1) No es lo recomendado por razones obvias.

Tabla 3. Las configuraciones estándar de seguridad.

Figura 1.Creación de un nuevo proyecto para dispositivos móviles

Page 22: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

• Arrancamos la herramienta Device EmulatorManager desde el menú “Herramientas de VisualStudio 2005” (véase la figura 2).

• Seleccionamos el emulador de SmartPhone paraWindows Mobile 5.0 y lo arrancamos.

• Configuración de ActiveSync para la sincroni-zación con el emulador.Con la llegada de Visual Studio 2005 tenemos la posi-bilidad de sincronizar los emuladores con ActiveSyncde igual forma que con un dispositivo real. Basta paraello una serie de pasos. El primero será el de indicara ActiveSync que permita conexiones por DMA en

el menú de configuración deconexiones tal y como pue-de verse en la figura 3.• Sincronización del emu-

lador de SmartPhone. Una vez configuradoActiveSync, para sincro-nizar el emulador de dis-positivo móvil basta condirigirse a la herramientaDevice Emulator Mana-ger y en menú contextualdel emulador seleccionarla opción “Cradle”; estopuede verse en la figura 4.

Aplicando las políticas de seguridad

Ahora ya podemos aplicar las políticas de seguri-dad con la finalidad de probar las mismas. Para elloVisual Studio 2005 nos ofrece una herramienta deconsola, rapiconfig.exe, que nos va a permitir esta-blecer las políticas de seguridad mediante archivos deprovisionamiento XML. Por defecto, tenemos variosarchivos de provisionamiento en la ruta Archivos deprograma\Microsoft Visual Studio 8\SmartDevices\

SDK\SDKTools\SecurityModels.Estos archivos de provisionamiento especifican los

valores de las constantes de secpol.h que habíamoscomentado al principio del artículo. Por ejemplo, siechamos un vistazo a la política locked.xml veremoslo siguiente.

Como puede observarse, lo que se está especifi-cando son los valores de las constantes, con lo cual essuficiente con modificar estos valores a nuestro gus-to para probar las distintas políticas que habíamos vis-to en la tabla 3.

Como primer ejemplo, veremos cómo aplicar lapolítica de seguridad Locked en el emulador. Comohabíamos comentado, disponemos de la herramientarapiconfig.exe para instalar archivos de provisiona-miento en el emulador sincronizado. Abrimos una con-

dotN

etM

anía

<<

22

dnm.movilidad<<

NOTA

Mobile2Market es un programa de Microsoft para ISV. Los desa-rrollos firmados y validados por Mobile2Market están abiertos a cual-quier dispositivo móvil ya que la mayoría de los dispositivos comoSmartPhone y Pocket PC poseen por defecto un certificado deMobile2Market. Puede encontrar más información acerca del progra-ma Mobile2Market en http://msdn.microsoft.com/mobility/windows-mobile/partners/mobile2market/default.aspx. ][

Figura 2.Arrancando DeviceEmulator Manager

Figura 3.ConfigurandoActiveSync para

permitir DMA

Figura 4. Sincronizando el emulador

<wap-provisioningdoc><characteristic type="SecurityPolicy"> <!-- Disallow unsigned apps --><parm name="4102" value="0"/> <!-- Prompt --><parm name="4122" value="0"/> <!-- 2-tier mode --><parm name="4123" value="0"/> </characteristic></wap-provisioningdoc>

Fuente 1

Page 23: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

sola y nos dirigimos a la ruta Archivos de programa\Microsoft Visual Studio 8\SmartDevices\SDK\

SDKTools.Ejecutamos el siguiente comando para proveer la

configuración de seguridad:

rapiconfig.exe /P /M ./SecurityModels/locked.xml

Una vez hecho esto, ya podremos ver como secomportaría un dispositivo con la política de seguri-dad Locked. Si en este punto intentáramos probar unaaplicación de dispositivo móvil desde Visual Studio2005 veríamos un error indicándonos que la políticade seguridad no permite tal acción, véase figura 5.

Este comportamiento es lógico si tenemos encuenta que el modelo Locked no permite la ejecuciónde aplicaciones no firmadas. Si en vez de estableceresta política de seguridad hubiéramos seleccionadoel modelo Prompt, se preguntaría si se desea permi-tir la ejecución de aplicaciones no seguras, tal y comopodemos ver en la figura 6.

Primeras conclusiones

Llegados a este punto ya sabemos cuáles son losmodelos de seguridad de los dispositivos móviles,la diferencia entre los procesos confiables y los pro-cesos normales. Además hemos visto cómo sincro-nizar un emulador de dispositivo móvil y aplicarmediante archivos de provisionamiento las distin-tas políticas de seguridad ayudándonos de la herra-mienta rapiconfig.exe. Sin embargo, aún no hemosvisto nada acerca de la firma de las aplicaciones paraconseguir la ejecución de éstas en dispositivos móvi-les que no permitan nada más que la ejecución deprocesos confiables, o bien no tengamos el mensajede confirmación de ejecución en modelos Prompt.

Firma de aplicacionesEn esta sección veremos cómo firmar las aplica-

ciones y revisar su comportamiento con los distintosmodelos de seguridad.

El primer paso a dar será el de instalar el certi-ficado que usaremos para firmar nuestras aplica-ciones. Si no disponemos de uno, el SDK deSmartPhone y PocketPC de Windows Mobile 5.0pone a nuestra disposición una serie de certificadosde prueba.

La ventana de propiedades del proyecto de dispo-sitivo móvil nos permite especificar si queremos fir-mar el proyecto y la selección del certificado con elque queremos realizar la firma, tal y como puede ver-se en la figura 7.

dotN

etM

anía

<<

23

dnm.movilidad<<

Figura 5. Error al intentar desplegar una aplicaciónen el emulador con política Locked

Figura 6.Confirmaciónde ejecución de una

aplicación no firmada Figura 7. Firma de aplicación con un certificado digital

Podríamos decir que los procesos enWindows Mobile corren de dos formas

distintas: como procesos confiables(Trusted) o como procesos normales

Page 24: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Para firmar el certificado hacemos clic en el botón“Seleccionar Certificado” y seleccionamos o impor-tamos el certificado, en nuestro caso para ver un ejem-plo completo vamos a importar el certificado de prue-ba, véase figura 8.

El certificado de prueba lo podemos obtener dela ruta C:\Archivos de programa\Windows CE

Tools\wce500\Windows Mobile 5.0 Smartphone

SDK\Tools.Una vez importado el certificado, ya podemos

hacer uso de él para firmar nuestra aplicación.

Cuando usábamos el modelo de seguridad Promptveíamos que puesto que la aplicación no estaba fir-mada, se nos presentaba un mensaje de confirma-ción para permitir o no la ejecución de la misma.Una vez firmada la aplicación, veremos como ya nose nos presenta el mensaje de confirmación con estemodelo. De igual forma si tenemos establecido elmodelo Locked, que recordamos que no permitía laejecución de aplicaciones no firmadas, la aplicaciónse implementará sin problemas.

Conclusiones

A lo largo de este artículo hemos presentado elmodelo de seguridad de los dispositivos móvilesWindows Mobile, además de ver cómo podemosimplementar las distintas políticas en los emuladoresde Visual Studio 2005 con la finalidad de ver su fun-cionamiento real. Para terminar se ha visto cómo fir-mar las aplicaciones con un certificado digital y hemospodido comparar el funcionamiento de éstas estandofirmadas o no. No debemos caer en el error de pen-sar que con firmar las aplicaciones con un certificadoes suficiente; el certificado debe de estar presente enel dispositivo. Por defecto los dispositivos vienen pre-provisionados de unos determinados certificados, entrelos que se encuentra el de Mobile2Market; es por elloque si deseamos probar el certificado de prueba conun dispositivo real necesitamos además añadir al dis-positivo los certificados raíz. Para ello podremos usarla herramienta rapiconfig.exe y el archivo de provi-sionamiento sdktestcerts.xml.

dotN

etM

anía

<<

24

dnm.movilidad<<

Figura 9. Selección del certificado importado

No debemos caer en el error de pen-sar que con firmar las aplicaciones con

un certificado es suficiente; el certificado debe de estar presente en

el dispositivo

Figura 8. Importación del certificado de prueba

Page 25: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

dotN

etM

anía

<<

25

Estilos en XAML

Con la llegada de Windows Vista se presentará también oficialmente WinFX, la nuevaplataforma para la creación de aplicaciones,que cubre dos grandes áreas del desarrollo:interfaces de usuario con WPF(Avalon),y comunicaciones con WCF (Indigo);tecnologíasambas que se perfilan como claves para la próxima generación de aplicaciones.En el pre-sente artículo vamos a realizar una revisión de los elementos que WPF pone a disposi-ción del desarrollador para aplicar estilos a los controles de nuestras ventanas.

<<Dentro del contexto del diseño de interfaces de

usuario, un estilo consiste en aquella característicadisponible en una herramienta de desarrollo, léaseIDE, lenguaje, diseñador visual, etc., que permitedefinir unas reglas comunes de aspecto, aplicables aun conjunto de elementos de nuestra interfaz.

XAML como lenguaje para definirinterfaces

XAML (Extensible Application MarkupLanguage), consiste en un esquema XML desarro-llado para la creación de interfaces gráficos enWPF (Windows Presentation Foundation), utilizan-do, como su propio nombre indica, una sintaxis demarcado para definir los elementos visuales. Dadoque este artículo versa sobre uno de los aspectosde la interfaz de usuario, y por lo tanto, será nece-sario crear ventanas de ejemplo con algunos con-troles básicos, se asume por parte del lector unmínimo conocimiento de XAML; en caso contra-rio, le remito al número 19 de dotNetManía, encuyo artículo “Primeros pasos con WindowsPresentation Foundation” de David Carmona,encontrará una magnífica introducción a este nue-vo subsistema gráfico.

Creando el proyecto de ejemploLos ejemplos presentados a lo largo de este artí-

culo se han desarrollado utilizando la versión CTP

de WinFX correspondiente a Enero de 2006, aun-que si el lector dispone de una versión posterior,también deberían funcionarle correctamente.Como entorno de desarrollo se ha utilizado VisualStudio 2005 (VS 2005 en lo adelante), ya que unavez instalados ambos productos, en VS 2005 dis-ponemos de plantillas de proyecto específicas paralos diferentes tipos de aplicaciones que podemosdesarrollar con WinFX. La figura 1 muestra el IDEde VS 2005, con la creación del proyectoEstilosXAML, utilizado para algunos de los ejem-plos de este artículo.

El lector puede encontrar todos los ejemplos quese exponen a lo largo de este artículo en la direcciónwww.dotnetmania.com.

Luis Miguel Blanco

dnm.futuro

Luis Miguel Blancoes redactor de dotNetManía. Es

consultor en Alhambra-Eidos.Haescrito varios libros y decenas de

artículos sobre la plataforma.NET (lalibreriadigital.com)

¿Qué es un estilo?

Figura 1. Proyecto de aplicación WinFX

Page 26: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

La utilidad de los estilos

Supongamos que comenzamos a diseñar una ven-tana con varios controles TextBox, los cuales debentener la misma apariencia. Para ello podemos escri-bir el código que vemos en el fuente 1.

El aspecto de la ventana quedaría como vemos enla figura 2.

Revisando el código del fuente 1, comprobamosque para que todos los TextBox tengan el mismo aspec-to en cuanto a color y letra, debemos repetir el mis-mo código uno por uno, lo cual supone un mayoresfuerzo de codificación. Podemos aliviar parte de estatarea repetitiva, y al mismo tiempo organizar mejornuestro código, si creamos un estilo para este tipo decontrol y lo aplicamos en nuestra ventana, como mues-tra el fuente 2.

En el fuente 2, dentro de la etiqueta de recursosde la ventana, Window.Resources, definimos un estilomediante la etiqueta Style.

El atributo TargetType, perteneciente a la etique-ta Style, nos permite especificar el tipo de control

sobre el que aplicamos el estilo. Seguidamente, paraestablecer las características que mostrará el controlal que se aplica el estilo, usaremos un asignador depropiedad, representado por la etiqueta Setter, en laque mediante los atributos Property y Value asigna-mos un valor a una propiedad del tipo de control des-tinatario del estilo; como es natural, podemos utilizartantos asignadores como propiedades del control que-ramos incluir en el estilo.

Como consecuencia de la creación de nuestroestilo, a cada control TextBox existente en el códi-go XAML de la ventana automáticamente se le apli-carán las propiedades definidas en el estilo, ahorrán-donos el trabajo de establecer dichas propiedadesindependientemente por cada control. Esto supo-ne ello una mejor organización y mantenimientode las mismas, al estar situadas en un punto cen-tralizado de nuestro código.

Estilos de aplicación explícita, o esti-los con nombre

En el ejemplo de estilo comentado en el apartadoanterior, podemos ver que no es necesario indicar acada uno de los controles TextBox el estilo a utilizar,dado que al ser declarado con el atributo TargetType,ya se aplica automáticamente a los controles. A estemodo de utilización del estilo se le denomina tambiénestilo de aplicación implícita.

Pero supongamos que no queremos que un esti-lo se aplique a todos los controles de un mismo tipouniformemente, o bien, queremos tener estilos que

dotN

etM

anía

<<

26

dnm.futuro<<

Fuente 1

<Window x:Class=”Window1”xmlns=”http://schemas.microsoft.com/winfx/avalon/2005”xmlns:x=”http://schemas.microsoft.com/winfx/xaml/2005”Title=”EstilosXAML” Height=”350” Width=”400”>

<Canvas><TextBox Name=”txtNombre”Canvas.Left=”10” Canvas.Top=”5”Background=”PaleGreen” FontWeight=”Bold”/>

<TextBox Name=”txtApellidos”Canvas.Left=”10” Canvas.Top=”40”Background=”PaleGreen” FontWeight=”Bold”/>

<TextBox Name=”txtCiudad”Canvas.Left=”10” Canvas.Top=”80”Background=”PaleGreen” FontWeight=”Bold”/>

</Canvas></Window>

Figura 2.Ventanacon controles

sin estilo

Fuente 2

<Window x:Class=”Window1”xmlns=”http://schemas.microsoft.com/winfx/avalon/2005”xmlns:x=”http://schemas.microsoft.com/winfx/xaml/2005”Title=”EstilosXAML” Height=”350” Width=”400”>

<Window.Resources><Style TargetType=”{x:Type TextBox}”><Setter Property=”Background”

Value=”PaleGreen”></Setter><Setter Property=”FontWeight” Value=”Bold”/>

</Style></Window.Resources>

<Canvas><TextBox Name=”txtNombre”Canvas.Left=”10” Canvas.Top=”5” />

<TextBox Name=”txtApellidos”Canvas.Left=”10” Canvas.Top=”40” />

<TextBox Name=”txtCiudad”Canvas.Left=”10” Canvas.Top=”80” />

</Canvas>

</Window>

Page 27: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

puedan ser asignados a tipos distintosde controles; es el momento de recurrira los estilos de aplicación explícita, tam-bién denominados estilos con nombre.

Los estilos con nombre se caracte-rizan porque al ser declarados se empleael atributo x:Key, con el cual asignamosun nombre al estilo. Posteriormente,desde el código XAML de un controlinvocaremos el estilo mediante su atri-buto Style y la sintaxis {StaticResourceNombreEstilo}. Esta técnica nos permi-te aplicar selectivamente estilos a loscontroles, lo que en ciertos escenariospuede ser más conveniente que la apli-cación global de un estilo a todos loscontroles de un determinado tipo.

En el fuente 3 ampliamos el códigode nuestra ventana de ejemplo aña-diendo un estilo con nombre, que apli-caremos a ciertos controles Label, y aun TextBox.

La figura 3 muestra el resultado dela ejecución de la ventana.

Nótese que en el caso de los estiloscon nombre, al definir el asignador, elatributo Property debe especificarse conel formato Clase.Propiedad, siendoClase el tipo de la plataforma corres-pondiente al control sobre el que se apli-ca, o un tipo más genérico en la jerar-quía de controles; es por esto que en elejemplo anterior también podríamoshaber declarado las etiquetas Settercomo muestra el fuente 4.

dotN

etM

anía

<<

27

dnm.futuro<<

Fuente 3

Figura 3.Ventanautilizando estilo

con nombre

Fuente 4

...<Setter Property=”Label.BorderBrush”

Value=”Orange”></Setter>...

<Window x:Class=”Window1” .... ><Window.Resources>....<Style x:Key=”styVarios”><Setter Property=”Control.BorderBrush” Value=”Orange”></Setter><Setter Property=”Control.BorderThickness” Value=”3”></Setter><Setter Property=”Control.Background” Value=”Aqua”></Setter>

</Style></Window.Resources>

<Canvas><LabelCanvas.Left=”10” Canvas.Top=”5”Content=”Nombre:”Style=”{StaticResource styVarios}” />

<TextBox Name=”txtNombre”Canvas.Left=”75” Canvas.Top=”5” />

<LabelCanvas.Left=”10” Canvas.Top=”40”Content=”Apellidos:”Style=”{StaticResource styVarios}” />

<TextBox Name=”txtApellidos”Canvas.Left=”75” Canvas.Top=”40” />

<LabelCanvas.Left=”10” Canvas.Top=”80”Content=”Ciudad:” />

<TextBox Name=”txtCiudad”Canvas.Left=”75” Canvas.Top=”80”Style=”{StaticResource styVarios}” />

</Canvas></Window>

Page 28: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

El lector puede pensar en este momento que siutilizamos Label.Propiedad en el asignador, el estilosólo sería válido para ser aplicado a controles Label;sin embargo, aunque esto parece lo más lógico no esasí, ya que el control TextBox al que se aplica el estilotambién lo aceptaría.

El motivo de este comportamiento reside en queal ser aplicado el asignador, éste es aceptado tanto porcontroles que se encuentran en el mismo árbol dejerarquía, como por aquellos que comparten la imple-mentación de la propiedad, caso este último que es elque nos ocupa actualmente.

El control Label se encuentra en el espacio denombres System.Windows.Controls.ContentControl,mientras que TextBox se halla ubicado enSystem.Windows.Controls.Primitives.TextBoxBase. Sinembargo, la implementación de las propiedades queusamos en el estilo styVarios del ejemplo es compar-tida por ambas clases, y esto hace que podamos decla-rar en el atributo Property del asignador cualquierade las dos clases, con la seguridad de que el estilo seráaplicado indistintamente a controles de ambos tipos,como vemos en el fuente 5.

También puede darse el caso contrario: controlescon propiedades específicas, las cuales no existen enotros controles de nuestra ventana. En esta situaciónigualmente podemos crear un único estilo y asigna-dores para este tipo de propiedades.

Como ejemplo ilustrativo tenemos el controlTextBox con su propiedad Text, y por otra parte elcontrol CheckBox con su propiedad IsChecked. El

fuente 6 demuestra cómo es posible crear un esti-lo con un asignador para cada una de estas propie-dades, y utilizarlo sin que los asignadores entren enconflicto. Al ser aplicado el estilo, lo que sucederáes que si un asignador no encuentra la propiedaden el control de destino, simplemente no será teni-do en cuenta.

Para el código del fuente 6 se ha creado en el pro-yecto una nueva ventana con el nombre Window2; enel caso de necesitar que la ventana inicial sea ésta,debemos editar el archivo MyApp.xaml, y en el atribu-to StartupUri asignar el nombre de la ventana inicialdel proyecto, como vemos en el fuente 7.

Herencia de estilos Gracias al atributo BasedOn de la etiqueta Style,

podemos crear un estilo hijo a partir de un estilo defi-nido anteriormente, de manera que el nuevo estilotendrá todos los asignadores del estilo padre más lospropios que él defina, como vemos en el ejemplo delfuente 8.

dotN

etM

anía

<<

28

dnm.futuro<<

Fuente 5

...// podemos declarar el asignador así<Setter Property=”Label.BorderBrush” Value=”Orange”></Setter>....// y también así<Setter Property=”TextBox.BorderBrush” Value=”Orange”></Setter>...

Fuente 8

<Window.Resources><Style x:Key=”styPadre”><Setter Property=”Button.Background” Value=”SkyBlue”/><Setter Property=”Button.Foreground” Value=”Red”/>

</Style>

<Style x:Key=”styHijo” BasedOn=”{StaticResource styPadre}”><Setter Property=”Button.FontSize” Value=”18”/><Setter Property=”Button.Opacity” Value=”0.5”/>

</Style></Window.Resources>

<Canvas><ButtonCanvas.Left=”5” Canvas.Top=”5”Style=”{StaticResource styPadre}”>ACEPTAR

</Button>

<ButtonCanvas.Left=”100” Canvas.Top=”5”Style=”{StaticResource styHijo}”>CANCELAR

</Button></Canvas>

Fuente 7

<Application x:Class=”MyApp”xmlns=”http://schemas.microsoft.com/winfx/avalon/2005”xmlns:x=”http://schemas.microsoft.com/winfx/xaml/2005”StartupUri=”Window3.xaml”><Application.Resources>

</Application.Resources></Application>

Fuente 6

<Window.Resources><Style x:Key=”styNuevo”>

<Setter Property=”TextBox.Text” Value=”Introduzca su nombre” /><Setter Property=”CheckBox.IsChecked” Value=”True” />

</Style></Window.Resources>

<Canvas><TextBox Canvas.Left=”5” Canvas.Top=”5” Style=”{StaticResource

styNuevo}” />

<CheckBox Canvas.Left=”150” Canvas.Top=”5”Content=”Comprobar” Style=”{StaticResource styNuevo}” />

</Canvas>

Page 29: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

En la figura 4 podemos apreciar ladiferencia en la aplicación de ambosestilos.

Ámbito de estilosEl radio de acción que abarca un

estilo depende básicamente del lugar

dentro del código en donde el estilo esdeclarado. En los ejemplos vistos hastael momento hemos declarado los esti-los en la etiqueta de recursos de la ven-tana, de forma que todos los controlescontenidos en la misma recibían el esti-lo si ello era menester.

No obstante, podemos reducir oampliar esta zona de influencia del esti-lo; por ejemplo, si lo declaramos en elarchivo MyApp.xaml del proyecto, dentrode la etiqueta Application.Resources, elestilo se aplicará globalmente a todoslos controles de la aplicación definidospor el estilo. Como contrapartida, si cre-amos un estilo en un elemento con unrango de influencia menor, como pue-de ser el Canvas de una ventana, sóloafectará a los controles situados dentrode dicho elemento.

Para ilustrar las mencionadas situa-ciones, vamos a crear un proyecto conel nombre AmbitoEstilos, que con-tenga dos ventanas. A nivel de aplica-ción crearemos un estilo que aplica-remos a los controles Button; en losrecursos de una de las ventanas tam-bién añadiremos un estilo para losTextBox; y dentro del Canvas, el esti-lo será para los CheckBox, como vemosen el fuente 9.

En la figura 5 vemos el aspecto delos formularios de este ejemplo.

Estilos por códigoAunque en la mayoría de las ocasio-

nes manipularemos nuestros estilosdeclarativamente desde XAML, tam-bién es posible realizar su creación yasignación desde el código de nuestraaplicación.

dotN

etM

anía

<<

29

dnm.futuro<<

Fuente 9

<!—MyApp.xaml—><Application x:Class=”MyApp”xmlns=”http://schemas.microsoft.com/winfx/avalon/2005”xmlns:x=”http://schemas.microsoft.com/winfx/xaml/2005”StartupUri=”Window1.xaml”>

<Application.Resources><Style TargetType=”{x:Type Button}”><Setter Property=”Background” Value=”SkyBlue”/><Setter Property=”Width” Value=”100”/><Setter Property=”Height” Value=”40”/>

</Style></Application.Resources>

</Application>

<!—Window1.xaml—><Window x:Class=”Window1”xmlns=”http://schemas.microsoft.com/winfx/avalon/2005”xmlns:x=”http://schemas.microsoft.com/winfx/xaml/2005”Title=”AmbitoEstilos” Width=”200” Height=”200”><Window.Resources><Style TargetType=”{x:Type TextBox}”><Setter Property=”FontSize” Value=”18”/><Setter Property=”FontStyle” Value=”Italic”/><Setter Property=”FontWeight” Value=”UltraBold”/>

</Style></Window.Resources>

<Canvas><Canvas.Resources><Style TargetType=”{x:Type CheckBox}”><Setter Property=”IsChecked” Value=”True”/><Setter Property=”BorderThickness” Value=”5”/>

</Style></Canvas.Resources>

<TextBox Canvas.Left=”5” Canvas.Top=”5” Width=”150” /><Button Name=”btnAbrir” Canvas.Left=”5” Canvas.Top=”50” Content=”Abrir ventana” /><CheckBox Canvas.Left=”5” Canvas.Top=”100” Content=”Comprobado”/>

</Canvas></Window>

<!—codebehind de Window1.xaml—>Private Sub btnAbrir_Click(ByVal sender As Object, ByVal e AsSystem.Windows.RoutedEventArgs) Handles btnAbrir.Click

Dim oWin2 As Window2 = New Window2oWin2.Show()

End Sub

<!—Window2.xaml—><Window x:Class=”Window2”xmlns=”http://schemas.microsoft.com/winfx/avalon/2005”xmlns:x=”http://schemas.microsoft.com/winfx/xaml/2005”Title=”AmbitoEstilos” Width=”200” Height=”200”><Canvas><Button Name=”btnAceptar” Canvas.Left=”5” Canvas.Top=”5” Content=”Aceptar” />

</Canvas></Window>

Figura 5. Estilos con diferenteámbito

Figura 4. Controlescon herencia de estilos

Page 30: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Para acceder a un estilo desde el code-behind denuestra aplicación, debemos llamar al métodoFindResource() de la clase Window, pasándole comoparámetro una cadena con el estilo a recuperar. Estaoperación nos devolverá un objeto Style que pode-mos asignar a los controles de la ventana.

En el caso de que necesitemos crear los estilosdinámicamente en tiempo de ejecución, instanciare-

mos un objeto de la clase Style, a cuya colecciónSetters iremos añadiendo, también dinámicamente,tantos objetos asignadores como queramos que ten-ga el estilo.

Como ejemplo de creación dinámica de estilos,crearemos un nuevo proyecto con el nombreEstilosPorCodigo, con la definición de ventana enXAML, que vemos en el fuente 10.

Es de destacar en este fuente el asignador deestilo que establece el valor para la propiedadBackground. Como puede comprobar el lector, enesta ocasión no asignamos un nombre simple decolor para la propiedad, sino que utilizamos un obje-to LinearGradientBrush, que crea el color a partir deun degradado basado en la mezcla de varios colores.

Puesto que se trata de un valor complejo para asig-nar a la propiedad Background del estilo, utilizaremosla etiqueta Setter.Value, incluyendo en su interior elvalor para la propiedad.

Para aplicar el estilo creado en el XAML, utiliza-remos un control CheckBox, mientras que para crearun nuevo estilo por código emplearemos un Button.El fuente 11 muestra el código en el que se imple-menta esta tarea.

dotN

etM

anía

<<

30

dnm.futuro<<

Fuente 10

<Window x:Class=”Window1”xmlns=”http://schemas.microsoft.com/winfx/avalon/2005”xmlns:x=”http://schemas.microsoft.com/winfx/xaml/2005”Title=”EstilosPorCodigo” Height=”262” Width=”336”>

<Window.Resources><Style x:Key=”styControles”><Setter Property=”Control.FontWeight” Value=”Heavy”/>

<Setter Property=”Control.Background”><Setter.Value><LinearGradientBrush StartPoint=”0,0.5” EndPoint=”1,0.5”><LinearGradientBrush.GradientStops><GradientStop Color=”GreenYellow” Offset=”0”/><GradientStop Color=”Cyan” Offset=”0.30”/><GradientStop Color=”Pink” Offset=”0.70”/>

</LinearGradientBrush.GradientStops></LinearGradientBrush>

</Setter.Value></Setter>

</Style></Window.Resources>

<Canvas><Button Name=”btnAceptar”Canvas.Left=”10” Canvas.Top=”10”Width=”100” Height=”50” Content=”Aceptar”/>

<ListBox Name=”lstCiudades”Canvas.Left=”10” Canvas.Top=”100”Width=”100” Height=”100”><ListBoxItem>Bruselas</ListBoxItem><ListBoxItem>París</ListBoxItem><ListBoxItem>Londres</ListBoxItem>

</ListBox>

<CheckBoxName=”chkAplicarEstilo”Canvas.Left=”125” Canvas.Top=”10”>Aplicar estilo

</CheckBox>

<ButtonName=”btnCrearEstilo”Canvas.Left=”125” Canvas.Top=”50”Width=”100” Height=”25”>Crear estilo

</Button>

<TextBox Name=”txtNombre”Canvas.Left=”125” Canvas.Top=”90”Width=”150” Height=”50”>Prueba

</TextBox></Canvas>

</Window>

Fuente 11

Partial Public Class Window1Inherits Window

Private Sub chkAplicarEstilo_Click( ByVal sender As Object,_ByVal e As System.Windows.RoutedEventArgs) _Handles chkAplicarEstilo.Click

‘ aplicar/quitar desde código un estilo definido en xamlIf Me.chkAplicarEstilo.IsChecked Then

Me.btnAceptar.Style = _CType(Me.FindResource(“styControles”), Style)

Me.lstCiudades.Style = _CType(Me.FindResource(“styControles”), Style)

ElseMe.btnAceptar.Style = NothingMe.lstCiudades.Style = Nothing

End IfEnd Sub

Private Sub btnCrearEstilo_Click(ByVal sender As Object,_ByVal e As System.Windows.RoutedEventArgs)_Handles btnCrearEstilo.Click

‘ crear estilo por código y aplicarlo a un controlDim styCaja As Style = New Style(GetType(TextBox))styCaja.Setters.Add( New Setter(BackgroundProperty,_

Brushes.Aquamarine))styCaja.Setters.Add( New Setter(FontFamilyProperty,_

New FontFamily(“Arial Black”)))styCaja.Setters.Add(New Setter(BorderThicknessProperty,_

New Thickness(7)))

Resources.Add(“styCajaTexto”, styCaja)Me.txtNombre.Style = styCaja

End SubEnd Class

Page 31: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

La figura 6 muestra la ventana en ejecución des-pués de haberle aplicado estos estilos por código.

Aplicación directa de estilo en la declara-ción del control

Si bien esta técnica la usaremos en raras ocasio-nes, ya que implica un trabajo adicional de codifica-ción y un nulo reaprovechamiento del estilo, debe-mos saber que es posible crear estilos en la propiadeclaración del control, como vemos en el fuente 12.

Estilos y plantillas de datos

Supongamos que creamos un proyecto con el nom-bre EstilosPlantillasDatos, y escribimos una clasecuyos objetos queremos visualizar a través de un con-trol situado en la ventana del proyecto. El código dela clase podemos verlo en el fuente 13.

A continuación escribimos el código de definiciónde la ventana, que tenemos en el fuente 14.

Y por ultimo, en el evento Click del botón ins-tanciamos un objeto de la clase Empleado, y lo asigna-mos al control Label, como muestra el fuente 15.

dotN

etM

anía

<<

31

dnm.futuro<<

Fuente 12

<Button Name=”btnHola”Canvas.Top=”150” Canvas.Left=”20”Height=”30”><Button.Style>

<Style><Setter Property=”Button.Background”

Value=”Yellow”></Setter><Setter Property=”Button.FontSize”

Value=”16”></Setter><Setter Property=”Button.Width”

Value=”200”></Setter></Style>

</Button.Style>Hola

</Button>

Fuente 13

Public Class EmpleadoPrivate nCodigo As IntegerPrivate sNombre As String

Public Property Codigo() As IntegerGet

Return nCodigoEnd GetSet(ByVal value As Integer)

nCodigo = valueEnd Set

End Property

Public Property Nombre() As StringGet

Return sNombreEnd GetSet(ByVal value As String)

sNombre = valueEnd Set

End Property

Public Sub New( ByVal nCod As Integer, ByVal sNom As String)nCodigo = nCodsNombre = sNom

End SubEnd Class

Fuente 14

<Window x:Class=”Window1”xmlns=”http://schemas.microsoft.com/winfx/avalon/2005”xmlns:x=”http://schemas.microsoft.com/winfx/xaml/2005”Title=”EstilosPlantillasDatos” Height=”328” Width=”352”>

<Canvas><Button Name=”btnAsignar”Canvas.Left=”10” Canvas.Top=”10” Content=”Asignar objeto”/>

<Label Name=”lblPrueba”Canvas.Left=”10” Canvas.Top=”50”Width=”200” Height=”80”Background=”LightBlue”>Etiqueta de prueba

</Label></Canvas>

</Window>

Fuente 15

Partial Public Class Window1Inherits Window‘....Private Sub btnAsignar_Click(ByVal sender As Object, _

ByVal e As System.Windows.RoutedEventArgs) _Handles btnAsignar.Click

Dim oEmpleado As Empleado = New Empleado(12350, “Alberto”)Me.lblPrueba.Content = oEmpleado

End SubEnd Class

Figura 6. Estilos aplicados por código

Page 32: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Si esperamos que, al pulsar btnAsignar, el controlLabel al que hemos asignado el objeto muestre las pro-piedades del mismo, vamos por el camino equivoca-do, ya que el control carece de la lógica necesaria parasaber representar un tipo complejo de la plataforma,como vemos en la figura 7.

Lo que está sucediendo en la figura 7 es que elcontrol Label detecta que tiene un objeto Empleado ensu propiedad Content, y sabe que de alguna maneradebe interpretarlo y mostrarlo, pero al no haberleindicado la forma de visualizar el objeto, opta por lla-mar al método genérico ToString(), que devuelve unacadena con el espacio de nombres y nombre de la cla-se Empleado.

Para solucionar este problema, debemos dotar alcontrol Label de un comportamiento inteligente eneste aspecto utilizando una plantilla de datos, repre-sentada en WPF por un objeto DataTemplate.

Un objeto DataTemplate permite, desde el códigoXAML de la ventana, especificar cómo van a ser repre-sentados visualmente los miembros de un tipo de.NET Framework a través de un control situado endicha ventana; para ello, el elemento primario quedebe tener un DataTemplate es un objeto contenedor(cualquier derivado de la clase Panel), dentro del cualespecifiquemos los controles encargados de visuali-zar el objeto a representar.

Dado que necesitamos acceder desde el códigoXAML a un objeto de la plataforma gestionado porel CLR (la clase Empleado en este ejemplo), es pre-ciso declarar este hecho, es decir, mapear el espa-cio de nombres en el que está la clase, para que seaaccesible desde XAML; esto lo conseguimosmediante la etiqueta Mapping al comienzo del códi-go de definición de la ventana, como vemos en elfuente 16.

Seguidamente en el código XAML tambiéndebemos especificar, mediante el atributoxmlns:EspacioNombresXML, el objeto que vaya a haceruso del espacio de nombres que acabamos de mapear,en este caso la ventana, como muestra el fuente 17.

El próximo paso consiste en crear elDataTemplate dentro de la zona de recursos de laventana, especificando el tipo de objeto cuyosmiembros va a representar en su interior, utilizan-do para ello el atributo DataType, y la sintaxis {x:TypeEspacioNombres:Clase}. También deben declararselos controles a utilizar para representar el objeto,y dentro de cada uno de ellos, establecer el enlaceo DataBinding con los miembros del objeto, usan-do la sintaxis {Binding Path=PropiedadClase}. Verel fuente 18.

dotN

etM

anía

<<

32

dnm.futuro<<

Fuente 16

<?Mapping XmlNamespace=”mio” ClrNamespace = ”EstilosPlantillasDatos” ?>

Fuente 17

<Window x:Class=”Window1”

xmlns=”http://schemas.microsoft.com/winfx/avalon/2005”

xmlns:x=”http://schemas.microsoft.com/winfx/xaml/2005”xmlns:mio=”mio”Title=”WindowsApplication1”Height=”362” Width=”426”>

. . . .

. . . .</Window>

Fuente 18

<Window.Resources><DataTemplate DataType=”{x:Type mio:Empleado}”><StackPanel Orientation=”Vertical”

Background=”LawnGreen”><Label Content=”{Binding Path=Codigo}”

HorizontalAlignment=”Left” /><TextBox Text=”{Binding Path=Nombre}” />

</StackPanel></DataTemplate>

</Window.Resources>

Figura 7. Objeto Empleadoasignado a control Label

Gracias al atributo BasedOnde la etiqueta Style, podemos

crear un estilo hijo a partir de un estilo definido anteriormente

Page 33: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Tras realizar todas estas operaciones, al ejecu-tar de nuevo nuestra ventana, el control LabellblPrueba ya sabrá cómo interpretar visualmente elobjeto Empleado, mostrándose como vemos en lafigura 8.

Pero estamos en un artículo sobre estilos, y elDataTemplate muestra el objeto “en bruto”, es decir,sin formateo alguno; es por ello que ahora vamos acrear estilos en los recursos de la ventana, que utili-zaremos desde la plantilla de datos, para que el obje-to Empleado tenga una apariencia adaptada a nuestrosgustos. Veamos para ello el fuente 19.

La información mostrada por la plantilla de datosal ejecutar de nuevo la ventana será la misma, pero suapariencia será muy diferente gracias a la aplicacióndel estilo, como vemos en la figura 9.

Desencadenadores de estilosUn desencadenador o trigger es aquel elemento

que ejecuta una acción cuando ocurre una determi-nada circunstancia en nuestro código.

En el contexto de los estilos en XAML un desen-cadenador consiste en una etiqueta con el nombreTrigger, definida dentro de un estilo, que aplicará losasignadores que contiene siempre y cuando se cum-pla la condición definida en el desencadenador.

Los desencadenadores de estilos en WPF se cla-sifican en varias categorías, en función del elementosobre el que actúan; así tenemos desencadenadorespara propiedades, para objetos del CLR, y para even-tos. En los siguientes apartados trataremos cada tipopor separado.

Desencadenador para propiedadSe trata del tipo más básico, y su funcionamiento se

basa en el siguiente mecanismo: cuando la propiedaddefinida en el atributo Property tenga el valor indica-do en el atributo Value, se aplicarán los asignadores defi-nidos en el interior de la etiqueta Trigger. Como ejem-plo ilustrativo, crearemos un proyecto con el nombreDesencadenadorPropiedad, y en el XAML de su venta-na escribiremos el código del fuente 20.

dotN

etM

anía

<<

33

dnm.futuro<<

Figura 8. Objeto visualizadomediante un DataTemplate

Fuente 19

<Window.Resources><Style x:Key=”styEtiqueta”><Setter Property=”Control.FontWeight” Value=”Bold”/><Setter Property=”Control.Background” Value=”Pink”/><Setter Property=”Control.Width” Value=”30”/>

</Style>

<Style x:Key=”styCaja”><Setter Property=”Control.Background” Value=”Gold”/>

</Style>

<DataTemplate DataType=”{x:Type mio:Empleado}”><StackPanel Orientation=”Vertical”

Background=”LawnGreen”><Label Content=”{Binding Path=Codigo}”

Style=”{StaticResource styEtiqueta}”HorizontalAlignment=”Left” />

<TextBox Text=”{Binding Path=Nombre}”Style=”{StaticResource styCaja}” />

</StackPanel></DataTemplate>

</Window.Resources>

Figura 9. DataTemplate con estilos

Fuente 20

<Window x:Class=”Window1” …. ><Window.Resources><Style x:Key=”styCaja”><Style.Triggers><Trigger Property=”IsFocused” Value=”True”><Setter Property=” TextBox.Background”

Value=” LightCoral “/><Setter Property=”TextBox.FontWeight”

Value=”Bold”></Setter></Trigger>

</Style.Triggers></Style>

</Window.Resources><Canvas><TextBox Width=”150”Canvas.Left=”10”Canvas.Top=”10”Text=”prueba”/>

<TextBox Width=”200”Canvas.Left=”10”Canvas.Top=”40”Text=”otro texto”Style=”{StaticResource styCaja}”/>

</Canvas></Window>

Page 34: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Al ejecutar el fuente 20, al segundo TextBox le seráaplicado el estilo cuando obtenga el foco, ya que estaes la condición establecida en el desencadenador. Lafigura 10 muestra esta situación.

Pero el uso de desencadenadores no está limi-tado a un único desencadenador por cada estilo,sino que podemos definir tantos como necesitemos.En el fuente 21 realizamos una pequeña variacióndel anterior ejemplo, de modo que ahora tendre-mos múltiples desencadenadores para un mismoestilo.

Además de comprobar si el control tiene el foco,también se comprobará si el contenido del TextBoxcorresponde a una determinada cadena.

Desencadenador para datosEste tipo de desencadenador se utiliza en com-

binación con una plantilla de datos, para aplicar unoo varios estilos a los componentes de dicha plantillautilizados para visualizar los miembros de un obje-to, pero en este caso cuando se cumpla una deter-minada condición.

Basándonos en el ejemplo de un apartado anterior sobre estilos aplicados a un DataTemplate, vamos a crear un proyecto con el nombreDesencadenadorDatos, en el que deberemos incluirel código de la clase Empleado, realizando sobre elXAML de la ventana algunos retoques, consisten-

tes en crear dos estilos que incorporen un desen-cadenador por cada propiedad del objeto Empleado,como vemos en el fuente 22.

dotN

etM

anía

<<

34

dnm.futuro<<

Fuente 22

<?Mapping XmlNamespace=”mio” ClrNamespace=”DesencadenadorDatos” ?>

<Window x:Class=”Window1” ….xmlns:mio=”mio” . . . . >

<Window.Resources><DataTemplate DataType=”{x:Type mio:Empleado}”><StackPanel Orientation=”Vertical” Background=”LawnGreen”><Label Content=”{Binding Path=Codigo}”

Style=”{StaticResource styEtiquetaPlant}”HorizontalAlignment=”Left” />

<TextBox Text=”{Binding Path=Nombre}”Style=”{StaticResource styCajaPlant}” />

</StackPanel></DataTemplate>

<Style x:Key=”styEtiquetaPlant”><Style.Triggers><DataTrigger Binding=”{Binding Path=Codigo}” Value=”275”><Setter Property=”Control.Background” Value=”Cyan” />

</DataTrigger></Style.Triggers>

</Style>

<Style x:Key=”styCajaPlant”><Style.Triggers><DataTrigger Binding=”{Binding Path=Nombre}” Value=”Elena”><Setter Property=”Control.Background” Value=”Crimson” />

</DataTrigger></Style.Triggers>

</Style></Window.Resources>

<Canvas><LabelName=”lblEtiqueta1”BorderThickness=”3”BorderBrush=”Black”Background=”Silver”Canvas.Left=”10” Canvas.Top=”10”Width=”200” Height=”100”/>

<LabelName=”lblEtiqueta2”BorderThickness=”3”BorderBrush=”Black”Background=”Silver”Canvas.Left=”10” Canvas.Top=”125”Width=”200” Height=”100”/>

<ButtonName=”btnAsignaEtiqueta1”Canvas.Left=”225” Canvas.Top=”10”>Asignar etiqueta 1

</Button>

<ButtonName=”btnAsignaEtiqueta2”Canvas.Left=”225” Canvas.Top=”150”>Asignar etiqueta 2

</Button></Canvas>

</Window>

Figura 10

Fuente 21

<Style x:Key=”styCaja”><Style.Triggers><Trigger Property=”IsFocused” Value=”True”><Setter Property=” TextBox.Background” Value=”LightCoral”/><Setter Property=”TextBox.FontWeight” Value=”Bold”></Setter>

</Trigger>

<Trigger Property=”TextBox.Text” Value=”Camino”><Setter Property=”TextBox.FontSize” Value=”18”></Setter>

</Trigger></Style.Triggers>

</Style>

Page 35: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Como podemos observar, en esta ocasión el esti-lo sólo será aplicado a los elementos del DataTemplateque cumplan con las condiciones establecidas en losDataTrigger. El fuente 23 muestra el código de losbotones que asignan una instancia de la clase Empleadoa los controles Label.

Al ejecutar la aplicación, el objeto asignado al con-trol lblEtiqueta1 cumple con las condiciones de ambosestilos, por lo tanto se aplica el estilo al completo ensu DataTemplate. Para el controllblEtiqueta2 sólo se aplica el estilo corres-pondiente a la propiedad Codigo del obje-to Empleado asignado al control; todo ellolo vemos en la figura 11.

Desencadenador para eventosEl tercer y último tipo de desencade-

nador se mantiene a la escucha de undeterminado evento, y cuando éste ocu-rre, genera una animación sobre el con-trol al que se ha aplicado el estilo.

Para este ejemplo crearemos un pro-yecto con el nombre DesencadenadorEvento, en el que para crear la animación

que responda al evento del desencadenador, definiremosuna acción que contenga un objeto Storyboard.

Respecto a la animación, WPF dispone de unaamplia variedad de tipos, en función de la propiedaddel control que necesitemos animar. En el siguienteejemplo, realizamos una animación sobre el ancho yalto de un control Button durante un espacio de tiem-po de 5 y 10 segundos respectivamente. Dado que setrata de una propiedad numérica de tipo Double, emple-aremos el elemento DoubleAnimation, como muestrael fuente 24.

dotN

etM

anía

<<

35

dnm.futuro<<

Fuente 23

Private Sub btnAsignaEtiqueta1_Click(ByVal sender As Object, _ByVal e As System.Windows.RoutedEventArgs) _Handles btnAceptar.Click

Dim oEmpleado1 As Empleado = New Empleado(275, “Elena”)Me.lblEtiqueta.Content = oEmpleado1

End Sub

Private Sub btnAsignaEtiqueta2_Click(ByVal sender As Object, _ByVal e As System.Windows.RoutedEventArgs) _Handles btnAceptar.Click

Dim oEmpleado2 As Empleado = New Empleado(275, “Alberto”)Me.lblEtiqueta.Content = oEmpleado2

End Sub

Figura 11

Fuente 24

<Window x:Class=”Window1”xmlns=”http://schemas.microsoft.com/winfx/avalon/2005”xmlns:x=”http://schemas.microsoft.com/winfx/xaml/2005”Title=”DesencadenadorEvento”>

<Window.Resources><Style TargetType=”{x:Type Button}”><Setter Property=”Background” Value=”Green”></Setter><Setter Property=”Foreground” Value=”White”></Setter>

<Style.Triggers><EventTrigger RoutedEvent=”Click”><EventTrigger.Actions><BeginStoryboard><Storyboard><DoubleAnimation Storyboard.TargetProperty=”Width”To=”250” Duration=”0:0:5” />

<DoubleAnimation Storyboard.TargetProperty=”Height”To=”100” Duration=”0:0:10” AutoReverse=”True”/>

</Storyboard></BeginStoryboard>

</EventTrigger.Actions></EventTrigger>

</Style.Triggers>

</Style></Window.Resources>

<Canvas><ButtonCanvas.Left=”10” Canvas.Top=”10”Width=”100” Height=”30” Content=”Prueba a pulsar” />

</Canvas></Window>

Si declaramos el estilo en el archivo MyApp.xaml, dentro de laetiqueta Application.Resources, el estilo se aplicará globalmente a

todos los controles de la aplicación definidos por el estilo

Page 36: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Nótese en el fuente 24, que la animación para laaltura del control volverá a dejarlo en su estado ini-cial, gracias al atributo AutoReverse, perteneciente alelemento DoubleAnimation.

Desencadenadores de condición múltipleEn algunos escenarios puede ser interesante

que un desencadenador se ejecute cuando se cum-pla más de una condición. Esto es factible utili-zando las etiquetas MultiTrigger y Condition, per-tenecientes a Style, las cuales nos permiten defi-nir un desencadenador compuesto por varias con-diciones, que sólo será aplicado si todas ellas secumplen.

En el fuente 25 creamos un estilo de este tipo, enel que el control al que se asigne deberá cumplir trescondiciones para que dicho estilo se active.

La figura 12 muestra esta ventana en ejecución,con el estilo activo sobre el control.

Una variante de este desencadenador lo constitu-ye el MultiDataTrigger, que como su nombre indicase aplica a los desencadenadores de tipo DataTrigger,que muestran los miembros de un objeto, como vemosen el fuente 26.

En el fuente 26, el estilo será aplicado a unDataTemplate siempre que las propiedades del objetoEmpleado cumplan las dos condiciones definidas en elMultiDataTrigger.

</Style> Cerrando estiloY llegamos al final de este artículo en el que nos

hemos dedicado a repasar los principales aspectosde los estilos en XAML, el nuevo lenguaje de mar-cado para la creación de interfaces de usuario enWPF. Confiamos en haber despertado en el lectorla curiosidad e interés por esta nueva e interesantetecnología, en la que a buen seguro nos veremoscompletamente inmersos en un plazo no muy lar-go de tiempo.

dotN

etM

anía

<<

36

dnm.futuro<<

Fuente 26

<Style x:Key=”styEtiqueta”><Style.Triggers><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding=”{Binding Path=Codigo}” Value=”895” /><Condition Binding=”{Binding Path=Nombre}” Value=”Vicente”

/></MultiDataTrigger.Conditions>

<Setter Property=”Control.Background” Value=”Violet” />

</MultiDataTrigger></Style.Triggers>

</Style>

Fuente 25

<Window ….><Window.Resources><Style x:Key=”styVariasCondiciones”><Style.Triggers><MultiTrigger><MultiTrigger.Conditions><Condition Property=”Text”

Value=”Impresora”></Condition><Condition Property=”IsMouseOver” Value=”True”/><Condition Property=”Background” Value=”Lavender”/></MultiTrigger.Conditions>

<Setter Property=”Control.FontSize”Value=”18”></Setter>

<Setter Property=”Control.Foreground”Value=”Violet”></Setter>

</MultiTrigger></Style.Triggers>

</Style></Window.Resources>

<Canvas><TextBoxCanvas.Left=”10”Canvas.Top=”10”Background=”Lavender”Height=”50”Width=”150”Style=”{StaticResource styVariasCondiciones}” />

</Canvas></Window>

Figura 12

Un desencadenador consiste en una etiquetacon el nombre Trigger, definida dentro de un

estilo, que aplicará los asignadores que contiene siempre y cuando se cumpla la condición definida en el desencadenador

Page 37: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

❑ Deseo suscribirme a dotNetManía por un año (11 números) por un precio de 65,00€ IVA incluido y recibir el CDVolumen 2 con los ejemplares desde el 12 al 22 en formato PDF de alta calidad de forma gratuita. Si su dirección está fuera deEspaña el precio es de 65,00€ transporte incluido (más información sobre envíos internacionales en www.dotnetmania.com)

❑ Deseo que me envíen los números atrasados marcados según el precio de portada. Otros:

FORMA DE PAGO❑ Talón nominativo a nombre NETALIA, S.L.❑ Transferencia bancaria a nombre de NETALIA, S.L. a:

La Caixa - Número de cuenta 2100 4315 48 2200014696 (Indique su nombre en la transferencia)

❑ Domiciliación Bancaria (con renovación automática, previo aviso)Indique su número de cuenta:

❑ Tarjeta de crédito❑ VISA ❑ MASTERCARDNúmero de su tarjeta: Fecha de caducidad: / (imprescindible)

Firma y/o sello

a de de 2006

DATOS DE ENVÍO

CIF/NIF. . . . . . . . . . . . . . . . . . . . Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Población . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Código Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

DATOS DE FACTURACIÓN (sólo si son distintos a los datos de envío)

CIF/NIF. . . . . . . . . . . . . . . . . . . . Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Población . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Código Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Teléfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Usted autoriza a la mecanizaciónde estos datos. El responsable ydestinatario de éstos es Netalia,S.L. Usted tiene derecho a acce-der a sus datos, modificarlos ycancelarlos cuando lo desee. Susdatos no serán cedidos en ningu-na de las formas posibles a terce-ras partes y no se utilizarán másque para el buen funcionamien-to de su suscripción a la revistadotNetManía y para informar-le de las actividades comercialesque realice la editorial Netalia,S.L. Si no desea recibir informa-ción comercial de dotNetManíamarque la casilla siguiente ❑Puede enviar sus datos por Fax al 91 499 13 64, o por teléfono al 91 666 74 77,

o por email a la dirección [email protected], o también puedeenviarlos por correo postal a la siguiente dirección:

Netalia, S.L.C/ Robledal, 13528529- Rivas Vaciamadrid (Madrid)

❑ Nº13 (6,00€) ❑ Nº14 (6,00€)

Suscríbase y llévese el CD Volumen 2 GRATIS

Oferta válida hasta el 30 de junio de 2006 o hasta agotar existencias

❑ Nº15 (6,00€) Nº16 (6,00€) ❑ Nº18 (6,00€) ❑ N19 (6,00€)

❑ Nº24 (6,50€)

Nº17 (6,00€)

❑ Nº25 (6,00€) ❑ Nº26 (6,50€)❑ Nº20 (8,50€) ❑ Nº21 (6,00€) ❑ Nº22 (6,50€) ❑ Nº23 (6,50€)

Page 38: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Detección de problemas de rendimiento enSQL Server 2000 y 2005 (III)

Qué consultas procesa mi servidor SQL Server

Este es el tercer artículo de la serie, y en él nos vamos a centrar en cómo yqué “cosas” auditar de las conexiones de usuario que llegan al servidor. Paraauditar las peticiones que realizan los clientes utilizaremos SQL Server Profiler(existente en SQL Server 2000 y SQL Server 2005).

<<SQL Server Profiler (en castellano también cono-

cido como Analizador de SQL Server) es una herra-mienta incluida con SQL Server 2000 y 2005 cuyoobjetivo principal es capturar eventos de una instan-cia de SQL Server. Los eventos se guardan general-mente en un archivo de traza o en una tabla que pos-teriormente se puede analizar o utilizar para repro-ducir series concretas de pasos con el objetivo deidentificar o diagnosticar cierto problema.

El principal uso que hacemos de la herramienta espara tener una visión de las peticiones que llegan al ser-vidor en determinados períodos de tiempo, pero la herra-mienta se puede utilizar para muchas otras cosas:• Depurar procedimientos almacenados e instruc-

ciones Transact-SQL.• Realizar pruebas de carga en distintos servido-

res mediante la reproducción de trazas grabadas.• Analizar las consultas guardando en las trazas el

plan de ejecución.• Supervisar el rendimiento de una instancia del motor

relacional, Analysis Server o Integration Services(estos dos últimos sólo en la versión 2005).

• Como mecanismo de auditoria de seguridad.

Uno de los usos que más me ha gustado de SQLProfiler en entornos de desarrollo ha sido el siguien-te: hace unos meses estuve en un cliente en el que

cada miembro del equipo de desarrollo tenía dosmonitores planos de 17 pulgadas; en un principio asu-mí que eran diseñadores o desarrolladores Web, queen una pantalla tenían el editor de código HTML deVisual Studio, y en otra el resultado. Me acerqué auno de ellos y cuál fue mi sorpresa al ver que en unapantalla tenían Visual Studio y en la otra trazas deSQL Profiler en marcha. La empresa tenía definidasunas políticas de calidad en las que el número de lec-turas realizadas por cada proceso ejecutado contra labase de datos no podía superar ciertos valores pre-viamente definidos por tabla/proceso.

En la versión 2000 de SQL Server, si necesitabasabrir una traza contra una instancia de SQL Server2000, necesitabas ser miembro del rol de servidorsysadmin; en la versión 2005, esa limitación se ha eli-minado, y tan sólo es necesario que el usuario que eje-cute la traza tenga permisos ALTER TRACE.

GRANT ALTER TRACE TO <inicio_de_sesión>

Otra de las diferencias a tener en cuenta entre lasversiones 2000 y 2005 de SQL Profiler es cómo semide la duración de los eventos. El GUI de SQLProfiler en ambas versiones muestra la duración de loseventos en milisegundos; sin embargo, en SQL Server2000, la duración se mide en milisegundos, mientrasque en la versión 2005, la medida es en microsegun-dos (1.000 microsegundos = 1 milisegundo). ¿Cuál es

Eladio Rincón

dnm.servidores.sql

SQL Server Profiler

Eladio RincónEs Director de Tecnología de

Bases de Datos de SolidQuality Learning y

colaborador habitual dedotNetManía. Es MVP en SQL

Server y uno de los fundadoresdel grupo de usuarios de SQL

Server en España GUSE.

Page 39: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

el problema? Si el resultado de la traza se guardacomo fichero de traza XML, o como tabla de basede datos, la duración se guardará como microsegun-dos, en lugar de los milisegundos que “muestra” elinterfaz gráfico.

Además, cuando en la versión 2000 estás seleccio-nando los eventos y columnas a registrar en la traza,resulta arduo seleccionar las columnas apropiadas,aún cuando el proceso se encuentra bien documen-tado en los libros en pantalla (BOL). Personalmente,en la versión 2000 usaba una “chuleta” que me pasóhace ya tiempo mi buen amigo Fernando G.Guerrero (en la lista de recursos al final del artícu-lo tiene la URL para bajarse la “chuleta-Excel” (Listade Eventos/Columnas en SQL Server 2000)). Para hacermás sencilla la selección de las columnas, en SQLServer 2005, con cada uno de los eventos, SQLProfiler nos muestra cuáles son las columnas quedevuelven información para cada evento. Observa enla figura 1 cómo para el evento SQL:StmtStarting lascolumnas CPU, Reads, Writes y Duration no están dis-ponibles. Como truco, podríamos definir siempre lastrazas con el SQL Profiler de la versión 2005, y ele-gir la versión de SQL Server a la hora de grabar ladefinición de la traza.

Como recomendación general, no debe usarseSQL Profiler en el propio servidor de base de datosporque la ejecución de la herramienta causa unapequeña sobrecarga en el servidor, que dependiendodel tipo de sistema será asumible en mayor o en menormedida. De mi propia experiencia, yo nunca he eje-cutado SQL Profiler en el propio servidor.

Crear trazas con SQL Profiler para no usar con elinterfaz gráfico

No voy a explicar cómo crear trazas para usardesde el interfaz gráfico porque en la documenta-ción del producto está bastante bien documentado.Sin embargo, voy a utilizar el interfaz gráfico paracrear trazas que luego ejecutaremos directamente

en el servidor mediante sentencias Transact-SQL.¿Y para qué crear trazas desde el interfaz gráfico yluego no ejecutarlas desde el propio interfaz? ¿Habráque saberse un montón de parámetros de memoria?¡La “chuleta-Excel” esta vez debería ser de un tama-ño considerable!

La respuesta es que ese mecanismo es menosintrusivo para el sistema: como veremos, el scriptTransact-SQL, tras ejecutarse en el servidor, registralos eventos seleccionados en el destino que hayamoselegido (normalmente un fichero de traza en unidadde red local al servidor).

¿Y cómo lo hacemos sin tener que aprender unmontón de procedimientos almacenados y paráme-tros? Dividiremos el proceso en cuatro pasos:1. Creamos una traza de SQL Profiler en nuestra

máquina local con los eventos que deseamos cap-turar; para ello:a. Elegimos la opción “New Trace”, en el menú

“File”.b. Seleccionamos los eventos que nos interesan.c. Ejecutamos la traza, e inmediatamente la para-

mos porque nuestro objetivo es el script de cre-ación de la traza, no la ejecución de la trazadesde las herramientas gráficas.

d. En el menú “File”, menú “Export”, “ScriptTrace Definition”, y elegimos “For SQLServer 2005”.

2. Una vez guardado el fichero de definición detraza, vamos a ver algunos de los parámetros deutilidad.a. En la cabecera del fichero tendremos algo

como lo siguiente:

-- Create a Queuedeclare @rc intdeclare @TraceID intdeclare @maxfilesize bigintset @maxfilesize = 5

El parámetro @maxfilesize indicará cuál seráel tamaño máximo que tendrá el fichero don-de se guardarán los resultados de la traza; elvalor se expresa en megabytes, y su valor pordefecto es 5.

b. Un poco más abajo, el fichero contiene:

exec @rc = sp_trace_create @TraceID output, 0,N'InsertFileNameHere', @maxfilesize, NULL

if (@rc != 0) goto error

Donde deberás reemplazar InsertFileNameHerepor el nombre y ruta del fichero de traza.Como recomendación, deberías guardar elfichero en una unidad física diferente a las uni-dades físicas donde están los ficheros de lasbases de datos.

Figura 1

dotN

etM

anía

<<

39

dnm.servidores.sql<<

Page 40: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

dotN

etM

anía

<<

40

dnm.servidores.sql<<

c. Un poco más abajo, verás muchas ejecucionesdel procedimiento almacenado de sistemasp_trace_setevent, que lo que hace es precisa-mente definir los eventos y columnas que for-marán parte de la traza.

d. Casi al final del fichero está la sección para esta-blecer filtros para las trazas; la recomendaciónsería utilizar algún filtro en el GUI para crearla traza, y luego “ajustar” los valores a las nece-sidades concretas. Por ejemplo:

set @bigintfilter = 250000exec sp_trace_setfilter @TraceID,

13, 0, 4, @bigintfilter

Esta sentencia definiría un filtro de 250.000microsegundos; recuerde lo comentado ante-riormente sobre los milisegundos de la herra-mienta y los microsegundos “reales”.

3. El paso final sería la ejecución del script en el ser-vidor SQL Server.

4. Para comprobar o modificar el estado de la tra-za, existen funciones definidas de sistema y pro-cedimientos almacenados de sistema:a. Para recuperar información de todas las tra-

zas activas; la columna traceId es el identifi-cador de la traza <id_traza>:

-- Enumerar las trazasSELECT * FROM :: fn_trace_getinfo(default)

b. Para arrancar una traza:

-- Arrancar una trazaEXEC sp_trace_setstatus <id_traza>,1

c. Para parar una traza:

-- Parar una trazaEXEC sp_trace_setstatus <id_traza>,0

d. Para cerrar y borrar una definición de traza(para poder hacerlo, primero se debe haberparado la traza):

-- Cerrar y borrar una trazaEXEC sp_trace_setstatus <id_traza>,2

Tipos de eventos

Cuando llegamos al sitio del cliente, la primera tra-za de SQL Profiler que ejecutamos en el servidor sue-le ser para tener una imagen completa de todas las peti-ciones que llegan al servidor. Solemos jugar con untamaño del fichero que raras veces supera los 50megabytes de tamaño máximo. Evidentemente, cuan-ta más actividad tenga el servidor más rápido se llena

el fichero: me he encontrado con trazas dispares, unasllenaban ficheros de 20 megabytes en 30 segundos yotras con ficheros de 10 megabytes que se llenaban en15 minutos.

Tras esta primera imagen, y después de analizarla traza, solemos crear otra traza ya con filtros espe-cíficos basados en las necesidades de auscultacióndetectadas; en este segundo grupo de trazas, solemosfiltrar por base de datos (DatabaseId), duración(Duration), lecturas (Reads), escrituras (Writes), y/oaplicación (ApplicationName).

En la documentación del producto (libros en pan-talla, BOL), existe una lista completa de los eventosque captura SQL Profiler; en lugar de enunciar todosy cada uno de ellos, muestro una lista de los que con-sidero más significativos:

Eventos de procedimientos almacenados(StoredProcedures)

• RPC:Completed: registra la finalización de la ejecu-ción de un procedimiento remoto (RPC).

• SP:StmtCompleted: registra la finalización de cadauna de las sentencias Transact-SQL ejecutadas enprocedimientos almacenados.

• SP:Completed: registra la finalización de la ejecu-ción de un procedimiento almacenado.

Eventos de Transact-SQL (SQL)

• SQL:BatchCompleted: registra la finalización de unproceso por lotes.

• SQL:StmtCompleted: registra la finalización de unasentencia Transact-SQL.

Además de los eventos terminados en Completed,existen los eventos Starting que corresponden al ini-cio de la ejecución. Normalmente utilizo los eventosCompleted porque aportan información como núme-ro de lecturas, escrituras, duración, etc. que no ofre-cen los eventos Starting. Los eventos Starting queuso los suelo utilizar para localizar procesos/senten-cias involucradas en bloqueos.

Cuando selecciones los eventos, deberás ser cui-dadoso: prueba a ejecutar el siguiente código:

exec sp_helpgoselect @@version

estableciendo en el SQL Profiler los siguienteseventos SP:StmtCompleted, SQL:BatchCompleted,SQL: StmtCompleted. El resultado puede verse enla figura 2.

Las líneas marcadas en azul corresponden a lassentencias Transact-SQL que se ejecutan dentro delprocedimiento almacenado sp_help; además, fíjateque hay dos entradas para sp_who; ¿por qué? Porque

Page 41: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

dotN

etM

anía

<<

41

dnm.servidores.sql<<

la ejecución del procedimiento almace-nado es ejecución de una sentenciaTransact-SQL, y también un procesopor lotes.

Advertencia sobre los filtros

Aunque puede parecer trivial, losfiltros se evalúan sólo para los even-tos que exponen la columna filtrada:por ejemplo, una traza que filtra lasconsultas cuya duración sea superiora 500 milisegundos con el eventoRPC:BatchCompleted) y además regis-tra el plan de ejecución de las consul-tas (ShowPlan All, o ShowPlan XML).Como el plan de ejecución no exponela columna Duración, el resultadoincluirá las consultas cuya duraciónfue superior a 500 milisegundos, yademás todos (sin ningún filtro) losplanes de ejecución de las consultasque llegaron al servidor.

Consultar las trazas desde Transact-SQL

Los ficheros de traza se puedenabrir perfectamente desde SQLProfiler; sin embargo, en multitud deocasiones necesitarás buscar informa-ción en la traza, y para ello qué mejorque utilizar Transact-SQL. El ficherode traza se puede consultar directamen-te usando la función definida por el sis-tema fn_trace_gettable; la función tie-ne como argumento el nombre delfichero de traza a leer:

SELECT *FROM ::fn_trace_gettable ('X:\SQLHealth\Traza_1.trc',default)

Donde X:\SQLHealth\Traza_1.trc es el fiche-ro de traza a consultar.Sin embargo, como elfichero de traza no se vaa consultar solo una vez,suele ser más fácil “vol-car” el contenido delfichero a una tabla detrabajo y consultardirectamente la tabla detrabajo:

SELECT * INTO [bd].[dbo].[Traza]FROM ::fn_trace_gettable(

'X:\SQLHealth\ Traza_1.trc',default)

Y realizar consultas, agrupaciones,borrados, búsquedas directamentesobre la tabla [Traza].

Búsqueda de patrones de ejecución deconsultas

Una vez guardadas las trazas, elobjetivo es encontrar “patrones de eje-cución” de consultas y su relación conlas operaciones de E/S y el uso de CPU.El objetivo final es conseguir algocomo:• El xx por ciento de las consultas

que contiene la traza correspon-

den a la llamada al procedimientoalmacenado…

• El xx por ciento de las lecturas reali-zadas corresponden a consultas queacceden a los objetos (tablas/vistas)…

• El xx por ciento del tiempo utili-zado por las consultas fueronhechas usando el patrón de con-sulta…

¿En qué consistirá un “patrón de eje-cución”?

Veamos un ejemplo con el que severá más claro: dada la tabla 1 de eje-cuciones (agrupado por sentencia SQLejecutada), podemos ver que el proce-dimiento almacenado sproc_obtener_pedido se ha ejecutado un total de 36veces realizando un total de 15.340 lec-turas; nuestro objetivo será tener lainformación de la forma que se mues-tra en la tabla 2.

¿Y para qué hacer esas agrupaciones?

Para obtener “agrupaciones de eje-cuciones” del orden de las que puedenverse en la tabla 3.

SQL Ejecuciones CPU Lecturas Escrituras

EXEC sproc_obtener_pedido '221231' 10 120 1.800 0

EXEC sproc_obtener_pedido '113' 2 20 2.000 0

EXEC sproc_obtener_pedido '55665' 4 52 9.100 0

EXEC sproc_obtener_pedido '77689' 4 56 1.400 0

EXEC sproc_obtener_pedido '921002' 1 15 0 0

EXEC sproc_obtener_pedido '834016' 15 120 1.040 0

Tabla 1

Figura 2

SQL Ejecuciones CPU Lecturas Escrituras

EXEC sproc_obtener_pedido '#' 36 383 15.340 0

Tabla 2

NOTA

Un buen comienzo para familia-rizarse con los eventos es reali-zar pruebas en el entorno dedesarrollo con las plantillas, yrevisando la información de loslibros en pantalla.

][

Page 42: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Fíjate que en lugar de perdernos en el“bosque”, de tener registrado que patrón_1ha tenido una serie de argumentos duran-te su ejecución, nos centramos en datos“generales”: el patrón_1 se ha ejecutado513 veces, y sus números totales hansido…

Lo que resumiendo la información dela tabla nos viene a decir lo siguiente:• Más del 79% de las lecturas (opera-

ciones de E/S) realizadas en el perío-do de tiempo corresponden a la eje-cución del patrón patrón_1.

• Casi el 24% del uso de CPU en elperíodo de tiempo fue realizado porla consulta de patrón_2.

• Más del 30% de la duración de las eje-cuciones Transact-SQL fue consumi-do por patrón_1 y patrón_2.

De esta forma identificamos patronesque afectan mucho al comportamientogeneral del sistema, y que modificandoligeramente su comportamiento (indexa-ción, análisis de la consulta, rediseño deproceso, etc.) tendrán un impacto muygrande en todo el sistema. ¿Qué pasaríasi encontramos que la consulta asociada apatrón_1 tiene índices no apropiados yprobamos en entornos similares a produc-ción (servidores de preproducción, etc.)que la creación de un índice reduce elnúmero de lecturas realizadas al 2% deltotal? Pues el escenario habría cambiado

totalmente y la consulta en este caso esmuy posible que deje de estar entre las 2-3 primeras que más lecturas realizan; ade-más, es muy posible que la duración totalse reduzca y ello conlleve la posibilidad degestionar más peticiones concurrentemen-te. En definitiva, el escenario será diferen-te y habrá que analizar de nuevo su impac-to (¿y mejoras?) en el funcionamiento delsistema.

¿Y cómo consigues agrupar las sentenciasde esa forma?

La columna TextData de la tabla don-de hemos guardado la traza contiene lasentencia Transact-SQL que se estabaejecutando en ese momento; la senten-cia como hemos visto antes era del tipoEXEC sproc_obtener_pedido '221231'. Elobjetivo será reemplazar “221231”, por“#” que actuará como “generalizador”cuando se hagan las consultas de agru-pación (GROUP BY).

Para calcular el valor “genérico”:1. Añadimos a la tabla una columna lla-

mada Sql_Signature, que será el cál-culo para convertir la columnaTextData en su valor “generalizado”.

2. Creamos una función definida por elusuario con .NET Framework querecorrerá cada columna TextData, y laconvertirá en su valor “generalizado”.

3. Ejecutaremos consultas del tipo:

SELECTcount(*) '#',T.databaseid,T.sql_signature,SUM(T.duration) duration, SUM(T.reads) reads, SUM(T.writes) writes, SUM(T.cpu) CPU,

FROM dbo.[Traza] TGROUP BY

T.Databaseid,T.sql_signature

ORDER BY SUM(T.reads) DESC

Donde depen-diendo de tipos depatrones, ordena-remos la consultapor duración, lec-turas o escrituras.Normalmentesolemos ordenarel resultado pornúmero de lectu-ras para identificar

los procesos/procedimientos almacena-dos que más lecturas realizan. La solucióna adoptar puede ser desde crear índicesnuevos, eliminar índices redundantes,modificar estrategias de indexación oincluso modificar los procesos asociados(procesos de negocio). En caso de encon-trarnos con muchas esperas debido a escri-turas en el registro de transacciones (recor-dar del primer número de la serie el tipode espera WRITELOG), analizaríamos lospatrones más usados para realizar escritu-ras. En caso de sólo encontrarnos conduraciones altas, es muy probable que ellovenga derivado por altas esperas por blo-queos (esperas del tipo LCK_*), o por ope-raciones muy pequeñas durante muchotiempo (los tan odiados cursores).

ConclusionesHemos visto una técnica “diferente”

para capturar trazas de SQL Profiler. Elobjetivo de capturar estas trazas es obte-ner qué consultas llegan al servidor y cre-ar una imagen de qué patrones de consul-tas se procesan. El objetivo es detectar quépatrones son los más costosos y atacar elproblema de raíz. Si mejoras un grupo deconsultas que suponen el 25% del total delas operaciones de lectura que se realizanen el servidor, habrás enfocado tus esfuer-zos en resolver probablemente uno de loscuellos de botella de tu sistema.

dotN

etM

anía

<<

42

dnm.servidores.sql<<

Referencias

SQL Server Profiler Tips. Página Web de BradM. McGehee, MVP en SQL Server.http://www.sql-server-performance.com/sql_ser-ver_profiler_tips.asp

Lista de Eventos/Columnas en SQL Server 2000.Página Web de Eladio Rincón Herrera.http://siquelnet.etraducciones.com/default.aspx?Tema=MSSQL&Seccion=ADM&Articulo=012.xml

Ejec. SQL Tiempo Lecturas Escrituras CPU Tiempo Lecturas Escrituras CPU

513 patrón_1 3,087 1,044,231 0 0 28.89% 79.06% 0.00% 0.00%

512 patrón_2 537 71,680 0 531 5.03% 5.43% 0.00% 23.27%

2,109 patrón_3 106 53,526 0 0 0.99% 4.05% 0.00% 0.00%

512 patrón_4 207 21,381 32 0 1.94% 1.62% 7.71% 0.00%

2,474 patrón_5 135 15,166 0 0 1.26% 1.15% 0.00% 0.00%

... ... ... ... ... ... ... ... ... ...

17,123 Total 10,684 1,320,848 415 2,282 100% 100% 100% 100%

Tabla 3

NOTA

También se pueden crear trazaspara que directamente se guardenen una tabla, en lugar de un fiche-ro; sin embargo, tenderemos a evi-tar guardar las trazas en sistemas deficheros directamente relacionadoscon los ficheros de bases de datos.

][

Page 43: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Es evidente que quien se acerca por primera veza Visual Studio 2005 y quiere hacer cualquier tipo deaplicación, particularmente una de acceso a datos, yse encuentra que existen asistentes (wizards) para ayu-darle a crear la aplicación, no dudará en usarlos.Además, quedará totalmente impresionado por la“belleza” del formulario resultante: botones al estilode Office 2003, un navegador de registros, unos boni-tos botones para añadir, eliminar y guardar los datos(ver figura 1). Vamos, ¡que no hay quien se resista!

Pero debemos recordar que asistente significa eso:que nos asiste, lo cual no significa que haga milagros.El asistente de acceso a datos nos va ayudando en lacreación de todo lo necesario para que nuestro pro-yecto sepa encontrar los datos que queremos usar,para finalmente prepararlo todo y dejarlo listo y ope-rativo. Y como veremos en un momento, lo único quetenemos que hacer para lograr esto es pulsar variasveces el botón “Siguiente”. Qué bien, ¿no? Pues sí,muy bien. Pero (lamentablemente, siempre hay unpero) el código generado por el asistente, pues... enfin... que precisamente para el que se inicia no es elidóneo. Al menos si lo queremos personalizar poste-riormente.

Llegados a este punto, debemos recordar que losasistentes nos ayudan a hacer las cosas que no sabe-mos hacer. Bueno, esto no es del todo cierto, ya quetambién podemos usarlos para que nos faciliten lastareas repetitivas y nos ayuden a generar el códigonecesario para lo que en ese preciso momento nece-

sitamos. Pero por regla general, los usamos cuandono tenemos demasiado claro qué es lo que hay quehacer. Y esto es lo que pasa con el asistente de acce-so a datos de Visual Studio 2005; que sí, nos generauna aplicación en la que solo necesitamos unos pocosclics de ratón, pero casi seguro que ésta no tiene todala funcionalidad que esperaríamos que tuviera. Porejemplo, si miramos la barra de botones de la apli-cación mostrada en la figura 1, podemos pensar queel botón “Guardar” (el que tiene el icono del dis-quete) sirve para guardar las modificaciones que rea-licemos. En este caso, ese botón sirve para que losdatos se almacenen físicamente en la base de datos;es decir, trabajamos con los datos en modo desco-nectado, y cuando ya queremos que se guarden en labase de datos, es cuando tendremos que pulsar enese botón. Sabiendo esto, nos podemos llegar a plan-tear dos preguntas, la primera de las cuales sería: siese botón sólo sirve para guardar los datos en la basede datos, ¿cada vez que añadimos un nuevo registrotenemos que conectarnos para guardarlo?

La respuesta es no, ese botón solo hay que pul-sarlo cuando ya hayamos terminado de añadir todoslos datos que tengamos que añadir. Entonces es cuan-do entra en juego la segunda pregunta: ya que si esoes así, ¿cómo se guardan cada uno de los datos queintroducimos en modo desconectado? La respuestaes: automáticamente, sí, ¡no tenemos que hacer nadapara que se guarden!

Si el lector ha leído el artículo anterior de la serie(dotNetManía nº 25), recordará que una de las cosas

Acceso asistido a datos con ADO.NET 2.0 y Visual Studio 2005

Como ya adelantamos en el artículo anterior, en éste veremos cómo utilizarlos asistentes de Visual Studio 2005 relacionados con el acceso a datos. En par-ticular, veremos los pasos necesarios para crear formularios tanto para intro-ducir datos como para mostrar el resultado de la llamada a un procedimientoalmacenado de SQL Server 2005.

<< ¿Asistentes? ¡Sí, gracias!

dnm.inicio.fundamentos

Guillermo “Guille” Som

dnm.incio.taller

Guillermo “Guille” Somes Microsoft MVP de Visual Basic

desde 1997. Es redactor dedotNetManía,miembro de Ineta

Speakers Bureau Latin America,mentor de Solid Quality LearningIberoamérica y autor del libroManual Imprescindible de Visual

Basic .NET.http://www.elguille.info

dotN

etM

anía

<<

43

Page 44: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

dotN

etM

anía

<<

44

dnm.inicio.taller<<

que allí comentaba era que a mí particu-larmente no me gusta este tipo de auto-matizaciones; por lo tanto, tantas admi-raciones por mi parte hay que tomárse-las con calma. Y no es porque el que estascosas se hagan de forma automática, esdecir, sin participación del programador,esté mal. No, lo que ocurre es que si sonautomáticas, no controlamos lo que pasa,o al menos las cosas pasan sin que noso-tros en un principio nos enteremos deque están pasando. Y esto, sinceramen-te, para una aplicación creada para salirdel paso está muy bien, pero si lo quequeremos hacer es algo más, digamos,profesional, no deberían bastarnos talesautomatizaciones.

Veamos uno de los problemas quepueden surgir con este tipo de automa-tizaciones.

Supongamos que el lector tiene la cos-tumbre de crear sus tablas con un índiceautonumérico; es decir, queremos man-tener un campo en la tabla cuyo valor segenere automáticamente para cada nue-vo registro que creemos. Ese tipo de cam-po tiene la cualidad de que sus valores sonúnicos; es decir, no puede haber dos regis-tros en la tabla con el mismo valor.

Utilizando el asistente de acceso adatos, creamos un formulario como elde la figura 1. Es posible que queramossaber qué código es el que se ejecutacuando el usuario pulsa en “Guardar”;lo lógico en estos casos es que hagamosdoble clic en el botón correspondientede la barra de botones para que VisualStudio nos muestre el código, que seríacomo el que podemos ver en el fuente1. No es necesario que describamos elcódigo ahora; lo que interesa es que pul-sando en ese botón veremos el códigoque se utilizará.

Como somos curiosos, es posibleque también nos interese ver el códigoque hay detrás del botón “Nuevo” (elque se ejecuta al pulsar en el botón conel icono de la cruz). Como no vemos elcódigo en el fichero del formulario,hacemos lo mismo de antes: nos vamosal formulario en modo de diseño, hace-mos doble clic y... no se nos muestranada. Bueno, sí, el método pero vacío,tal como lo vemos en el fuente 2.

Y como vemos que está en blanco,podríamos pensar que hay que rellenarlode código. Para ello, nos armamos devalor y buscamos la forma de hacer queeso funcione como queremos. En esabúsqueda encontramos que en la tablaPrueba del DataSet autogenerado existeun método llamado AddPruebaRow condos sobrecargas, una en la que se pue-den especificar los datos individuales decada una de las columnas de la tabla. Portanto, podríamos pensar que si usamosel código mostrado en el fuente 3, yatenemos la forma de añadir un nuevoregistro a la tabla.

Ahora que estamos seguros de queya tenemos el código para añadir nue-vos registros que el asistente “seolvidó” de añadir, ejecutamos la apli-cación (porque nuestra curiosidad noshizo examinar el código antes de pro-bar si ya funcionaba). Pulsamos en el

botón de añadir, y todo bien, al menosaparentemente, ya que se muestran losdatos que hemos indicado en los argu-mentos del método AddPruebaRow.Rellenamos los campos que estánvacíos, pulsamos en el botón“Guardar”, y aparentemente todo vabien. Pero si nos fijamos bien en lafigura 1, seguramente detectaremosalgo que no es normal; ahora veremosde qué se trata.

Si ahora volvemos a pulsar en elbotón “Nuevo” para crear un nuevoregistro y posteriormente pulsamos enel botón de guardar... esta vez la cosa noirá tan bien como antes. Lo que ocu-rrirá es que recibiremos el error quevemos en la figura 2, indicándonos que

Fuente 1. El código del método de guardar los datos

private void pruebaBindingNavigatorSaveItem_Click(object sender, EventArgs e){

this.Validate();this.pruebaBindingSource.EndEdit();this.pruebaTableAdapter.Update(this.pruebaGuilleCSDataSet.Prueba);

}

Fuente 2. El método vacío de añadir nuevo registro

private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e){}

Fuente 3. El método "supuestamente" para añadir nuevos registros

private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e){

pruebaGuilleCSDataSet.Prueba.AddPruebaRow("nuevo", "", DateTime.Now , "");}

Figura 1.Guardando en la base dedatos los datos introducidos

Dejemos que trabajen losasistentes y así nos evitaremos algunos

problemas

Page 45: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

dotN

etM

anía

<<

45

dnm.inicio.taller<<

el ID debe ser único y que ya existe un registro conese mismo ID (3).

¿Qué es lo que está ocurriendo? Pues muy claro,que estamos duplicando código, y por tanto estamoscreando dos registros cada vez que pulsamos en elbotón “Nuevo”. Si nos fijamos en la figura 1, vere-mos que en la caja de texto que hay en la barra debotones se muestra el número 2 cuando en realidadsólo habíamos creado un registro. La primera vez,cuando la base de datos estaba vacía, no había pro-blemas, ya que se crean dos registros, pero al no exis-tir ninguno, esa duplicidad la gestiona bien, pero siya tenemos registros, sí que recibiremos ese error.

¿Qué debemos sacar en claro de todo esto? Quesi usamos el asistente, dejemos al asistente hacer sutrabajo y adaptémonos a lo que ha hecho. Si lo quebuscamos es escribir nosotros el código, entonces lomejor es no usar el asistente y escribir todo el códigoprácticamente de forma manual. De cómo escribirnuestro código “a mano” nos ocuparemos en el pró-ximo artículo; en éste nos vamos a centrar en los asis-tentes, pero... dejemos que trabajen ellos y así nos evi-taremos algunos problemas.

Asistentes para introducir datos y crearconsultas

A continuación, vamos a usar el asistente de acce-so a datos de Visual Studio 2005 para crear una aplica-ción como la que hemos estado comentando. Despuéscrearemos un procedimiento almacenado (stored proce-dure) de SQL Server en el que se requiere un paráme-tro de fecha, y usaremos el asistente para que cree unformulario en el que podamos realizar consultas basán-

donos en ese procedimiento almacenado. Empecemospor el formulario de introducción de datos.

Crear un formulario de acceso a datos de formaasistida

Para seguir los pasos que vamos a indicar ahora, nece-sitaremos tener una base de datos llamada PruebaGuilleen la instancia local de SQLEXPRESS. Esa base de datostendrá una tabla llamada Prueba, y la creación de la basede datos y la tabla la podemos efectuar por medio de lautilidad aquí descrita y que puede descargar con el mate-rial de apoyo de este artículo.

Lo primero que haremos es crear un nuevo pro-yecto del tipo “Formulario de Windows”. Una vezque tengamos el formulario en modo de diseño, selec-cionamos del menú “Datos” la opción “Agregar nue-vo origen de datos”. Esto hará que se muestre el asis-tente de acceso a datos.

Empezaremos por indicarle al asistente el origen delos datos que queremos usar. Se nos dará a elegir entretres opciones: “Base de datos”, “Servicio Web” y“Objeto”; en nuestro caso, será una base de datos.

El siguiente paso es elegir una de las conexionesque pudiéramos tener o bien crear una nueva (figura3). Nosotros elegiremos una nueva, lo que resultará enuna nueva ventana en la que podremos indicar la basede datos que queremos usar. En nuestro caso, será unabase de datos de SQL Server. Si en el origen de datosno tuviésemos a la vista Microsoft SQL Server(SqlClient), tendremos que pulsar en el botón “Cambiar”

y aparecerá una nueva ventana en laque podremos indicar el tipo de basede datos a usar. Si normalmente vamosa usar conexiones de SQL Server,podemos marcar la opción “Utilizarsiempre esta selección”, lo que haráque de forma predeterminada semuestre la ventana de conexión parael tipo de base de datos que hayamosseleccionado, pero en cualquier

Figura 2. Error al crear un registro con un ID que ya existe

Para utilizar la base de datos queestamos usando en este artículo (u otrasbases de datos con una tabla que tengaesa misma estructura),en el código queacompaña a este artículo se adjunta unapequeña utilidad que nos permite cre-ar tanto la base de datos como la tablay el procedimiento almacenado usados

en los ejemplos. Esa base de datos lapodemos crear en cualquiera de lasinstancias de SQL Server que tenga-mos instaladas en nuestro equipo. Sisólo disponemos de SQL Server 2005Express Edition, la instancia tendrá elformato nombreEquipo\SQLEXPRESS o(local)\SQLEXPRESS.

Una utilidad para crear la base de datos y tabla de ejemplo

El asistente nos genera una aplicación con solo unos pocos clics de

ratón,pero casi seguro que ésta no tiene toda la funcionalidad que

esperaríamos que tuviera

Page 46: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

momento podremos seleccionar otro tiposimplemente pulsando en el botón“Cambiar”.

Una vez que tenemos seleccionadoel origen de datos, que en nuestro casoserá de SQL Server, tenemos que indi-car la instancia de SQL Server en laque está la base de datos, y una vezhecho esto, podemos seleccionar labase de datos a usar. Para comprobarque todo funciona, podemos pulsar enel botón “Probar conexión” para estarseguros de que todo va bien. El nom-bre de la conexión lo genera el asistentede forma automática, tal como vemosen la figura 3.

El siguiente paso es guardar la cade-na de conexión para conectarse a la basede datos; ese nombre sí lo podemosespecificar, y se almacenará en la confi-guración de la aplicación.

A continuación, seleccionamos lafuente de datos; en este caso será de latabla Prueba, y podemos seleccionar loscampos que en realidad nos interesen,ya que no es imprescindible seleccio-narlos todos, como es nuestro caso(figura 4).

Una vez que hemos hecho la selec-ción de la tabla (o tablas, si tuviésemosmás), pulsamos en “Finalizar”. Y vere-mos que ahora tendremos una nuevaventana acoplada con el cuadro deherramientas y el explorador de servi-dores. En esa nueva ventana tendremoslos orígenes de datos que hayamos agre-gado en nuestro proyecto.

Lo siguiente será usar ese origende datos. Para ello, seleccionamos latabla a usar y la arrastramos hasta elformulario. De forma predetermina-da, se creará un DataGridView para tra-bajar con esos datos, pero si lo que nosinteresa es obtener cajas de texto paracada uno de los campos de la tabla taly como hemos visto anteriormente,tendremos que pulsar en la lista des-plegable que hay junto al nombre dela tabla y seleccionar “Detalles” (figu-ra 5). Una vez hecho ese cambio,arrastramos la tabla al formulario yveremos que se añaden los controlescorrespondientes a cada uno de loscampos (o columnas) que selecciona-mos anteriormente, además de la barrade botones para la navegación entrelos registros y la creación y elimina-ción de registros. El aspecto del for-mulario será el que se muestra en lafigura 6.

Si queremos cambiar el aspecto delos controles, podemos hacerlo sinmayor problema. Por ejemplo, podría-mos hacer MultiLine la caja de texto parael “Comentario” y cambiarle el tamaño.También podemos anclar los controlespara que se ajusten al nuevo tamaño delformulario, etc.

Si ahora ejecutamos el programa(sin añadir ni una sola línea de códi-go como hicimos antes), veremos que

todo funciona bien, y podremos empe-zar a añadir nuevos datos a la tabla(figura 7).

El único código que existe es el delDataSet “tipado” que se ha creado,además de un poco de código en el pro-pio formulario, que es el que se encar-ga de llenar los datos al cargarse el for-mulario (evento Form_Load) y el códigodel botón “Guardar”; el resto de la fun-cionalidad es totalmente transparentepara nosotros.

dotN

etM

anía

<<

46

dnm.inicio.taller<<

Figura 3. Seleccionar una conexiónexistente o crear una nueva

Figura 4. Selección de la tabla o tablasa usar con esta conexión

Figura 5. Selección de la forma en la que se mostrarán los datos

Figura 6. El asistente añade las eti-quetas y controles adecuados

Figura 7. Sin escribir nada, la aplicaciónestará totalmente operativa

Page 47: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Crear un formulario de consulta conel asistente

Para finalizar este artículo, vamos autilizar el asistente para crear un nuevoDataSet, el cual usaremos para accedera un procedimiento almacenado de labase de datos. Ese procedimiento alma-cenado tiene el código mostrado en elfuente 4. Como podemos ver, recibe unparámetro que es la fecha a partir de laque queremos mostrar los datos que ten-gamos en la tabla Prueba.

Los pasos que tendremos que darserán casi los mismos que hemos vistoanteriormente; al menos hasta llegar ala selección de la conexión, donde pode-mos usar la que ya tenemos o bien cre-ar una nueva. En nuestro caso, selec-cionaremos de la lista desplegable lacadena de conexión que ya tenemos, talcomo vimos en la figura 3.

Y finalmente, tal como vemos en lafigura 8, seleccionamos el procedi-miento almacenado y pulsamos en“Finalizar”.

La información a mostrar estaráen otro formulario; por tanto, debe-mos añadir un nuevo formulario al

proyecto y ese será el queusemos para arrastrar elorigen de datos al formula-

rio. En este caso, lodejaremos comoDataGridView (elvalor predetermi-nado), y el aspectodel formulario seráel mostrado en lafigura 9.

Si este DataGridView sólo lo queremos usar para mos-trar los datos, sin permitir que semodifiquen los registros existentes nique se añadan nuevos, debemos selec-cionar las opciones correspondientesen las propiedades del control, quecon Visual Studio 2005 son más fáci-

les de asignar.Si nos fijamos en la mencionada

figura, veremos que hay una casilla enla que escribiremos la fecha que quere-mos buscar y al pulsar en el botón “Fill”(cuyo texto podemos cambiar) se relle-nará el DataGridView con los datoscorrespondientes.

Por último, para que este nuevo for-mulario se pueda mostrar, podemos aña-dir un nuevo botón a la barra de boto-nes del formulario de inicio, para que al

pulsarlo se lance el formulario de datos.El código para ello es el que podemosver en el fuente 5.

Conclusiones

Como hemos podido observar, el usode los asistentes de acceso a datos nospermite crear aplicaciones de una formabastante rápida y prácticamente sin nece-sidad de escribir ni una sola línea de códi-

go. De hecho, hemos vis-to que por culpa de laduplicidad de código,podemos hacer que elresultado final no sea elesperado.

En próximos artícu-los de esta sección segui-remos con el tratamien-to de datos usandoADO.NET 2.0, pero

prácticamente nos dedicaremos a vermás código y menos capturas de asis-tentes. En el siguiente, veremos cómohacer lo que acabamos de hacer en esteartículo, pero todo a base de código“puro y duro”, que es lo que a algunosnos gusta, aunque para ello tengamosque trabajar más. Como veremos, noserá tan complicado; al menos una vezque sepamos los pasos que tenemos quedar y las clases de ADO.NET 2.0 quetenemos que usar.

dotN

etM

anía

<<

47

dnm.inicio.taller<<

NOTA

Al utilizar el asistente para la conexión adatos, se habrá creado un DataSet “tipado” quees el que se usará para toda la gestión de esosdatos. Y es precisamente el que se utiliza a lahora de arrastrar el origen de datos al formula-rio. El nombre que le da el asistente de VisualStudio 2005 está formado por el nombre de labase de datos y la palabra “DataSet”; en nues-tro ejemplo, se llama pruebaGuilleDataSet. Siañadimos nuevos orígenes de datos desde la mis-ma base de datos, la nomenclatura será la mis-ma, pero con un número al final del nombre.

][Fuente 4. El procedimiento almacenado que

usaremos para la consulta

ALTER PROCEDURE [dbo].[StoredProcedure1]@Param1 datetimeASSELECT * FROM PruebaWHERE FechaAlta >= @Param1

Figura 8. Selección del procedimientoalmacenado a utilizar

Figura 9. El DataGridView quemostrará los datos del

procedimiento almacenado

NOTA

Si al mostrar la ventana con los orígenes dedatos no se muestran los dos DataSet, debemospulsar en el botón “Actualizar” para que serefresque la información de la ventana. ][

Fuente 5. El código para mostrar el formulario de consultas

private void tsbConsulta_Click(object sender, EventArgs e){

Form2 f2 = new Form2();f2.Show();

}

Page 48: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

Iron Speed Designer“Generador de aplicaciones Web soltero

busca base de datos para relación esporádica”

En la era del desarrollo fugaz y las tareas repetitivas CRUD (Create,Restore,Update,Delete), Iron Speed nos ofrece su particular visión centrada en ASP.NET.Aunque amuchos ni siquiera les sonará este nombre, lo cierto es que son muchos los desa-rrolladores, empresas y organizaciones gubernamentales que lo utilizan.

<< aún está comenzando adespegar, quizás porque el entorno está completamen-te en inglés, y hasta hace poco apenas existían recursosen nuestro idioma, o tal vez porque de las primeras ver-siones existentes a la última aparecida, la 3.2.4, existenmuchas diferencias y es ahora realmente cuando la ideade ISD parece estar dando sus frutos.

ISD es una herramienta visual que genera apli-caciones Web ASP.NET preparadas para trabajarcon bases de datos; además, localizadas en el idio-ma que prefieras gracias a los ficheros de recursosaportados por los profesionales que utilizan ISD.Mediante un asistente le proporcionas la base dedatos Access, Oracle, SQL Server o MSDE, lee elesquema para crear campos, tipos, valores inicia-les y relaciones, y te genera la capa de acceso adatos y las páginas Web necesarias para interac-tuar con ella, esto es: páginas para visualizar tablas,realizar búsquedas en ellas, introducir, modificary mostrar registros. La herramienta genera todolo que necesitas para manipular la información delas tablas de la base de datos que hayas selecciona-do, en código .NET, C# o VB.NET a elegir, .NETFramework 1.1 ó 2.0, y todo, por supuesto, modi-ficable al 100%.

Versiones y característicasExisten dos versiones, la profesional y la empre-

sarial. Aquí solamente enumeraré sus característicaspor falta de espacio.

En cuanto a las páginas Web generadas, ambas ver-siones ofrecen 11 temas de diseño, páginas de mostrary editar tabla, de añadir, editar y mostrar registro, pági-nas maestro-detalle, formularios de entrada, exporta-ción de datos a formato .CSV y páginas de identifica-ción y cierre de sesión. La versión empresarial pone anuestra disposición 13 temas de diseño más y cumpli-miento de la sección 508 de accesibilidad.

En lo relativo a la capa de presentación, en cuanto acomponentes, se ofrecen paneles básicos de datos, menúsde navegación, selectores de fecha y listados de selec-ción, totales de columnas calculadas y validación básicade campos con 10 formatos diferentes. La versión empre-sarial presenta adicionalmente paneles avanzados de datosy validación avanzada de campos con 10 formatos adi-cionales. En cuanto al filtrado, ordenación y navegación,ambas versiones presentan componentes para el filtra-do y ordenación, paginación de tablas, búsquedas com-pletas de texto, controles de navegación jerarquizados y

Fco. Javier Rodríguez

dnm.laboratorio.net

Eso sí, en el mercado español

Francisco Javier RodríguezMesa es analista programador,MCP,MCAD,MCSD en .NET,

MVP de Iron Speed Designer ycreador de la comunidad en

español de ISD encomunidadISD.com. Puede visitar

su página Web enwww.fjrodriguez.com.

ISD es una herramienta visual que genera aplicaciones Web

ASP.NET preparadas para trabajar con bases de datos

Page 49: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

seguridad basada en roles. En el área de localización einternacionalización, brinda soporte internacional deidiomas, idiomas de lectura de derecha a izquierda y fun-ciones de formateo de fechas, números y moneda.

Para la capa de acceso a datos, el producto ofrececonsultas multi-tabla, generación SQL en línea, admi-nistración de transacciones, soporte de claves ajenas,soporte de bases de datos de sólo lectura y recursospara la escalabilidad. La versión empresarial tiene otrosatractivos adicionales en este apartado, debido al sopor-te de vistas, generación de procedimientos almacena-dos, manejo de concurrencia, claves ajenas y prima-rias virtuales y soporte para aplicaciones multi-basede datos.

Ambas versiones permiten la generación de apli-caciones en C# o VB.NET, aunque la versión empre-sarial presenta adicionalmente un creador de instala-dores MSI. Y soportan Access, SQL Server en cual-quiera de sus versiones, MSDE y Oracle.

Clases baseEl secreto de ISD es explotar al máximo la heren-

cia para, por un lado, dar funcionalidad a la aplica-ción, y por otro, permitir la modificación del códigofuente generado sin perder esos cambios al regenerarla aplicación con ISD. Ello aporta una gran flexibili-dad a las aplicaciones generadas.

EntornoEl entorno te da la sensación de estar modifican-

do una página Web, y en el fondo esto es así porqueel corazón de ISD es un editor HTML. No olvide-mos que los archivos que procesa ISD para conseguirlos .ASPX son archivos HTML. Puedes modificar elHTML directamente o de forma visual en el editor(figura 1).

Barra de herramientas

En la barra de herramientas se encuentran con-troles de paneles de tabla y registro, filtrados y orde-

nación, paneles y controles básicos que puedes arras-trar directamente a una nueva página o a las que hayacreado ISD.

Explorador de aplicaciones

En esta ventana puedes ver todas las páginas quetiene la aplicación, para cambiar de una a otra páginacon un clic; las clases base, la capa de negocio, la basede datos para ver el esquema de las tablas y/o modi-ficarlo y los procedimientos almacenados.

Pestañas superiores

• Design: la vista para modificar visualmente la página.• Preview: Una previsualización de la página.• Html: el código HTML a partir del cual se gene-

rará el .ASPX. Totalmente modificable.• Aspx: de sólo lectura, el código .ASPX generado.• Code: el código code-behind de la página que está en

la vista diseño.• Files: una relación de los archivos de layout

(HTML) usados por la página para el menú, dis-posición, etc.

Asistentes y personalizaciones de código

Existen numerosos asistentes para hacerte aún másfácil modificar la aplicación generada. Algunos de losmás importantes son:

• Asistente de Aplicaciones (figura 2).

Aparte de ser el primer asistente que utiliza-remos, también podemos volver a él siempreque queramos para cambiar las característi-cas visuales y no visuales de la aplicacióngenerada. Desde aquí se seleccionará la car-peta y directorio virtual, versión de .NETFramework, lenguaje de programación, idio-

dotN

etM

anía

<<

49

dnm.laboratorio.net<<

Figura 1

Figura 2

Page 50: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

ma de los botones y elementos visuales, temade diseño, base de datos y tablas de las quegenerar las páginas Web.

• Asistente de seguridad basada en roles (figura 3).

Tan sencillo como crear tres tablas: una de usua-rios, otra de roles y otra de usuarios-roles. Lasseleccionas en este asistente y ya tienes una apli-cación securizada, en la que puedes definir elacceso por roles tanto a páginas como a contro-les individuales.

• Asistente de panel de tabla (figura 4).

Nos servirá para seleccionar los campos que mos-traremos en la tabla, personalizar la consulta SQL,indicar los botones, campos sobre los que reali-zar búsquedas, columna por las que queremos darposibilidad a ordenar y filtrar, orden inicial de losregistros y la totalización de columnas.

• Asistente de menú (figura 5). Mediante este asis-tente podemos cambiar el orden de los elemen-

tos del menú seleccionado, la dirección a la queapuntan, eliminarlos o añadir nuevos.

• Asistente de personalización de código (figura 6).Las personalizaciones de código se van reco-pilando y añadiendo en cada nueva versión aeste asistente para facilitar a los usuarios suinserción. No tienes más que seleccionar lafuncionalidad que quieres añadir, sustituir

dotN

etM

anía

<<

50

dnm.laboratorio.net<<

Figura 3

Figura 4

Figura 5

Figura 6

Page 51: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

parámetros si se requiere y finalizar. Existenmás personalizaciones en la página de IronSpeed.

• Página de propiedades (figura 7).

En esta página puedes ver los valores de las pro-piedades de todos los elementos que componen lapágina y modificarlos. Entre otros, aquí están lostextos a mostrar, valores iniciales, enlaces de datos,consultas, seguridad, atributos y eventos.

Futuro

Iron Speed pretende añadir más personalizacio-nes de código y mejorar las existentes, incorporar con-troles AJAX, mejorar la estabilidad y el rendimientodel entorno, y facilitar la inclusión de controles de ter-ceros, ya que aunque ahora mismo se pueden utilizar,ello requiere de ciertos pasos que no son triviales paraalguien que empiece con ISD.

Aplicaciones de ejemplo

Puedes descargar varias aplicaciones de ejemplo ytutoriales de la página Web de Iron Speed, lo que tepermitirá aprender más rápidamente a trabajar con elsistema.

¿Y si me quedo atascado?

Si con el soporte técnico propio de Iron Speed nohas tenido bastante o ya te ha caducado, y la ayuda sete ha quedado pequeña, tienes a tu disposición un foroen inglés en el que los usuarios comparten sus expe-riencias. También existe la página de la comunidadISD, en español, con contenidos traducidos.

ISD Page Security Inject

Una de las carencias que tiene Iron Speed Designerconsiste en no poder realizar un mismo cambio sobrevarias páginas a la vez. Esto es especialmente frustran-

te a la hora de securizar las páginas con la seguridadbasada en roles. Ir página por página puede ser algodesesperante. Por esta razón, creé esta aplicación quepermite asignar roles de acceso a varias páginas a la vezy que puedes descargar de la página de la comunidad.

Integración con Visual Studio

Aunque la aplicación funciona perfectamente sinVisual Studio 2003 ni 2005, sí que es conveniente uti-lizarlo conjuntamente con él. ¿Por qué? Bueno, seecha en falta la ayuda Intellisense para no perderseentre las clases y métodos, y si no te apetece estar vien-do la documentación de las clases base para saber dón-de está o cómo se llama el método que buscas, nece-sitarás Visual Studio.

ConclusionesISD es una herramienta muy útil que te puede aho-

rrar muchísimo tiempo. Incluso alguien sin conocimien-tos de programación podría usarla para generar una apli-cación Web de n capas en cuestión de minutos e inclu-so modificar ciertos detalles visuales. Eso sí, los progra-madores seguimos haciendo falta para añadirle caracte-rísticas avanzadas como la integración de controles deterceros o la creación de funciones específicas en códi-go. Yo lo veo como un framework a medida para tu apli-cación, y aunque te facilite las cosas, es más que conve-niente tener conocimientos de ASP.NET para aprove-charlo al máximo. Incluso puedes usar las librerías quegenera ISD para utilizarlas en aplicaciones Windows,aunque esta no fuera su finalidad inicial.

Como ocurre con toda aplicación, existe una cur-va de aprendizaje asociada al uso de esta herramien-ta. La gran flexibilidad de ISD hace que sea un pro-grama con muchas posibilidades, y esto hace que ten-gas que leer la documentación y estudiarte cómo fun-cionan las clases base para saber qué pueden ofrecer-te fuera de lo que son las modificaciones visuales.

Te aconsejo que pruebes cualquiera de las dos ver-siones de forma gratuita durante 15 días, y puesto quelas aplicaciones generadas con una y otra versión soncompatibles entre sí, decidas más adelante con cuálquedarte. Si ves que la funcionalidad de la versión pro-fesional cumple los requisitos de la aplicación que pre-tendes crear, o aún no has sacado todo el provecho deISD, quédate con esa. Siempre tendrás tiempo másadelante de actualizarte a la versión empresarial, quea pesar de no ser precisamente barata se rentabilizarápidamente con un buen uso.

dotN

etM

anía

<<

51

dnm.laboratorio.net<<

Figura 7

Referencias

Página de Iron Speed: http://www.ironspeed.com

Comunidad ISD: http://www.comunidadISD.com

Page 52: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

preguntas relacionadas con laInterfaz de Usuario (IU). Veremos cómo añadir una ven-tana corporativa (splash window) a las aplicacionesWindows Forms, cómo suministrar un alto nivel de des-cripción para la API Ink (tinta) en Tablet PC y la locali-zación de mapas de sitios Web en ASP.NET.

Tengo una aplicación Windows Forms 1.1 que tar-da bastante en cargar. Me gustaría mostrar un gráfi-co a los usuarios hasta que la ventana principal estédisponible, al estilo de las aplicaciones Office. Si lomuestro en el evento Load del formulario, y despuéslo oculto al final de la carga, los usuarios tienen queesperar hasta que el gráfico se muestra. ¿Hay algunaopción para esto en Windows Forms 2.0?

El gráfico mostrado mientras la interfaz de usua-rio de la aplicación se construye y se produce la ini-cialización adecuada se denomina splash screen (venta-na corporativa). Se utiliza para mostrar informaciónmientras se produce la carga de la aplicación. Antesde .NET y hasta la versión 1.x esto se dejaba en manosde los programadores. En Windows Forms 2.0, y espe-cialmente si el lenguaje utilizado es Visual Basic, pode-mos aprovechar algunas características recién incor-poradas para hacer de esto un juego de niños.

En concreto, VB.NET suministra una ventanacorporativa predeterminada, en forma de plantilla,que puede añadirse a cualquier proyecto WindowsForms. Primero se añade este formulario y luego sepersonaliza con los datos de cada compañía, logos cre-ados ex profeso y etiquetas descriptivas, para mostrarinformación del estado de la inicialización.

Una vez construida la ventana, llamamos al dise-ñador de proyectos y la establecemos como ventanacorporativa de la aplicación. La figura 1 muestra unade estas páginas en una aplicación simple.

El formulario de ventana corporativa también seexpone por programación a través de la propiedadMy.Application.SplashScreen. No se requiere nadamás para que la aplicación muestre dicha ventana enel proceso de carga y se oculte automáticamente cuan-do el proceso de inicialización concluya.

Es interesante, sin embargo, echar un vistazo a loque sucede internamente. Las aplicaciones WindowsForms escritas en Visual Basic están sujetas a lo quese denomina Modelo de Aplicaciones Visual Basic. Elmodelo representa una interfaz de programación cons-truida alrededor del viejo entorno de ejecución deVisual Basic. Por razones de compatibilidad, estas apli-caciones todavía se ejecutan en una especie de entor-no protegido o máquina virtual interna que exponeun conjunto de servicios de aplicación. En particular,el modelo incluye eventos que marcan algunas partesesenciales del ciclo de vida de la aplicación, tales comola inicialización, cierre o excepciones no controladas.Además, el modelo suministra características que losprogramadores suelen incluir en el proceso de cargade una aplicación. Por ejemplo, aplicaciones de ins-

VB.NET suministra una ventanacorporativa predeterminada, enforma de plantilla, que puede añadirse a cualquier proyecto

Windows Forms

Cuando la IU se viste de gala

Dino Esposito

dnm.todotnet.qa

<< Este mes tenemos tres

“”

Dino Esposito es mentor de Solid Quality

Learning y autor de “ProgrammingMicrosoft ASP.NET 2.0 CoreReference” y “Programming

ASP.NET 2.0 Applications AdvancedTopics”, ambos de Microsoft

Press.Afincado en Italia,Dino esun ponente habitual en los

eventos de la industria a nivelmundial.Visita su blog en:

http://weblogs.asp.net/despos.Puede enviarle sus consultas [email protected]

Figura 1.Adición de una ventana corporativa a una sencilla aplicación Visual Basic en

.NET Framework 2.0

Page 53: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

tancia única y ventanas corporativas. De acuerdo coneste modelo una aplicación Windows Forms operacomo una instancia de una clase que hereda deWindowsFormsApplicationBase. La instancia es devuel-ta mediante la propiedad My.Application.

El código fuente autogenerado para la aplicaciónse encuentra en la clase application.designer.vb,oculta bajo el nodo application.myapp en el explo-rador de soluciones de Visual Studio 2005.Sobrescribiendo los miembros protegidos de esaclase, el usuario puede personalizar la forma en quese muestra la ventana corporativa. Por ejemplo, elmétodo OnCreateSplashScreen está escrito comosigue:

La ventana se muestra durante un número míni-mo de segundos, o hasta que el proceso de carga hayaconcluido. Puede controlarse este tiempo por progra-mación a través de la propiedad MinimumSplashScreenDisplayTime. La propiedad acepta un enteroque indica el número de milisegundos para la ven-tana. Esta es mostrada y ocultada dentro del méto-do Run del objeto My.Application que –a su vez- esllamado automáticamente desde el método SubMain() de la aplicación. Al final, la ventana es mos-trada mucho antes de que se instancie el formula-rio principal y tenga lugar el evento Form_Load. Elsoporte de ventanas corporativas no está disponi-ble de forma nativa en aplicaciones escritas en otroslenguajes, tales como C#.

Me gustaría ser capaz de explicar esta pregunta unpoco más. Pero la oscuridad a su alrededor es dema-siado densa, por lo menos para mí. Al mismo tiempotengo mucho interés y curiosidad en la plataformaTablet PC en este momento. Así que dicho simple-mente, ¿qué es Ink?

Tan rimbombante como pueda parecer, el TabletPC es la evolución del ordenador portátil. En tér-minos técnicos, el Tablet PC es un ordenador queejecuta Windows XP Tablet PC Edition como susistema operativo. La característica principal es susoporte interno de entradas de información median-te interfaces humanas directas desde el ratón y elteclado. Este soporte incluye medios muy específi-cos, tales como lápices ópticos y voz. Con el sopor-te extendido que ofrece para interfaces humanas, elTablet PC abre un nuevo mundo de posibilidades ala informática móvil.

La entrada mediante lápiz óptico, en particular,implica reconocimiento de escritura. Hay muchas ven-tajas en la utilización de escritura manual en los orde-

nadores, y algunas de ellas pueden no parecer obviasal principio. Por ejemplo, la capacidad de tomar notasmanuscritas añade rapidez y eficiencia a las activida-des cotidianas. Una nota manuscrita enviada porcorreo, puede, quizás, enfatizar la relación personalcon un cliente. La escritura manual es la forma natu-ral de escribir, a la que renuncias cuando utilizas unPC y esto supone una vuelta a los orígenes. Así pues,¿qué es Ink?

Ink se refiere a la API de Tablet PC que permi-te introducir textos manuscritos y convertirlos atextos de ordenador. En Windows XP Tablet PCEdition 2005, el escenario Ink-to-Text se incorporacomo una experiencia natural y carente de esfuer-zos adicionales, minimizando cualquier barrera parasu adopción.

La API Ink requiere, no obstante, algún sopor-te especial de hardware. En concreto, hay un com-ponente conocido como digitizer, que se integra enla pantalla de un Tablet PC que reconoce y com-prende los movimientos del lápiz. Basándose en esosmovimientos, el digitizer hace corresponder un con-junto de trazos con un carácter digital. El controlInputPanel (una especie de TextBox) es capaz de rea-lizar esta conversión de Ink en texto. Sin ningúnesfuerzo especial por nuestra parte, el sistema escapaz desde el primer día de admitir entradas deusuario de esta clase. A la luz de esto, ¿todas las apli-caciones de Tablet PC están capacitadas para estesoporte? Todas las que utilizan este control lo haránautomáticamente, pero los desarrolladores puedenimplementar características adicionales para exten-der su funcionalidad o hacerlo más específico deuna solución.

Los mapas del sitio (siteMaps) son mi caracterís-tica favorita en ASP.NET, porque es exactamente loque estaba necesitando para mejorar mi aplicaciónsin escribir toneladas de código. Ahora que puedoenlazar el menú a un fichero externo (o base de datos)e incluso construir vistas basadas en roles, me doycuenta de que mi aplicación necesitaría localización.¿Cuál es la aproximación más recomendable paralocalizar un sitemap?

dotN

etM

anía

<<

53

dnm.todotnet.qa<<

Protected Overrides Sub OnCreateSplashScreen()SplashScreen = WindowsApplication1.MySplashScreen

End Sub

Ink se refiere a la API de Tablet PCque permite introducir textosmanuscritos y convertirlos a

textos de ordenador

“”

To

do

tNet.

qa@

do

tnetm

an

ia.c

om

To

do

tNet.

qa@

do

tnetm

an

ia.c

om

Page 54: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

El proveedor predeterminado de SiteMap sopor-ta algunas características relacionadas con la localiza-ción. Se habilita este aspecto mediante un atributobooleano del nodo <siteMap>:

Entre las propiedades que pueden localizarse enun siteMap están el título, la descripción y todas laspropiedades personalizadas que podamos tener. Lalocalización consiste en enlazar propiedades con expre-siones que apuntan a recursos. Se puede enlazar explí-citamente el atributo a un recurso global, o asociarleimplícitamente con un valor que viene de una clavede recurso global. Lo que sigue es un ejemplo deexpresiones explícitas:

Una expresión explícita es una expresión$Resources que apunta a un fichero global .resx y extraede ahí un valor con nombre. Si el fichero contiene unaentrada llamada Default, el valor se leerá y asignaráal atributo. Si no está allí, se utilizará en su lugar unaexpresión implícita.

Estas expresiones implícitas toman valores de unfichero de recursos local (no global). El nodo locali-zable <siteMapNode> se asocia con una clave de recur-so y todas sus propiedades localizables se definen enel fichero .resx como entradas cuya nomenclaturasigue el siguiente patrón:

El siguiente fragmento de código muestra cómoutilizar expresiones implícitas.

En este caso, el fichero de recursos tiene el mis-mo nombre que el fichero .sitemap y dispone de laextensión .resx. En el caso predeterminado, seráweb.sitemap.resx. Este fichero se supone que con-tiene entradas con el nombre Home.Description yHome.Title. Si existen, esos valores serán usados paraleer los valores de los atributos Título y Descripción.En este caso, los valores establecidos en el fichero.sitemap para las mismas propiedades son conside-rados como valores por defecto que se utilizarán encaso de problemas con los ficheros de recursos delocalización.

Un fichero .resx contiene valores de recursos,tales como la cultura predeterminada. Para especi-ficar para una cultura y lenguaje específicos (porejemplo, español), debes cambiar la extensión de.resx a es.resx, asumiendo que es representa elidentificador de localización en español. Prefijossimilares existen para la mayoría de lenguas y cul-turas.

¿Y si queremos adaptar la estructura de navega-ción a una localización dada? Desgraciadamente, lapropiedad Url no puede localizarse en un siteMap dela misma forma que el título o la descripción. Si quie-res cambiar el URL o quizás la estructura del sitio,deberás crear un siteMap distinto para cada culturasoportada y registrarlos todos en el fichero de confi-guración:

Esencialmente, tenemos múltiples proveedoresdel mismo tipo – XmlSiteMapProvider – pero trabajan-do sobre distintos ficheros de mapas del sitio. Es pre-ciso retocar el fichero Web.Config de cada versión loca-lizada para que utilice el fichero .sitemap y el prove-edor adecuado en cada caso.

Finalmente, téngase en cuenta que si utilizamosun proveedor personalizado (por ejemplo, uno quealmacene datos en una base de datos), la responsabi-lidad de las características de localización recae ente-ramente en el programador.

dotN

etM

anía

<<

54

dnm.todotnet.qa<<

To

do

tNet.

qa@

do

tnetm

an

ia.c

om

To

do

tNet.

qa@

do

tnetm

an

ia.c

om

Traducido por Marino Posadas

<siteMap enableLocalization="true"><siteMapNode

url="~/default.aspx"title="$Resources:Resources,Default" />

:</siteMap>

[resourceKey].[Attribute]

<siteMap enableLocalization="true"><siteMapNode

resourceKey="Home"url="~/default.aspx"description=" ... "title=" ... " />

:</siteMap>

<siteMap defaultProvider="DefaultSiteMap"><providers>

<add name="DefaultSiteMap"type="System.Web.XmlSiteMapProvider"siteMapFile="default.sitemap" />

<add name="SpanishSiteMap"type="System.Web.XmlSiteMapProvider"siteMapFile="es.sitemap" />

<$VE;><add name="ItalianSiteMap"

type="System.Web.XmlSiteMapProvider"siteMapFile="it.sitemap" />

</providers></siteMap>

<siteMap enableLocalization="true">:

</siteMap>

Page 55: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

dotN

etM

anía

<<

55

<<Microsoft ASP.NET Coding Strategies with the Microsoft ASP.NET TeamMatthew Gibbs y Rob Howard

Editorial: Microsoft PressISBN: 073561900XPáginas: 336Publicado: Noviembre, 2003Idioma: Inglés

No es habitual encontrarse con obras realizadas por el propio equipo de desarrollo de un pro-ducto, pero éste es el caso de la obra que comentamos aquí. Matthew Gibbs y Rob Howard seexplayan a gusto en un trabajo cuyos valores principales son los relacionados con la propia arqui-tectura y la comprensión más profunda de los entresijos de ASP.NET (lo hicieron para la ver-sión 1.x, pero la mayor parte es perfectamente válida también para la versión 2.0). Y lo mejor esque todas las explicaciones se basan en código fuente incluido, y explicado, si bien es una penaque no esté escrito mediante la técnica “code-behind”. Pero no es una galería de código gratis,que podemos cortar y pegar, sino un soporte a los conceptos teóricos. Quizá se echa de menosun poco más de longitud, aunque está claro que los autores escriben sólo de lo que conocen deprimera mano. Sobresale el capítulo de programación y manejo de las cachés.

MCAD/MCSD Self-Paced Training Kit: Implementing Security forApplications with Microsoft Visual Basic .NET and Microsoft Visual C# .NETTony Northrup

Editorial: Microsoft PressISBN: 0735621217Páginas: 640Publicado: 2005Idioma: Inglés

Se trata de una obra de “autoestudio”. Es parte importante de la preparación para los exámenesoficiales del MOC 70-330 y 70-340 (“Implementing Security for Applications…”) y hace un reco-rrido notable por todos los aspectos de la seguridad en programación sin dejar uno en el olvido.Cuenta con la aprobación de su editorial y puede considerarse el libro oficial al respecto. El úni-co pero (del que no tiene la culpa el autor) es que la edición sea de 2005 y no se recojan algunosde los aspectos nuevos en seguridad que ofrece la versión 2.0. Desde los principios que rigen eldesarrollo de aplicaciones seguras (Modelo de Amenazas, Estrategias SD3+C, etc.) hasta cómo seimplementa la seguridad en plataformas concretas, tales como ASP.NET, servicios Web o aplica-ciones de entorno de red, son recorridos por el autor con un mérito añadido (y una ventaja parael lector), y es que una buena parte de los ejemplos adopta la forma de “Hands-on-Lab”, esto es,el autor explica como llegar al resultado paso a paso, lo que la hace idónea para el propósito deautoestudio que apuntábamos al principio. Aunque uno no se vaya a examinar, es muy recomen-dable para aprender cómo hacer las cosas. Además, le acompañan 3 CD, con todo el contenidodel código y versiones de prueba de Visual Studio 2003 Professional y Windows Server 2003.

dnm.biblioteca.net<<

dnm.biblioteca.net

Page 56: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

dnm.club >>> dnm.club >>> dnm.club >>> dnm.club >>>[ ]

Page 57: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

dnm.club >>> dnm.club >>> dnm.club >>> dnm.club >>> dnm.club >

Page 58: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles

PowerTask y WOL. El sitiohttp://simply-ware.com mantiene un parde curiosas utilidades, PowerTask,para programar tareas del ordenadorasociadas a un calendario y WOL, que

implementa una función de despertador de ordenadores,incluso a distancia. La descarga es directa y gratuita.

www.BullZip.com también dispone de un montón deutilidades interesantes, pero destacamos BullZip PDFPrinter, que permite escribir directamente a este for-mato desde casi cualquier programa de Windows. Y tam-bién es gratuito.

Microsoft publica por primera vez directivas de configura-ción de hardware para Windows Vista

Según ha apare-cido en varios anun-cios oficiales, lacompañía ha decidi-do publicar un con-junto de recomen-daciones de hard-ware de cara a la ins-talación de Win-dows Vista y su ren-

dimiento óptimo en un sistema. Estas guías de montaje paralos así llamados “Vista Capable PC”, han sido uno de lospuntos fuertes del evento WinHEC, celebrado el pasadomes de mayo. Aunque las propuestas básicas son muy modes-tas (procesador a 800MHz, 512MB de RAM y tarjeta com-

patible con DirectX 9.0), la recomendación real para buenrendimiento sube notablemente, aunque nada que no esperá-ramos (procesador a 1GHz, 1GB de RAM y 128MB de capa-cidad en la tarjeta gráfica, cuyo “chip” se recomienda quesea el más reciente posible, y –para una mejor experienciade usuario con AERO–, con soporte de Pixel Shader 2.0 yprofundidad de colores de 32 bits por píxel). En otras pala-bras, las características de las tarjetas pueden comprarse hoyen día. Así mismo, parece que la política de garantías al usua-rio se agranda mediante la garantía de funcionamiento demuchos más productos, dentro de su “HardwareCompatibility List” (lista de compatibilidad de hardware).Claro que otra historia será su adopción empresarial, queprobablemente no se vea plenamente integrada hasta que elsistema lleve algunos meses en funcionamiento, según afir-ma el analista Roger Kay, presidente de EndpointTechnologies Associates.

dotN

etM

anía

<<

58

dnm.desvan<<

Marino Posadas

ASP.NET 2.0 Internals . (http://msdn.microsoft.com/asp.net/reference/infras-tructure/default.aspx?pull=/library/en-us/dnvs05/html/internals.asp) muy jugoso artículo sobre losmecanismos interiores de funcionamiento de ASP.NET 2.0.Incluye varias secciones de ejemplo y abundantes gráficosexplicativos. Y ya que estamos con el tema, y también delmismo origen (MSDN), el enlace http://msdn.microsoft.com/asp.net/reference/migration/asp2mig/default.aspx, conduce auna entrada de 4 documentos explicativos de cómo seguirpaso a paso una migración a la nueva versión, desde cual-quiera de las anteriores. ¿Más del mismo autor? Lo hay. Yno peor que los anteriores. Un excelente artículo (largo),sobre Prácticas de Seguridad en ASP.NET 2.0 (en inglés, todos,eso sí), escrito por J.D. Meier, Alex Mackman, BlaineWastell, Prashant Bansode, Andy Wigley y KishoreGopalan, que ha merecido una calificación media de 9.

Documentos en la Red

Utilidades del mes

no

tici

as.

no

tici

as

Multi-Touch InteractionResearch, otro documentoimpresionante (vídeo) lo apor-ta esta vez la página VicDivecha's Tech Blog(ht tp : / /mblog . l i b .umich .edu/~rdivecha/archives/2006/02/the_world_of_sm.html) que

muestra un vídeo sobre las posibilidades de las nuevasinterfaces de usuario de alta interactividad. Quien másquien menos habrá visto algo parecido en la tele, pero ladiferencia es que esto es real (o así parece).

Sitios del mes

Sitio de “Geeks” en castella-no, principalmente manteni-

do por algunos MVP de desarrollo. Una agradable sorpre-sa la idea de varios MVP (Rodrigo Corral, Carlos Fouz, JorgeSerrano, Iván González, Pablo Abbate, J.M. Alarcón) de for-mar un foro de noticias especializado, donde se filtre la infor-mación hacia temas de desarrollo (http://geeks.ms/blogs).

ImageMap tiene montones de buen códi-go en CSS para probar y muestra losresultados en su propia página principal(h t t p : / / f r ankmanno . c om/ i d ea s / c s s -imagemap-redux).

Page 59: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles
Page 60: dotNetManía - Tecnología, Tips de Programación y Datos ... · tica”, ha declarado Bill Gates. La beta 2 de Windows Vista y de Windows Server “Longhorn” se encuentran ya disponibles