【问题标题】:SetAscending Business Central Sales Order ListSetAscending Business Central 销售订单列表
【发布时间】:2021-03-31 09:29:33
【问题描述】:

我正在尝试在 Visual Studio Code 中使用 SetAscending for Business Central 销售订单列表页面。它可以设置销售订单“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 al


    【解决方案1】:

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

    在 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
    

    【讨论】:

    • 我将如何写 FindSet() 之后的部分,我想可能是 FindFirst 但似乎只过滤到我的最后一条记录。
    【解决方案2】:

    您有 3 种方法可用作 FIND

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

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

    FindSet = 查找您的过滤器的一组出现

    您可以将所有这些与repeatuntil 语句一起使用来循环记录。

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

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

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

    【讨论】:

    • 您能否提供示例代码,说明我将如何遍历记录以将列表页面指向顶部?我理解 FindSet() 但不确定找到集合后 then 语句中应该包含什么。
    • 更新我的答案
    • repeatFindFirstFindLast 一起使用对性能不利,因为它们只从数据库中检索一条记录。如果之后添加重复,则会导致额外的数据库往返。 FindSetFindFirst 的作用相同,这意味着它会在过滤器中找到第一条记录,但它还会检索额外数量的记录(实际的记录数量由 SQL Server 优化)。
    【解决方案3】:

    这对我有用。由于这是 Business Central 中的标准列表页面,因此我无法修改 SourceTableView。我必须使用两个触发器进行第一次排序并将光标移动到列表顶部。

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

    【讨论】:

      【解决方案4】:

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

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

      注意:我按日期时间对象排序。但线索是:OnOpenPage 触发器、SetCurrentKeyAscending 属性而不是SetAscending。这是将滚动条留在顶部的独特解决方案,至少对我来说是这样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-12
        相关资源
        最近更新 更多