4.11.2017

Creando un app con Ionic y VS Code–configurando el ambiente

Visual Studio Code es un IDE muy versátil que nos permite desarrollar utilizando muchas tecnologías, y en este caso lo vamos a utilizar para desarrollar un app móvil utilizando Ionic Framework. Ionic es un Framework que permite utilizar los conceptos del desarrollo web para crear aplicaciones para iOS, Android, Windows, etc.  En esta serie de post vamos a aprender como desarrollar estas aplicaciones usando Ionic + VS Code.

Instalando el ambiente

Para iniciar tenemos que instalar node.js en nuestra máquina ya que Ionic necesita de esta librería para poder funcionar. Para llevarlo vamos a la pagina de node.js y descargamos e instalamos la versión de node.js para nuestro sistema operativo, en mi caso, Windows de 64 bits.

image

Utilizamos LTS porque es la versión que es normalmente soportada por Ionic.

Ahora ya podemos utilizar el IDE VS Code para continuar con los siguientes pasos. Primeramente abrimos el terminal integrado de VS Code y procedemos a instalar Ionic utilizando el siguiente comando – utilizando npm de node.js

image

Ahora desde el mismo terminal procedemos a crear una aplicación utilizando el comando ionic start nombredelapp –-version de ionic.

image

Este comando nos crea un aplicativo llamado AccountMe en el folder donde estamos posicionados con una plantilla de “tabs” pre diseñada y lista para funcionar. Si abrimos este folder en VS Code podemos ver a estructura del proyecto generada.

image

El siguiente paso es probar nuestro aplicativo recién generado para comprobar que todo esta listo para iniciar el desarrollo utilizando el Ionic Serve Lab desde donde podemos ver nuestro aplicativo en una página Web y probarlo. El comando para lanzar el app es el siguiente:

image

Si todo salió correctamente veremos el aplicativo web funcionando con las plataformas seleccionadas en el combo de plataformas tal y como se ve en la siguiente figura.

image

3.29.2017

Trabajando JSON en BizTalk Server 2016 – Parte 2

Continuando con los post acerca de trabajar documentos JSON en BizTalk Server 2016, vamos a proceder a crear un ejemplo donde se recibe un documento XML y se rutea a un folder donde lo vamos a dejar convertido a un documento JSON.

Ejemplo

En este ejemplo, vamos a crear un puerto de ingreso donde se recibe un documento XML (el mismo que convertimos en el ejemplo del post anterior) tal y como lo muestra la siguiente figura.

image

Iniciamos creando un puerto de una vía por donde ingresará este documento XML utilizando el pipelines estándar de PassThru.

image

Ahora procedemos a crear el puerto de salida de una vía con dos condiciones importantes. La primera de esas condiciones es utilizar el pipeline de envío JSON que creamos en el proyecto JSONPipelines del post anterior tal y como se muestra en la siguiente figura.

image

La segunda condición es agregar un filtro para rutear el mensaje XML desde el puerto de recibo al puerto de envío utilizando la propiedad ReceivePortName tal y como se ve en la siguiente figura.

image

Seguidamente procedemos a activar los puertos de envío y recibo y enviamos el mensaje XML de prueba mostrado al inicio de este post. Como vemos en la siguiente figura, el documento fue enviado al puerto especificado en formato JSON.

image

3.28.2017

Trabajando JSON en BizTalk Server 2016 – Parte 1

Uno de las nuevas características en BizTalk 2016 es la adición de componentes para pipeline para manejar el formato JSON(codificar/decodificar) tanto para consumir como para enviar mensajes JSON. En este post vamos a ver como trabajar el formato JSON en BizTalk Server 2016 a nivel de pipelines.

Ejemplo

Inicialmente, vamos a crear una pequeña orquestación que recibe un documento JSON y lo decodifica a un documento XML para direccionarlo a otro puerto en formato XML. Por facilidad del ejemplo, la orquestación funcionara con adaptadores FILE tanto para iniciar la orquestación como para enviar la respuesta.

Primero vamos a crear un proyecto que solo va a contener todos los pipelines (los que vamos a ir usando en esta serie de posts) y creamos un pipeline para decodificar un mensaje JSON a XML y otro para codificar un mensaje XML en un mensaje JSON. El primer pipeline se puede ver en la siguiente figura.

image

En el siguiente paso procedemos a publicar el aplicativo BizTalk para que estos pipelines queden disponibles para otras aplicaciones. Seguidamente procedemos a crear una aplicación BizTalk y agregamos como referencia el aplicativo recientemente publicado.

Ahora procedemos a crear un puerto de recibo donde vamos a configurar el pipeline para recibir el documento JSON tal y como se ve en la siguiente figura.

image

El primer paso es configurar el adaptador FILE(1), seguidamente seleccionamos el pipeline que creamos en el proyecto común y agregamos como referencia(2),  luego vía el botón elipse procedemos a configurar el pipeline(3). En este caso debemos definir el nodo raíz y seguidamente proceder a crear un namespace ya que el documento XML así lo va a requerir(4).

Ahora procedemos a crear un puerto de envío que tiene la particularidad de que utiliza un filtro para rutear el mensaje recibido JSON, solo que vamos a usar el pipeline passthru para grabarlo en el directorio tal y como viene decodificado.

image

Luego de este paso ya estamos listos, arrancamos el aplicativo y procedemos a realizar la prueba con el siguiente archivo.

image

La salida resultante será en formato XML tal y como se ve en la siguiente figura.

image

5.31.2016

Databinding en Xamarin - parte 1: XAML

El databinding en Xamarin se puede llevar a cabo de dos formas: desde el "code behind" o desde el XAML. Para llevarlo a cabo desde el "code behind" se establece la relación entre dos objetos - la fuente y el destino de los datos - donde la propiedad BindingContext del objeto destino debe de tener establecido el objeto fuente o una de sus propiedades. La propiedad del objeto destino debe de ser "bindeable" lo que significa que debe de heredar de BindableObject. En XAML se utilizan los brackets {} para establecer el objeto o propiedad del objeto fuente - despues de establecer el BindingContext.

Ejemplo

En la primera parte de esta seria de post acerca del databinding vamos a llevar a cabo un ejemplo sencillo desde el markup de XAML.   
Vamos a crear un proyecto multiplataforma en Xamarin Studio y vamos a agregar una nueva pantalla la que llamaremos pantalla principal. Esta a su vez la vamos a instanciar desde un NavigationPage para permitir la navegación entre pantallas.










Luego vamos a crear una clase POCO para almacenar los datos obtenidos (esta vez desde el código, pero puede ser desde una BD, un servicio, un blob, etc) Esta clase tiene la siguiente estructura.























Ahora en el XAML del MainPage vamos a crear el binding del objeto. Para crear el binding se utilizan los brackets y el nombre de la propiedad que se desea "ligar" a la propiedad del control destino tal y como se ve en la siguiente figura.













Ahora vamos a crear un metodo en la clase MainPage que nos devuelva un objeto Proyecto ya instanciado el cual vamos a invocar desde el constructor de la clase. Por último asignamos al BindingContext el objeto retornado por el método recién creado.


















Ahora procedemos a ejecutar el aplicativo y el resultado de esta ejecución se puede ver en la siguiente figura.













5.29.2016

Navegación en Xamarin

Una de las tareas más comunes en el desarrollo de aplicaciones multiplataforma en Xamarin es la navegación entre páginas. Para poder hacer transiciones entre páginas debemos utilizar la interface INavigation la cual contiene una gran cantidad de métodos para lograr las transiciones de diversas formas.
Los métodos normalmente utilizados para estas tareas son PushAsyn y PopAsync los cuales nos permiten avanzar de una página a otra y devolvernos respectivamente. 

Demostración

Para demostrar el uso de estos métodos vamos a crear un ejemplo usando Xamarin Studio. Primero vamos a crear un proyecto multiplataforma tal y como se ve en la siguiente figura.















Una vez creado el proyecto procedemos a crear una pagina XAML y la vamos a llamara MainPage - esta será la página principal del proyecto.



















Ahora en el código del archivo DemoNavegacion.cs procedemos a instanciar e invocar la página que acabamos de crear tal y como se muestra en la siguiente figura.















En la página MainPage.Xaml agregamos un label para identificar la página en que estamos y además agregamos un botón para navegar a la siguiente vista; en el botón además vamos a agregar un evento para insertar el código necesario para invocar la página siguiente.












Ahora en el archivo MainPage.cs procedemos a crear el manejador del evento del botón, en el cual vamos a invocar la nueva pantalla - Pagina2(La Pagina2 se crea exactamente igual que se creó la página MainPage).













En el archivo Pagina2.Xaml agregamos un par de etiquetas para identificar que estamos en la página 2.











Cuando ejecutamos el aplicativo podemos navegar entre páginas utilizando el botón de avance y usando el toolbar de navegación por defecto del aplicativo.






5.25.2016

Invocar una orquestación en otro assembly

Una de las preguntas más frecuentes en el desarrollo de aplicaciones en BizTalk Server es como invocar una orquestación que reside otro assembly. Esta pregunta se da principalmente porque aunque hayamos publicado la orquestación en otro proyecto, cuando agregamos la referencia no podemos ver la orquestación en el cuadro de invocar orquestación.
Para poder ver las orquestaciones disponibles en otro Assembly el modificador del tipo debe de estar en público tal y como se ve en la siguiente imagen.



















Después vez instalada en el servidor, ya podemos referenciar la orquestación desde el GAC y seguidamente invocar la orquestación desde una forma para iniciar la orquestación sincrónica o asincrónicamente.


















Una vez seleccionada la orquestación deseada, esta aparece seleccionada en la forma de invocación.




5.18.2016

Integrar Xamarin Studio con Visual Studio Team Services

Al iniciar desarrollos con el Xamarin Studio en Mac OS X a los que usamos el Visual Studio Team Services nos surge la necesidad de integrar nuestros proyectos de Xamarin con el controlador de versiones de Microsoft en la nube. En este post vamos a ver cómo lograr esta tarea.

Crear el proyecto en VSTS

El primer paso es crear el proyecto en VSTS. El proyecto debe de utilizar git y además tenemos que habilitar las credenciales alternativas del VSTS.



















Como se ve en la imagen anterior, cuando vamos a la sección de código del VSTS podemos ver el URL para el repositorio git del proyecto que acabamos de crear.

Crear el proyecto en Xamarin Studio

Seguidamente procedemos a crear un proyecto para desarrollo de apps para Mac OS X de la forma tradicional, solamente nos preocupamos por no marcar la opción de utilizar git para el control de versiones (lo haremos posteriormente desde el menú del Xamarin Studio) 




























Subir el proyecto al VSTS

El siguiente paso es subir el proyecto recién creado al VSTS. Para llevar a cabo esta tarea seleccionamos la opción control de versiones/publicar, desde donde nos aparece la pantalla para configurar el repositorio deseado.





















En esta pantalla elegimos el tipo de repositorio (git) y copiamos el url del repositorio (obtenido del VSTS). En la siguiente pantalla se nos va a solicitar el usuario y password del repositorio, donde tendremos que agregar nuestras credenciales alternativas para VSTS.








Luego seleccionamos aceptar y nuestro proyecto será publicado exitosamente en el VSTS.

5.13.2016

Mapas en BizTalk: Obteniendo solo el primer registro de una colección

Uno de los problemas mas comunes que enfrentamos cuando desarrollamos en BizTalk se da cuando recibimos una colección de elementos, pero solo requerimos el primer elemento de la colección. Existen varias formas de obtener ese elemento, pero la forma mas sencilla de llevarlo a cabo es utilizando un mapa. En este post vamos a ver como solucionar este problema utilizando mapas en BizTalk.

El problema

En una aplicación BizTalk recibimos una colección de registros desde una base de datos y debemos procesar el primero registro únicamente. El mensaje recibido se presenta en la siguiente figura:


La Solución


Vamos a obtener el primer registro utilizando un mapeo y lo vamos a manera a otra estructura. En este caso la estructura destino es la que se muestra en la siguiente imagen.

Como se ve en la figura anterior, el esquema de persona espera únicamente una persona y requiere el nombre concatenado; es decir, el nombre debe de quedar como "Nombre Apellido1 Apellido2".
Para lograr esto vamos a utiilzar un mapa con una combinación de functoids que nos van a permitir obtener convertido el primero nodo. El mapa se puede ver en la siguiente figura:


Como se puede ver en la figura anterior, estamos utilizando un mapa con 4 tipos de functoids. Vamos a detallar cada uno de los functoids a continuación.

(1) Iteración

El primer functoid que vamos a utilizar es la iteración. Este functoid nos da el indice actual del registro en una operación cíclica iniciando el contador en 1. 

Para nuestro ejemplo, necesitamos procesar el registro cuando el indice que nos devuelve el functoid es igual a 1. 

(2) Equal

El segundo functoid nos permite hacer una comparación entre dos parámetros y nos retorna "true" si la comparación es verdadera o "false" si la comparación es falsa.

En nuestro caso, cuando el functoid de iteración nos retorna uno, entonces la condición será  verdadera, con lo cual vamos a proceder a copiar el valor en el nuevo nodo.


(3) Value Mapping (Flattening)

Este functoid copia registros de una estructura repetitiva a una estructura destino plana. En nuestro caso estamos copiando de una lista de personas a una única persona, esta acción se ejecuta si el primer parámetro que recibe el functoid es verdadero. 









La configuración de este functoid se ve en la siguiente figura. Como se ve en la figura, inicialmente se recibe el resultado del functoid "equal", si este es verdadero, entonces el valor de la concatenación del mapeo (nombre + apellido1 + apellido2) se copiara en la estructura destino.



Resultado

El resultado al aplicar el mapa al archivo mostrado al final del articulo se puede ver en la siguiente figura.



1.17.2016

Conceptos iniciales de MongoDB

Siguiendo con los post acerca de mongoDB - base de datos que aprovecharmos luego para utilizarla con nodejs en VSCode - en este post vamos a ver conceptos básicos de esta base de datos.
Documento:  MongoDB se basa en documentos. Un documento en MongoDB es la unidad basica de datos, muy similar al concepto de una fila (registro) en una base de datos relacional. Un documento consiste en un conjunto de parejas de valores en formato JSON y se guardan en disco en formato el formato de serialización BSON (JSON binario)
La estructura de un documento en MongoDB luce similar al presentado a continuación:
{
 campo1: valor1,
 campo2: valor2,
 ....
 ....
 campoN: valorN
}
Cada documento en MongoDB tiene un campo _id el cual es el primer campo en el documento. Este campo es único a la colección a la que pertenece y puede contener cualquier tipo de dato BSON excepto un arreglo. Si el documento se crea sin un campo _id MongoDB automáticamente agrega este campo como el primer elemento del documento y le asigna un valor ObjectId a este campo. Cada documento tiene un límite de 16MB es tamaño para cada documento esto para prevenir el uso excesivo de memoria RAM o ancho de banda.
Colecciones: es como una tabla en una base de datos relacional, pero no tiene un esquema definido. En una colección pueden existir documentos que no tengan la misma estructura ni el mismo propósito, por ejemplo:
{
 Nombre: "Ana",
 Apellido: "Barquero",
 Direccion: "Santa Cruz de la Sierra"
}
{
 NombreArticulo: "Bocinas BOSE",
 PrecioUSD: 102.99
} 
{
 NumeroFactura: "ABC12",
 Cliente: "Ana"
} 
En el registro anterior existen tres tipos de documentos y dos de ellos estan relacionados Cliente: Nombre y Factura:Cliente.
Las colecciones son creadas automáticamente cuando se agregan los documentos o puede crearse de forma manual utilizando el comando db.createCollection().
Base de Datos: Una base de datos en MongoDB es un conjunto de colecciones. Las bases de datos en MongoDB se crean por petición; es decir, no existe un comando para crear una base de datos; las mismas se crean cuando se selecciona la base de datos o cuando se inserta un documento.









1.14.2016

Integrando un app en iOS con Azure Mobile Services

Uno de los componentes más útiles dentro de la plataforma PaaS de Azure son los servicios móviles. Estos servicios nos permiten llevar a cabo una gran cantidad de tareas de forma sencilla desde aplicativos móviles tales como conexiones vía Azure Service Bus con "backends" "on premises" o asociar el app para recibir "push notifications" en el app desde un backend "on premises" que soporte conexiones al bus de azure - es decir, escrita en C#, Java, nodejs o phyton. Pero que sucede cuando ya tenemos un app desarrollada en iOS y queremos modificarla para que use los servicios móviles de Azure. En este post vamos a ver los pasos necesarios para poder integrar un app desarrollada en iOS con un servicio móvil de Azure.

Crear el servicio móvil

El primer paso es crear el servicio móvil en Azure - algo que vamos a obviar en este post - utilizando una cuenta de Azure - ya sea de prueba o empresarial. Una vez creado el servicio móvil procedemos a ir al parte inicial de la configuración del servicio y llevamos a cabo los siguientes pasos:

  1. Seleccionamos la plataforma iOS para poder descargar el proyecto de prueba - aunque no es necesario yo lo descargo para siempre usar la última versión del sdk de Azure para iOS.
  2. Luego seleccionamos el lenguaje de la aplicación que deseamos crear y luego le damos descargar - en este caso vamos a seleccionar Objective-C. Insisto, no es necesario descargar el proyecto de prueba pero se facilitan muchos las cosas llevándolo a cabo.
En la siguiente figura pueden ver lo descrito anteriormente.




Ahora vamos al folder donde se descargo el aplicativo demo y procedemos a buscar el componente del servicio móvil de azure, una vez localizado lo arrastramos al proyecto que queremos integrar con el servicio móvil. En la siguiente figura se puede ver el detalle de esta acción.



Ahora bien, tenemos que agregar una referencia a los encabezados de las librería de en el proyecto para poder acceder sus clases, métodos, etc. Para lograr esto vamos a ir al archivo AppDelegate.h y ahí procedemos a agregar en el encabezado tal y como se ve en la figura (1). Igualmente vamos a crear una propiedad para tener acceso a una instancia del cliente de Azure el cual vamos a conectar con el servicio móvil para poder acceder métodos y tipos desde la instancia del componente - Figura (2)


Ahora vamos a proceder a agregar el código para conectarnos al servicio móvil. Como se ve en la siguiente figura, vamos a utilizar el método clietWithApplicationURLString de la clase MSClient y en ella vamos a indicar el URL del servicio móvil generado y la llave del servicio. Estos datos se pueden obtener de la página principal del servicio.

Luego de agregar el código de la conexión compilamos el proyecto y procedemos a programar contra los servicios y métodos que tenemos expuestos en el servicio móvil.