Last active
July 20, 2020 07:28
-
-
Save SCullman/e3d6595d1ae1423268a87943f4f492fb to your computer and use it in GitHub Desktop.
Business Central: Contact Name with "Lastname, Firstname" instead "Firstname Lastname"
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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