Microsoft Dynamics AX RTW Update 1

Parece que la primera actualización del nuevo Dynamics AX está a punto de ser anunciada. De momento ya se puede desplegar en Azure aunque todavía no se ha anunciado oficialmente, no hay documentación y no se puede descargar la máquina virtual de desarrollo, pero iré actualizando este post conforme se liberen las novedades 🙂Microsoft Dynamics AX RTW Update 1 Este primer paquete de actualización nos va a servir para conocer el plan y el funcionamiento de las actualizaciones en el nuevo sistema web, así como las herramientas que van a permitir estas actualizaciones basadas en LCS (recordemos que no hay versión on-premise por el momento). ACTUALIZADO 25/05/2016 ACTUALIZADO 01/06/2016
Leer Más >>

[AX TIP] Errores Interop CLR y nivel de transacciones

Hace un tiempo publiqué un artículo explicando las buenas prácticas recomendadas para el manejo de excepciones CLR y cómo mostrarlas correctamente en el InfoLog de Dynamics AX. Sin embargo olvidé entonces un detalle importante que hay que tener en cuenta al capturar estas excepciones, que es el nivel de transacciones en la base de datos (TTS Level). En el siguiente código de ejemplo, nuestro try..catch NO funcionará. Si se produce un error en el try, por ejemplo, si el método get_Content() no existe en el objeto en tiempo de ejecución, la ejecución del código terminará directamente sin mostrar nada en el InfoLog, lo que no es muy deseable. Esto es debido a que, para poder capturar una excepción CLR, el nivel de transacciones debe ser 0. O lo que es lo mismo, no podemos capturar errores del Interop dentro de una transacción. Para que este código funcione tendremos que re-escribirlo para que el manejo de ese objeto CLR genérico se realice antes de abrir la transacción.
CLRObject 		obj;


ttsBegin;  // ttsLevel + 1

info(strFmt("TTS level: %1", appl.ttsLevel())); // TTS level: 1

try
{
	obj = response.get_Content();
	if (!CLRInterop::isNull(obj))
	{
		// ...
	}
}
catch(Exception::CLRError) // Este catch nunca se ejecutará porque ttsLevel > 0
{
	error(AifUtil::getClrErrorMessage());
}

ttsCommit; // ttsLevel - 1
En realidad, y debido al alto riesgo de que se produzcan errores CLR que deben capturarse y procesarse de forma especial, el manejo de objetos CLR debe encapsularse siempre en clases o métodos específicos donde quede claro su funcionamiento y aislado el riesgo de problemas.
Leer Más >>

Descubre la nueva Dynamics AX 2012 R3 Entity Store

En prácticamente todas las instalaciones de Microsoft Dynamics AX, en cualquiera de sus versiones, nos vemos en la necesidad de exponer ciertos datos de la aplicación para que otros sistemas puedan utilizarlos. Casi siempre, aunque no únicamente, herramientas de reporting y Business Intelligence. Para conseguirlo diseñamos datawarehouses más o menos completos y procesos ETL para transformar la base de datos transaccional y normalizada de Microsoft Dynamics AX en una fuente de datos más apropiada para la lectura eficiente de la información. Entity Store - Exposing entities Para evitarnos esta tarea extra y permitirnos centrar nuestro tiempo en la solución final, se ha publicado una nueva funcionalidad disponible para Microsoft Dynamics AX 2012 R3 llamada Entity Store, que nos va a permitir exponer las entidades de Microsoft Dynamics AX y utilizar todas las novedades del nuevo Microsoft SQL Server 2016 como los nuevos índices columnares en memoria y herramientas diseñadas para optimizar el reporting y permitir una explotación en "casi" tiempo real (near-real time). Entity Store - Power BI Este almacén de entidades es una nueva base de datos independiente de la transaccional por lo que, aparte de permitirnos una optimización y escalado independiente, nos va a permitir funcionar siempre con la nueva versión de SQL sin tener que migrar también el servidor transaccional de AX, facilitando la adopción de las últimas novedades. Actualmente es compatible con SQL Server 2014 y 2016 así como Azure SQL. La herramienta se integra y configura en la aplicación (actualmente como un hotfix independiente, pero formará parte del próximo parche acumulativo para AX 2012 R3) y utiliza el Data Import/Export Framework (DIEF) para coordinar la actualización de las entidades, que pueden configurarse a cierta frecuencia de forma independiente. Esta es una primera versión para introducir la funcionalidad y proveer las bases de su funcionamiento, pero Microsoft ya ha anunciado que están invirtiendo en este Data Entity por lo que podemos esperar novedades en el futuro, ya que esta promete ser la puerta de integración de nuestros sistemas con el resto de tecnologías de Microsoft referentes al reporting y business intelligence, que están avanzando mucho de la mano de Azure y SQL Server. Por ejemplo, Microsoft ya nos sugiere que estas entidades están preparadas para trabajar con Azure Machine Learning, Power BI, Azure Data Factory y herramientas clásicas de BI (como data warehouse clásico, data lake para AX, ...) y Big Data (Hadoop). Todas estas herramientas que ya están disponibles en Azure (Azure SQL, SQL-DW, Azure Data Factory, HDInsight, Azure Data Lake, Azure Data Lake Analysis Services, y Machine Learning) son parte también del Cortana Intelligence Suite (CIS), por lo que este nuevo almacén de datos consolidado es sólo el principio 😉 Toda la información disponible en el siguiente white paper de Microsoft: El parche se puede descargar desde LCS buscando “Entity store” o KB3147499. * Las imágenes de este post están extraídas del blog Dynamics AX Business Intelligence!!
Leer Más >>

Novedades Abril 2016 en Lifecycle Services (LCS)

Microsoft Dynamics Lifecycle Services Ya está disponible la revisión de Abril de Microsoft Dynamics Lifecycle Services (LCS) que presenta las siguientes novedades:
  • Mejoras generales
    • Es posible cargar nuevas versiones de un mismo modelo en la biblioteca de activos, con la posibilidad de adjuntar un fichero extra con las notas de la versión.
lcs-multiple-versions-notes
    • Es posible seleccionar todos los modelos de la biblioteca de activos al crear un nuevo paquete con la nueva opción "Select all".
    • Ahora se puede editar una Solución de LCS y publicar la nueva versión para que los clientes puedan ver tanto la lista de versiones como las notas de cada versión (igual que en la biblioteca de activos). Además, la versión del projecto de LCS se actualizará con la versión más reciente de la Solución.
    • Añadida la posibilidad de crear nuevos procesos de negocio BPM desde cero, sin necesidad de partir de un proceso existente. Además, las herramientas de edición de estos procesos han recibido muchas actualizaciones para facilitar la creación y edición de procesos existentes.
    • Mejoras en la manipulación de tareas dentro de una metodología. Es posible mover tareas de una fase a otra sin necesidad de recrearlas. Se han añadido algunas opciones para realizar tareas sobre grupos de tareas y fases.
    • Al pulsar sobre nuestro nombre de usuario, se muestra información del login utilizado para acceder a LCS. Muy util para saber con qué cuenta estamos conectados cuando utilizamos diferentes cuentas de Microsoft u Office 365.
lcs-login-information
    • Los clientes premiere pueden crear incidentes para un proyecto. Esta opción está disponible para AX 2012 y el nuevo Dynamics AX.
    • Es posible almacenar localizaciones (traducciones) para AX 2012 en la biblioteca de activos. Hasta ahora esta opción sólo estaba disponible para el nuevo Dynamics AX.
    • Mejoras en los proyectos de preventa para partners disponibles para el nuevo Dynamics AX.
Puedes ver todas las notas y ejemplos de estas novedades en el siguiente enlace:
Leer Más >>

Internet of Fun – Demostrando el concepto IoT

big-bang-t3e23-jaestevan En un artículo anterior, hacía una introducción del concepto de Internet of Things (IoT, Internet de las Cosas) y por qué iba a ser relevante en el futuro en multitud de procesos empresariales, procesos que inevitablemente van a llegar al mundo del ERP en mayor o menor medida. Uno de los factores que, en mi opinión, van a hacer que estas prácticas se disparen en un futuro cercano es su accesibilidad. La facilidad de desarrollarlos y el bajo coste con el que se puede empezar a hacer cosas útiles y de eso estamos hablando, ¿Verdad?... de cosas 🙂 En la demostración que empieza con este post vamos a crear un ejemplo funcional sencillo para comprobar las posibilidades de las que disponemos en cada caso, y comprobar lo sencillo que puede ser investigar y crear prototipos que luego podremos convertir en sistemas reales. Utilizaremos materiales de bajo coste para hacer pruebas, que luego podremos convertir en sistemas reales con material industrial equivalente. Este artículo contará por lo menos con tres partes (puede que más, si el tema interesa) teniendo en cuenta los que para mi son los tres boques de estas técnicas: Sistemas que van a generar la información (las "cosas" del IoT), los consumidores que harán uso de esta información, y los canales que nos permitirán capturar, almacenar y procesar la información generada. grafico-iot-jaestevan

Productores (o símplemente... "cosas")

Esta es posiblemente la parte más divertida del ejemplo. Podríamos haber utilizado un emulador o algún tipo de software para simularlo, pero es mucho más educativo utilizar realmente una "cosa" para el ejemplo. En mi caso he utilizado una Raspberry Pi 3 Model B por su facilidad de uso y porque podemos instalarle un Windows 10 IoT Core y programar desde Visual Studio tal y como estamos acostumbrados. Raspberry Pi 3 Model B Hay muchas más opciones, por supuesto. Diferentes precios, diferentes especificaciones y que soportan diferentes sistemas operativos y entornos de desarrollo. Algunas son más parecidas a un ordenador y otras son más placas de prototipado puro. Depende de nuestros gustos y necesidades. Estas son las más conocidas: Además de una placa más o menos complicada y nuestro entorno de desarrollo favorito, necesitaremos también algunos componentes electrónicos, dependiendo de lo que queramos hacer. Se pueden encontrar multitud de kits de inicio para todas estas placas (casi siempre compatibles entre sí) pero suele ser más económico comprar los componentes sueltos en alguna tienda de barrio. Para mi ejemplo voy a utilizar un sensor DHT11 que captura la temperatura y la humedad. Es un sensor muy barato (un par de euros), que no ofrece mucha precisión, pero suficiente para empezar. Programar este sensor en C# resulta más complicado de lo que pensaba en un principio debido a ciertas limitaciones de .NET en cuanto a controlar periodos de tiempo muy pequeños, así que me he basado en este ejemplo de hackster.io, que utiliza código C++ para leer del sensor y capturar las lecturas desde una aplicación universal de Windows. Es muy interesante: De momento y para esta parte del artículo sólo he hecho una pequeña modificación. El proyecto original muestra las lecturas por pantalla, yo quiero que se guarden para poder usar la Raspberry sin conexión y después procesar los datos leídos cuando la conecte a la red. Estos son los cambios: Nuevo struct para manejar los datos más fácilmente:
public struct TempSample
{
	public float Temperature;
	public float Humidity;
	public DateTimeOffset LastUpdated;
	public DateTime Timestamp;

	public string Json => JsonConvert.SerializeObject(this);

	public override string ToString() => String.Format("T: {0}, H: {1}", Temperature, Humidity);

	async public Task SaveFileAsync()
	{
		StorageFolder folder = await KnownFolders.DocumentsLibrary.CreateFolderAsync("TempSamples", CreationCollisionOption.OpenIfExists);
		StorageFile file = await folder.CreateFileAsync(Timestamp.ToString("yyyyMMdd-HHmmss-fff.json"), CreationCollisionOption.OpenIfExists);
		await FileIO.AppendTextAsync(file, this.Json);
	}
}
Modificado el proceso de lectura para guardar los datos en un fichero después de cada lectura:
// Fichero: DHT Solution / Sensors.OneWire / MainPage.xaml.cs
// https://github.com/porrey/dht/blob/master/source/Windows%2010%20IoT%20Core/DHT%20Solution/Sensors.OneWire/MainPage.xaml.cs
private async void _timer_Tick(object sender, object e)
{
	//...

	if (reading.IsValid)
	{
		this.TotalSuccess++;
		this.Temperature = Convert.ToSingle(reading.Temperature);
		this.Humidity = Convert.ToSingle(reading.Humidity);
		this.LastUpdated = DateTimeOffset.Now;

		this.OnPropertyChanged(nameof(SuccessRate));

		// JAEE - Begin
		TempSample sample = new TempSample
		{
			Temperature = this.Temperature,
			Humidity = this.Humidity,
			LastUpdated = this.LastUpdated,
			Timestamp = DateTime.Now
		};

		await sample.SaveFileAsync();
		// JAEE - End
	}

	//...
}
Y con esto tenemos nuestras medidas de temperatura guardadas en la tarjeta de memoria del dispositivo en cada lectura, en formato JSON. Así podremos ponerla a funcionar en cualquier sitio, sólo conectada a la electricidad (configurando nuestra aplicación para que se ejecute al inicio), sin necesidad de conectarla a internet:   Pero si no se conecta a internet, ¿entonces es Internet of Things o es sólo una Cosa? 🙂 La conectaremos en el siguiente artículo. Os daré una pista: IoT Hub throttling and you
Leer Más >>

Internet of ¿Things? Qué es y por qué debe interesarme

Si llevas en esta industria suficiente tiempo estarás acostumbrado a escuchar palabras nuevas prácticamente cada día. Algunos de estos buzzwords sólo pretenden presentar como novedades cosas que siempre han estado ahí, pero algunas llegan a ser realmente relevantes no solo para nuestra industria, sino para las que damos soporte desde los equipos TIC. Una de las que van a ser importantes es la llamada IoT (Internet of Things), o Internet de las cosas.

Internet de las ¿Cosas? ¿Qué es el IoT?

El término, como suele ocurrir, no es nuevo. La definición original y primer uso se atribuye a Kevin Ashton (1) en 1999, en una presentación sobre posibles utilidades de dispositivos RFID (ahora ampliamente utilizados en sectores clave como el retail), aunque no ha sido hasta que la capacidad de procesamiento y comunicaciones han crecido con la llegada del cloud que el término y sus utilidades han explotado pasando a primera línea en cualquier discusión técnica. Para comprender el concepto hay que entender el contexto: la mayoría de la inmensa cantidad de información que conforma Internet actualmente (se estima en 50 petabytes -un petabyte son 1024 terabytes-) ha sido, de una forma u otra, generada por personas. Crear un documento, tomar una foto, hacer like, retuit, etc. son todas acciones realizadas por personas. Acciones que a menudo resultan en información que acaba en internet. Sin embargo, potenciado en los últimos años entre otras cosas por el aumento notable de capacidad de procesamiento mediante servicios en la nube, mejoras en las comunicaciones y por el bajo coste de los componentes electrónicos (sensores), empezamos a tener gran cantidad de información no generada por personas, sino por "cosas". Sensores instalados en todas partes (en casa, en el coche, en el móvil, en las tiendas, en las carreteras, dispositivos wearables, ...) y conectados a la red son capaces de enviar una inmensa cantidad de información de manera fiable y casi ininterrumpida a la red, creando una red interconectada de "cosas", y de ahí el IoT. Según varios estudios (2)(3) la cantidad de dispositivos conectados estimada para 2020 ronda los 26-30 billones (billions, miles de millones). Un aumento muy notable comparado con los 7.3B de ordenadores, tabletas y móviles que los mismos estudios estiman para las mismas fechas. Otro estudio de cisco (6) aumenta hasta 50B la previsión, estimando que en 2020 habrá 6.58 dispositivos conectados por persona, desde los 3.47 actuales.

Yo trabajo con datos empresariales ¿En qué me afecta ese cambio?

Si estas estimaciones se cumplen, es fácil darse cuenta de cómo la gran mayoría de la información será generada por dispositivos, aunque todavía queda para las personas la responsabilidad de procesarla, almacenarla y explotarla, y eso nos incumbe a todos los que trabajamos con datos de empresas. No tardaremos demasiado antes de ver este tipo de información aparecer en sistemas ERP, no sólo para la toma de decisiones sino en forma de previsiones en tiempo real, pudiendo utilizar directamente el ERP para corregir tendencias o responder rápidamente a cambios basados en estos datos. Son una herramienta clave para el BI junto a otras técnicas ya conocidas como el data mining o el machine learning.
Estos dispositivos no serán sólo wearables para recabar información personal, aplicará a todos los sectores económicos, produciendo cambios en industria y servicios y generando puestos de trabajo que probablemente todavía no existen. La gran cantidad de información recopilada ahora de usuarios y clientes, será potenciada con información generada automáticamente mediante sensores en todas partes: tiendas, ropa, productos, maquinaria, vehículos, carreteras, etc. produciendo cambios totalmente disruptivos en campos como el retail (cuanto mejor nos conocen, mejores ofertas pueden ofrecer y mayor probabilidad de venta) o la industria y la distribución (recabar información en tiempo real de la maquinaria y los clientes optimizará los procesos productivos y la cadena de suministro para disminuir stocks, mejorar tiempos de respuesta, evitar mantenimientos no programados, etc.). Todos los sistemas serán más reactivos cuanta más información reciban de su entorno. Por ir a lo concreto, la aplicación del IoT a los procesos industriales ya ha acuñado otro término llamado IIoT (Industrial Internet of Things) o Industria 4.0. Ya no nos referimos aquí a la aplicación de las TIC a procesos industriales, sino a la obtención de información automática y en tiempo real de las "cosas" que intervienen en estos procesos, principalmente la propia maquinaria, pero también incluyendo líneas de distribución, camiones, cámaras frigoríficas, clima, tráfico, etc.
Industria Conectada 4.0 (IIoT)
(4) Industria Conectada 4.0 IIoT

¿Y ahora qué?

Entidades públicas como el gobierno de España (4)(autores del gráfico) ya están analizando y potenciando estas prácticas que se presentan como la próxima revolución industrial. Entidades como la Comisión Europea han creado grupos de trabajo como el AIOTI (Alliance for Internet of Things Innovation). También se encuentran iniciativas privadas con los mismos fines como el Industrial Internet Consortium o el IoT council. Gartner ha identificado (5) IoT Architecute and Platforms como una de las principales tendencias tecnológicas para 2016, por lo que esto no ha hecho más que empezar. Top 10 Strategic Technology Trends 2016

Referencias

NOTA:

Este es un post introductorio, el primero de una nueva serie de post más técnicos que escribiré a continuación desde estas bases, llevando a la práctica algunas técnicas IoT aplicadas a lo que es propio de este blog, esto es, Microsoft Dynamics AX y las tecnologías de Microsoft. Otras series que te pueden interesar son esta o esta.
Leer Más >>