我正在尝试在 Visual Studio Code 中使用 SetAscending for Business Central Sales Order List Page。它可以将销售订单设置为“No”。字段降序但是它不会将滚动条重置到页面顶部。我试过将它添加到多个地方并且它对页面进行排序但没有滚动条更新。我可能缺少什么代码?
我将其添加到的地方: 销售订单列表页面扩展 - OnAfterGetRecord 和 OnAfterGetCurrRecord 销售订单列表页面事件 - OnOpenPageEvent、OnAfterGetRecordEvent 和 OnAfterGetCurrRecordEvent
trigger OnAfterGetCurrRecord()
begin
rec.SetCurrentKey("Document Type", "No.");
rec.SetAscending("No.", false);
end
您必须告诉页面导航到新的第一条记录。
在 OnOpenPage 触发器中,您执行以下操作:
Rec.SetCurrentKey("Document Type", "No.");
Rec.SetAscending("No.", false);
if Rec.FindSet() then; // use if-then to avoid error if there are no records within the filter
您有 3 种方法可以用作 FIND
FindFirst
= 找到过滤器的第一次出现
Findlast
= 找到最后一次出现的过滤器
FindSet
= 找到一组出现的过滤器
您可以将它们全部与
repeat
和 until
语句一起使用以循环记录。
FindFirst
和FindSet
对于Repeat
和Until
的区别在于FindSet
找到一组寄存器而FindFirst
只找到一个所以FindSet
它更高效。
针对您的情况 您需要修改属性 sourceTableView。这是一个页面属性。 FindSet 用于页面列表中不用于 DataSourceTable 的变量。
在您的表中创建一个键,然后将此键放入页面的 sourceTableView 属性中。
这对我有用。因为这是 Business Central 中的标准列表页面,所以我无法修改 SourceTableView。我不得不使用两个触发器来首先排序并将光标移动到列表的顶部。
trigger OnAfterGetRecord()
begin
rec.SetCurrentKey("Document Type", "No.");
rec.SetAscending("No.", false);
end;
trigger OnOpenPage()
begin
rec.FindLast();
end;
我正在 learn.microsoft.com 上测试答案并阅读有关该主题的内容,但唯一有效的技巧如下:
trigger OnOpenPage()
begin
Rec.SetCurrentKey(SystemCreatedAt);
Rec.Ascending := false;
end;
注意: 我正在按日期时间对象排序。但线索是:
OnOpenPage
触发器,SetCurrentKey
和Ascending
属性而不是SetAscending
。这是将滚动条留在顶部的独特解决方案,至少对我而言。
如果您使用 Page.RUN 以编程方式打开页面,这也有效:
procedure ShowYTDSalesOrders(DateFilter: Text)
var
salesHeader: Record "Sales Header";
begin
salesHeader.RESET;
salesHeader.SETRANGE("Document Type", salesHeader."Document Type"::Order);
salesHeader.SetFilter("Order Date", DateFilter);
salesHeader.SetCurrentKey("Order Date");
salesHeader.Ascending(false);
salesHeader.SetAscending("Order Date", false);
if salesHeader.FindSet() then
PAGE.RUN(PAGE::"Sales Order List", salesHeader);
end;