Microsoft Dynamics AX 2012 R3 CU9 Demo VM V1
Ya se ha publicado la máquina virtual demo actualizada con el último paquete Microsoft Dynamics AX 2012 R3 CU9. Esta máquina virtual viene, como de costumbre, actualizada con las últimas versiones de todo el software y con datos de prueba de las nuevas funcionalidades: Links interesantes: Microsoft Dynamics AX 2012 R3 CU9 Solution Demo Package V1.0 Cumulative update 9 (CU9) for Microsoft Dynamics AX 2012 R3 What’s new in Microsoft Dynamics AX 2012 R3 cumulative update 9 AX 2012 Recordar que estas máquinas virtuales se pueden desplegar directamente en Azure desde Lifecycle Services (LCS).
HOWTO: Depurar desde Visual Studio código X++ que se ejecuta en el servidor AX 2012
Gran parte del código X++ que desarrollamos en clases se ejecuta en la capa del servidor (Data Providers en informes, procesos Batch, SysOperation, …), lo que resulta un poco incómodo a la hora de depurar. Si ponemos un breakpoint desde el editor de X++ en MorphX en código que se ejecuta en el servidor, veremos como el depurador integrado nunca se detiene en este punto. Preparar el entorno de desarrollo para poder depurar código del servidor desde Visual Studio (incluso el código X++, que en el servidor siempre se ejecuta como código CIL) nos obliga a tener en cuenta unos cuantos pre-requisitos, así que los voy a enumerar aquí para tenerlos a mano cuando nos hagan falta:
Leer másCumulative Update 9 para Microsoft Dynamics AX 2012 R3
Ya está disponible la siguiente actualización acumulativa para Microsoft Dynamics AX 2012 R3, la CU9 (6.3.2000.326). 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 la guía de instalación enlazada más abajo. También se enlaza la página de TechNet que detalla los cambios de esta revisión. A nivel técnico no hay cambios significativos ya que los CU sólo incluyen pequeños cambios funcionales y necesidades específicas para la regulación de cada país. El caso de España, en este parche se incluyen cambios para la emisión de facturas electrónicas a la administración (formato FacturaE, más información aquí), y algunos cambios en el modelo 347 (más información).
Leer másMicrosoft Dynamics 'AX 7' / Rainier
La noticia de que existe una próxima versión de Microsoft Dynamics AX (versión 7) y que ésta va a ser una revolución en cuanto a la tecnología que la mueve y la experiencia de usuario no es nueva, lo comentábamos aquí ya en Agosto de 2013. Microsoft lleva comentando el proyecto Rainier varios años en diferentes eventos, pero las noticias interesantes siguen bajo NDA por lo que no se pueden publicar todavía.
Leer másAX TIP: Ejecutar código X++ externo
Siguiendo con el hilo de mi anterior artículo, otro truco parecido consiste en la posibilidad de utilizar la clase XppCompiler para ejecutar manualmente un fragmento de código almacenado de forma externa, ya sea en la base de datos, en una variable, en ficheros de texto, etc. Para ello podemos utilizar una sintaxis parecida a la siguiente: static void JAEE_XppCompilerCode(Args _args) { XppCompiler comp; Source codigo = "InventLocationId findLocation(InventDimId _inventDimId)" + "{" + " return InventDim::find(_inventDimId).InventLocationId;" + "}"; InventDimId inventDimId = "1879356425"; InventLocationId result; new ExecutePermission().assert(); comp = new XppCompiler(); if (!comp.compile(codigo)) throw error("Código no válido."); result = runBuf(codigo, inventDimId); CodeAccessPermission::revertAssert(); info(strFmt("Resultado: %1", result)); } Tal como decía en el artículo anterior, utilizar manualmente este tipo de API es peligroso y debe ser asegurado. En aquel capítulo incluía algunos enlaces de interés para desarrollar código seguro.
Leer másAX TIP: Ejecutar una expresión matemática desde X++
Un truco antiguo, pero muy útil en algunos casos, es la posibilidad de utilizar el compilador de X++ para calcular expresiones matemáticas. Una simplificación de este interprete matemático está implementada en todos los campos numéricos de la aplicación, donde, en vez de un número, se puede introducir una expresión sencilla. Por ejemplo: +15+7-10/3 El compilador va un poco mas ayá y nos permite utilizar funciones matemáticas más complejas. La lista completa de funciones, según la documentación, es: abs, acos, asin, atan, corrFlagGet, corrFlagSet, cos, cosh, decRound, exp, exp10, frac, log10, logN, power, round, sin, sinh, tan, tanh y trunc, aunque probablemente haya más, la lista de funciones en MSDN no ha sido nunca totalmente completa.
Leer másHOWTO: Eventos en AX 2012 para minimizar conflictos
Como se puede adivinar de algunos de mis anteriores post, soy un fiel defensor de uno de los grandes olvidados de AX 2012: Los eventos En mi afán de evangelizar a favor de uso, he dado con un ejemplo muy evidente de sus ventajas. A estas alturas supongo que casi todo el mundo conoce la posibilidad de añadir nuevas opciones al menú Add-Ins del entorno de desarrollo de AX 2012 y anteriores. Es realmente fácil, sólo hay que crear una nueva clase con un método main al uso, un menú ítem que apunte a esa clase, y añadir el menú ítem al menú estándar SysContextMenu. Con esto conseguimos que nuestro menú ítem se muestre al hacer click-derecho sobre los elementos del AOT, por ejemplo (Startup Project es el nuevo add-in):
Leer másIntroducción a PowerShell para desarrolladores Dynamics AX 2012 (PS-I)
PowerShell (lo abreviaremos PS en lo sucesivo) es una herramienta impresionante, entre otras cosas, para la administración de nuestros servidores y aplicaciones, y eso incluye, por supuesto, nuestro Microsoft Dynamics AX 2012. Con esta versión se incluye un módulo propio de PS al que llama “Microsoft Dynamics AX 2012 Management Shell” con algunos comandos que veremos en sucesivas entregas. Estos comandos son muy útiles, pero podemos sacar provecho también de la funcionalidad estándar de PowerShell para muchas tareas.
Leer másHowTo: Tomar el control de un backup de AX 2012 mediante PowerShell
Hace unos días hacía un comentario en twitter acerca de las posibilidades de PowerShell que me trajo mucho feedback. Supongo que hay mucho interés en conocer más sobre las bondades de PowerShell aplicadas a Microsoft Dynamics AX, y estoy preparando un artículo largo (probablemente una serie de varios artículos) sobre el tema que estarán terminados en las próximas semanas. PowerShell es una herramienta extremadamente potente y a la vez extraña. Los programadores habitualmente la consideran una herramienta de administración (es una consola) mientras que los sysadmin suelen verla como algo para programadores (es código). Curioso, ¿verdad?
Leer másConsultar roles de seguridad desde SQL en AX 2012
No es algo común pero en algún caso nos puede venir bien consultar qué roles de seguridad tiene un usuario consultando la base de datos. Lo ideal sería utilizar servicios web o algo parecido, utilizando un código X++ parecido al siguiente (código extraído del capítulo 10: “Licencia, Configuración y Seguridad” de mi libro): static void QueryRoles(Args _args) { SecurityRole securityRole; SecurityUserRole securityUserRole; while select securityUserRole where securityUserRole.User == 'admin' join securityRole where securityRole.RecId == securityUserRole.SecurityRole { info(strFmt("%1", SysLabel::labelId2String(securityRole.Name))); } } Si insistimos en hacer esta consulta desde SQL Server nos vamos a llevar una sorpresa. La tabla SecurityUserRole que almacena los roles asignados a cada usuario existe en la base de datos transaccional de AX, pero la tabla SecurityRole, que almacena los roles en si, no existe. Sería lógico pensar que, a lo mejor, la tabla existe en la base de datos modelo (_model), pero tampoco la encontramos ahí.
Leer más