Software Development Kit
to the Delphi-Win32 and Free Pascal compilers
Home > Wiki > br/Customizações do OPF

br/Customizações do OPF

english (en) | português (br)

Customizar o DDL ou DML gerado pelo OPF

Todos os serviços do PressObjects podem ser customizados. Para alterar o SQL gerado pelo OPF, registre um novo serviço que herde da classe original.

O exemplo abaixo apresenta a declaração de classes para alterar o Broker para SQLdb com objetivo de incluir um collate nos atributos string e memo para banco Interbase/Firebird. Para utilizar o serviço adicione a unidade OPFSQLdbBroker ao projeto.

Unidade com novo DDLBuilder para Interbase/Firebird:

unit OPFIBFbBroker;

interface

uses
  PressOPFStorage, PressIBFbBroker;

type
  TOPFIBFbDDLBuilder = class(TPressIBFbDDLBuilder)
  public
    function CreateFieldStatement(AFieldMetadata: TPressOPFFieldMetadata): string; override;
  end;

implementation

uses
  PressSubject;

function TOPFIBFbDDLBuilder.CreateFieldStatement(
  AFieldMetadata: TPressOPFFieldMetadata): string;
begin
  Result := inherited CreateFieldStatement(AFieldMetadata);
  if AFieldMetadata.DataType in [attAnsiString, attMemo] then
    Result := Result + ' character set iso8859_1 collate pt_br';
end;

end.


Unidade com classes e registro do novo broker herdado do SQLdb do Press. O registro deste Broker assegura seu uso no lugar do broker original:

unit OPFSQLdbBroker;

interface

uses
  PressOPFMapper, PressOPFSQLBuilder, PressSQLdbBroker;

type
  TOPFSQLdbBroker = class(TPressSQLdbBroker)
  protected
    function InternalMapperClass: TPressOPFObjectMapperClass; override;
  end;

  TOPFSQLdbMapper = class(TPressSQLdbObjectMapper)
  protected
    function InternalDDLBuilderClass: TPressOPFDDLBuilderClass; override;
  end;

implementation

uses
  PressIBFbBroker,
  OPFIBFbBroker;

function TOPFSQLdbBroker.InternalMapperClass: TPressOPFObjectMapperClass;
begin
  Result := TOPFSQLdbMapper;
end;

function TOPFSQLdbMapper.InternalDDLBuilderClass: TPressOPFDDLBuilderClass;
begin
  Result := inherited InternalDDLBuilderClass;
  if Result = TPressIBFbDDLBuilder then
    Result := TOPFIBFbDDLBuilder;
end;

initialization
  TOPFSQLdbBroker.RegisterService;

finalization
  TOPFSQLdbBroker.UnregisterService;

end.