Buscar en este blog

sábado, 30 de enero de 2016

Lookup para dimensiones financieras de organización - Microsoft Dynamics Ax 2012 R2

Sabemos que existen 3 tipos de dimensiones financieras, las de sistema, de organización y las personalizadas. En un post anterior, vimos cómo hacer un lookup para las dimensiones personalizadas y en esta ocasión, les comparto el código para el lookup de las dimensiones de organización, que pueden ser centro de costo, departamento y unidad de negocio.

Por tanto, si queremos por ejemplo, mostrar en una pantalla de parámetros los valores de cada dimensione de organización para que el usuario pueda seleccionar un valor existente. Lo primero seria agregar nuestros campos a una tabla de parámetros, en este caso, voy agregar estos campos al form de parámetros de ventas y marketing, cada uno extendiendo del dato: DimValue



Posterior a esto, agregaría los campos de esta tabla al formulario de parámetros y sobreescribiria el método el lookup de cada campo.




Este método lookup, debe llamar a mi método nuevo en la tabla donde tengo mis campos creados de dimensiones, donde en este método se hace la búsqueda de los valores por cada dimension de organización. Aquí el ejemplo de los tres métodos lookup.

Centro de costo
public client static void lookupCentroCosto(FormStringControl _ctrl)
{
    Query                               query = new Query();
    SysTableLookup                      sysTableLookup;
    QueryBuildDataSource                queryBuildDataSource;

    sysTableLookup = SysTableLookup::newParameters( tableNum(OMOperatingUnit), _ctrl, true);

    sysTableLookup.parmUseLookupValue( false);
    sysTableLookup.addLookupfield( fieldNum(OMOperatingUnit, OMOperatingUnitNumber));
    sysTableLookup.addLookupfield( fieldNum(OMOperatingUnit, Name));
    queryBuildDataSource = query.addDataSource( tableNum(OMOperatingUnit));
    queryBuildDataSource.addSortField( fieldnum(OMOperatingUnit, OMOperatingUnitNumber));
    queryBuildDataSource.addRange( fieldNum(OMOperatingUnit, OMOperatingUnitType)).value(int2str (any2int(OMOperatingUnitType::OMCostCenter)));
    sysTableLookup.parmQuery(query);

    sysTableLookup.performFormLookup();
}


Departamento
public client static void lookupDepartamento(FormStringControl _ctrl)
{
    Query                               query = new Query();
    SysTableLookup                      sysTableLookup;
    QueryBuildDataSource                queryBuildDataSource;

    sysTableLookup = SysTableLookup::newParameters( tableNum(OMOperatingUnit), _ctrl, true);

    sysTableLookup.parmUseLookupValue( false);
    sysTableLookup.addLookupfield( fieldNum(OMOperatingUnit, OMOperatingUnitNumber));
    sysTableLookup.addLookupfield( fieldNum(OMOperatingUnit, Name));
    queryBuildDataSource = query.addDataSource( tableNum(OMOperatingUnit));
    queryBuildDataSource.addSortField( fieldnum(OMOperatingUnit, OMOperatingUnitNumber));
    queryBuildDataSource.addRange( fieldNum(OMOperatingUnit, OMOperatingUnitType)).value(int2str (any2int(OMOperatingUnitType::OMDepartment)));
    sysTableLookup.parmQuery(query);

    sysTableLookup.performFormLookup();
}


Unidad de negocio o BusinessUnit
public client static void lookupBusinessUnit(FormStringControl _ctrl)
{
    Query                               query = new Query();
    SysTableLookup                      sysTableLookup;
    QueryBuildDataSource                queryBuildDataSource;

    sysTableLookup = SysTableLookup::newParameters( tableNum(OMOperatingUnit), _ctrl, true);

    sysTableLookup.parmUseLookupValue( false);
    sysTableLookup.addLookupfield( fieldNum(OMOperatingUnit, OMOperatingUnitNumber));
    sysTableLookup.addLookupfield( fieldNum(OMOperatingUnit, Name));
    queryBuildDataSource = query.addDataSource( tableNum(OMOperatingUnit));
    queryBuildDataSource.addSortField( fieldnum(OMOperatingUnit, OMOperatingUnitNumber));
    queryBuildDataSource.addRange( fieldNum(OMOperatingUnit, OMOperatingUnitType)).value(int2str (any2int(OMOperatingUnitType::OMBusinessUnit)));
    sysTableLookup.parmQuery(query);

    sysTableLookup.performFormLookup();

}


Post relacionados:
Lookup para dimensiones financieras personalizadas
Consultas en tablas con ValidTimeState
Crear lookup en clase dialog



Y por cierto, acuerdate de darle click a algún anuncio si el post te sirvio de algo.


No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 

2 comentarios: