Mostrando las entradas con la etiqueta Dynamics AX. Mostrar todas las entradas

Microsoft MVP 2018

Llegó la renovación por otro año más:

Dear Christian Amado,

We’re once again pleased to present you with the 2018-2019 Microsoft Most Valuable Professional (MVP) award in recognition of your exceptional technical community leadership. We appreciate your outstanding contributions in the following technical communities during the past year:

· Business Solutions

Gracias a todas las personas que han colaborado conmigo y nos seguiremos viendo por aquí.

Asignar campo con valores predeterminados

Microsoft Dynamics AX El título es entendible para cumplir con el objetivo. Ahora bien, no es tan simple desde el punto de vista del proceso para lograr dicho objetivo.
 

Guardar cambios dentro de una clase en capa USR

Microsoft Dynamics AX En Microsoft Dynamics AX 2009, no es tan sencillo almacenar los cambios realizados dentro de un objeto, sobre todo si hablamos de una clase y estamos trabajando en la capa USR.

Es por eso, que debemos realizar dos pasos bien sencillos para poder guardar los cambios que hemos realizado en una clase que esté en otra capa que no sea USR.

Para lograr nuestro objetivo debemos realizar estos pasos:

  1. Abrir la clase completa, seleccionar el método que deseamos guardar y presionamos la tecla F8. Veremos que el método desaparece. Cerramos la ventana.
  2. Clic derecho sobre la clase > Complementos > Referencia cruzada > Actualizar. Listo!
Con estos dos sencillos pasos logramos almacenar nuestros cambios.

[AX 2012 R3 - How To] Agregar elementos a un contenedor

Microsoft Dynamics AX En Microsoft Dynamics AX un contenedor (container) se refiere a un vector (array). A diferencia de otros lenguajes, como C# por ejemplo, el vector acepta múltiple tipos de datos dentro de él, al mismo tiempo.

El siguiente código demuestra cómo agregar los elementos a un contenedor:
int          numero = 1;
str          cadena = "hola";
long         largo = 15684965;
container    contenedor;

contenedor += numero;
contenedor += cadena;
contenedor += largo;

// Imprimimos "hola"
info(strfmt("Vamos a saludar: %1", conPeek(contenedor, 2)));
De esta manera los elementos fueron agregados al vector (contenedor).

[AX 2012 R3 - How To] Obtener dimensión desde cuenta de proveedor

Microsoft Dynamics AX Cuando trabajamos con diario de facturas, en ocasiones, es necesario obtener la dimensión para la cuenta del proveedor y asignar el número de cuenta (AccountNum) como dimensión. Es por ello, que la siguiente línea de código puede ayudarnos a realizar esa tarea:
DimensionDynamicAccount    cuentaDinamica;
RecId                      recLedgerDimension, codProv = 50123657;
AccountNum                 numeroCuenta;

// Obtenemos el número de cuenta del proveedor
accountNum = VendTable::findRecId(codProv).AccountNum;

// Obtenemos la cuenta del proveedor. Si no existe el AX lo crea. Es decir, siempre retorna un valor
recLedgerDimension = DimensionStorage::getDynamicAccount(accountNum, LedgerJournalACType::Vend);

// recLedgerDimension posee el código de la dimensión que necesitamos agregar.
Con esto logramos obtener la dimensión para el número de cuenta del proveedor.

[AX 2012 R3 - How To] Crear dimensiones desde un container

Microsoft Dynamics AX En ocasiones no tenemos definidas las dimensiones en AX de manera directa, pero lo obtenemos de otras fuentes externas. Entonces, debemos crear un contenedor donde adicionamos los valores necesarios para convertirlos en una dimensión (generalmente hablamos de LedgerDimension).

Para lograr nuestro objetivo debemos escribir las siguientes líneas de código:
container    offsetDim;
RecId        recIdResult;

// Primero el valor a mostrar (Display Value).
// Luego la cuenta principal (Main account, generalmente el mismo que Display Value)
// Cantidad de dimensiones (número entero)
// Dimensiones separadas por comas: Nombre, Valor.
offsetDim   = ["1.2.01.01.0.0.01.001", "1.2.01.01.0.0.01.001", 2, "AGENCIA", "SUCURSAL1", "CENTRO_DE_COSTO", "101"];

//Básicamente en AX se mostraría "1.2.01.01.0.0.01.001-SUCURSAL1-101".

recIdResult = AxdDimensionUtil::getLedgerAccountId(offsetDim);

info(int642str(recIdResult));
Con esto logramos crear u obtener las dimensiones a partir de un contenedor.

[AX 2012 R3 - How To] Convertir un tipo genérico a un tipo específico

Microsoft Dynamics AX Muchas veces tenemos la necesidad de utilizar una variable genérica al momento de colocarlo como parámetro de manera que al utilizarlo podamos convertirlo al tipo de dato necesario para la ejecución de la aplicación/rutina con la que estamos trabajando.

En esta entrada voy a poner como ejemplo el uso de tablas para poder realizar una determinada acción.

En este caso, vamos a recibir como parámetro el tipo de dato Common y dentro del método vamos a convertir en la tabla CustTable o VendTable según sea necesario.

[AX 2012 R3 - How To] Crear un diario de factura con X++

Microsoft Dynamics AX En esta entrada mostraré cómo crear un diario de factura con X++, no es muy complicado pero debemos tener en cuenta una cierta cantidad de puntos para poder hacerlo de manera correcta. El código incluye comentarios.

[AX 2012 R3 - How To] Utilizar el objeto RecordInsertList

Microsoft Dynamics AX La clase RecordInsertList consiste en una lista de elementos (objetos previamente tratados) el cual permite insertar valores de una lista directamente a la base de datos, realizando esta tarea en una sola llamada sin realizar varios viajes.

Generalmente, vamos realizando algún cambio en un registro y ya lo actualizamos en la base de datos. Si son pocos registros, no hay drama. Pero si hablamos de miles de registros la performance se ve afectada. Donde más útil resulta esta clase es en los reportes.

Forma normal

void probarMetodo(RecId _recId, str _algunParametro) 
{ 
    TableTemp tabla, nuevaTabla;  
 
    while select tabla 
          where tabla.RecId == _recId 
    { 
        nuevaTabla.data(tabla); 
        nuevaTabla.CampoX = _algunParametro; 
        //Llama N veces al metodo insertar. Por cada registro inserta en base de datos.
        nuevaTabla.insert(); 
    } 
}

Utilizando la clase

void probarMetodo(RecId _recId, str _algunParametro) 
{ 
    RecordInsertList tempLista; 
    TableTemp tabla, nuevaTabla; 
 
    tempLista = new RecordInsertList(tableNum(TableTemp)); 
 
    while select tabla 
          where tabla.RecId == _recId 
    { 
        nuevaTabla.data(tabla); 
        nuevaTabla.CampoX = _algunParametro; 
        //Agrega el nuevo registro a la lista.
        tempLista.add(nuevaTabla); 
    } 
    //Inserta toda la lista en la base de datos. Bulk insert.
    tempLista.insertDatabase(); 
}

[AX 2012 R3 - How To] Reactivar Windows en máquinas virtuales para Demos

Microsoft Dynamics AX Cuando tenemos acceso al Partner Source de Microsoft, podemos descargar las máquinas virtuales para demos que se encuentra disponible en dicho sitio web.

Pero al culminar 180 días nos encontramos con la noticias de que nuestra licencia está vencida y ya no lo podemos utilizar.

Es ahí donde aparece esta opción de reactivar Windows para seguir utilizándolo por otros 180 días.

[Dynamics AX] Ciclo de Vida de productos

Microsoft Dynamics AX Uno de los principales problemas que escucho por aquí a la hora de realizar una propuesta comercial es el tema relacionado al soporte de un determinado producto.

Así que, en esta entrada, voy a salir del tema principal del blog que es desarrollo para explicar un poco sobre el ciclo de vida del producto Microsoft Dynamics Ax.
Esta información se encuentra disponible oficialmente en el sitio de Microsoft, pero me parece oportuno publicarlo aquí pues en dicho sitio la información no se encuentra agrupada.

[AX 2012 R3 - How To] Administrar excepciones desde X++

Microsoft Dynamics AX En AX, las excepciones funcionan de igual manera que en cualquier lenguaje de programación. Lo que deseo demostrar aquí es un bloque de excepciones completo desde X++ y otro que también pueda administrar errores que se producen en una librería DLL.

[AX 2012 R3 - How To] Index versus Index Hint

Microsoft Dynamics AX Debido a este punto he tenido algunas discusiones con mis colegas debido a las diferencias que existen entre estas cláusulas.

[AX 2012 R3 - How To] Importar/exportar proyectos en AOT

Microsoft Dynamics AX En esta entrada intentaré explicar cómo importar/exportar proyectos privados/compartidos en Microsoft Dynamics AX 2012 R3.

Cómo el título indica vamos a exportar (desde AX hacia el sistema de archivos del sistema) un proyecto de prueba. Una vez realizada la exportación, procederemos a importar el mismo en el AOT, demostrando cómo cumplir con el objetivo de esta entrada.

Exportar proyecto

Dentro del proyecto, hacemos clic derecho sobre el proyecto y seleccionamos "Exportar":
1

Luego seleccionamos la ruta donde vamos a exportar y seleccionamos los elementos a exportar:
2

Una vez terminado, hacemos clic en el botón "Aceptar" y la exportación estará lista en segundos/minutos dependiendo del contenido del mismo.

Importar proyecto

El proceso de importación es más simple aún. Se puede realizarlo desde el AOT haciendo clic en el ícono correspondiente. Marcamos la opción de "obtener objetos de aplicación y etiquetas":
3

Hacemos clic en "Aceptar" y la importación estaría correcta.

Generalmente, hay elementos que ya existen y el sistema pregunta si deseamos sobreescribir elementos. También, se compila el proyecto importado. Si hay errores debemos corregirlos luego de la importación.

Conclusión

De manera muy sencilla y en pocos pasos logramos realizar las dos tareas con el menor esfuerzo posible. Se debe tener en cuenta que si importamos en una misma capa todos los cambios existentes en dicha capa serán sobreescritos.

[AX 2012 R3 - How To] Implementar todos los reportes SSRS

Microsoft Dynamics AX Muchas veces queremos implementar todos los reportes de una vez. Se complica un poco, si no tenemos la herramienta correcta para realizar dicha tarea.

Básicamente se realiza la tarea ejecutando una línea de comandos desde el powershell de Microsoft Dynamics AX.

A modo de introducción podemos decir que existen unas cuantas formas de implementar un reporte en el servidor de informes (SSRS - SQL Server Reporting Services). Aquí trataremos los 3 más utilizados y necesarios.

[AX 2012 R3 - How To] Compilación CIL Completa

Microsoft Dynamics AX Esta tarea tiene estrecha relación con el .NET Framework, donde la idea central es compilar el código de Dynamics AX a CIL (Common Intermediate Language) que el .NET Framework pueda utilizar.
Generalmente es necesaria la compilación CIL para los siguientes escenarios:
  • * Servicios AIF.
  • * Trabajos por lotes.
  • * Funciones .NET que reemplazan a funciones del X++.

[AX 2012 R3 - How To] Error TTS (Transaction Tracking)

Microsoft Dynamics AX Este tipo de errores nos aparecen cuando intentamos insertar, modificar o eliminar datos de una tabla.
Pues involucra a las transacciones realizadas en ellas.

El error (en inglés, para este caso) se puede visualizar de la siguiente manera: 1

[AX 2012 R3 - How To] Consumir servicios Web externos

Microsoft Dynamics AX En esta ocasión, voy a demostrar cómo consumir un servicio web desde AX. El artículo que se encuentra en el MSDN es muy bueno para empezar, pero no esa API de Bing ya no está disponible.

Básicamente, vamos a verificar si nuestro JSON es válido y el resultado lo mostraremos en el infolog del AX.

Prerrequisitos

Para completar este tutorial se necesita:
  1. Microsoft Visual Studio 2010+.
  2. Visual Studio Tools for Dynamics AX 2012.
  3. Librería JSON.NET.

[AX 2012 R3 - How To] Mover un objeto de una capa a otra

Microsoft Dynamics AX En ocasiones necesitamos migrar varios objetos de una capa a otra, ya sea porque nos hemos equivocado o simplemente porque es un requerimiento importante.

En este articulo, tomaremos como ejemplo objetos en la capa USR y lo llevaremos a la capa CUS.

[AX 2012 R3 - How To] Aplicar formato a archivo Excel

Microsoft Dynamics AX Este artículo tiene estrecha relación con el anterior. En el artículo anterior veíamos cómo exportar datos a Excel desde el Dynamics AX. En este caso aplicaremos el formato a la cabecera de la hoja y a las celdas.

Aquí quiero mostrar dos cosas: la primera, consiste en aplicar estilos y la segunda, aplicar formato de texto o numéricos a las celdas.