2012-07-12 12 views
6

TLDR: Perché le clausole group by sono disabilitate nelle ricerche quando il campo che utilizza la ricerca non è vuoto?Ricerca personalizzata e gruppo per

Desidero eseguire una ricerca personalizzata su un campo in un modulo. La tabella CTable assomiglia a questo:

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

L'cercare riguarda solo la colonna Val che è definita utilizzando un EDT con una relazione di base su di esso: Val == CTable.Val

La ricerca mi dà ovviamente una lista come questa:

A 
A 
A 
B 
C 

Andiamo a un gruppo per eliminare tutti i duplicati Come, ho pensato! Qualcosa sulla falsariga di:

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

Ora arriva lo strano comportamento che ho e il punto reale della mia domanda. Su un campo vuoto, il gruppo da sia correttamente eseguito e ottengo questo:

A 
B 
C 

Ora selezioniamo "A" nella ricerca, quindi eseguire la ricerca nuovo perché volevo cliccare su "B" invece . Il gruppo di è ora disabilitato per ragioni sconosciute e ottengo gli stessi risultati di ricerca come il primo che avevo prima.

Perché è così? Come posso superarlo?

risposta

5

Stessa domanda e risposta utile: http://dynamicsuser.net/forums/t/63438.aspx

È possibile disattivare questo comportamento impostando useLookupValues ​​in SysTableLookup false. Sfortunatamente non so esattamente perché AXE lo fa. Sospetto che cambi OrderMode in OrderBy.

+3

Nota che [risposte solo per collegamento] (http://meta.stackoverflow.com/tags/link-only-answers/info) sono scoraggiate, pertanto le risposte devono essere il punto finale di una ricerca di una soluzione (vs. ancora un altro scalo di riferimenti, che tendono a diventare stantii nel tempo). Si prega di considerare l'aggiunta di una sinossi autonoma qui, mantenendo il collegamento come riferimento. – kleopatra

2

Ho avuto lo stesso problema ieri.

Immagino che questo codice sia in "init", forse?

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

ho dovuto aggiungere il mio codice "GroupBy" (sopra) per il metodo executeQuery, becuase la seguente riga stava rimuovendo i groupBys dalla mia domanda (ho controllato questo utilizzando i punti di interruzione);

qbsSum.sortClear(); 

Se si utilizzano i breakpoint, mi aspetto che le opzioni di GroupBy vengano eliminate prima che la query venga eseguita nuovamente.

+0

No, non è nell'iniz. È nel metodo a livello di tabella che eseguirà la ricerca. Questo metodo accetta un parametro stringControl come parametro, utilizza un oggetto SysTableLookup per eseguire la ricerca in base a un oggetto query locale. Su questo oggetto query locale è presente la clausola Group By. Non esiste un metodo "executeQuery" visibile ma esiste un "performLookup" alla fine del metodo. – Max

+0

Mi aspetto che si verifichi lo stesso problema se funziona una volta finché la query non viene eseguita nuovamente, prima dell'esecuzione della query (ovvero quando si fa clic su B) aggiungere di nuovo il gruppo per codice a QueryBuildDataSource. – AnthonyBlake

1

Ho avuto lo stesso problema. Questo mi ha aiutato:
sysTableLookup.parmUseLookupValue(False);