You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:15:05