在 Dynamics NAV 2018 中,我尝试循环浏览页面中选定的记录,并在单击“Incluir en APP”按钮时将所有选定记录中的“App”列更改为 TRUE:
到目前为止我一直在尝试的是:
CurrPage.SETSELECTIONFILTER(Rec);
REPEAT
Rec.App := TRUE;
Rec.MODIFY;
UNTIL Rec.Next := 0;
但这将修改所有显示的记录,而不是所有选定的记录。
也在没有
CurrPage.SETSELECTIONFILTER(Rec);
的情况下进行了测试,但没有什么区别。
如何只循环选定的记录?
首先,SETSELECTIONFILTER中的参数不应该是Rec。可以是,但不应该。因为这个函数会将filter放在作为参数传递的变量中。因此,在您的情况下,代码完成后,您的页面最终应该仅过滤到选定的记录(使用标记)。当然,您毕竟可以重置rec上的过滤器,但这也会重置用户过滤器(之前可能已应用)。你不想惹麻烦。所以只需使用另一个相同类型的变量即可。
其次,您的代码(可能)无法工作,因为您在 SETSELECTIONFILTER 之后没有执行 findset 操作。或者如果您忘记提及此页面上没有其他内容(例如它是临时表),则应该以其他方式工作。但请记住第一点。
第三,编码的最佳方法是
CurrPage.SETSELECTIONFILTER(Rec1);
Rec1.Findset;
REPEAT
Rec1.App := TRUE;
Rec1.MODIFY;
UNTIL Rec1.Next := 0;
Currpage.update(false);
我们可以通过使用“全部修改”方法来消除使用循环语句的需要,并一次性更改所有过滤记录的所有 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-