Software Development Kit
to the Delphi-Win32 and Free Pascal compilers
Home > Wiki > br/Id generation

br/Id generation

english (en) | português (br)

O metadata do PressObjects possui suporte para geração de Id através do banco de dados. Para tanto, basta indicar o nome do generator no metadata da classe:

class function TProduto.InternalMetadataStr: string;
begin
  Result := 'TProduto IsPersistent GeneratorName="gen_idproduto" (' +
   'Codigo: Integer GeneratorName="gen_codproduto";' +
   'Nome: String(80);' +
   ')';
end;

O Id será gerado apenas no momento de gravar o objeto no banco, caso o campo tenha conteúdo nulo (IsNull = True). Portanto, criar objetos sem gravá-los na base não irá alterar o conteúdo de seus respectivos generators.

O método PressOPFService.CreateDatabaseStatement (unit PressOPF) irá incluir cada generator diferente no metadata do banco de dados.

Para associar um único generator para todos os OIDs:

initialization
  PressModel.DefaultGeneratorName := 'gen_app';

Desta forma, todo OID que não possuir um generator declarado explicitamente, utilizará 'gen_app'.

Uma vez que o generator retorna um conteúdo numérico, é possível alterar todos os OIDs para um tipo inteiro (o padrão é String(32)). Então a declaração do generator pode ser alterada para:

initialization
  PressModel.DefaultGeneratorName := 'gen_app';
  PressModel.DefaultKeyType := TPressInteger;

O objeto PressModel encontra-se na unit PressSubject e a classe TPressInteger encontra-se na unit PressAttributes.