Cumulative Update 12 para Microsoft Dynamics AX 2012 R3

Microsoft Dynamics Ya está disponible la siguiente actualización acumulativa para Microsoft Dynamics AX 2012 R3, la CU12 (6.3.5000.138). Esta actualización está disponible para instalación mediante el módulo Updates de Lifecycle Services, como viene siendo habitual desde la revisión R3. Información sobre las mejoras sobre el proceso de instalación se puede encontrar en los enlaces siguientes: La documentación del parche: Descarga: Sin duda lo más llamativo de este parche es el nuevo módulo Cortana Intelligence que nos permite conectar con los Cognitive Services en Azure. Esta API nos va a permitir hacer uso de los servicios de machine learning de manera sencilla mediante algoritmos predefinidos y facilitando el mantenimiento de entidades de datos en cloud desde nuestra instancia local de AX 2012. Aparte de la funcionalidad en sí, a la que vale la pena echar un vistazo, este nuevo módulo ilustra la filosofía híbrida de las próximas versiones de Dynamics AX, en las que parte de la funcionalidad se va a ofrecer de manera exclusiva en cloud (todo lo relacionado con Cortana Intelligence, por ejemplo, aunque no es el único) mientras seguimos utilizando nuestra versión de AX 2012 R3 on-premise.  
Leer Más >>

Microsoft Dynamics 365 for Operations

dynamics-365-launch Os traigo un resumen de todo lo que se ha anunciado durante las ultimas semanas acerca de los planes de Microsoft para unificar su plataforma de negocio bajo un mismo paraguas, tanto a nivel de marketing, como de arquitectura, como ya anunciaron hace varios meses. He tardado un poco en poder escribir este artículo, y mientras tanto se han anunciado muchas otras cosas que están relacionadas con Dynamics 365, así que voy a hacer un resumen de todas ellas ya que vamos a hablar mucho de estos temas en los próximos meses y este es un buen punto de partida. Al fin y al cabo, todo esto se ha ido anunciando durante las últimas semanas pero la disponibilidad general empieza hoy 1 de Noviembre 🙂

Microsoft Dynamics 365 for Operations

Por supuesto la noticia principal es el lanzamiento de la plataforma Dynamics 365 (que engloba AX, NAV y CRM) y en concreto de Microsoft Dynamics 365 for Operations que es el nombre final del producto que hemos llamado Rainier (nombre del proyecto), AX 7 (número de versión) y últimamente "el nuevo" Dynamics AX. No más nombres extraños, pero tampoco cambios en el producto de forma inmediata. Dynamics 365 for Operations es el nombre final de la versión actual de AX 7, de momento es el mismo producto, y desde aquí en adelante empieza la evolución que está por llegar. La presentación oficial de Dynamics 365 tuvo lugar hace unas semanas durante el evento de la comunidad AXUG Summit, y queda resumido en el siguiente vídeo (y muchos más en el canal de Ignite en Youtube):
De este evento hay muchísima información en Internet, donde nos hablaron de los planes a largo plazo para la plataforma incluyendo como siempre opciones para dispositivos (Mobile First) y de inteligencia de negocios con Cortana Intelligence Suit. Se han publicado muchas imágenes y artículos en prensa y blogs especializados, os dejo sólo una muestra 🙂 Aunque hasta hace unos días D365 todavía no estaba disponible, este cambio de nombre ha sido efectuado como parte de la última actualización de la plataforma (lo que llamaríamos versión 7.3, o platform update 3, o la revisión de Noviembre, ...) y que trae más novedades que se pueden ver aquí: Este artículo sólo muestra los cambios a nivel de plataforma (incluyendo el cambio de nombre), pero no incluye los cambios funcionales que se publican en la versión 1611 (también en Noviembre). Para tener siempre la información actualizada lo mejor es guardar este enlace: La nueva versión ya está disponible, tanto para crear proyectos como para desplegarlos en Azure desde LCS, incluyendo el despliegue con Azure Resource Manager (ARM), que va siendo más soportado en cada versión y finalmente será la única manera de desplegar entornos.

lcs-d365-4

Microsoft Dynamics 365 Roadmap

Otra novedad interesante durante la pasada WPC es que se anunció (por fin), el nuevo roadmap dinámico para que clientes, partners y los equipos de producto puedan tener un plan de futuro alineado con las funcionalidades que está previsto implementar, las que ya están implementadas y en las que están trabajando actualmente. Esto es algo que se lleva pidiendo desde hace tiempo y que nos va a facilitar mucho la vida a todos: Hay una sesión muy interesante sobre el Roadmap de Dynamics 365 en Ignite que se puede ver en el siguiente enlace:

Home.Dynamics.Com

También se ha anunciado hoy la nueva Home para la suit Dynamics 365 en su conjunto, desde donde podremos acceder a todas la aplicaciones que tengamos instaladas en esta plataforma, incluyendo por supuesto Operations (AX), Sales (CRM), etc., pero también aplicaciones externas desarrolladas mediante PowerApps. Más información sobre la nueva Home en el blog de lanzamiento:

Microsoft Dynamics 365 On-premises

Una de las noticias más esperadas de las últimas semanas es el anuncio de que se va a facilitar una instalación de Dynamics 365 for Operations (AX) On-premise, esto es, utilizando nuestros propios servidores. A pesar de que la única forma de mantener un entorno puramente offline sin ninguna conexión con Azure es seguir con AX 2012, se ha anunciado la posibilidad de usar Dynamics 365 en un modelo híbrido, donde algunos componentes funcionarán en Azure (algunos por obligación, ya que dependen de otros servicios que sólo están disponibles en Azure como Power BI o Cortana Intelligence), mientras que otros se ejecutan localmente, de forma natural y soportada por el equipo de producto. El mayor cambio respecto a lo que habíamos escuchado hasta ahora es que, aunque podrá desplegarse este entorno híbrido sobre Azure Stack (sin fecha de salida confirmada todavía), no va a ser obligatorio usarlo. También es interesante que incluso en la versión puramente cloud se dispondrá de soluciones de instalación local para que ciertos componentes funcionen desconectados, como los componentes para Retail y Warehouse management. Todavía no hay confirmados muchos más detalles, pero lo que es seguro es que la versión híbrida está definitivamente en el roadmap y sabremos más en los próximos meses. Más información:

Microsoft PowerApps y Microsoft Flow

Por último comentar que desde hoy también están disponibles, y nos podemos registrar para probarlas, las plataformas PowerApps, para crear fácilmente aplicaciones utilizando el nuevo modelo de datos compartido (CDM), y Flow, para crear flujos de trabajo entre aplicaciones incluyendo D365. Mas información en los siguientes enlaces: Han sido unas semanas moviditas, y las que quedan 🙂
Leer Más >>

Problemas con el tamaño de la fuente en Dynamics AX 2012

A veces al utilizar el cliente de Microsoft Dynamics AX 2012 (ya sea en un servidor de Escritorio Remoto o en una instalación local), el tamaño de las fuentes hace cosas "extrañas". Se muestran las fuentes más grandes de lo normal, distorsionando los formularios y las barras de desplazamiento, y al pasar el ratón por encima vuelven a su tamaño normal, o bien se cambia el tamaño al maximizar el formulario, etc. Cosas como estas. Esto ocurre sobre todo cuando utilizamos pantallas con una resolución muy alta, que son bastante comunes hoy en día sobre todo en portátiles y tablet como las Surface, y configuramos nuestra sesión para que modifique el tamaño de los textos para compensar esta resolución. Al conectar a un Escritorio Remoto desde este equipo, ese parámetro se copia a la sesión remota y no es posible modificarlo desde dentro de la sesión. Pero sí podemos activar un parámetro en las propiedades del acceso directo que utilicemos para abrir el cliente de AX 2012 para desactivar este ajuste: Disable display scaling on high DPI settings. En la siguiente captura se muestra la opción en Windows 2012, las opciones son similares en Windows 10. Si estamos abriendo el cliente de desarrollo, también podemos marcar la opción "Run this program as an administrator" para que se ejecute siempre como administrador. Esto es muy útil si queremos desplegar informes SSRS o servicios web durante el desarrollo, por ejemplo. Al marcar esta opción los textos se verán en tamaño original, que dependiendo de nuestra pantalla pueden ser demasiado pequeños, pero de momento solo se puede activar o desactivar: UPDATE 09/01/2017:  La nueva build preview para insiders publicada hoy para Windows 10 incluye mejoras para esta opción. Es probable que las veamos también en Windows 2012 en un futuro próximo. Más información en: Announcing Windows 10 Insider Preview Build 15002 for PC (la siguiente imagen es del blog de Windows):  
Leer Más >>

PowerShell y los comandos de inicio en Dynamics AX 2012 (PS-III)

En los primeros artículos de esta serie, aprendimos las bases de PowerShell en general, y cómo utilizar librerías de cmdlets extra, incluyendo las que vienen con Microsoft Dynamics AX 2012 y permiten muchas acciones que facilitan la administración y el mantenimiento. PowerShell - jaestevan.com Pero para poder utilizar PowerShell en nuestros sistemas DevOps reales, debemos unirlo todo y utilizar tanto cmdlets específicos, como la potencia de PowerShell para poder ejecutar todos los pasos necesarios en un despliegue típico de AX, y en muchas otras tareas de mantenimiento.

Empecemos con PowerShell estándar

Por ejemplo podemos utilizar los comandos base de PowerShell para buscar si en el sistema existe un AOS con un determinado nombre, e iniciarlo si no lo está, de esta forma (probablemente no es la mejor forma, pero resulta ilustrativa para este caso): powershell-aos-service
$AxAOSName = "MicrosoftDynamicsAX"

$svcAOS = Get-Service AOS60* | Where { $_.DisplayName.EndsWith($AxAOSName) } -ErrorAction SilentlyContinue
if (-not ($svcAOS.Length -gt 0))
{
    throw "AOS service " + $AxAOSName + " can not be found."
}

Write-Host "AOS:" $svcAOS.DisplayName

if ($svcAOS.Status -ne 'Running')
{
    Start-Service $svcAOS -PassThru
}

Ejecutar comandos de la consola de Windows (cmd)

Sin embargo, para realizar una acción obligatoria en cualquier estrategia DevOps como es compilar el código X++, necesitamos ejecutar otra aplicación desde PowerShell. En concreto, necesitamos ejecutar AxBuild, el compilador multi-hilo que ejecutamos desde la consola de comandos. Podemos integrarlo como un paso más en nuestros scripts de esta forma:
$axCompiler = Join-Path $AxServerBin "\ax32serv.exe"
$axBuild = Join-Path $AxServerBin "\AxBuild.exe"

$axAosInstance = $svcAOS.Name.Split("$")[1]

Write-Host ("AOS: " + $axAosInstance + ", Compiler: " + $axCompiler)

& $axBuild 'xppcompileall' /compiler="$axCompiler" /log="$LogPath" /altbin="$AxClientBin" /aos="$axAosInstance"
Que da un resultado parecido a este: PowerShell - AxBuild

Ejecutar ax32.exe con parámetros - SysStartupCmd

Tras compilar nuestro código X++, los siguientes pasos en nuestros procesos suelen ser compilar el código CIL y sincronizar la base de datos. Estas acciones sólo pueden ser iniciadas desde el cliente de AX 2012 (ax32.exe), y así tendremos que hacerlo desde PowerShell. Para iniciar el cliente desde PS tenemos varias opciones, pero las más comunes son: Pasar un parámetro al ejecutable, de los disponibles en la clase SysStartupCmd. La cantidad de comandos disponibles en esta clase depende de nuestra versión de AX (incluso de las versiones menores), pero pueden ser consultados en la documentación, o más fácil, directamente en el código: PowerShell - SysStartupCmd En las últimas revisiones de AX 2012 (en la imagen un AX 2012 R3 CU9) disponemos de una gran variedad de estos comandos, pero en cualquier caso tendremos los básicos para compilar CIL, sincronizar la base de datos, actualizar referencias cruzadas, en algunas versiones importar datos (muy útil por ejemplo para importar casos de prueba antes de ejecutar Unit Test), o para importar datos de configuración en un proceso de despliegue, etc. Vale la pena echar un vistazo a la documentación y el código porque las opciones disponibles nos pueden ser de mucha ayuda en nuestras automatizaciones. Además, fijándonos en las clases que ya existen podemos crear comandos a medida para cubrir necesidades extra. Para ejecutar estos comandos, nuestro código en PowerShell queda más o menos así:
$axClientBin = "C:\Program Files (x86)\Microsoft Dynamics AX\60\Client\Bin"
$axClient = Join-Path $axClientBin "\ax32.exe"

$argumentList ="-startupcmd=CompileIL", "-lazytableloading", "-lazyclassloading"

Write-Host ("Command: " + $axClient + " " + $argumentList)

Start-Process -FilePath $axClient -ArgumentList $argumentList -Verb RunAs -Wait -PassThru -ErrorAction Stop
El resultado es que nuestro cliente de AX se abre, ejecuta los comandos que pasamos automáticamente, y después se cierra. Mientras el cliente está abierto ejecutando su tarea, el script de PowerShell que lo ha invocado espera a que termine (por el comando -Wait), y cuando el cliente AX se cierra, el script continúa: PowerShell - StartupCmd - CompileIL

Ejecutar ax32.exe con un XML como parámetro - SysAutoRun

Otra forma muy útil de ejecutar comandos al inicio del cliente es almacenar estos comandos en ficheros XML, de forma que el script de PowerShell sólo tendrá que usar como parámetro uno de esos comandos, y el sistema ejecutará el o los comandos que se hayan incluido. Para automatizar tareas comunes y repetitivas puede hacer el código más legible, pero funciona igual que el caso anterior. Por ejemplo, utilizando el siguiente fichero XML (la sintaxis completa la podemos encontrar en la documentación, aunque como siempre el código es la documentación más actualizada):

 
    
    
Nuestro script PowerShell quedaría como sigue:
$axClientBin = "C:\Program Files (x86)\Microsoft Dynamics AX\60\Client\Bin"
$axClient = Join-Path $axClientBin "\ax32.exe"

$xmlCmdFile = "C:\TEMP\AXSync.xml"
$argumentList = "-startupcmd=Autorun_" + $xmlCmdFile

Write-Host ("Command: " + $axClient + " " + $argumentList)

Start-Process -FilePath $axClient -ArgumentList $argumentList -Verb RunAs -Wait -PassThru -ErrorAction Stop
Este procedimiento también puede extenderse para añadir nuestros propios comandos, echar un vistazo a la clase SysAutoRun y a la documentación. El resultado es el mismo que antes: powershell-xml-command

¡Reutilización!

Ahora que hemos visto todo lo que se puede hacer, mi consejo inicial es: ¡NO lo hagas! Es bueno conocer las bases, pero antes de hacer todas estas tareas manualmente, recomiendo probar alguna de las librerías de PowerShell dedicadas para trabajar con Dynamics AX. En ellas, no sólo se pueden encontrar soluciones para casi todos los casos posibles, sino que se encuentra una base de código inicial muy buena tanto para utilizarla, como para aprender cómo está hecha investigando su código. Antes de desarrollar todo tu proceso desde cero, considera probar alguna librería existente y contribuir a mejorarla. Recomiendo la siguiente, disponible en CodePlex:

PowerShell Open Sourced!

Ya que hablamos de PowerShell, tengo que comentar la noticia de la semana. El anuncio de Microsoft de hacer PowerShell open-source, y compatible con sistemas Linux, con planes de ampliar esta compatibilidad en el futuro. Más información: Y en el vídeo del lanzamiento:
Leer Más >>

Microsoft Common Data Model (CDM)

Después del anuncio de Dynamics 365 publicado hace unas semanas en la WPC, nos quedamos con ganas de más información acerca de la complementación práctica de las soluciones que se anunciaron allí. Personalmente una de las que más interés me causó fue el Common Data Model (CDM), anunciado como un modelo de datos común que permitiría compartir entidades y datos entre las aplicaciones que conforman el paquete Dynamics 365, las aplicaciones empresariales actuales (NAV, el nuevo AX, CRM Online, etc.) y las nuevas soluciones que partners y clientes podrían desarrollar sobre este nuevo framework. Hoy se han publicado más detalles sobre este modelo de datos común mediante los siguientes anuncios (por ejemplo): Vale la pena revisarlos porque incluyen unos cuantos vídeos muy ilustrativos sobre el tema. Common Data Model En estos artículos se confirma la idea de que el CDM será un repositorio de datos independiente con el que se integrarán todas las partes. El concepto es parecido, entre otras cosas, a la Entity Store de la que hablamos hace unos meses para AX 2012 R3 y el data data mart creado por las herramientas de reporte financiero como el Management Reporter. Cabe esperar que todas estas soluciones confluyan en un data warehouse común capaz de modelar todas las áreas del negocio y sobre el que se sustenten el resto de aplicaciones y soluciones futuras. Un DW común sería el origen de datos perfecto para sistemas de inteligencia de negocio como Power BI o herramientas de predicción como Cortana Intelligence. Como digo los vídeos enlazados en el post anterior son muy interesantes ya que nos muestran ejemplos de cómo las entidades se muestra en el sistema PowerApps y cómo crear tanto entidades nuevas como aplicaciones que las utilicen. Se pueden ver también funcionalidades generales como la posibilidad de exportar e importar los datos de estas entidades fácilmente con la integración con Excel. Es una introducción muy interesante. Common Data Model - Entities Más información por supuesto en Microsoft PowerApps.
Leer Más >>

Novedades Julio 2016 en Lifecycle Services (LCS)

Microsoft Dynamics Lifecycle Services Como viene siendo habitual, tenemos disponible la revisión mensual de Microsoft Dynamics Lifecycle Services (LCS) con los cambios que el equipo ha desarrollado durante el mes pasado. Esta vez  son pocos cambios, ¡pero importantes!
  • Mejorada la integración existente entre LCS y Sharepoint Online para compartir documentos.
  • Las soluciones AX de partners ISV pueden ser enlazadas con un modelo de Power BI.
  • ¡Las soluciones AX de partners ISV ahora pueden ser encontradas desde Microsoft AppSource!
Aunque no forma parte de este anuncio, la integración de SharePoint con PowerApps (incluyendo Microsoft Flow) está mejorando mucho. Tendencia que concuerda con lo que comentamos en el artículo anterior. Más información: Las notas y ejemplos de estas novedades están en el siguiente enlace: Y los cambios de la actualización anterior aquí
Leer Más >>