2012-07-12 10 views
6

TLDR: ¿Por qué las cláusulas group by están deshabilitadas en las búsquedas cuando el campo que utiliza la búsqueda no está vacío?Búsqueda personalizada y grupo Por

Quiero hacer una búsqueda personalizada en un campo de un formulario. La tabla CTable se ve así:

Val Spec 
------------ 
A alpha 
A beta 
A gamma 
B delta 
C epsilon 

El mirar hacia arriba sólo se refiere a la columna de la Val que se define utilizando un EDT con una relación básica en él: Val == CTable.Val

Las operaciones de búsqueda, obviamente, me da una lista como esta:

A 
A 
A 
B 
C 

Vamos a un grupo para deshacerse de todos los duplicados Como, pensé! Algo a lo largo de las líneas de:

QueryBuildDataSource.orderMode(OrderMode::GroupBy); 
QueryBuildDataSource.addGroupByField(fieldNum(CTable, Val)); 

Ahora viene el extraño comportamiento que tengo y el punto real de mi pregunta. En un campo vacío, el grupo de se ejecuta correctamente y me sale esto:

A 
B 
C 

Ahora vamos a seleccionar "A" en la búsqueda, a continuación, realizar la búsqueda nuevo porque quería hacer clic en "B" en vez . El grupo por ahora está desactivado por razones desconocidas y obtengo los mismos resultados de búsqueda que tenía antes.

¿Por qué es así? ¿Cómo puedo superar eso?

Respuesta

5

misma pregunta y respuesta útil: http://dynamicsuser.net/forums/t/63438.aspx

Puede desactivar este comportamiento estableciendo useLookupValues ​​en SysTableLookup a falso. Lamentablemente, no sé exactamente por qué AX hace eso. Sospecho que cambia OrderMode a OrderBy.

+3

Tenga en cuenta que [las respuestas solo de enlace] (http://meta.stackoverflow.com/tags/link-only-answers/info) no se recomiendan, por lo que las respuestas deberían ser el punto final de una búsqueda de una solución (vs. otra escala más de referencias, que tienden a quedar obsoletas en el tiempo). Considere agregar una sinopsis independiente aquí, manteniendo el enlace como referencia. – kleopatra

2

Tuve el mismo problema ayer.

Supongo que este código está en "init" tal vez?

QueryBuildDataSource.orderMode(OrderMode::GroupBy); 
QueryBuildDataSource.addGroupByField(fieldNum(CTable, Val)); 

he tenido que añadir mi código "GroupBy" (arriba) con el método executeQuery, becuase la siguiente línea fue la eliminación de los groupBys de mi consulta (que marcó esta utilizando puntos de ruptura);

qbsSum.sortClear(); 

Si utiliza puntos de ruptura que se puede esperar se están limpiando sus opciones GroupBy antes de la consulta se ejecuta de nuevo.

+0

No, no está en el init. Está en el método a nivel de tabla que realizará la búsqueda. Este método toma un formulario stringControl como parámetro, usa un objeto SysTableLookup para realizar la búsqueda basada en un objeto de consulta local. Este objeto de consulta local tiene la Cláusula Group By. No hay un método visible de "executeQuery", pero hay una "performLookup" al final del método. – Max

+0

Supongo que tendrá el mismo problema si funciona una vez hasta que la consulta se ejecute de nuevo, antes de que se ejecute la consulta (es decir, cuando haga clic en B) agregue el grupo por código a QueryBuildDataSource nuevamente. – AnthonyBlake

1

Tuve el mismo problema. Esto me ayudó:
sysTableLookup.parmUseLookupValue(False);