j.a.estevan
AX TIP: Mostrar label con saltos de línea mediante X++
Una característica bastante molesta que te encuentras programando para Microsoft Dynamics AX es la manera en la que se tratan los saltos de líneas al presentar texto en formularios utilizando etiquetas. Por ejemplo, la siguiente línea:
Presenta un diálogo normal con un texto en varias líneas (hace caso del carácter \n para poner un salto de línea):

Sin embargo al convertir el mismo texto en una etiqueta, el resultado es distinto:
Box::yesNo("@TST001", DialogButton::Yes, "Prueba multi línea!");

Y ocurre lo mismo si se utiliza una etiqueta con comodines (%1, %2, …) y la función strFmt de esta manera:
Box::yesNo(strFmt("@TST001"), DialogButton::Yes, "Prueba multi línea!");
Para que la etiqueta haga caso del salto de línea hay que utilizar la función strFmtLB:
Box::yesNo(strFmtLB("@TST001"), DialogButton::Yes, "Prueba multi línea!");
Y así si funcionará:

Pero esta función no sustituye a la anterior. Esto es, en caso de tener comodines y saltos de página habrá que incluir las dos funciones. Esto es bastante molesto cuando modificas una etiqueta y pones un salto de línea. Da la impresión de haberse roto algo que antes sí funcionaba, y es que esta función no esta incluida nunca en el código si no es necesaria de forma explícita.
Información de tablas durante el desarrollo en Dynamics AX
Cuando se desarrolla para Microsoft Dynamics AX es muy común tener que consultar tipos de datos, nombres de campos, tablas, etc. para mantener la coherencia entre objetos nuevos y estándar. Esta consulta se puede hacer mediante las propiedades de los formularios (el botón Configurar del menú contextual estándar) y consultando el diseño o la query que se muestra en este formulario o yendo directamente al objeto del AOT:

Pero si esta consulta la tenemos que hacer muy a menudo, como al principio de un gran desarrollo, es molesto tener que hacer todos estos pasos cada vez y se puede consultar mucho mas fácilmente de esta manera:
Google Android vs Microsoft Dynamics AX (II)
Hace ya algún tiempo hice un pequeño experimento de conexión a un Dynamics AX 2009 de pruebas desde un terminal Android (emulado). Pues bien, con aquel experimento obtuve algunos progresos más aunque no había tenido tiempo todavía para publicarlos.
En el anterior post sobre este tema explicaba el entorno de desarrollo y un sencillo esquema de lo que pretendía conseguir:
Es un entorno con tres capas muy bien diferenciadas, una instalación normal de Dynamics AX 2009 con el .NET Business Connector por un lado, un servicio web hecho en C#.NET en medio y un terminal Android al otro lado.
Sobre la instalación AX no hay nada que mencionar, es una instalación normal sin ninguna personalización y con los datos de prueba que facilita Microsoft, explicaré un poco las otras dos capas que son más interesantes:
Microsoft Dynamics AX 2012 Launch Portal
Desde ayer viernes, Microsoft ha creado un sitio centralizado en Partner Source donde encontrar todo el material que va apareciendo acerca de las diferentes áreas del próximo Microsoft Dynamics AX 2012. De momento pocas novedades sobre lo que ya sabíamos, quizás la mejor noticia es la fecha prevista para el lanzamiento de las máquinas virtuales de demostración de esta versión, planificado en Abrill 2011. De cumplirse esta fecha están a punto de ver la luz.
Mientras tanto nos proponen como sitios oficiales para mantenernos al día, entre otros, los siguientes:
- Blogs oficiales
- Microsoft Dynamics AX 2012 Launch Portal (requieren login en Partner Source)
ACTUALIZADO 10/04/2011
Se acaban de publicar a través del bot de twitter @MSDownloads los siguientes white-papers sobre AX 2012. Son de acceso libre, no requieren ningún login:
- New, Changed, and Deprecated Features for Microsoft Dynamics AX 2012
- Microsoft Dynamics AX 2012 System Requirements
- Microsoft Dynamics AX 2012 Implementation Planning Guide
- Microsoft Dynamics AX 2012 Reference: Tables and Table Groups
- Microsoft Dynamics AX 2012 White Paper: Selecting the Best Development Technology for Your Application Development Scenario
- Microsoft Dynamics AX 2012 White Paper: Lean Manufacturing – Production Flows and Activities
- Microsoft Dynamics AX 2012 White Paper: Services
- Microsoft Dynamics AX 2012 White Paper: Microsoft Project Server 2010 Integration
- Microsoft Dynamics AX 2012 White Paper: Developing Extensible Data Security Policies
- Microsoft Dynamics AX 2012 White Paper: Code Upgrade
Google Android vs Microsoft Dynamics AX (I)
Desde hace algún tiempo tengo la inquietud personal de investigar una solución móvil para conectar a Microsoft Dynamics AX 2009. Lo aparentemente mas lógico sería intentarlo con Windows Phone 7 pero el entorno Android me parece muy interesante para investigar, así que el proceso de investigación será doble.
Para conectar a AX desde el exterior podríamos optar por una solución “out of the box” como por ejemplo el conector AIF pero ya que este es un proceso de investigación personal (no es una solución real para un cliente por el momento) he decidido implantar “manualmente” todo el proceso según el siguiente esquema:

El entorno de desarrollo es el siguiente:
- Microsoft Dynamics AX 2009 SP1 RTM (Máquina virtual con Windows 2003 Estándar)
- Microsoft Dynamics .NET Business Connector
- Visual Studio 2010 Profesional, el lenguaje elegido es C#
- Android SDK
- Librería ksoap2-android para comunicación SOAP desde Android
- Eclipse IDE for Java con plugin para Android
Dynamics AX reporting y SQL Server Reporting Services (SSRS)
Una de las novedades que mas me interesan y sobre la que mas se está publicando en diversos medios (supongo que no soy el único al que le interesa) es el paso de los reports en Dynamics AX 2012 al entorno SQL Reporting Services (SSRS).

HOWTO: Dimensiones y Macros en X++
El manejo de dimensiones por código en Microsoft Dynamics AX no es muy intuitivo al principio aunque con un poco de práctica se comprueba que no es tanto como parece. AX nos ofrece una serie de ayudas para facilitar estas tareas y entre otras las mas útiles son las macros #InventDim*

El propio estándar utiliza estas macros en multitud de lugares, por ejemplo este es un fragmento del método find() de la tabla estandar PriceDiscTable (Acuerdos comerciales):
HOWTO: Usar y crear Mapas (Maps) en Dynamics AX
Los mapas (Maps) son elementos particulares en Dynamics AX a los que vale la pena dedicar tiempo y aprender a utilizarlos, ya que resultan indispensables para ahorrar tiempo en modificaciones y desarrollos nuevos.
Para ver la utilidad de los Mapas pensemos un caso habitual: A una instalación estándar de AX se le añaden una serie de campos nuevos referentes a artículos (medidas, pesos, redondeos, precios, tallas, …) particulares de esta instalación, con los cuales se tiene que trabajar en nuevos desarrollos para calculo de precios, tarifas, cantidades, …
Lo tradicional con la mayoría de tecnologías sería añadir esos campos a las tablas necesarias (utilizando EDT‘s para mantener una coherencia de tipos), que podrían ser líneas de pedidos, facturas, compras, inventario, proyectos, producción … (en resumen, muchas tablas), escribir el código necesario para la lógica requerida e implementarla en cada tabla, o utilizando clases, o ambas cosas.
Dynamics AX nos ofrece un objeto que encapsula esos campos, con su coherencia de tipos junto a la lógica que los maneja, de manera que se pueda aplicar toda esa información a las tablas necesarias de manera fácil (muy facil).
Lo vemos con un ejemplo, para el cual utilizo un mapa utilizado en muchísimas partes de la aplicación estándar y que encapsula la lógica y los campos del manejo de direcciones en AX, el mapa AddressMap.
Lo primero que haremos será crear una tabla nueva (se puede usar una existente) y buscar en el AOT el mapa estándar AddressMap (Data Dictionary > Maps > AddressMap). Desde el nodo del mapa en el AOT se pueden seleccionar los Fields necesarios y arrastrarlos a la tabla para crear los campos.

Bien, ya podemos guardar la tabla. El siguiente paso es “mapear” los campos de la nueva tabla, con el mapa, demanera que le digamos qué campo del mapa es qué campo en la tabla (el nombre no tiene por qué ser el mismo, aunque es recomenable para facilitar su comprensión).
Para ello vamos al nodo AddressMap en el AOT y añadimos un nuevo elemento a su sub-nodo Mappings. Al hacerlo nos aparecen todos los campos del mapa, para asignarlos a los campos necesarios de la tabla. Si algún campo del mapa no existe en la tabla puede dejarse sin asignar.

Guardamos el mapa y con ésto ya tenemos los campos de nuestra tabla asignados al mapa estándar, vamos a probar este enlace para aplicar la lógica de direcciones a nuestra tabla, para lo cual anulamos el método modifiedField de la misma y añadimos una nueva línea:

Y con esto tenemos la lógica de direcciones implementada en nuestra tabla, de una manera totalmente optimizada ante futuros cambios del estándar, coherente con los tipos y las relaciones de los campos, evitando duplicar código, … Se puede probar insertando un nuevo registro y modificando el código postal, por ejemplo.
Comentarios serán bien recibidos, los mapas es una cosa que cuanto mas se utiliza, más util parece.
Dynamics AX and SSRS Learning Roadmap
Hace unos dias comentaba una entrada del blog de Saveen Reddy llamada Cómo ser productivo con SSRS y Dynamics AX 2009, donde nos anunciaban una serie de tutoriales para aprender SSRS (SQL
Server Reporting Services) desde la perspectiva del desarrollador de AX.

Pues bien, los tutoriales no se han hecho esperar y en estos dias han publicado un total de 6 entregas (ire actualizando con el resto para tenerlos localizados y poder seguirlos fácilmente):
Dynamics AX and SSRS Learning Roadmap
- Part 1 – Where to look for help and creating a sandbox
- Part 2 – Learning about the Report design surface
- Part 3 – A Cheap Source of Data: System.Reflection
- Part 4 – Adding Headers and Footers and an Introduction to Expressions
- Part 5 – Learning about the Design Environment and SandBox Clean-Up
- Part 6 – Improving the SandBox – Separating Code in a Referenced Assembly
Los capítulos consistenten en útiles videos y actividades propuestas para ir
cogiendo soltura con el entorno mediante casos prácticos, estoy deseando tener un rato para ponerme con ellos.
Cambio importante en SQL Server
El pasado viernes, en el blog del Dynamics AX Performance Team publicaron un interesante artículo comentando una actualización acumulativa publicada para SQL Server 2005 SP3 y 2008 SP1 que contiene cambios importantes para el rendimiento de Dynamics AX.
Se puede consultar con mas detalle el contenido de la actualización, y descargarla, desde este enlace.
Básicamente, la mejora viene gracias a la manera en la que el optimizador de SQL Server maneja las consultas parametrizadas, configuración que se ha cambiado con esta actualización para optimizar la manera en la que se analizan las consultas que Dynamics AX envía a la base de datos. La explicación técnica mas detallada la tenemos en este enlace.
Desde Microsoft aseguran haber conseguido mejoras de rendimiento realmente notables en determinadas configuraciones de AX, por lo que vale la pena echarle un vistazo.
