SQL Site Map Provider, uso de SiteMapPath, Menu, y Treeview con base de datos

Con poco tiempo para postear, y sin internet en casa aún, aprovecho que hay la oportunidad de enviar smallpost :).


Este es una parte de los post que tengo en la cola bajo la categoría de ASP.NET Custom Provider/Everywhere, ASP.NET CP/E, frase no oficial por cierto. En estas dos semanas he estado haciendo algunas implementaciones de eso, por ejemplo tu puedes trabajar, el servicio de membership con tus usuarios de un dominio, pero para el manejo de roles montar un SqlRolProvider, y además usar SqlSiteMapProvider. Otra implementación que estoy haciendo, es usar el servicio de membership para validar usuarios contra MySql, y una vez validad el usuario manejarlo en tu aplicación con tus otros providers en SQL, sabían que existe el MySqlMembershipProvider?, en la ultima versión del conector de MySql para .NET, tiene soporte para el servicio Membership.  Y así otras fummadas más que puedes hacer, también podrías crear tu OracleMembershipProvider, por eso el título ASP.NET Custom Provider/Everywhere, pero más de eso hablaré en otro post, este sólo es un overview :).


Ahora al título del post, normalmente usted habrán podido usar el SiteMapDataSource, para tener un menú dinámico basado en el arcivo web.sitemap, y hasta puedes cambiarle el nombre de archivo o tener dos web.sitemap, ese un post que tengo en la cola. Pero dejando eso de lado, en algunos casos lo que se necesita es un menú mas dinámico aún, es decir basado en una base de datos.


Y es ahí donde podemos usar el SqlSiteMapProvider, básicamente tenemos que hacer tres cosas:



  1. Crear nuestra clase SqlSiteMapProvider.

  2. Crear nuestra tabla SiteMap.

  3. Y agregar nuestro provider al web.config, y usarlo, nada más.

Y en una de las cosas interesantes, es básicamente que un menú desde una base de datos es más dinámico y todos los beneficios que tiene meterlo en una base de datos, el menú de un sitio web no se va actualizar todos los días, el administrador de la web será el encargado de crear menús, dar los respectivos permisos, etc. Y el problema es que cada vez que cambias de página se accede a la base de datos para consultar el menú, y eso tampoco es óptimo, pero lo interesante es que podemos usarlo con SQL Cache Dependency.


 Artículo completo y código fuente: The SQL Site Map Provider You’ve Been Waiting For.


P.D.: Para junio parece que tendré más tiempo para enviar todos los post que tengo en la cola, el bloging es un vicio que no puedo dejar aún. Por cierto no he podido revisar los comentarios y emails que me han enviado, sorry, debe haber una cola de tres semanas, ya para el otro fin de semana trataré de responder a todas las dudas, comentarios, sugerencias, criticas, etc, no respondidas :).


Saludos,



Post cruzado 3Dev Blogs

habilitando nuestro servidor web localmente, en una intranet o red local

En algunas ocasiones tenemos la oportunidad de probar webs en nuestra intranet o red local, fuera del trabajo. Es decir tener un servidor web para la aplicación Web, y una pc cliente que acceda al servidor web.


Para lograr este ambiente basta con tener dos PCs en la red, y que se vean obviamente, o también podemos usar las superpoderosas máquinas virtuales, es más, en mi caso tengo eso. Tengo montado un servidor Web sobre una PC virtual con W2k3-Standard, corriendo bajo 512 de RAM de la pc Host, que tiene un XP-SP2 con 768 de RAM.


El caso es que desde XP estaba intentando acceder a mi servidor web, pero el navegador no respondía a http://w2k3Web/, w2k3Web es el nombre de mi servidor. Este problema ya me paso hace unos años, no sólo solucione aquella vez, hasta ahora que me ha vuelto a pasar, y después de estar jugueteando un rato con la PC. Sólo faltaba hacer algo bien básico, en el servidor:



  1. Inicio-> Panel de Control-> Windows Firewall.
  2. Nos vamos a la pestaña de Exceptions, en mi caso tengo encendido el Windows Firewall, vamos agregar una excepción:
    Windows Firewall
  3. Le asignamos un nombre determinado, y agregamos el puerto 80 TCP:
    agregar puerto
  4. OK, OK.

Ahora si podemos ir a nuestro cliente, y ver la aplicación web de nuestro Web Server.


Si levantáramos otro sitio Web con otro puerto, por ejemplo para un servidor Sharepoint o ReportServer, sólo tenemos que darle permisos a ese puerto, y lo podemos ver desde nuestra pc cliente. Y aunque este sea un tema básico de redes, puede que en ese momento no entedamos el por que. Por cierto, este post es base para otro post que tengo en la cola :), ya les cuento


P.D.: No he podido postear estos días, ya que me mudado de ciudad, a Lima, y aún no tengo el servicio de internet en mi guarida, espero que el fin de semana  ya cuente con internet, y les cuento más detalles de lo veré por estos meses :).


Saludos,



Post cruzado 3Dev Blogs

foros, foros, foros, y mas foros…

Este post es para hablar de foros en general y en especial de foros de ASP.NET, ya que recién me entero de un nuevo foro en espaniol.

Si muchos no saben aún, soy un partidario del uso de los foros. En un inicio los use para enviar preguntas, ahora trato de responder en los temas que pueda ayudar. Es más, siempre que me llega un email al correo con alguna pregunta, le hago la sugerencia que a la próxima lo envié al foro. Y claro, tampoco es que lo haga de espeso, y muchos menos porque yo sea el moderador del foro, sino siempre acompaño del siguiente texto:

Ventajas de enviarlo al foro:

  • De un inicio y de hachazo, las respuestas llegan más rápido. ¿Por qué?, porque en el foro diariamente hay personas que están interesados en resolver dudas, ya sea por afición, aburridos, por figurar, por intentar demostrar que lo sabe todo, porque el msn esta bloqueado, o por lo que fuera, pero que lo ven muchas mas personas, lo ven. Y es que si lo envías a una sola persona, tendrás que esperar que esa persona se haga un tiempo, para poder responderte.
  • Puede haber que otros usuarios ya hayan pasado el mismo problema, entonces tu respuesta se resolverá al instante.
  • Una de las mejores cosas, es que hay varios puntos de vista y toda una discusión por la mejor respuesta, claro, no en todos los casos.
  • Y la última, no tanto para ti, sino para otros usuarios, es que tu pregunta puede servir a futuros usuarios con el mismo problema

Y entre otras ventajas que debe haber, ahora algunas reglas básicas que he visto en el común de los foros:

  • Leer las reglas del foro antes de postear.
  • Buscar tu pregunta en el foro, antes de enviarla. Posiblemente ya haya sido resuelta.
  • Y esta si es re-básica y clara, en el foro NO SE HACEN TAREAS. Esa que dice: “Necesito un programa en C# que calcule la suma de los n primeros factoriales. Por favor es urgente lo tengo que presentar mañana, que este comentado, y que sea una aplicación Windows con C# 2005. Porfa, es urgente, es lo último que necesito para pasar el curso.

En solocodigo hasta se creo un foro papelera para enviar todos estos tipos de posts.

Ahora, ya saben porque deben enviar su duda al foro, y ya saben porque cuando hacen una pregunta por mail o msn se pregunta, ya lo enviaste al foro?

Ahora las listas de foros que visito, y los que participo:

  • ASP.NET en solocodigo. Soy co-moderador del foro de ASP.NET, así que este el que más visito :).
  • ASP.NET vía MSDN. No sabía que habían lanzado uno de en español, ahora comenzaré a visitarlo frecuentemente. Si no tienen una cuenta passport, la pueden obtener desde aquí: www.passport.net.
  • Foro de es-ASP.NET, siempre quiero darme un tiempito para revisarlo, pero sin mucho éxito.
  • ASP.NET en el Guille. Aunque, hay tener una cuenta para poder ver los post.

Net en general recomiendo este foro, y ahora también recomendare este.

Todos esos son en español. Cuando tengan una pregunta de ASP.NET, y en ningún foro en español tengan la respuesta, pues lo ideal es mandarlo a forums.asp.net, siempre que tenido alguna consulta ya la encontraba ahí, y sino, había alguien quién la respondía. Hasta ahora lo uso cuando tengo alguna duda de un tema que no he visto.

Por cierto, siempre respondo todos los mails que me envían. Pero los respondo en orden de llegada, a veces un poco tarde pero siempre respondo. Por eso les sugiero que si tienen una duda lo envíen al foro, y si están interesados en que vea su pregunta me envían un mail con el link de post. Por cierto cualquier comunicación a través de este mail, por lo del spam y que a veces tienes que cambiar de cuenta. Las cuentas supersergioman[arroba]hotmail.com y sergiomanc[arroba]yahoo.es, que son cuentas que aparecen en los varios artículos que tengo en el guille, ya no las reviso, salvo casualidades, estoy esperando que se eliminen :D, hasta estar seguro que no tengo ningún tipo registro con esos mails.

Logos de foros, ordenados por tamaño:

foros MSDN en espaniol

forums ASP.NET

Ir a los foros del Guille

foros es-ASP.NET

foros SoloCodigo

Saludos,

Post cruzado 3Dev Blogs

poster basico de Scrum (espaniol)

..un poster básico para los beginners en Scrum. Después de aprender scrum en 5 minutos :D, te da aliento para comenzar a revisar de nuevo todo lo que no entendías de Scrum.

Por lo menos ahora tengo un poco claro algunos conceptos como Sprint, Product Backlog, Sprint Backlog, entre otros de los que envuelve a Scrum.

Este poster/image, te da un overview de Scrum, este me ayudo a dejar claro varios conceptos. Ahora me siento motivado para leer y entender, sobre todo lo segundo, los tantos posts de Rodrigo sobre Scrum.

Por lo que entendí, eso creo, me ha gustado lo que propone para el ciclo de vida de desarrollo de software, resumiendo en dos palabras a Scrum, me atrevía decir, que es: simple y práctica. Obviamente que no sirve todo lo que parece, si es que no se aplica a un proyecto. En los proyectos personales o cuando soliciten mi opinión en algún proyecto comentaré a esta métodología, claro, primero hay que aprenderla bien. Y recién en ese momento, podre comentar la metología con más base, pero por el momento me quedado motivado :).

Saludos,

Post cruzado 3Dev Blogs

el UpdateProgress no funciona con un evento fuera del updatePanel?

Si han estado usado el UpdatePanel, pero no abusando, pero además han estado implementando el patrón Progress Indicator, con el uso del control UpdateProgress, se habrán topado con el problema que el control UpdateProgress no se muestra cuando usamos AsyncPostBackTrigger, para actualizar el updatePanel con eventos de controles fuera de él.

Y que podemos hacer para mostrar el UpdateProgress, cuando queremos actualizarlo con un control fuera de él?, pues ya lo comento Shiju Varghese’s en su blog:

Lo que vamos hacer es mostrar el control UpdateProgress programáticamente usando JavaScript, a través de este bloque de Script:

<script type=”text/javascript”>
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_initializeRequest(InitializeRequest);
    prm.add_endRequest(EndRequest);
    var postBackElement;
    function InitializeRequest(sender, args) {
       if (prm.get_isInAsyncPostBack())
       {
          args.set_cancel(true);
       }
       postBackElement = args.get_postBackElement();
       if (postBackElement.id == ‘dllArea’)
       {
         $get(‘UpdateProgress1’).style.display = “block”;
       }
    }
    function EndRequest (sender, args) {
       if (postBackElement.id == ‘dllArea’)
       {
         $get(‘UpdateProgress1’).style.display = “none”;   
       }
    }
    function AbortPostBack() {
      if (prm.get_isInAsyncPostBack()) {
           prm.abortPostBack();
      }       
    }
</script>

Debemos agregar este bloque de código a nuestra WebForm, y no tendremos problemas para mostrar el UpdateProgress. Notar que dllArea, es el control que provoca la actualización en el updatePanel (como en este ejemplo), y el UpdateProgress1 es el control UpdateProgress que queremos que se muestre mientras se actualiza el UpdatePanel.

Para un ejemplo completo revisar este artículo de la documentación de ASP.NET AJAX: UpdateProgress Control Overview, código de ejemplo y ejemplo on-line.

Pero hay un inconveniente con la solución de usar un bloque de código, y es que lo he probado usando una Master Page y no funciona, de todas maneras ya lo envié al foro, a ver que solución nos dan :), cuando obtenga respuesta trataré de enviar un ejemplo completo con el uso de una master page al blog :).

P.D.: Otra solución era simplemente no asociar el control UpdateProgress a un control UpdatePanel, pero esta no es la mejor solución ya que el control UpdateProgress aparecerá en todos los casos, y si tenemos varios UpdatePanels y UpdateProgress en nuestra página esto puede ser un problema. Pero si funciona en todos los casos :), incluso usando una master page. Lo que trae como conclusión que hay que hacer algo adicional para registrar un bloque de javascript, cuando usamos master pages, ya lo han hecho?

Saludos,

Post cruzado 3Dev Blogs

Tip ASP.NET: tu gridView no tiene data que mostrar?

esta pregunta la he visto en varios foros, -como se que el gridView no tiene datos?, y si lo que estaban buscando es darle un mensaje al usuario cuando no hay data que mostrar.

Pues contarles, a los que no sabían, que hay un Template en el Gridview para eso: EmptyDataTemplate:

  <asp:GridView ID=”tuGridView” runat=”server” … >
    <Columns>
      …..
    </Columns>
    <EmptyDataTemplate>
      <img src=”~/images/nodata.jpg”
              alt=”no hay datos que mostrar” />
      <br/><a href=”….”>Inserte un nuevo dato</a>.
    </EmptyDataTemplate>
  </asp:GridView>

O ponen el código que ustedes quieran, ya que es un template, esta propiedad es soportada, también por el DetailsView, y el FormView. Aquí pueden apreciar un ejemplo online de un DetailsView: Ejemplo, código.

Por cierto, si quieren ver algunos ejemplos de escenarios de accedo a datos avanzado, lo pueden hacer en: Advanced Data Scenarios.

Saludos,

Post cruzado 3Dev Blogs

Webcast: Implementando ASP.NET AJAX en Aplicaciones Web existentes (espaniol)

MSDN Media Center - Webcast

Ya esta programado vía Microsoft MSDN Media Center, el WebCast: Implementando ASP.NET AJAX en Aplicaciones Web existentes.

Y es cierto lo que piensa, Christian Quintana, es mi primer WebCast :$, esperemos que todo salga bien :), tomaremos los consejos de Cesar Fong.

El objetivo será ver todas las posibilidades que ofrece ASP.NET AJAX para el desarrollo de aplicaciones Web con AJAX, recuerden que existen otros frameworks, herramientas, y librerías de AJAX, pero en este caso nos enfocaremos en ASP.NET AJAX, y ver todos los recursos que tiene para nosotros y como podemos empezar a implementar ASP.NET AJAX en nuestras aplicaciones actuales :). Por cierto, si tienen algunas sugerencias con lo que quisieran ver, o sobre los temas que quieran ver, me avisan, todavía estamos en una fecha flexible :).

Saludos,

Post cruzado 3Dev Blogs

Pero por supuesto, que quiero las sesiones del MIX 07!

MIX 2007

Jorge nos pregunta, ¿No has podido ir al MIX’07 de Las Vegas (USA)?, ¿Te gustaría obtener las sesiones del MIX’07?, y da la coincidencia que respondo afirmativamente a las dos preguntas, la primera con tristeza: “ajap :(“, y la otra con alegría: “Pero por supuesto, que SI :P”.

Las sesiones las pueden descargar desde el siguiente enlace: http://sessions.visitmix.com/. Y como dice Jorge, descárguenlo mientras puedan, porque no sabemos hasta cuando van a estar. Y recuerden que el MIX 07, es el “evento” de desarrollo Web de Microsoft, orientado a desarrolladores, diseñadores, y personas dedicadas al negocio Web. Particularmente estoy interesado en ver las sesiones de AJAX y Silverlight :), ya les cuento :).

P.D.: No dejen que la emoción los inunde, y por querer ver todo, al final no vean nada, alguna vez casi termino de descargar todo el contenido de otro evento y sólo vi algunos, ahora también intentaré descargar todas las que pueda :), pero me centraré en ver las que me interesan en este momento, es decir, las de desarrollo :).

Saludos,

Post cruzado 3Dev Blogs

Aplicacion Ejemplo: Album Viewer, con ASP.NET AJAX y Silverlight

Visitando el blog de Dan Wahlin, me tope con esta noticia: AlbumViewer Application Now Runs with Silverlight and ASP.NET AJAX.


Como saben en el reciente MIX 07, se liberó Microsoft Silverlight, Dan Wahlin aprovecho y actualizo su aplicación AlbumViewer para ver, que consume su información a través de unos Web Services de Amazon.com, ahora su aplicación AlbumViewer esta corriendo sobre ASP.NET AJAX y Silverlight.


Puede ver la versión online, o descargar el código fuente.


No he tenido tiempo de revisar el código a detalle, pero de todas maneras lo dejo para que aquellos que si tengan un tiempito de hacerlo :).


Por cierto, será cierto?, que los developers, no expertos designers, pueden hacer eso con Silverlight (antes WPF/E)?, me he esta dando curiosidad de probarlo, pero será de acá un tiempo cuando termine mis pendientes :).


Les dejo un screenshot de la aplicación online, con la búsqueda de Shakira :):



P.D.: Si no ven nada, es porque no tiene instalado Silverlight, además tendrán el link para descargar e instalarlo. Es algo así como si instalaran el add-in de Adobe Flash para ver las animaciones de Flash en la Web, de igual manera tienen que instalar Silverlight.


Saludos,


Post cruzado 3Dev Blogs