设置升序业务中心销售订单列表

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

我正在尝试在 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

visual-studio-code dynamics-nav dynamics-business-central dynamics-al
5个回答
4
投票

您必须告诉页面导航到新的第一条记录。

在 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

1
投票

您有 3 种方法可以用作 FIND

FindFirst
= 找到过滤器的第一次出现

Findlast
= 找到最后一次出现的过滤器

FindSet
= 找到一组出现的过滤器

您可以将它们全部与

repeat
until
语句一起使用以循环记录。

FindFirst
FindSet
对于
Repeat
Until
的区别在于
FindSet
找到一组寄存器而
FindFirst
只找到一个所以
FindSet
它更高效。

针对您的情况 您需要修改属性 sourceTableView。这是一个页面属性。 FindSet 用于页面列表中不用于 DataSourceTable 的变量。

在您的表中创建一个键,然后将此键放入页面的 sourceTableView 属性中。


0
投票

这对我有用。因为这是 Business Central 中的标准列表页面,所以我无法修改 SourceTableView。我不得不使用两个触发器来首先排序并将光标移动到列表的顶部。

    trigger OnAfterGetRecord()
    begin
        rec.SetCurrentKey("Document Type", "No.");
        rec.SetAscending("No.", false);
    end;

    trigger OnOpenPage()
    begin
        rec.FindLast();
    end;

0
投票

我正在 learn.microsoft.com 上测试答案并阅读有关该主题的内容,但唯一有效的技巧如下:

    trigger OnOpenPage()
    begin
        Rec.SetCurrentKey(SystemCreatedAt);
        Rec.Ascending := false;
    end;

注意: 我正在按日期时间对象排序。但线索是:

OnOpenPage
触发器,
SetCurrentKey
Ascending
属性而不是
SetAscending
。这是将滚动条留在顶部的独特解决方案,至少对我而言。


0
投票

如果您使用 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;
© www.soinside.com 2019 - 2024. All rights reserved.