Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

  • Consultores
Postado

Olá pessoal,

Fizemos uma alteração no retorno dos métodos e com isso vai ocorrer uma quebra de código.

A motivação dessa alteração foi simplificar a codificação do lado do desenvolvedor e evitar o vazamento de memória, como foi detectado por alguns.

Desculpa pelo transtorno mas estamos trabalhando para tornar o novo componente cada vez melhor.

 

Para exemplificar essas mudanças vou apresentar aqui o antes e o depois referente ao método ConsultarSituacao.

Antes da alteração: Era necessário definir uma variável (Response por exemplo) para receber o retorno dos métodos, uma vez que eles eram uma função.

procedure TfrmACBrNFSe.btnConsultarSitLoteClick(Sender: TObject);
var
  Protocolo, Lote: String;
  Response: TNFSeConsultaSituacaoResponse;
begin
  Protocolo := '';
  if not (InputQuery('Consultar Lote', 'Número do Protocolo (Obrigatório):', Protocolo)) then
    exit;

  Lote := '';
  if ACBrNFSeX1.Configuracoes.Geral.Provedor in [proAssessorPublico,
      proEquiplano, proSP] then
  begin
    if not (InputQuery('Consultar Lote', 'Número do Lote:', Lote)) then
      exit;
  end;

  Response := ACBrNFSeX1.ConsultarSituacao(Protocolo, Lote); // <== antes era uma função

  ChecarResposta(Response);
end;

Depois da alteração: Como os métodos agora são procedure não é mais necessário definir uma variável para ler os retornos.

procedure TfrmACBrNFSe.btnConsultarSitLoteClick(Sender: TObject);
var
  Protocolo, Lote: String;
begin
  Protocolo := '';
  if not (InputQuery('Consultar Lote', 'Número do Protocolo (Obrigatório):', Protocolo)) then
    exit;

  Lote := '';
  if ACBrNFSeX1.Configuracoes.Geral.Provedor in [proAssessorPublico,
      proEquiplano, proSP] then
  begin
    if not (InputQuery('Consultar Lote', 'Número do Lote:', Lote)) then
      exit;
  end;

  ACBrNFSeX1.ConsultarSituacao(Protocolo, Lote); // <== agora é uma procedure

  ChecarResposta(tmConsultarSituacao);
end;

Outra coisa que mudou foi a procedure ChecarResposta que antes recebia a variável (Response por exemplo) e agora recebe como parâmetro um enumerador que é o tipo do método que foi executado, que no exemplo acima temos o tmConsultarSituacao.

 

Abaixo temos um fragmento do código da procedure ChecarResposta.

Antes da alteração:

procedure TfrmACBrNFSe.ChecarResposta(const Response: TNFSeWebserviceResponse);
var
  i: Integer;
begin
  memoLog.Clear;
  
  (...)
  if Response is TNFSeConsultaSituacaoResponse then
  begin
    memoLog.Lines.Add('Modo de Envio : ' + MetodoToStr(tmConsultarSituacao));
    memoLog.Lines.Add('Numero do Lote: ' + TNFSeConsultaSituacaoResponse(Response).Lote);
    memoLog.Lines.Add('Numero do Prot: ' + TNFSeConsultaSituacaoResponse(Response).Protocolo);
    memoLog.Lines.Add('Situação Lote : ' + TNFSeConsultaSituacaoResponse(Response).Situacao);
    memoLog.Lines.Add('Sucesso       : ' + BoolToStr(Response.Sucesso, True));
  end;
  
  (...)

  if Response.Erros.Count > 0 then
  begin
    memoLog.Lines.Add(' ');
    memoLog.Lines.Add('Erro(s):');
    for i := 0 to Response.Erros.Count -1 do
    begin
      memoLog.Lines.Add('Código  : ' + Response.Erros[i].Codigo);
      memoLog.Lines.Add('Mensagem: ' + Response.Erros[i].Descricao);
      memoLog.Lines.Add('Correção: ' + Response.Erros[i].Correcao);
      memoLog.Lines.Add('---------');
    end;
  end;

  if Response.Alertas.Count > 0 then
  begin
    memoLog.Lines.Add(' ');
    memoLog.Lines.Add('Alerta(s):');
    for i := 0 to Response.Alertas.Count -1 do
    begin
      memoLog.Lines.Add('Código  : ' + Response.Alertas[i].Codigo);
      memoLog.Lines.Add('Mensagem: ' + Response.Alertas[i].Descricao);
      memoLog.Lines.Add('Correção: ' + Response.Alertas[i].Correcao);
      memoLog.Lines.Add('---------');
    end;
  end;

  (...)

  pgRespostas.ActivePageIndex := 2;
end;

Depois da alteração:

procedure TfrmACBrNFSe.ChecarResposta(aMetodo: TMetodo);
var
  i: Integer;
begin
  memoLog.Clear;
  memoLog.Lines.Clear;
  
  with ACBrNFSeX1.WebService do
  begin
    case aMetodo of
      (...)

      tmConsultarSituacao:
        begin
          with ConsultaSituacao do
          begin
            memoLog.Lines.Add('Modo de Envio : ' + MetodoToStr(tmConsultarSituacao));
            memoLog.Lines.Add('Numero do Lote: ' + Lote);
            memoLog.Lines.Add('Numero do Prot: ' + Protocolo);
            memoLog.Lines.Add('Situação Lote : ' + Situacao);
            memoLog.Lines.Add('Sucesso       : ' + BoolToStr(Sucesso, True));
            memoLog.Lines.Add(' ');

            MemoResp.Lines.Text := XmlEnvio;
            memoRespWS.Lines.Text := XmlRetorno;
            LoadXML(XmlEnvio, WBResposta);

            if Erros.Count > 0 then
            begin
              memoLog.Lines.Add(' ');
              memoLog.Lines.Add('Erro(s):');
              for i := 0 to Erros.Count -1 do
              begin
                memoLog.Lines.Add('Código  : ' + Erros[i].Codigo);
                memoLog.Lines.Add('Mensagem: ' + Erros[i].Descricao);
                memoLog.Lines.Add('Correção: ' + Erros[i].Correcao);
                memoLog.Lines.Add('---------');
              end;
            end;

            if Alertas.Count > 0 then
            begin
              memoLog.Lines.Add(' ');
              memoLog.Lines.Add('Alerta(s):');
              for i := 0 to Alertas.Count -1 do
              begin
                memoLog.Lines.Add('Código  : ' + Alertas[i].Codigo);
                memoLog.Lines.Add('Mensagem: ' + Alertas[i].Descricao);
                memoLog.Lines.Add('Correção: ' + Alertas[i].Correcao);
                memoLog.Lines.Add('---------');
              end;
            end;
          end;
        end;

    end;

  end;

  (...)

  pgRespostas.ActivePageIndex := 2;
end;

 

Resumindo:

Os métodos: Emitir, Consultar (em geral), Cancelar e Substituir agora são procedures.

O componente tem agora uma classe chamada WebService e dentro dela uma classe para cada método e é nessas classes dos métodos que temos os campos que contem os retornos como por exemplo o numero do protocolo, a situação do lote, etc.

No programa exemplo temos a procedure ChecarResposta com a leitura de todos os parâmetros de todos os métodos.

  • Curtir 1
  • Obrigado 2
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

×
×
  • 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...