Skip to content

Instantly share code, notes, and snippets.

@SCullman
Last active July 20, 2020 07:28
Show Gist options
  • Save SCullman/e3d6595d1ae1423268a87943f4f492fb to your computer and use it in GitHub Desktop.
Save SCullman/e3d6595d1ae1423268a87943f4f492fb to your computer and use it in GitHub Desktop.
Business Central: Contact Name with "Lastname, Firstname" instead "Firstname Lastname"
codeunit 50120 "ContactName"
{
local procedure CalculateName(var Contact: Record Contact) Name: Text[100]
var
NewSurname30: Text[30];
NewFirstname61: Text[61];
NewName93: Text[93];
begin
if Contact.Surname <> '' then
NewSurname30 := Contact.Surname;
if Contact."First Name" <> '' then
NewFirstname61 := Contact."First Name";
if Contact."Middle Name" <> '' then
NewFirstname61 := NewFirstname61 + ' ' + Contact."Middle Name";
if NewSurname30 <> '' then begin
if NewFirstname61 <> '' then
NewName93 := NewSurname30 + ', ' + NewFirstname61
else
NewName93 := NewSurname30;
end
else
NewName93 := NewFirstname61;
NewName93 := DelChr(NewName93, '<', ' ');
Name := CopyStr(NewName93, 1, MaxStrLen(Name));
end;
[EventSubscriber(ObjectType::Table, Database::Contact, 'OnBeforeCalculatedName', '', false, false)]
local procedure OnBeforeCalculatedName(var Contact: Record Contact; var NewName: Text[100]; var IsHandled: Boolean);
begin
NewName := CalculateName(Contact);
IsHandled := true;
end;
[EventSubscriber(ObjectType::Table, Database::Contact, 'OnBeforeNameBreakdown', '', false, false)]
local procedure OnBeforeNameBreakdown(var Contact: Record Contact; var IsHandled: Boolean);
var
TempName: Text[250];
NamePart: array[30] of Text[100];
FirstName250: Text[250];
i: Integer;
NoOfParts: Integer;
IsLastNameFirstName: Boolean;
begin
if Contact.Type = Contact.Type::Company then
exit;
TempName := Contact.Name;
IsLastNameFirstName := false;
if StrPos(TempName, ',') > 1 then begin
TempName := CopyStr(TempName, StrPos(TempName, ' ') + 1) + ' ' + CopyStr(TempName, 1, StrPos(TempName, ',') - 1);
TempName := DelChr(TempName, '<>', ' ');
IsLastNameFirstName := true;
end;
//copied from Contact Table
while StrPos(TempName, ' ') > 0 do begin
if StrPos(TempName, ' ') > 1 then begin
i := i + 1;
NamePart[i] := CopyStr(TempName, 1, StrPos(TempName, ' ') - 1);
end;
TempName := CopyStr(TempName, StrPos(TempName, ' ') + 1);
end;
i := i + 1;
NamePart[i] := CopyStr(TempName, 1, MaxStrLen(NamePart[i]));
NoOfParts := i;
Contact."First Name" := '';
Contact."Middle Name" := '';
Contact.Surname := '';
for i := 1 to NoOfParts do
if (i = NoOfParts) and (NoOfParts > 1) then
Contact.Surname := CopyStr(NamePart[i], 1, MaxStrLen(Contact.Surname))
else
if (i = NoOfParts - 1) and (NoOfParts > 2) then
Contact."Middle Name" := CopyStr(NamePart[i], 1, MaxStrLen(Contact."Middle Name"))
else begin
FirstName250 := DelChr(Contact."First Name" + ' ' + NamePart[i], '<', ' ');
Contact."First Name" := CopyStr(FirstName250, 1, MaxStrLen(Contact."First Name"));
end;
// End of copy
if not IsLastNameFirstName then
Contact.Name := CalculateName(Contact);
IsHandled := true;
end;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment