El Blog del Leo

Compartiendo lo que aprendo

[Off-Topic] Fin del curso de ingles y certificación TOEIC

No creo que muchos lo sepan pero desde Agosto a Diciembre estuve dando un curso de inglés intensivo gracias a CORFO en el Instituto Chileno Norteamericano de Cultura en Concepción. Les dire que la experiencia estudio-trabajo era demoledora razon por la cual me llevaron a pensar en desistir entre Octubre y Noviembre pero mis amigos y familia me dieron animo para finalizar el curso.
El objetivo del curso era en base al examen internacional TOEIC la idea era subir 200 puntos en comparativa al puntaje de ingreso al curso de ingles.
Hace unas semanas di el examen y resulto que subi 320 puntos en comparativa al examen TOEIC anterior, subiendo mi nivel de Ingles de Intermedio+1 a Avanzado +1 hecho que me dejo muy conforme dado todo el esfuerzo realizado.
Agradecer a mi profesora y compañeros del curso de ingles donde vivi una muy bonita de experiencia y aprendi bastante, algunas fotos de la graduación.


Generar postback dentro de un UpdatePanel para descargar archivo



Creo que muchos hemos tenido problemas cuando en una grilla tenemos un boton que nos sirva, por ejemplo, para descargar archivos adjuntos, utilizamos una rutina conocida que podemos encontrar en cualquier parte descargar archivos pero nos arroja un error de javascript y no sabemos que hacer.

¿Cuál es el problema? Por lo general, tenemos nuestras grillas dentro de UpdatePanels los cuales por su naturaleza, intentan capturar todas los postback y convertirlas en llamadas asincronas, la cual no podemos generar completo el request en el servidor para generar el archivo y paf! error.

Solución. La solución parte por decirle a nuestro querido UpdatePanel, hey! cuando el usuario haga click en este botón para poder descargar el archivo dejalo generar el postback, no te preocupes. No creo que con palabras entienda pero si con un pequeño codigo lo tendrá que hacer:

Como este ejemplo es cuando el boton este en una grilla, al momento que se este creando la grilla le diremos lo siguiente:

Protected Sub gvAdjuntos_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvAdjuntos.RowDataBound
Try

If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Normal Or e.Row.RowState = DataControlRowState.Alternate Then

'Forzamos que el boton descargar genere un postback para poder descargar el archivo, ya que esta dentro del UpdatePanel
'Obtenemos el ScriptManager, en este caso se encuentra en una Master PageDim scriptManager = DirectCast(Master.FindControl("ScriptManager1"), ScriptManager)
' Y registramos el postback en este ScriptManager, cada vez que yo presiona el boton descargar, el Script Manager asistira para la generación del postback necesario para poder descargar el archivo
scriptManager.RegisterPostBackControl(DirectCast(e.Row.FindControl("imgbtDescargar"), ImageButton))
End If
Catch ex As Exception
Throw ex
End Try

End Sub

Y con este simple codigo podremos crear nuestro 'Descargar Archivo' dentro de una grilla que está en un UpdatePanel.
Saludos.


Facebook SDK

Como leen, Microsoft ha anunciado un set de herramientas para desarrollar aplicaciones para la plataforma Facebook, este toolkit ha sido desarrollado por la comunidad y actualmente se lanza el release 3.0 que viene con nuevas actualizaciones en la arquitectura y provee interfaces asincronas para WPF y Silverlight.
El principal punto de interacción con Facebook nos lo provee la API de facebook (Facebook.Rest.Api) que es provista por el ensamblado facebook.dll que envuelve una interfaz de uso facil para llamar a los diferentes métodos de la API de facebook

Este set de herramientas viene con los siguientes ensamblados:



  • Facebook.dll
    Es es el principal ensamblado que será usado en toda la aplicación. Tiene toda la lógica que manipula las conecciones con el API de Facebook. Este ensamblado está especificado para dar soporte a aplicaciones XAML tales como Silverlight y WPF.
  • Facebook.Silverlight.dll
    Este ensamblado será la base para todas las aplicaciones Silverlight que interactuen con Facebook. La Rest API en esta ensamblado es asincrona.
  • Facebook.Web.dll
    Este ensamblado debe ser usado para las aplicaciones Canvas. La principal funcionalidad de este ensamblado es encapsular el enlace entre la aplicacion Facebook y una aplicación Canvas (FBML/IFrame).
  • Facebook.Web.Mvc.dll
    Provee soporte para la construcción de aplicaciones Canvas usando ASP.NET MVC. Separado del ensamblado Facebook.Web.dll para evitar que todos los desarrolladores instalen los componentes de MVC.
  • Facebook.Winforms.dll
    Este ensamblado provee las herramientas para construir aplicación Facebook utilizando la tecnologia de Winforms. Este componente encapsula la API para poder ser usada de manera más fácil desde Winforms. Además posee algunos controles que pueden ayudar durante el desarrollo.
Para comenzar a usarlo que necesitamos:
  1. Descargar Facebook SDK
  2. Y seguir algun ejemplo para utilizarlo.
Saludos.

[Off-Topic] Juanelo: El Progreso



Juanelo es un webcomic creado por el Marco Canepa (a.k.a Can) y la está rompiendo en la red. Yo soy asiduo a leer diariamiente sus comics en su sitio web http://www.juanelo.cl/ , la ultima creación de Canepa fue el capítulo El Progreso, el cual refleja como hemos evolucionado con la tecnologia y como nos facilita la vida.
Disfrutenlo.

Visiten el sitio web de Juanelo y dejen sus comentarios.

ModalPopUpExtender sobre un objeto Flash con Javascript


A lo mejor no es un problema muy popular pero de que me costo encontrar la solución, me costo... Asi que decidi ponerla en el blog, primero para que no se me olvide y segundo para compartirla con quienes leen y siguien este blog.

Ubiquemonos en el contexto del problema.
Queremos poner un ModalPopUpExtender sobre un objeto Flash en nuestra pagina web, este ModalPopUp aparecera en ocasiones dada un cierta lógica.

Problema.
ModalPopUpExtender se ubica detras del objeto Flash, no teniendo opciones de manipular nuestro popUp.

Solución.
La solución que encontramos nos la da nuestro buen amigo javascript y algunos arreglos a nuestro html, solución probada en Firefox e Internet Explorer.
  • Objeto Flash:
    El objeto Flash que está destacado en amarillo, tenemos que asignar las propiedades wmode en opaque tanto en el tag param como en el tag embed, además, tenemos que tener a nuestro objeto en dentro de un div y debemos colocarle un id, ya que lo invocaremos desde javascript.
    <div id="flashObject">
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,42,0"
    id="presentacion_blanco_10" width="990px" height="400">
    <param name="movie" value="img/presentacion_blanco_19.swf" />
    <param name="quality" value="high" />
    <param name="bgcolor" value="#FFFFFF" />
    <param name="wmode" value="opaque" />
    <embed name="presentacion_blanco_10" src="img/presentacion_blanco_19.swf" quality="high"  wmode="opaque" bgcolor="#FFFFFF" swliveconnect="true" width="990px" height="400" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
    </object>
    </div>
  • ModalPopUpExtender
    La caracteristica importante que hay que tener preparada en el ModalPopUpExtender es BehaviorID ya que con ese nombre(ID) es con cual se puede invocar al ModalPopUpExtender desde Javascript.
    <cc1:ModalPopupExtender ID="PopUpEjemplo" runat="server" TargetControlID="label" BehaviorID="PopUpEjemplo" PopupControlID="seleccionSubrogancia" PopupDragHandleControlID="panelDragHandle" BackgroundCssClass="popUpStyle" />

  • Javascript
    Ahora en nuestro código Javascript crearemos una función la cual esconda nuestro objeto flash para poder colocar sobrepuesto el ModalPopUpExtender cuando sea invocado.

    function pageLoad(sender, e) {


    var popup = $find("PopUpEjemplo");
    popup.add_shown(noVisible); // En la propiedad add_show(muestra popUp),ocultamos el objeto Flash
    popup.add_hidden(Visible);
    }  // En la propiedad add_hidden(oculta popUp), mostramos el objeto Flash

    function noVisible(ev) {
    objFlash = document.getElementById('flashObject');
    objFlash.style.display = 'none'; }

    function Visible(ev) {
    objFlash = document.getElementById('flashObject');
    objFlash.style.display = 'block'; }
Con todo estos simples pasos podemos trabajar con objetos Flash y ModalPopUpExtender sin ningun problema.
Espero les sirva.

Debug de Javascript desde Visual Studio



Muchas personas saben que existe esta opción pero no saben como habilitar, podemos poner millones de puntos de interrupción pero nunca agarra en el javascript. Bueno, lo que tenemos que hacer es habilitar el modo de depuración de Javascript.


La pregunta natural es:
¿Dónde se encuentra está opción?

No se encuentra en Visual Studio precisamente, sino que en los navegadores. Para el caso de Internet Explorer, debemos ir a las opciones de nuestro explorador para habilitar esta anhelada herramienta:
Y sacar el check de la opción 'Deshabilitar la depuración de scripts', al realizar esta acción automaticamente se habilita la opcion de poder realizar depuracion de javascript en Visual Studio, sencillo ¿no?






¿Y para Firefox?
Bueno, firefox no se integra al modo de depuración de Visual Studio, por lo cual debemos utilizar otros software para poder realizar esta depuración tales como:
  • FireBug: permite a ejecutar paso a paso el script de cliente y examinar los elementos DOM de HTML.
  • JavaScript Debugger: ofrece un entorno de depuración de JavaScript que incluye un explorador de código fuente y otras características.
Espero que les sirva.
Saludos.

[Evento] Cells On Camp - Concepción




El día 4 de Noviembre de realizará en Concepción el evento llamado Cells On Camps en DUOC organizado por organizado por los MSP Concepción y la Escuela de Informática y Telecomunicaciones de DuocUC sede San Andrés.
Habrá un panel de charlas especializadas, música, juegos, regalos y muchas sorpresas más.

Agenda:
9:00 - 9:30: Palabras de Bienvenida Directivos
9:45 - 10:45: Pablo Campos - Interoperabilidad en ambientes virtualizados [Windows Server 2008 R2 + Suse 10 Sp2 + Redhat 5.3]
11:00 - 12:00: Max Marín - Introducción a Windows 7
12:15 - 13:15: Francisco Agurto - Silverlight 3 new features!
13:15 - 14:15: Almuerzo
14:30 - 15:30: Brede Basualdo - Programación para Windows Mobile
15:45 - 16:45: Leonardo Muñoz - Desarrollo de cliente escritorio para Facebook
17:00 - 18:00: Gonzalo Pérez - Lo nuevo de ASP.net
18:00 - Torneo Xbox + Cierre

Generando una salida para Microsoft Project desde ASP.NET


A veces nos hemos encontrado la necesidad de utilizar componentes de otros programas para nuestros trabajos, por lo general, cuando tenemos que generar algun tipo de reporte en Excel, Word, Project, PDF, etc.

Bueno, aqui les traigo un ejemplo cuando necesiten generar un reporte para Microsoft Project


  1. Lo primero que tenemos que hacer en nuestra aplicación es tener la referencias a las librerias COM de Project, para ello, debemos instalar (si no lo hemos hecho) los componentes de desarrollo de Office. Para instalarlo, seguir el siguiente tutorial: Instalar Office PIAs.
  2. Luego debemos importar al proyecto que queremos la referencia a Project.
    Imports Micr
    osoft.Office.Interop.MSProject
  3. Luego,
Private Sub ExportarProject()
     Dim aplicacion As ApplicationClass

     'Verificamos si tiene instalado MS Project
     Try
            aplicacion = New ApplicationClass
            aplicacion.AppMaximize()
            aplicacion.FileNew(, , , )
            aplicacion.Visible = True
     Catch ex As Exception
            MsgBox("No es posible exportar a Project")
            Exit Sub
     End Try
      'Buscar la instancia del proyecto activo
      Dim proyecto As Project = aplicacion.ActiveProject
      'Asociamos tareas al proyecto, el primer parametro nombre de la tarea, segundo parametro posicion
      Dim tarea As Task = proyecto.Tasks.Add("Nombre Tarea",1)
      'Podemos asociar subtareas tambien de la siguiente manera
      Dim subTarea As Task = proyecto.Tasks.Add("Nombre Sub Tarea",2)
      subTarea.Start = "10/10/2009"
      subTarea.Finish = "12/12/2009"  
      subTarea.OutlineIndent()
      'Podemos crear otro subtarea

      Dim subTarea2 As Task = proyecto.Tasks.Add("Nombre Sub Tarea", 3)
      subTarea2.Start = "13/12/2009"
      subTarea2.Finish = "25/12/2009"
      subTarea2.OutlineIndent()     
      'Podemos guardar el proyecto y salir
      aplicacion.FileSaveAs(proyecto.Title, PjFileFormat.pjMPP)
      aplicacion.Quit(PjSaveType.pjPromptSave)
End Sub

Espero les sirva, les adjunto el codigo de prueba.
Descargar Ejemplo Project [Link 1]
Descargar Ejemplo Project [Link 2]
Saludos.

Las 7 Maravillas de Windows 7


  1. Rápido y ligero: En comparación con su antecesor se ha mejorado el comportamiento con equipos de menor rendimiento y la utilización de espacio que era una problema en equipo con Windows Vista. Se puede asegurar que muchos equipos que no funcionaban con Windows Vista ahora podrán funcionar con Windows 7.
  2. Nueva Barra de Tareas: Ahora la barra de tareas es más fácil de ver, flexible y avanzada. Al colocarte sobre el ícono de un programa, el cual lo puedes "anclar" a la barra de tareas, podrás ver la vista previa de lo que se esta ejecutando. También, puedes reorganizar los programas anclados solo con "arrastrar y soltar".
  3. Gestión de Ventanas: ¿Te sientes agobiado por las ventanas abiertas? Windows 7 incluye tres nuevas características simples pero poderosas, denominadas Aero Shake, Aero Peek y Snap para ayudarte a eliminar la acumulación de elementos en el escritorio de manera instantánea.
  4. Mejora en sistemas de menu: Si te gustó el sistema de menús de 2007 Microsoft Office, también te interesarán estos cambios. Por primera vez en diez años, programas clásicos como Paint y Wordpad han sido remodelados , ya ahora incluyen por defecto el ribbon. Paint también admite ahora la utilización de interfaces táctiles, y gracias a ello podremos emplear el ratón y las manos para desarrollar nuestra creatividad.

  5. Jump Lists: Para acceder a los documentos, sitios web, canciones que recurres dia a dia se añadio esta nueva caracteristica. Haciendo clic con el boton secundario del mouse sobre uno de los programas anclado a la barra de tareas verás las tareas mas frecuente, también disponible en el menú de inicio.
    Las Jump Lists no solo muestran accesos directos a los archivos. A veces también ofrecen acceso rápido a comandos para componer nuevos mensajes de correo electrónico o reproducir música.
  6. Centro de Actividades: Consolida el tráfico de mensajes desde funciones clave de seguridad y mantenimiento de Windows, entre ellas, Windows Defender y Control de cuentas de usuario. Si Windows requiere tu atención, el icono del Centro de actividades aparecerá en la barra de tareas.
  7. Grupo Hogar: Para evitar la molestia de compartir archivos e impresoras en una red doméstica. Conecta dos o más equipos que ejecuten Windows 7; se facilita el inicio automático del uso compartido de música, imágenes, vídeo y documentos bibliotecas con otras personas del hogar. El nuevo menú “Compartir con”, además, ofrece una forma rápida de compartir archivos individuales.

Eliminar 'Proyectos Recientes' de Visual Studio 2008



Dada la pregunta que me hizo un compañero de trabajo, ¿Cómo puedo eliminar los proyectos recientes que me aparecen en Visual Studio si yo quiero que me aparezcan los dos con que trabajo?
Me puse a investigar como hacerlo, pense... "No está demás saberlo" y aqui les muestro como hacerlo.





  • Se ejecuta en el linea de comando la instrucción regedit, para invocar al editor de registro.
  • En la siguiente ruta de nuestro registro HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\ProjectMRUList
  • Alli se encontrarán con archivos con nombres tales como File1, File 2, etc.. Deja solo los que quieres que te aparezcas y el resto los puedes borrar.
  • A considerar, si tu borras, por ejemplo, File2 tienes que renombrar los Files3, File4 y asi consecutivamente.
Espero que este dato geek les sirva para personalizar mas su Visual Studio.
Saludos.

ConnectionString en el webconfig en ASP.NET

En nuestras aplicaciones ASP.NET a algo que le sacamos poco provecho es al archivo de configuración de la web, más conocido como web.config.
Existe una sección especial, en este XML de configuración, para la adición de las cadenas de conexion a nuestras base de datos o ActiveDirectory para luego poder ser accesadas a través de nuestra aplicación .NET

<connectionStrings>
'La propiedad name es el que despues va a ser el identificador del ConnectionString desde la aplicacion .NET
       <add name="ActiveDirectory" connectionString="CadenaConexionActiveDirectory"/>
       <add name="BaseDatos" connectionString="CadenaConexionBaseDatos"/>
</connectionStrings>

'Importar el espacio de nombres System.Configuration
Imports System.Configuration
'Y utilizar la instruccion siguiente, con el nombre de tu cadena de coneccion como parametro del método ConnectionStrings.
Shared cadenaConexionThno = ConfigurationManager.ConnectionStrings("BaseDatos").ConnectionString


De esta manera, podras tener tus cadenas de conexion en un solo lado sin necesidad de escribirla cada vez que hagas una conexion.

Espero que les sirva, saludos.

Microsoft Security Essential


Llego el día, y Microsoft lanza su version de antivirus Microsoft Security Essentials tambien conocida como Morro gratuitamente al mercada y cuales son las caracteristicas de este antivirus
  • Microsoft Security Essentials provee proteccion en tiempo real de tu computador en contra de virus, spyware y cualquier otro tipo de malware.
  • Microsoft Security Essentials se puede descargar de manera gratuita (si tienes instalada una version original de windows) desde Microsoft y es facil de instalar, facil de usar y siempre se mantiene actualizadas para asegurar que tu eqiopo sea protegida por la ultima tecnologia. Para saber si tu equipo está seguro ve el color del icono del antivirus, si es verde... estás listo.
  • Microsoft Security Essentials corre silenciosa y eficientemente en segundo plano para que puedas usar tu equipo sin interrupciones como quieras.


¿Donde se descarga?


Imagine Cup 2010: Polonia



La competencia de programación más grande del mundo este año se realizaran en Warsaw, Polonia.
El tema seria el mismo del año pasado sobre "Metas del Milenio a desarrollar por las Naciones Unidas".
Y cuales serán los temas a abordar en este concurso, bueno principalmente destacan:

Diseño de Software
La misión es simple crear un software y servicios que usan las herramientas y tecnologías de Microsoft. La idea es que este software aborde una de las metas del mileno usando toda la creatividad posible con el fin de comenzar a cambiar el mundo.

Diseño de Juegos
Construir un software utilizando XNA Game Studio 3.0 con Visual Studio y/o Silverlight. Esta es la oportunidad de crear tu propio juego que al mismo tiempo cambie a la comunidad global.

Medios Digitales
La popularidad de la creación de videos caseros y la edición de imágenes, textos, música entre otros. El objetivo es que los estudiantes usen su creatividad para crear una web de videos que pueda combinar los contenidos creados por el usuario direccionandolo hacia el tema principal de Imagine Cup.
¿Y por que participar?
Primero, por la gran experiencia que es participar en un concurso a nivel internacion y tambien por que hay un premio monetario.
  • Diseño de Software: Primer Lugar: $25,000 USD; Segundo Lugar: $10,000 USD; Tercer Lugar: $5,000 USD.
  • Diseño de Juegos: Primer Lugar: $25,000 USD; Segundo Lugar: $10,000 USD; Tercer Lugar: $5,000 USD
  • Medios Digitales: Primer Lugar: $8,000 USD; Segundo Lugar: $4,000 USD; Tercer Lugar: $3,000 USD

Controles dinámicos y eventos dinámicos

Todos no hemos encontrado con la necesidad de crear algún control de manera dinámica para agregarlo a un contenedor de controles en una página web. Pero ¿qué sucede cuando necesito que ese control me genere un evento?

La solución es más sencilla de lo que imaginamos, por ejemplo en Visual Basic.NET seria:

'En nuestro evento Page Load crearemos un control dinámico
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Creamos la instancia de un control de tipo Button
Dim boton As New Button
boton.Text = "Presionar boton"

'Aquí esta la gracia, AddHandler es el evento que nosotros queremos gatillar en este control dinámico
'la instrucción AddresOf nos dice que función va a controlar el evento, en este caso Button_Click la cual debe 'estar debidamente creada.
AddHandler boton.Click, AddressOf Button_Click

'Añadimos el control al formulario
form1.Controls.Add(boton)
End Sub

'Creamos la función que va a controlar el evento
Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
lbMuestra.Text = "Boton dinamico presionado"
End Sub

Espero que haya sido claro, les adjunto un archivo de prueba. Descargar archivo

TechDays Chile 2009 - Agenda

Por primera vez en Chile y en español se realizará, el próximo 29 de Septiembre, Microsoft Tech Days Chile 2009, un evento pensado especialmente para profesionales de informática y desarrolladores.Un día completo con más de 20 sesiones técnicas a lo largo del día, con expertos nacionales e internacionales, la posibilidad de compartir con miles de colegas y de estar en contacto con las últimas innovaciones tecnológicas!!
Microsoft Tech Days, un evento que los ayudará a resolver los desafíos actuales del mundo informático y a prepararse para las innovaciones del mañana.
Registrate aquí
Asi que comenzaremos a planificarnos para poder asistir a este evento.

WinForm con Facebook Developer Toolkit

Crearemos una aplicación Facebook con el framework Facebook Developer Toolkit para el desarrollo de aplicaciones .NET para Facebook.


Iremos en el paso a paso explicando cada funcionalidad y el como crear la aplicación.
Acá el codigo para que lo revisen: Descargar FacebookStatus

Primer paso. Abrir el Visual Studio y crear un nuevo proyecto como muestra la figura 1.
Segundo Paso. Selecciona aplicación WinForms y le damos un nombre al proyecto.

framework Facebook Developer Toolkit

Tercer paso. Añadir la referencia a la dll del

Cuarto paso. Crear los controles básicos en nuestro formulario que tendrá la aplicación. Dependiendo de lo que queramos mostrar al usuario es como crearemos nuestro formulario. En la figura que sigue, la figura contiene: A la izquierda, una control Image. A la derecha un control Group Box, el cual contiene tres controles Label que almacenará información del usuario y un control textbox que tendra el estado del usuario. Al lado inferior izquierdo tendra un LinkButton para otorgar permisos de modificación al usuario y el lado inferior derecho, los botones que representan a las acciones Modificar y Refrescar.

Facebook Developers..
Para comenzar nuestra aplicación agregamos las referencias a la bibliotecas de Facebook.


Quinto paso. Ahora le daremos funcionalidad a los controles, antes que todo debemos crear en nuestra cuenta de
Imports Facebook.Components
Imports Facebook.Schema
Imports Facebook.desktop


Public Class Form1
Agregamos como variables globales al formulario el servicio de Facebook y la clave secreta y de aplicación entregadas por facebook.

Private apiKey As String = "API_KEY"
Private secret As String = "SECRET_KEY"
Private flag As Boolean
Private fbServicio As FacebookService = Nothing


Cuando ocurra el evento Load en el formulario realizamos la petición de conexión a Facebook
Private Sub Form1_Activated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
'Instanciamos el servicio de Facebook y le otorgamos el identificador de la aplicación y su clave secreta fbServicio = New FacebookService
fbServicio.ApplicationKey = apiKey
fbServicio.Secret = secret
'Y solicitamos la conexión a Facebook donde se realizará la autenticación de usuario fbServicio.ConnectToFacebook()
'Al ser exitosa esta autenticación se procede a llamar el metodo que carga los datos del usuario.
'Nota: No olvidar que el formulario es una clase y toda funcionalidad encapsulada que se cree es un método de ésta
CargarDatos()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub


'Carga los datos del usuario autenticado
Private Sub CargarDatos()
'Se instancia una clase User provista por facebook.Schema
Dim usuario As New user
'Se llama al método getInfo del servicio web que tiene la información del usuario autentificado
usuario = fbServicio.users.getInfo
'Se llenan los datos en los controles creados
GroupBox1.Text = usuario.name
Label6.Text = usuario.sex
Label7.Text = usuario.relationship_status
Label8.Text = usuario.birthday
Label9.Text = usuario.current_location.city
txtEstado.Text = usuario.status.message
imgUser.Image = usuario.picture
'Si el usuario tiene permiso para modificar el estado se le habilita el botón, de lo contrario si habilita el link para que pueda solicitar el permiso de modificación de estado
If fbServicio.users.hasAppPermission(Facebook.Types.Enums.Extended_Permissions.status_update) Then btModificar.Enabled = True
LinkLabel1.Visible = False
End If
End Sub


'Al cargar la informacion, el formulario se mostraria de la siguiente manera.


'Cuando el usuario hace clic al hiperlink para activar el permiso de modificación del estado, se le abre el navegador web hacia la pantalla de modificación del usuario como muestra la figura que sigue.
Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
Dim url As String = String.Format("
http://www.facebook.com/authorize.php?api_key={0}&ext_perm=status_update&v=1.0", apiKey)
Process.Start(url)
End Sub


'Una vez otorgados los permisos al usuario, tenemos que agregar la funcionalidad para cuando el usuario clickee el boton Modificar Estado está accion realmente se haga efectiva.

Private Sub btModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btModificar.Click
If fbServicio.users.hasAppPermission(Facebook.Types.Enums.Extended_Permissions.status_update) Then fbServicio.users.setStatus(txtEstado.Text)
MessageBox.Show("Estado modificado exitosamente")
End If
End Sub

Private Sub btRefrescar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) CargarDatos()
End Sub


Y como resultado obtendremos una aplicación que modifica el estado de Facebook pero con un framework distinto. =P Espero que les haya gustado el resultado, pronto volveré con mas novedades. Saludos.


Update Panel, Ajax para todos

Update Panel ha sido uno de los controles que ha facilitado el uso de Ajax en las aplicaciones .NET, ya que solamente agregando contenido dentro de este control se actualizara sin necesidad de realizar un molesto postback.

¿Y qué necesito para utilizar un UpdatePanel?
El control ScriptManager.
Que se recomienda para utilizar el control UpdatePanel
UpdatePanel, propiedad UpdateMode en Condicional. La idea es que el UpdatePanel no se recargue en cada intento de postback, sino solamente cuando necesitamos que se actualice la información y este hecho va a ocurrir cuando nosotros digamos explícitamente la actualización del UpdatePanel con la instrucción: UpdatePanel1.Update() o cuando expresamos que el UpdatePanel será gatillado por un control mediante un postback asíncrono.







Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Partial Class EjemploUpdatePanel
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
'cargamos los departamentos en el dropdownlist
cargarDepartamentos()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub


'Llenamos los datos de departamentos
Private Sub cargarDepartamentos()
Dim departamento As New Departamento
Dim tempList As List(Of Departamento) = departamento.cargarDeptoBD()
For Each t In tempList
ddlDepartamento.Items.Add(New ListItem(t.Nombre, t.Id))
Next
End Sub

'Evento que se gatilla al presionar Click, este evento está asociado al Update
'Panel por lo cual actualizara la grilla

Protected Sub btBuscar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btBuscar.Click
Try
buscarUsuarios()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub


'Busca los usuarios según los criterios de búsqueda y llena la grilla con los 'datos de los usuarios
Private Sub buscarUsuarios()
Dim usuario As New Usuario
Dim tempList As New List(Of Usuario)
If Not String.IsNullOrEmpty(txtRun.Text) Then
tempList = usuario.obtenerUsuario(txtRun.Text)
Else
tempList = usuario.obtenerListaUsuario(Integer.Parse(ddlDepartamento.SelectedValue))
End If
gvUsuario.DataSource = tempList
gvUsuario.DataBind()
End Sub
End Class

Descargar Ejemplo Update Panel

Exportar GridView a Excel

Nunca está demás saber como se exporta una grilla a Excel. La verdad si uno se pone a pensar como programáticamente lo hago pensaría que es muy difícil, pero la verdad que no lo es, y lo explicare en unos cuantos pasos.



1er paso. Crear un botón que será quien cree el Excel en base a la grilla. Este botón debe estar fuera de un postback asíncrono (Update Panel)



2o paso. En el evento Click del botón para exportar, poner las siguientes líneas de código. Se crea un objeto que simula una pagina web y que contiene un formulario. A este formulario le agregamos la grilla que va a ser exportable y decimos que esta pagina será una salida. Formateamos la salida a tipo Excel.






3er paso. Disfrutar de que hicimos una grilla exportable a Excel. Ideal para informes.


El código necesario (aparte de la imagen):
Private Sub exportarExcel()
Dim sb As StringBuilder = New StringBuilder()
Dim sw As StringWriter = New StringWriter(sb)
Dim htw As HtmlTextWriter = New HtmlTextWriter(sw)
Dim pagina As Page = New Page
Dim form = New HtmlForm
Dim lblEncabezado As Label = New Label
lblEncabezado.Text = "Nombre del encabezado"
gvExportar.EnableViewState = False
pagina.EnableEventValidation = False
pagina.DesignerInitialize()
pagina.Controls.Add(form)
form.Controls.Add(lblEncabezado)
form.Controls.Add(gvExportar)   'Tu gridview a exportar
pagina.RenderControl(htw)
Response.Clear()
Response.Buffer = True
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader("Content-Disposition", "attachment;filename=ArchivoExcel.xls") 'Nombre del archivo de salida
Response.Charset = "UTF-8"
Response.ContentEncoding = Encoding.Default
Response.Write(sb.ToString())
Response.End()
End Sub

Espero que les sirva.

[Off-Topic] Navegar un rato mientras trabajas aumenta tu productividad.

Aunque no lo crean, así es. Según un estudio de la Universidad de Melbourne Coker ha afirmado que “la navegación ociosa por la Red en horas de trabajo ayuda a ajustar la concentración de los trabajadores [...] las personas necesitan distraerse un momento para volver a la concentración“.

La denominación que han dado a dichos tiempos de minidescanso laboral WILB (Workplace Internet Leisure Browsing). Aunque claro está, hablamos de un total del 20% del tiempo de tu jornada laboral, que viene a ser un máximo de 1 hora y 36 minutos al día.

Este mismo estudio también afirma que una persona que utiliza el 20% de su jornada navegando a su antojo es un 9% más rentable que otro que no lo hace según afirma la Universidad de Melbourne.

Así que dedique también un poco de tiempo al esparcimiento en su hora de trabajo, seran un empleado mas rentable.

Fuente: Cosas Sencillas

Seguidores

Certificaciones

Microsoft Certified Professional

Mis Tweets

Twitter