2016-04-19 51 views
3

我目前運行與以下情況的問題在網格中的記錄:突出顯示形式開放

我有執行靜態方法「inventTransferOrder」右擊事件。在我有下面的代碼:

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

args.record(invTransLine); 

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

在窗體的(InventTransferOrders奠定菜單項InventTransferOrder後面)init方法,我執行以下代碼:

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)); 

這是做究竟是它應該做什麼:它使用數據源'InventTransferLine'過濾網格到具有匹配的LineNum的一條記錄。

與此相反,我需要顯示所有記錄(在InventTransferLine被預過濾,只顯示該選中後的InventTransfer記錄線)一個記錄與匹配LINENUM應該強調使用戶可以立即開始使用該行。

任何人都可以幫我解決這個問題嗎?

我用下面的代碼,但它(視覺)不會做任何事情:

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

我會很感激的任何幫助。

非常感謝和親切的問候

回答

2

這是一個計時問題。覆蓋InventTransferLine數據源的executeQuery方法,並在那裏放置一個斷點。在您編寫修改的方法中,還要在init方法中放置一個斷點。你會看到init中的斷點先被命中,然後在executeQuery中斷點。這意味着executeQuery會刪除您之前完成的所有選擇和標記。

如果您在super()調用後將您的修改置於executeQuery方法中,則應保留您的選擇和標記。當然你不想每次調用executeQuery時都要執行這個修改,所以你將不得不添加一些額外的邏輯。

+0

哇,這是一個非常簡單明瞭的解決方案。我只是將方法和方法調用從form/init移到了datasource/executeQuery,並且它工作得很好。 TIL executeQuery刪除以前的標記/選擇。萬分感謝! – Tekumi