Aquí un pedazo de código que me costó tiempo, es por si alguna vez necesitan conservar los filtros del usuario en un grid y al mismo tiempo aplicar y/o quitar un filtro por código.
En mi caso, necesitaba que dependiendo del valor de un checkbox se mostraran u ocultaran los registros en un grid dependiendo del valor de un campo especifico, pero además que se conservaran los filtros que el usuario hubiera puesto.
En el executequery del datasource del form:
public void
executeQuery()
{
//Instancia
para el queryRun del Datasource
//(es la
que va a traer los filtros del usuario)
Query
queryRunForProjRevenueTrans;
QueryBuildDataSource
qbdsForProjRevenueTrans;
QueryBuildRange
qbrForProjRevenueTrans;
//Instancia
para el query del Datasource
//(es la
que trae el query original)
Query
origQueryForProjRevenueTrans;
QueryBuildDataSource
origQbdsForProjRevenueTrans;
QueryBuildRange
origQbrForProjRevenueTrans;
boolean
updateOrigQuery;
//Revisa
si el query con filtros de usuario existe,
//sino
existe, toma el query original
if(ProjRevenueTrans_DS
!=null &&
ProjRevenueTrans_DS.queryRun() != null
&& ProjRevenueTrans_DS.queryRun().query() != null)
{
queryRunForProjRevenueTrans = ProjRevenueTrans_DS.queryRun().query();
updateOrigQuery = true;
}
else
queryRunForProjRevenueTrans = ProjRevenueTrans_DS.query();
//Limpiando
el range personalizado que se necesita por código
qbdsForProjRevenueTrans =
queryRunForProjRevenueTrans.dataSourceName("ProjRevenueTrans");
qbdsForProjRevenueTrans.clearRange(fieldnum(ProjRevenueTrans, GRWReferencia));
qbrForProjRevenueTrans =
qbdsForProjRevenueTrans.addRange(fieldnum(ProjRevenueTrans,
GRWReferencia));
//Actualizando
los querys en ambos casos (query o queryRun)
if(MostrarDetalles.value()
== 1) //Este
es mi control (checkbox) condicionante para poner un range por código
{
qbrForProjRevenueTrans.value(SysQuery::valueUnlimited());
if(updateOrigQuery)
{
origQbdsForProjRevenueTrans = ProjRevenueTrans_DS.query().dataSourceName("ProjRevenueTrans");
origQbdsForProjRevenueTrans.clearRange(fieldnum(ProjRevenueTrans,
GRWReferencia));
origQbrForProjRevenueTrans = origQbdsForProjRevenueTrans.addRange(fieldnum(ProjRevenueTrans,GRWReferencia));
origQbrForProjRevenueTrans.value(SysQuery::valueUnlimited());
}
}
else
{
qbrForProjRevenueTrans.value(SysQuery::valueEmptyString());
if(updateOrigQuery)
{
origQbdsForProjRevenueTrans = ProjRevenueTrans_DS.query().dataSourceName("ProjRevenueTrans");
origQbdsForProjRevenueTrans.clearRange(fieldnum(ProjRevenueTrans,
GRWReferencia));
origQbrForProjRevenueTrans = origQbdsForProjRevenueTrans.addRange(fieldnum(ProjRevenueTrans,GRWReferencia));
origQbrForProjRevenueTrans.value(SysQuery::valueEmptyString());
}
}
super();
}
Y en el modified de mi checkbox solo llamé un método que
hace el research del datasource
ProjRevenueTrans_ds.research(true);
Por último, te invito a que te unas a la página de facebook recién creada para estar al día con las actualizaciones del blog y que podamos tener más comunicación. La meta? es hacer la comunidad de habla hispana mas grande sobre Dynamics Ax en cuestiones de desarrollo.
No hay comentarios.:
Publicar un comentario