2016-04-19 11 views
3

Ich laufe zur Zeit in ein Problem mit der folgenden Situation:einen Datensatz Highlight offen

Ich habe einen Rechtsklick Ereignis, das eine statische Methode „inventTransferOrder“ ausführt. Indem ich habe den folgenden Code:

select firstOnly invTransLine 
where invTransLine.TransferId == invTrans.TransferId 
    && invTransLine.LineNum == invTransLineNum; 

args.record(invTransLine); 

new MenuFunction(menuitemDisplayStr(InventTransferOrder), MenuItemType::Display).run(args); 

in der die Form (InventTransferOrders, die sich hinter dem Menüpunkt InventTransferOrder legt) init-Methode Ich Ausführung den folgenden Code:

InventTransferLine  invTransLine; 
QueryBuildDataSource qbds; 
QueryBuildRange   qbr; 
; 

invTransLine = element.args().record(); 

qbds = InventTransferLine_Q.dataSourceTable(tableNum(InventTransferLine)); 
qbr = qbds.addRange(fieldNum(InventTransferLine, LineNum)); 
qbr.value(strFmt('%1', invTransLine.LineNum)); 

Dies tut genau was es tun soll: es filtert das Raster mit der Datenquelle 'InventTransferLine' zu dem einen Datensatz mit der passenden Zeilenzahl.

Im Gegensatz dazu, ich brauche alle Aufzeichnungen zeigen (die InventTransferLine nur die Leitungen für die InventTransfer Datensatz vorfiltriertem werden zu zeigen, die ausgewählt wird) ABER der ein Datensatz mit dem passenden LineNum sollte hervorgehoben so dass Ein Benutzer könnte sofort mit dieser Zeile arbeiten.

Kann mir jemand dabei helfen?

Ich habe den folgenden Code verwendet, aber es (visuell) tut nichts:

InventTransferLine_DS.findRecord(invTransLine); 
InventTransferLine_DS.mark(true); 

ich Hilfe schätzen würde.

Vielen Dank und freundliche Grüße

Antwort

2

Es ist ein Timing-Problem. Überschreiben Sie die executeQuery Methode der InventTransferLine Datenquelle und legen Sie dort einen Haltepunkt. Fügen Sie auch einen Haltepunkt in der init Methode, wo Sie Ihre Änderung geschrieben haben. Sie werden sehen, dass der Breakpoint in init zuerst und dann der Breakpoint in executeQuery getroffen wird. Dies bedeutet, dass executeQuery alle Auswahlen und Markierungen entfernt, die Sie zuvor vorgenommen haben.

Wenn Sie Ihre Änderung in die executeQuery Methode nach dem super() Anruf setzen, sollten Ihre Auswahl und Markierung bleiben. Natürlich möchten Sie diese Änderung nicht jedes Mal ausführen, wenn executeQuery aufgerufen wird. Sie müssen also zusätzliche Logik hinzufügen.

+0

Wow, das ist eine ziemlich einfache und klare Lösung. Ich habe gerade den Methoden- und Methodenaufruf von form/init nach datasource/executeQuery verschoben und es funktioniert einwandfrei. TIL executeQuery löscht die vorherige Markierung/Auswahl. Vielen Dank! – Tekumi