2016-04-19 24 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