Ir para conteúdo
  • Cadastre-se

dev botao

Sugestão/Pedido: tornar alterar visibilidade do campo fBancoClass para "protected".


Marcelo R
Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 445 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde,

Existem inúmeras factoring's e "financeiras" espalhadas pelo Brasil.

Normalmente elas recebem informações via arquivo, que é na maioria das vezes a cópia de algum formato de boleto já existente(ex: banco bradesco) com pequenas modificações..

Para não perder tempo reescrevendo tudo, uso a técnica de "herança", por exemplo se a base do formato do arquivo for o bradesco eu escrevo um herdeiro do mesmo, com alterações que quero:

 

TRICABancoGrafeno = class(TACBrBancoBradesco)
    private

    public
      Constructor create(AOwner: TACBrBanco);
      procedure GerarRegistroHeader400(NumeroRemessa : Integer; ARemessa:TStringList); override;
      procedure GerarRegistroTransacao400(ACBrTitulo : TACBrTitulo; aRemessa: TStringList); override;
  end;

  TRICABancoAnnex = class(TACBrBancoBradesco)
    private
    public
      procedure GerarRegistroHeader400(NumeroRemessa : Integer; ARemessa:TStringList); override;
      procedure GerarRegistroTransacao400(ACBrTitulo : TACBrTitulo; aRemessa: TStringList); override;
  end;

Como "novo banco" não é 'nativo' do acbr, preciso alteralo em tempo de execução, usando a técnica de class hack:

   TBoletoHack = class(TACBrBanco)
     public
   end;

........................... na implementação .................

  if pSQL.FieldByName('N_BANCO').AsString = '274' then
  begin
    TBoletoHack(fGeradorBoleto.Banco).fBancoClass := nil;
    TBoletoHack(fGeradorBoleto.Banco).fBancoClass := TRICABancoGrafeno.create(fGeradorBoleto.Banco);
  end;

  if pSQL.FieldByName('FORMATO_EXTRA').AsString = '001' then
  begin
    TBoletoHack(fGeradorBoleto.Banco).fBancoClass := nil;
    TBoletoHack(fGeradorBoleto.Banco).fBancoClass := TRICABancoAnnex.create(fGeradorBoleto.Banco);
  end;

porém para funcionar eu preciso ainda ter que ir no fonte do acbr para alterar a visibilidade do fbancoclass de private para "protected" toda vez que resintalo.

Seria de grande ajuda se esse campo ja viesse no "protected" ao invés de "private", creio que não prejudicaria ninguém.

 

 

 

 

contato[ [email protected] ] skype[ marcelo.delphi ] [ facebook ]

Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution

A ideia do componente em manter como Private, é evitar atribuições inválidas... Ou A.V. se for atribuído um objeto que não seja corretamente gerenciado

O objeto é criado, quando o código de Banco é atribuído...

Você está usando esse recurso, para implementar novos Bancos ? Se SIM, porque não criar uma classe dele, e enviar ao ACBr, para inclusão nos fontes ?

  • Curtir 2
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
Em 01/02/2023 at 18:45, Daniel Simoes disse:

A ideia do componente em manter como Private, é evitar atribuições inválidas... Ou A.V. se for atribuído um objeto que não seja corretamente gerenciado

O objeto é criado, quando o código de Banco é atribuído...

Você está usando esse recurso, para implementar novos Bancos ? Se SIM, porque não criar uma classe dele, e enviar ao ACBr, para inclusão nos fontes ?

opa chefe!!

fosse só banco seria ok proceder dessa forma,

o problema são as factories que existem aos milhares, elas pegam algum formato de banco existente e "penduram" informações.

entendi a questão ai ao A.V.

contato[ [email protected] ] skype[ marcelo.delphi ] [ facebook ]

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 445 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.