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

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.

Carga inicial de la aplicación


Recarga de la aplicación al rotar el dispositivo
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.

Configurando app android para evitar recarga al cambia orientación

Finalmente unas imágenes que ilustran el cambio realizado.



Si quieres probar en tu dispositivo o emulador aca dejo el codigo fuente de la aplicación.


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

Configurando la solución

  1. Visual Studio en Blanco llamada MyApp.
  2. 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
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á.

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
  • 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
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 .

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
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.

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
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.

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
Para finalizar, ejecutamos la aplicación el resultado será

Ejecución de la vista Index para Paises
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. 

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.


jueves, 22 de septiembre de 2011

Capturar imagenes de tu movil Android desde tu pc



Para capturar images desde tu pc primero debes habilitar unas opciones en tu movil (ver Configurando movil Android para debug). Una vez teniendo esto configurado y teniendo el SDK Android descargado procedemos abrir el archivo ssms.bat  (Dalvik Debug Monitor Server) que se encuentra ubicado en la carpeta tool del SDK de Android.



Al abrirse la ventana y teniendo el móvil previamente configurado y conectado al PC de listara en el monitor.


Para capturar las pantalla actual del movil nos vamos a Device>Screen Capture


Listo, eso es todo le damos Save y tenemos nuestra imagen.


Configurando movil Android para debug

Si tienes un Móvil con Android y quieres realizar el debug de tu aplicación sin necesidad de esperar que se abra el emulador de Android el cual se despliega  cuando le damos RUN en Eclipse (para mi caso), es necesario que actives unas opciones en tu Móvil. Para ello acá dejo unas imágenes.








Ya con esto tu móvil esta listo para hacer debug, claro esta que el PC a lo cual conectes tu movil debe contar con el driver para el USB.

miércoles, 21 de septiembre de 2011

Configurando entorno para desarrollar en Android


Para configurar el entorno de desarrollo para la Android en tu equipo es necesario que realizar de manera previa los siguientes pasos:
Componentes previos
  1. Descargar el IDE  Eclipse, para ello ingresa a http://www.eclipse.org/downloads/ . Se recomienda Eclipse Clasic 3.5 (Galileo) o superior. Este IDE lo puedes extraer donde quieras, por ejemplo C:\
  2. Descargar e instalar  el JDK 5 or JDK 6 .
  3. Descargar el Android SDK desde http://developer.android.com/sdk/index.html. Puedes descargar el android-sdk_r12-windows.zip. Este SDK lo puedes ubicar de igualmanera en C:\. Este SDK al ejecutarse presentará la opción de descargar los diversos SO de Android, más adelante se detallará.
Configuración del entorno
Una vez descargado los componentes previos procedemos a configurar el entorno :

  • Extraemos el Eclipse y lo abrimos. Luego nos desplazamos a Help>Install New Software...



  • En esta ventana que emerge vamos a agregar el plugin ADT (Android Development Tools) para Eclipse. Le damos enAdd y agregamos "ADT pluginen Name  y https://dl-ssl.google.com/android/eclipse/ en Location.




  • Luego de instalar el plugin ADT reiniciamos el Eclipse y debe aparecernos la opción "Android SDK and AVD Manager" tal como aparece en la imagen.

  • Ahora debemos configurar el SDK de Android, para ello debemos ir a Windows>Preferences y en la opción SDK Location debemos colocar la ruta en la que esta el SDK Android descargado y guardamod. Al darle la ruta nos presentará los diversos SO que se han descargado al aplicativo Android. Para descargar mas SO tienes que ejecutar el SDK Manager  que se encuentra en la carpeta del SDK de Android.






  • Ahora solo tenemos que ingresar dentro de Eclipse a Windows>Android SDK and AVD Manager para probrar la configuración.


martes, 5 de abril de 2011

Eliminando filas en un GridView con confirmación

Para agregar una confirmación previa a una operación critica sobre el aplicativo, como una eliminación de uno o más registros en una base de datos, se puede emplear un javacript del lado del cliente como un Confirm para evitar errores por parte del usuario al interactuar con la aplicación.  Para este ejemplo se a creado un GridView con un listado de Estudiantes (se configuró el metodo de eliminación) y se ha agregado un TemplateField y en el ItemTemplate se agrego un Button con el CommandName Delete. Posterior a esto se le configura al Button  o LinkButton  la propiedad OnClientClick  con la información que se le presentará al usuario para que confirme si desea ejecutar la operación.

Ver más

miércoles, 9 de marzo de 2011

Creando un autocompletar genérico usando un control de usuario web

En esta ocasión vamos a crear un crear un AutoCompletar usando control de usuario, para ello vamos a utilizar el control de AjaxControlToolKit llamado AutoComplete y lo vamos a personalizar de tal manera que lo podamos referenciar muchas veces dentro de una página y realizar las consultas de autocompletado sobre varias tablas de una manera más dinámica. Como? bueno los pasos son los siguientes

Ver Mas

lunes, 28 de febrero de 2011

Funcion SQL Server para remover tildes a las palabras

En algunos momentos cuando nos encontramos realizando búsquedas en la base de datos por campos de tipo string como por ejemplo el nombre o apellido de un empleado nos podemos encontrar que el omitir o agregar un signo de acentuación nos puede filtrar información necesaria. Por ejemplo si estamos buscando todas las coincidencias para el nombre Paéz la instrución SQL omitiria de la consulta los usuario que tengan como nombre Paez, para evitar esto es mejor crea una función que renueva las tildes de las palabras y las cambie por las equivalentes sin tilde.

Ver más

Comandos SQL Server

Aquí les dejo un listado de comando que son bueno tener a la mano cuando estamos trabajando con el SQL Server


Formatos Fecha
--Retorna un string con la fecha en el formato dd/mm/yyyy ej. 21/11/2009
SELECT CONVERT(VARCHAR(10),GETDATE() , 103)
--Obtener el año de una fecha
SELECT  YEAR(GetDate()) 
SELECT  MONTH(GetDate()) 


Modificaciones de tablas 
-- Agregando nuevas columnas
ALTER TABLE MiTabla
ADD CreadoPor varchar(100) NOT NULL,
    FechaCreacion DATETIME NOT NULL,
    ModificadoPor VARCHAR(100) NULL,
    FechaModificacion datetime NULL

--Modificando columnas existentes
ALTER TABLE MiTabla ALTER COLUMN 
Columna_Modificar BIT  NOT NULL
ALTER TABLE MiTabla ALTER COLUMN 
Columna_Modificar VARCHAR(200)  NOT NULL

Creando de campo únicos
-- Creando columnas únicas
ALTER TABLE MiTabla ADD CONSTRAINT MiConstraint_Unique UNIQUE( MiColumna1, MiColumna2 )
--Ej Un nombre municipio unico dentro de un departamento.
ALTER TABLE dbo.Municipio ADD CONSTRAINT NombreMunicipioEnDepartamento_Unique UNIQUE(DepartamentoId, Nombre)


Transacciones
-- Creando un bloque de transacciones 
    BEGIN
        BEGIN TRY 
            -- Iniciamos la transaccion
            BEGIN TRANSACTION
             --
             -- Tus operaciones CRUD (Create, Read, Update and Delete)
             --Guardamos los cambios ejecutados durante la transacción.
           COMMIT TRANSACTION
           
        END TRY 
        BEGIN CATCH
        
-- Revertimos la actividades de la transaccion
            ROLLBACK TRANSACTION
            PRINT 'Se presento el siguiente error en la transacción ' + ERROR_MESSAGE()
            
        END CATCH
      
    END

Funciones Escalares
--Creamos una función con un parámetro tipo entero
CREATE     FUNCTION NombreFuncion ( @IdParametro INT )
--Especificamos el tipo de dato a retornar
RETURNS INTEGER
--Inicia el cuerpo de la funcion
AS BEGIN
--Declaramos la variable de retorno
    DECLARE @ReturnValue AS INTEGER
-- Asignamos valores a la variable de retorno
    SET @ReturnValue =  ( SELECT  MiColumna
                                FROM    MiTabla
                                 WHERE       IdMiTabla =@IdParametro
                                                ) + 100
-- Retornamos el resultado de la función
    RETURN @ReturnValue
END 
Activar soporte para diagrama de base de datos
--En este caso concedemos permisos al usuario sa.
EXEC sp_dbcmptlevel 'MiBaseDatos', '90';
ALTER AUTHORIZATION ON DATABASE::MiBaseDatos TO sa 


viernes, 18 de febrero de 2011

Instalando SharePoint 2010 en Windows 7

Si estas tratando de instalar la plataforma colaborativa empresarial de Microsoft denominada SharePoint en su versión 2010 sobre Windows 7 se puede presentar este error.
El error en la instalación se presenta a que SharePoint 2010 no esta "desarrollado" para ejecutarse en Windows 7 (64bit) de manera predeterminada, por el contrario viene para entornos de sistemas operativos de 64 bits como Windows Server 2008, Windows Server 2008 R2 etc. Sin embargo despues de realizar unos ajustes de configuración sobre el instalador de SharePoint e instalar los requisitos de manera manual del mismo podemos ejecutar SharePoint sobre Windows 7 de 64bits.


Requerminientos Tecnicos:
  • Windows 7 x64  preferible versión Enterprice, Profesional o Enterprice.
  • 4GB en RAM
  • De 12 a 20 Gb de espacio libre en disco para la instalación.
Esta instalación se dividen dos secciones:
Requisitos previos de software para SharePoint 2010:
  1. WCF Hotfix windows6.1-kb976462-v2-x64.msu
  2. Windows6.1-KB982307-x64.msu
  3. FilterPack.rar
  4. Microsoft Sync Framework Synchronization.msi
  5. SQL Server Native Client sqlncli.msi
  6. Windows6.1-KB974405-x64
  7. ADONETDataServices_v15_CTP2_RuntimeOnly
  8. Chart Controls.exe (No requerido si va a instalar SharePoint Foundation
  9. SQLSERVER2008_ASADOMD10.msi
  10. Instalacion IIS Rol.bat (Ejecutar este archivo en modo administrador, esperar unos minutos para que instale y  configure el IIS con el rol para SharePoint 2010, una vez finalizada la ejecución del comando debe reiniciar.)
Instalación SharePoint 2010:
  1. Instalar SharePoin t2010 (Ejecute el Setup.exe contenido en la carpeta del instalador de SharePoint 2010 modificado para Windows 7, si quieres descargar la version sin modificaciones ingresa aquí . El serial de evaluación empleado fue VK7BD-VBKWR-6FHD9-Q3HM9-6PKMX correspondiente a SharePoint Server 2010 Enterprice).  SharePoint2010 W7 Parte 1Parte 2, Parte 3Parte 4, Parte 5Parte 6
  2. Instalar SQL Management Studio (Opcional)
  3. Instalar Visual Studio 2010 (Recuerde activar componentes de SharePoint en la Instalacion de Visual Estudio)
  4. SharePointPlatformSDK.exe
  5. Despues de la instalación puede ejecutar "Detener Servicios Innecesarios.bat" para detener los servicios innecesarios de SharePoint 2010.
  6. Instalar Microsoft SharePoint Designer x86 o Microsoft SharePoint Designer x64. (Si instala SharePoint Designer de x64 la suite de Microsoft Oficce debe ser tambien x64 y viceversa)
  7. En caso de error "Ejecute si hay Error.bat"  en modo administrador y reinicie el proceso de instalación
Nota: La anterior instalación de SharePoint permite crear un ambiente ideal para la creación de aplicaciones web, colecciones de sitios, desarrollar webParts etc,  pero no es apropiado para una ambiente de producción.

miércoles, 16 de febrero de 2011

Procedimiento almacenado con parámetros opcionales en búsquedas SQL SERVER

Existen situaciones en la que deseamos realizar búsquedas sobre un conjunto de datos con una gran variedad de filtros de tal manera que estos sean excluyentes o no.

Para dejar mas claro plantearemos un modelo de datos en el que tenemos almacenado en tres tablas la siguiente información: Departamento con un listado de departamentos, Municipio contiene un listado de municipios que están relacionados la tabla Departamentos y finalmente una tabla llamada Estudiante que contiene un listado de estudiantes los cuales residen en un municipio. El diagrama del modelo de datos seria mas o menos el siguiente.


Ahora si realizamos un procedimiento almacenado que al ejecutarlo nos retorne el resultado de todos los estudiante con su respectivo nombre, municipio y departamento donde reside. El resultado de datos seria mas o menos el siguiente .


La consulta SQL  requerida para generar la información anteriormente presentada seria la siguiente.


Ahora bien, imaginemos que queremos aplicar al mismo conjunto de datos varios filtros y que estos a su vez sean opcionales,  para ello crearemos un procedimiento almacenado y la estructura seria la siguiente.



Ahora si lo queremos podemos ejecutar nuestro procedimiento ya sea teniendo como filtro en las búsquedas el DepartamentoID, MunicipoID o DepartamentoID y MunipioID. La instrucción para ejecutar nuestro procedimiento ConsultarEstudiantes es el siguiente