NPOI, tal como aparece en la pagina de codeplex.com, es una libreria que permite leer y escribir archivos en excel si tener instalado el Excel en nuestro equipo. Si quiere ver mas caracteristicas revisa http://npoi.codeplex.com/.
Para un ejemplo practico vamos a descargar un archivo en formato de hoja de excel y que contendrá un listado de personas. El siguiente ejercicio pretende que el codigo desarrollado sea flexible hasta el punto que se pueda reutilizar para descargar diferentes lista de objetos contenidos en una lista generica , es decir que se require descargar un listado de clientes el mismo codigo sin ser cambiado sirva para decargar un archivo excel con el listado de paises etc, para este objetivo se creara un codigo que :
-Genere una lista generica de objetos.
-Transforme el listado de objetos en un objeto datatable. Para este punto de tomo código de diversos sitios entre ellos stackoverflow, específicamente desde http://stackoverflow.com/questions/564366/convert-generic-list-enumerable-to-datatable.
Ver más
miércoles, 26 de septiembre de 2012
lunes, 16 de julio de 2012
Automatizando pruebas web con SeleniumHQ
Si trabajas en el desarrollo web y deseas acelerar el proceso de pruebas sobre tu formularios, te recomiendo el complemento para Firefox llamado Selenium HG, este complemento lo puedes descargar desde http://seleniumhq.org/download/ y una vez que lo agregas y lo abres iniciara la grabación de todas las acciones que tienes logar sobre el browser las podrás guardar y ejecutar posteriomente a las velocidades y ordenes de ejecución que deseen. Ver más.
domingo, 18 de diciembre de 2011
Creando plantillas de código Android en Eclipse
Si has estado desarrollando aplicaciones en Android con MotoDev Studio for Android o con Eclipse te podrás dar cuenta que tienes que escribir fragmentos de código, algo repetitivos, para encontrar los diversos controles que son agregados al layout. Para mejorar esta tarea de escribir código creen unas plantillas para estos controles facilitando el trabajo. Para aprender a crear plantillas de codigo puede remitirte aca Creating and editing templates .
En definitiva lo que se quiere es que para escribir algo como esto
En definitiva lo que se quiere es que para escribir algo como esto
Solo se requiera escribir en el IDE por ejemplo findbutton
Después de darle clic tendremos algo como esto
A las diferentes plantillas se le agregaron prefijos y quedaron de la siguiente manera
Las plantillas creadas para el editor se presentan a continuación
![]() |
| Plantilla para findbuttonfull |
![]() |
| Plantilla para findedittextfull |
![]() |
| Plantilla para findtextviewfull |
De esta manera podemos hacer codigo, y de hecho lo hice para evitar memorizar fragmentos largos o muy repetitivos a tan solo a findbutton, findedittext entre otros. En archivo exportado de estas plantillas aca las dejo para que las importen al editor y las usen. Descargar templates_Android_version_1 .
viernes, 16 de diciembre de 2011
Evitando recargar app Android al cambiar orientación
Si has estado desarrollado una aplicación en android es posible que encuentres que al cambiar la orientación del dispositivo la aplicación de ejecuta nuevamente. Para ilustrar mejor esto veamos una app que cargar la hora actual.
Como verán la aplicación se recarga cada vez que se rota el dispositivo. Para evitar esto (y si lo requiere tu aplicación) presentó como configurarlo en el archivo AndroidManifest.xml de la aplicación. NOTA: La configuración se realizó sobre MotoDev Studio pero aplica también para Eclipse.
Finalmente unas imágenes que ilustran el cambio realizado.
![]() |
| Carga inicial de la aplicación |
![]() |
| Recarga de la aplicación al rotar el dispositivo |
![]() |
| Configurando app android para evitar recarga al cambia orientación |
Finalmente unas imágenes que ilustran el cambio realizado.
miércoles, 26 de octubre de 2011
Aplicación en MVC 3 por capas con MySQL
En el siguiente ejemplo se desarrollará por capas y se aplicanran patrones de desarrollos como el Repositorio, Inyección de Dependencias, todo esto para presentar información, contenida en un motor MySql, en un website que estará sobre MVC 3. En este aplicativo el repositorio empleará Code Firts y ademas se manejaran las interfaces para proporcionar una capa de servicios al sitio web.
Para ver una versión mejorada de este post ingresa a mi otro blog
Ahora creamos una clases Pais.cs que contendrá dos campos con sus respetivos get y set. Sobre cada uno de estos campos se han agregado metadatos que harán que al compilador genere la correspondiente la DB con las entidades y con sus respectivos tipos de datos y longitudes. Estos metadatos también será consumidos por el website para validar la entrada de información.
Este ultimo paso es necesario para poder crear le contexto para el acceso a los datos, recuerden que el nombre de la conexión agregada debe ser exacto al de la clase a agregar en MyApp.Infraestructura de lo contrario no funcionará.
Adicionalmente se creará una interfaz IValidationDictionary.cs y su respectiva implementación ModelStateWrapper.cs. Estas dos clases permitiran realizar validaciones al modelo pero ello solo se limitara a realizar un validación considerando que es una aplicación web en MCV 3, si el escenario cambiase a una aplicación de escritorio habría que ajustar la implementación de esta validación.
Se realiza la implementación del servicio en el controlador y se emplea el patron de Inyección de dependencias. Este patrón básicamente consiste en transferir a la clase los objetos que debe usar pero que sin que sea el controlador que los instancie.
La vista que se agregará sera tipada y la plantilla sera de tipo List para que se genere de manera automática la visualización de los datos en una tabla.
Con el anterior paso se creará la vista Index dentro de la ruta /View/Pais/Index.cshtml
Para finalizar, ejecutamos la aplicación el resultado será
De manera similar se crean las vistas para editar, eliminar, detalles, registrar solo basta con cambiar las plantillas en cada vista a Edit, Delete, Details, Create.
Para ver una versión mejorada de este post ingresa a mi otro blog
Configurando la solución
- Visual Studio en Blanco llamada MyApp.
- Sobre la solución creada agregaremos tres librerías de clases llamadas así:
- MyApp.Dominio : Esta librería se encuentran las clases que define el dominio de la aplicación.
- MyApp.Infraestructura : Esta librería se crearan las clases necesarias para acceder a la DB, para ello emplearemos el patrón Repositorio y consumiremos la librería MyApp.Dominio.
- MyApp.Servicio : Esta librería se crearán las clases que serán utilizadas por el website para manipular la validación de las entradas y servirá como puente entre MyApp.Infraestructura y MyApp.WebSite.
- MyApp.WebSite: Sitio web en MVC 3 en el que se visualizará la información.
La solución creada se verá así luego de eliminar las clases por defecto generadas por el IDE
![]() |
| Estructura de la solución MyApp |
Configurando la Librería MyApp.Dominio
Agregamos las siguientes referencias al proyecto- System.ComponentModel.DataAnnotations
- EntityFramework
Ahora creamos una clases Pais.cs que contendrá dos campos con sus respetivos get y set. Sobre cada uno de estos campos se han agregado metadatos que harán que al compilador genere la correspondiente la DB con las entidades y con sus respectivos tipos de datos y longitudes. Estos metadatos también será consumidos por el website para validar la entrada de información.
![]() |
| Clase Pais con los ensamblados referenciados en MyApp.Dominio |
En este punto se hará un pequeño adelanto, se agregará la cadena de conexión en el Web.Config de MyApp.Website. la cadena de conexión sera la siguiente:
| Cadena de conexión de la aplicación con MySql |
Configurando la librería MyApp.Infraestructura
Agregamos las siguientes referencias al proyecto
- EntityFramework
- System.Data.Entity
- MyApp.Dominio (Librería que contiene la definición de la entidad País)
Luego definimos la interfaz de repositorio de País
![]() |
| Definición de la interfaz para el repositorio País |
Definimos el contexto de la aplicación y la implementación para el respositorio Pais
![]() |
| Definición de la clases SigEntidades.cs |
![]() |
| Implementación para el repositorio País |
Configurando la librería MyApp.Servicio
Agregamos las siguientes referencias al proyecto
Agregando la implementación de PaisServicio, de esta manera logramos desacoplar el acceso a datos de la aplicación. Si queren mayor detalle remitanse a http://www.asp.net/mvc/tutorials/iteration-4-make-the-application-loosely-coupled-cs .
- MyApp.Dominio (Librería que contiene la definición de la entidad País)
- MyApp.Infraestructura (Librería que contiene el repositorio Pa)
- System.Web.Mvc (Version 3.0)
Se crea la interfaz del servicio IPaisServicio.cs
![]() |
| Interfaz del servicio IPaisServicio.cs |
![]() |
| Implementación de la clase PaisServicio |
Adicionalmente se creará una interfaz IValidationDictionary.cs y su respectiva implementación ModelStateWrapper.cs. Estas dos clases permitiran realizar validaciones al modelo pero ello solo se limitara a realizar un validación considerando que es una aplicación web en MCV 3, si el escenario cambiase a una aplicación de escritorio habría que ajustar la implementación de esta validación.
![]() |
| Interfaz IValidationDictionary.cs |
![]() |
| Implementacion de la clase IValidationDictionary.cs en ModelStateWrapper.cs |
Configurando la aplicación MyApp.WebSite
Agregamos las siguientes referencias al proyecto
- MyApp.Dominio (Librería que contiene la definición de la entidad País)
- MyApp.Servicio (Librería que contienen el servicio)
Creamos el controlador PaisController, este será el encargado de interactuar entre vista y servicio el cual contiene a su vez el modelo. Dando clic derechos sobre la carpeta Controllers > Agregar > Controlador, se obtiene la siguiente ilustración.
![]() |
| Creación del controlador para País |
Ya tenemos la infraestructura, el controlador ahora falta la vista, para ello damos clic derecho sobre la vista Index, tal como aparece en la grafica para agregar la vista para Index en la que se presentará el listado de Paises.
![]() |
| Controlador Pais con su implementacion de CRUD |
![]() |
| Agregamos vista Index para el controlador de Paises |
![]() |
| Definiendo la vista Index para Paises |
Con el anterior paso se creará la vista Index dentro de la ruta /View/Pais/Index.cshtml
![]() |
| Vista generada con la plantilla List para Paises |
![]() |
| Ejecución de la vista Index para Paises |
En siguiente entradas se agregaran entidades relacionadas, búsquedas y uso de componentes como WebGrid entre otros.
Aquí les dejo el proyecto http://www.mediafire.com/?6zvej7zg6vac2uc con los CRUD totalmente implementados.
Etiquetas:
.Net,
C#,
Code Firts,
MVC 3,
MySql,
Repositorio
Suscribirse a:
Entradas (Atom)
























