1
Add a GetByName procedure to the FieldRef object. It is not uncommon to need to get the FieldRef associated with a given Field Name.

procedure GetByName(RecRef: RecordRef; FieldName: Text; var FldRef: FieldRef)
var
i: Integer;
begin
for i := 1 to RecRef.FieldCount do begin
FldRef := RecRef.FieldIndex(i);
if FldRef.Name = FieldName then begin
exit;
end;
end;
Clear(FldRef);
exit;
end;
Category: Development
STATUS DETAILS
Needs Votes
Ideas Administrator

Thank you for this suggestion! Currently this is not on our roadmap. We are tracking this idea and if it gathers more votes and comments we will consider it in the future.

Best regards,
Business Central Team

Comments

G

You should already be covered by codeunit 701 "Data Type Management". It has:

procedure FindFieldByName(RecordRef: RecordRef; var FieldRef: FieldRef; FieldNameTxt: Text): Boolean
var
"Field": Record "Field";
begin
Field.SetRange(TableNo, RecordRef.Number);
Field.SetFilter(ObsoleteState, '%1', Field.ObsoleteState::Removed);
Field.SetRange(FieldName, FieldNameTxt);

if not Field.FindFirst then
exit(false);

FieldRef := RecordRef.Field(Field."No.");
exit(true);
end;

procedure SetFieldValue(var RecordVariant: Variant; FieldName: Text; FieldValue: Variant): Boolean
var
RecRef: RecordRef;
FieldRef: FieldRef;
begin
if not GetRecordRef(RecordVariant, RecRef) then
exit;
if not FindFieldByName(RecRef, FieldRef, FieldName) then
exit;

FieldRef.Value := FieldValue;
RecRef.SetTable(RecordVariant);
exit(true);
end;

procedure ValidateFieldValue(var RecordVariant: Variant; FieldName: Text; FieldValue: Variant): Boolean
var
RecRef: RecordRef;
FieldRef: FieldRef;
begin
if not GetRecordRef(RecordVariant, RecRef) then
exit;
if not FindFieldByName(RecRef, FieldRef, FieldName) then
exit;

FieldRef.Validate(FieldValue);
RecRef.SetTable(RecordVariant);
exit(true);
end;

Category: Development

G

Sorry, original post was a brain cramp. Here is what I meant to post.

procedure GetByFieldName(TableNumber: Integer; FieldName: Text; var FldRef: FieldRef)
var
RecRef: RecordRef;
begin
RecRef.Close();
RecRef.Open(TableNumber);
GetFieldRefByFieldName(RecRef, FieldName, FldRef);
end;

procedure GetByFieldName(TableName: Text; FieldName: Text; var FldRef: FieldRef)
var
RecRef: RecordRef;
begin
GetRecordRefByTableName(TableName, RecRef);
GetFieldRefByFieldName(RecRef, FieldName, FldRef);
end;

procedure GetByFieldName(RecRef: RecordRef; FieldName: Text; var FldRef: FieldRef)
var
FieldInformation: Record Field;
begin
Clear(FieldInformation);
FieldInformation.Reset();
FieldInformation.SetRange(TableNo, RecRef.Number);
FieldInformation.SetRange(FieldName, FieldName);
if FieldInformation.FindFirst() then;
FldRef := RecRef.Field(FieldInformation."No.");
end;

Category: Development