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
相关产品推荐
相关产品推荐

