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

Dynamics Nav如何通过Events创建可编辑字段并关联两张表?

实现步骤

1. 扩展Sales Header表新增可编辑EORI字段

先创建表扩展对象,给Sales Header加普通可编辑的EORI字段:

tableextension 50127 SalesHeaderEORIExt extends "Sales Header"
{
    fields
    {
        field(50127; EORI; Text[50])
        {
            DataClassification = CustomerContent;
            Editable = true;
        }
    }
}

2. 选择客户时自动填充EORI值

订阅Sell-to Customer No.字段的验证后事件,选完客户后自动从Customer表拉取EORI值填充到Sales Header的对应字段,解决非FlowField无法自动取值的问题:

codeunit 50128 EORIEventSubscriber
{
    [EventSubscriber(ObjectType::Table, Database::"Sales Header", 'OnAfterValidateEvent', 'Sell-to Customer No.', false, false)]
    local procedure OnAfterValidateSellToCustomerNo(var Rec: Record "Sales Header"; var xRec: Record "Sales Header"; CurrFieldNo: Integer)
    var
        Customer: Record Customer;
    begin
        if Rec."Sell-to Customer No." = '' then begin
            Rec.EORI := '';
            exit;
        end;
        if Customer.Get(Rec."Sell-to Customer No.") then
            Rec.EORI := Customer.EORI;
    end;

3. 销售发票页修改EORI后自动同步更新Customer和EORI表

同上面的代码单元,新增EORI字段的验证后事件订阅,修改发票上的EORI值时自动回写到Customer表和自定义的EORI Table:

[EventSubscriber(ObjectType::Table, Database::"Sales Header", 'OnAfterValidateEvent', 'EORI', false, false)]
    local procedure OnAfterValidateSalesHeaderEORI(var Rec: Record "Sales Header"; var xRec: Record "Sales Header"; CurrFieldNo: Integer)
    var
        Customer: Record Customer;
        EORITable: Record "EORI Table";
    begin
        if Rec."Sell-to Customer No." = '' then
            exit;
        // 更新Customer表字段
        if Customer.Get(Rec."Sell-to Customer No.") then begin
            Customer.EORI := Rec.EORI;
            Customer.Modify(true);
        end;
        // 同步更新自定义EORI表
        if EORITable.Get(Rec."Sell-to Customer No.") then begin
            EORITable.EORI := Rec.EORI;
            EORITable.Modify(true);
        end else begin
            EORITable.Init();
            EORITable.Customer_No := Rec."Sell-to Customer No.";
            EORITable.EORI := Rec.EORI;
            EORITable.Insert(true);
        end;
    end;
}

4. 扩展销售发票页面显示EORI字段

创建页面扩展,把EORI字段加到客户名称下方:

pageextension 50129 SalesInvoiceEORIExt extends "Sales Invoice"
{
    layout
    {
        addafter("Sell-to Customer Name")
        {
            field(EORI; Rec.EORI)
            {
                ApplicationArea = All;
                Editable = true;
                Caption = 'EORI No.';
            }
        }
    }
}

可选优化

你现有Customer表扩展中的TableRelation = "EORI Table".EORI配置逻辑有误,EORI表是按客户号为唯一键,建议修改为客户维度的关联,或者补充Customer表EORI字段的验证事件,同步更新EORI表的对应记录,保证两边数据一致。


内容的提问来源于stack exchange,提问作者SadCoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:36:03