设置升序业务中心销售订单列表
SetAscending Business Central Sales Order List
我正尝试在 Visual Studio 代码中使用 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 的变量。
在您的 table 中创建一个键,然后将此键放入页面的 sourceTableView 属性 中。
这对我有用。因为这是 Business Central 中的标准列表页面,所以我无法修改 SourceTableView。我不得不使用两个触发器来首先排序并将光标移动到列表的顶部。
trigger OnAfterGetRecord()
begin
rec.SetCurrentKey("Document Type", "No.");
rec.SetAscending("No.", false);
end;
trigger OnOpenPage()
begin
rec.FindLast();
end;
我在 docs.microsoft.com 上测试答案并阅读有关此主题的内容,但唯一有效的技巧如下:
trigger OnOpenPage()
begin
Rec.SetCurrentKey(SystemCreatedAt);
Rec.Ascending := false;
end;
注意: 我正在按日期时间对象排序。但线索是:OnOpenPage
触发器,SetCurrentKey
和Ascending
属性而不是SetAscending
。这是将滚动条留在顶部的独特解决方案,至少对我而言。
我正尝试在 Visual Studio 代码中使用 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 的变量。
在您的 table 中创建一个键,然后将此键放入页面的 sourceTableView 属性 中。
这对我有用。因为这是 Business Central 中的标准列表页面,所以我无法修改 SourceTableView。我不得不使用两个触发器来首先排序并将光标移动到列表的顶部。
trigger OnAfterGetRecord()
begin
rec.SetCurrentKey("Document Type", "No.");
rec.SetAscending("No.", false);
end;
trigger OnOpenPage()
begin
rec.FindLast();
end;
我在 docs.microsoft.com 上测试答案并阅读有关此主题的内容,但唯一有效的技巧如下:
trigger OnOpenPage()
begin
Rec.SetCurrentKey(SystemCreatedAt);
Rec.Ascending := false;
end;
注意: 我正在按日期时间对象排序。但线索是:OnOpenPage
触发器,SetCurrentKey
和Ascending
属性而不是SetAscending
。这是将滚动条留在顶部的独特解决方案,至少对我而言。