如何在页面中只循环选中的记录?

问题描述 投票:0回答:2

在 Dynamics NAV 2018 中,我尝试循环浏览页面中选定的记录,并在单击“Incluir en APP”按钮时将所有选定记录中的“App”列更改为 TRUE:

到目前为止我一直在尝试的是:

CurrPage.SETSELECTIONFILTER(Rec);
REPEAT
    Rec.App := TRUE;
    Rec.MODIFY;
UNTIL Rec.Next := 0;

但这将修改所有显示的记录,而不是所有选定的记录。

也在没有

CurrPage.SETSELECTIONFILTER(Rec);
的情况下进行了测试,但没有什么区别。

如何只循环选定的记录?

navision dynamics-nav
2个回答
2
投票

首先,SETSELECTIONFILTER中的参数不应该是Rec。可以是,但不应该。因为这个函数会将filter放在作为参数传递的变量中。因此,在您的情况下,代码完成后,您的页面最终应该仅过滤到选定的记录(使用标记)。当然,您毕竟可以重置rec上的过滤器,但这也会重置用户过滤器(之前可能已应用)。你不想惹麻烦。所以只需使用另一个相同类型的变量即可。

其次,您的代码(可能)无法工作,因为您在 SETSELECTIONFILTER 之后没有执行 findset 操作。或者如果您忘记提及此页面上没有其他内容(例如它是临时表),则应该以其他方式工作。但请记住第一点。

第三,编码的最佳方法是

CurrPage.SETSELECTIONFILTER(Rec1);
Rec1.Findset;
REPEAT
    Rec1.App := TRUE;
    Rec1.MODIFY;
UNTIL Rec1.Next := 0;
Currpage.update(false);


0
投票

我们可以通过使用“全部修改”方法来消除使用循环语句的需要,并一次性更改所有过滤记录的所有 App 布尔字段,只是为了提高代码可读性和效率

//set the filter for records                                        
 CurrPage.SETSELECTIONFILTER(Rec1);
//check if records available
 IF Rec1.Findset THEN
    Rec1.ModifyAll(App, True);

完成此操作将一次性修改您选择的所有记录!了解更多
https://learn.microsoft.com/en-us/previous-versions/dynamicsnav-2018-developer/MODIFYALL-Function--Record-

© www.soinside.com 2019 - 2024. All rights reserved.