jueves, 31 de agosto de 2017

Depurar un informe Report Data Provider en AX2012 R3

En una entrada antigua del blog, hablábamos sobre como depurar código desde Visual Studio en AX2012 (que podéis ver aquí). Este proceso es válido para cualquier código que se ejecute en CIL (Common Intermediate Language), pero debemos tener en cuenta algunas consideraciones para depurar las clases RDP (usadas para desarrollar informes).
El principal inconveniente radica en que los informes RDP se basan en tablas temporales o en memoria, haciendo que no se puedan depurar directamente.
Vamos a ver cómo podemos solucionar este inconveniente y depurar nuestro informe RDP.
Primero debemos asegurarnos de tener permisos para depurar en el servidor actual, por lo que nuestro usuario debe ser miembro del grupo Microsoft Dynamics AX Debugging Users. Y revisar todo lo explicado en mi anterior post.
En la clase que ejecuta el RDP debemos cambiar:
//class TestReportDP extends SRSReportDataProviderBase
class TestReportDP extends SrsReportDataProviderPreProcess
Con esto conseguimos que el informe procese primero los datos, y por último muestre el informe por pantalla. Así podremos acceder a los datos con el depurador.
Debemos asegurarnos también que el método processReport() contenga la siguiente llamada:
Tabla_Temporal.setConnection(this.parmUserConnection());
Por último, tenemos modificar las propiedades de la tabla temporal:
  • CreatedBy = Yes
  • CreatedTransactionId = Yes
  • TableType = Regular
Con estos cambios, ya podemos depurar el código de la clase que procesa los datos del informe.

viernes, 13 de enero de 2017

Rellenar con 0 un texto en AX2012

AX2012 nos proporciona una manera fácil de añadir caracteres extra a una cadena de texto. Imaginemos que necesitamos representar una secuencia FV-#### dentro de AX. Necesitamos entonces incrementar un contador para después almacenarlo o mostrarlo con un formato tipo "FV-0001", "FV-0002" etc. Será necesario entonces rellenar el contador con ceros.

Podemos utilizar los métodos strRFix () y strLFix () para lograr esto.

    
// ------------------------------------------------(c) 2017 Last
// System: Microsoft Dynamics AX 2013 R3 CU12
// Description:     JOB de ejemplo para rellenar con 0
// Creator:         Juan Ruiz Romero
// Creation date:   13.01.2017
// -----------------------------------------------------------------
// -----------------------------------------------------------------
static void testRellenar0(Args _args)
{
    int i = 1;
    str cadena;
    str resultado;
    
    /*Creamos un string, de longitud 4, con el valor de i y rellenamos con 0*/    
    cadena = strRFix(int2str(i), 4, "0");
    resultado = strFmt("FV-%1", cadena);    
    info(resultado);
    
    cadena = strLFix(int2str(i), 4, "0");
    resultado = strFmt("FV-%1", cadena);    
    info(resultado);
}

Esto llenará resultado con FV-0001. Si usamos strLFix en lugar de strRFix, se rellenará con 0 a la derecha, dando como resultado FV-1000.