Business Central临时表调用SetTableView后过滤规则未生效
问题原因与解决方案
问题出在你用了SetTableView方法——这个方法只是给页面设置过滤条件,并没有把页面的数据源替换成你的临时表。页面默认还是从物理表Cust. Ledger Entry读取数据,自然会显示全部记录。
要让页面显示临时表的内容,你需要用SetSourceTable方法把临时表绑定到页面上,替换默认的物理表数据源。
修正后的完整代码:
procedure DrillDown_Cust_Retail_Open() var CustomerLedgerEntry: Record "Cust. Ledger Entry"; TempCustomerLedgerEntries: Record "Cust. Ledger Entry" temporary; CustomerLedgerPage: Page "Customer Ledger Entries"; begin // Reset records and apply initial filter CustomerLedgerEntry.Reset(); CustomerLedgerEntry.SetRange("Open", true); // Fetch and insert filtered records into the temporary table if CustomerLedgerEntry.FindSet() then begin repeat TempCustomerLedgerEntries := CustomerLedgerEntry; TempCustomerLedgerEntries.Insert(); until CustomerLedgerEntry.Next() = 0; end; // Confirm filtered records Message('Filtered records count: %1', TempCustomerLedgerEntries.Count()); // Verify that the temporary table contains the correct records before opening the page if TempCustomerLedgerEntries.FindSet() then begin // 这里可以加临时表记录的验证逻辑,比如打印某个字段值 end else begin Message('No records found'); end; // 关键修改:用SetSourceTable绑定临时表作为页面数据源 CustomerLedgerPage.SetSourceTable(TempCustomerLedgerEntries); // 如果需要在临时表基础上再设置额外过滤,才需要搭配SetTableView(不过临时表已经是过滤后的,这里可选) // CustomerLedgerPage.SetTableView(TempCustomerLedgerEntries); Message('Opening page with filtered records.'); CustomerLedgerPage.Run(); end;
关键说明
SetSourceTable会将页面的数据源切换为传入的临时表实例,页面后续的所有数据操作都会基于这个临时表。- 如果你需要在临时表基础上再设置额外过滤,才需要搭配
SetTableView,否则单独用SetSourceTable就足够展示临时表的全部内容。
内容的提问来源于stack exchange,提问作者goryef
相关产品推荐
相关产品推荐

