procedure OnClassGenerated(Args: TClassGeneratedArgs);
var
Att: TCodeAttributeDeclaration;
I: Integer;
begin
for I := 0 to Args.CodeType.CustomAttributes.Count - 1 do
begin
Att := Args.CodeType.CustomAttributes.Items;
if (Att.Name = 'Id') and (Att.Arguments.Count > 1) then
begin
TCodeSnippetExpression(Att.Arguments.Items[1].Value)
.Value := 'TIdGenerator.SmartGuid';
end;
end;
end;
I took the freedom to extend Wagner's example to only change ID fields that are called "GUID" - maybe useful for users, who do not exclusively use GUIDs for PKs. (Note that there was a subtle small bug in Wagner's original script)
//SmartGuid for all GUID-type ID fields
for i := 0 to Args.CodeType.CustomAttributes.Count - 1 do
begin
LAttribute := Args.CodeType.CustomAttributes.Items[i]; //missing [i] in original script
if (LAttribute.Name = 'Id') and (LAttribute.Arguments.Count > 1) then
begin
LIdName := TCodeSnippetExpression(LAttribute.Arguments.Items[0].Value).Value;
if UpperCase(LIdName) = #39'FGUID'#39 then //important: there are quotes around the value!
begin
TCodeSnippetExpression(LAttribute.Arguments.Items[1].Value).Value := 'TIdGenerator.SmartGuid';
end;
end;
end;