Hi, Readers.
Today I would like to briefly talk about how to find field value by its text name. For example, we have a field in Customer with the name “E-mail”, is there any way to find its value using only text name “E-mail”?

You can find all field info in the Field Virtual Table. The Field virtual table (ID 2000000041) contains information about fields in database tables.
You can force Business Central to run the table by adding the ?table=2000000041 parameter to the URL, such as in the following example:
https://businesscentral.dynamics.com/d8f36038-1f93-4543-affc-5dc92b6ee871/Sandbox01?table=2000000041
Note: The text name of the field is FieldName, not Field Caption.

Okay, this time we need to use codeunit 701 “Data Type Management”.

There is FindFieldByName function in it.

Let’s look at a simple example, using the text name ‘E-Mail’ to find its value.

Test Video:
Source Code:
pageextension 50111 ZYCustCardExt extends "Customer Card"
{
trigger OnOpenPage()
var
DataTypeManagement: Codeunit "Data Type Management";
RecRef: RecordRef;
FldRef: FieldRef;
Cust: Record Customer;
begin
if Cust.Get(Rec."No.") then begin
if DataTypeManagement.GetRecordRef(Cust, RecRef) then
if DataTypeManagement.FindFieldByName(RecRef, FldRef, 'E-Mail') then
Message(FldRef.Value);
end;
end;
}
We can create a more generic function for this. Give it a try!!!😁

Source Code:
pageextension 50111 ZYCustCardExt extends "Customer Card"
{
trigger OnOpenPage()
var
Cust: Record Customer;
begin
if Cust.Get(Rec."No.") then begin
Message(FindFieldValueByTextName(Cust, 'E-Mail'));
end;
end;
local procedure FindFieldValueByTextName(RecVar: Variant; FieldName: Text[30]): Text
var
DataTypeManagement: Codeunit "Data Type Management";
RecRef: RecordRef;
FldRef: FieldRef;
begin
if DataTypeManagement.GetRecordRef(RecVar, RecRef) then
if DataTypeManagement.FindFieldByName(RecRef, FldRef, FieldName) then
exit(FldRef.Value);
end;
}
Note: If FindFieldByName function returns false, for example, the text name does not exist, a runtime error occurs when using FieldRef.Value.

Microsoft.Dynamics.Nav.Runtime.NavFieldRef variable not initialized.

END
Hope this will help.
Thanks for reading.
ZHU
コメント