Ir para conteúdo
  • Cadastre-se

dev botao

Homologação (Passo 51)


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

Recommended Posts

Postado

Olá a Todos!

Estou criando este tópico pois estou com problemas na homologação mais precisamente nos tópicos 35-36 | 37-38 e 51. 

Segundo orientação do pessoal de apoio da ACBr ajustei meu código logo após receber o ok do "Antonio Carlos" informar que deveria atualizar meu SVN que haviam conversado com o pessoal da setis e feito ajustes. Pois bem fiz a atualização e realizei um ajuste na unit ACBrTEFAPIComum.pas (incorporando ela ao meu projeto). Vide o código abaixo:

Citar

procedure TACBrTEFAPIComum.FinalizarTransacao(const Rede, NSU,
  CodigoFinalizacao: String; AStatus: TACBrTEFStatusTransacao);
var
  i: Integer;
  ATEFResp: TACBrTEFResp;
begin
  GravarLog( '    FinalizarTransacao( '+
             Rede+', '+
             NSU+', '+
             CodigoFinalizacao+', '+
             GetEnumName(TypeInfo(TACBrTEFStatusTransacao), integer(AStatus))+' )');

  {$IFDEF PASSO_35_36}
  fpTEFAPIClass.FinalizarTransacao(Rede, NSU, CodigoFinalizacao, tefstsSucessoManual);
  {$ELSE}
  {$IFDEF PASSO_37_38}
  fpTEFAPIClass.FinalizarTransacao(Rede, NSU, CodigoFinalizacao, tefstsErroDiverso);
  {$ELSE}
  {$IFDEF PASSO_51}
  fpTEFAPIClass.FinalizarTransacao(Rede, NSU, CodigoFinalizacao, tefstsErroEnergia);
  if TMensagens.MensagemPergunta('Simula Queda de Energia?', True, True) then
    TFuncoesSistema.FinalizarAplicacao;
  {$ELSE}
  fpTEFAPIClass.FinalizarTransacao(Rede, NSU, CodigoFinalizacao, AStatus);
  {$ENDIF}
  {$ENDIF}
  {$ENDIF}

  i := RespostasTEF.AcharTransacao(Rede, NSU, CodigoFinalizacao);
  if (i >= 0) then
  begin
    ATEFResp := fRespostasTEF[i];
    fRespostasTEF.AtualizarTransacaoComTerceiraPerna(ATEFResp);

    if Assigned(fQuandoFinalizarTransacao) then
    begin
      GravarLog('      QuandoFinalizarTransacao');
      fQuandoFinalizarTransacao(ATEFResp, AStatus);
    end;
  end;
end;

Após uma semana de espera a setis retornou informando que os passos 35-36 e 37-36 estavam ok mas o 51 ainda não estava ok.

Segue o pedido deles:

Citar

Boa tarde, Pedro (apoio ACBr).

Isso, a única coisa que faltou foi derrubar a aplicação, para simularmos uma queda de energia. O tipo de desfazimento enviado já está correto.

e o Pedro retornou para eles da seguinte forma:

Citar

Boa tarde, Srs. Tudo bem?
No caso, validei os logs do parceiro e consta exatamente o que é pedido no teste: um desfazimento por queda de energia. Poderia nos apontar o que está divergente? Há a necessidade de derrubar a aplicação?

Seguimos a seguinte lógica desde 2021: requisição de venda > aprovação > derrubar a aplicação (recentemente trocamos para um breakpoint na chamada PW_iConfirmation, pois fomos orientados a não derrubar mais a aplicação durante esse teste) > realiza a tratativa de desfazimento por queda de energia:

15:01:48:854 [PGWebLib.c] PW_iConfirmation(0x83131, 618503, 385, 966623, 3353, DEMO) <0>

15:01:48:931 ******************************

15:01:48:931 PWSRV_iSendConfirmation (0x83131, 618503, 385, 966623, DEMO)

Não sei como devo proceder para essa situação. Poderiam me ajudar?

  • Fundadores
Postado

Olá @edvilson.chaves, estive analisado os fontes, e as novas recomendações da Setis para o processo de homologação...

Vou aplicar um ajuste nos fontes, que pode facilitar esses testes... Por favor aguarde até o fim do dia, por novas interações nesse Post

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.

Postado (editado)

Que bom @Daniel Simoes agradeço pela ajuda, meu medo é que eles demorem mais uma semana para a resposta então estou acompanhando esse tópico como qualquer outra alteração no ticket #2601

Assim que tiverem novidades por favor me mantenham informado.

Obrigado.

Importante também que os vídeos referentes a essa situação sejam atualizados para facilitar a vida do desenvolvedor. Pois estes não estão de acordo com o que a setis está solicitando. 😉

Editado por edvilson.chaves
  • Fundadores
Postado

@edvilson.chaves, enviei ao SVN, alguns ajustes nos componentes e Demos do ACBr....

Commit [r30817]
Commit [r30818]

 

A Principal mudança seria no Demo...

Se você configurar o seu componente da seguinte Forma

image.png

ACBrTEFAPI1.TratamentoTransacaoPendente := tefpenPerguntar;
ACBrTEFAPI1.TratamentoTransacaoInicializacao := tefopiProcessarPendentes;

 

O Demo demonstrará como Exibir um Menu, permitindo ao Operador, escolher qual tratamento ele quer dar a Transação Pendente

image.png

 

Isso venceria fácil todos os testes do Roteiro (35/36, 37/38, 51)...
Mas não é o ideal para se aplicar em Produção...

Estou conversando com a Setis, para compreender melhor como devemos proceder no roteiro...

  • Curtir 1
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.

Postado (editado)

Bom dia!

Este foi o retorno passado pelo pessoal da setis para atender o passo 51.

Minha dúvida: no passo 51 devo continuar realizando o passo como demostrado no vídeo de treinamento onde devo colocar o breakpoint ou com essa nova implementação não se faz mais necessário esse procedimento.

1. realizo a primeira venda e a segunda em sequencia, sem que tenha que encerrar abruptamente a aplicação.

2. realizo a segunda venda e aguardo que apresente a mensagem de transação pendente?

 

Citar

Boa noite,

 

O passo 51 não está correto:

Foi realizado o reinício do sistema após a venda, ok. Porém, depois que o sistema subiu, foi disparada uma nova venda, que retornou erro de transação pendente e aí foi enviado um desfazimento manual da venda pendente. Segue evidência: 17:05:33:321 [PGWebLib.c] PW_iConfirmation(0x3231, 0000666853, 402, 916441, 3353, DEMO) <0>

 

Esse não é o comportamento esperado. Após o reinício do sistema, é necessário já realizar a chamada da função de confirmação, enviando um desfazimento por queda de energia. Não deve ser chamada uma venda que retorna erro de transação pendente.

Segue o passo a passo: em caso de queda de energia, é necessário enviar um desfazimento da transação. Como isso funciona? Quando o PW_iExecTransac retornar PWRET_OK (0), obter os parâmetros da confirmação através da função PW_iGetResult e salvar esses dados em um arquivo não-volátil. Depois, ler esse arquivo, chamar PW_iConfirmation com esses dados e, então, deletar o arquivo (esse procedimento deve ser realizado para confirmar qualquer transação). Na inicialização da automação, é necessário verificar se esse arquivo com os dados da confirmação está escrito. Em caso positivo, enviar o desfazimento da transação por queda de energia, PWCNF_REV_PWR_AUT (00083131h).

 

Editado por edvilson.chaves
  • Fundadores
Postado
26 minutos atrás, edvilson.chaves disse:

Minha dúvida: no passo 51 devo continuar realizando o passo como demostrado no vídeo de treinamento onde devo colocar o breakpoint ou com essa nova implementação não se faz mais necessário esse procedimento.

A Setis não tem acesso ao vídeo do ACBr...

Teremos uma reunião com eles, para compreender as novas necessidades

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.

  • Fundadores
Postado

Após a reunião com a Setis, apliquei um novo ajuste nos Demos do ACBrTEFAPI, para que não seja necessário, derrubar a aplicação nos testes 35 e 37...

Nesses testes temos que Confirmar ou Estornar uma transação manualmente... Agora isso pode ser reproduzido no Demo, desmarcando a opção "Confirmar Transação Automaticamente"

image.png

  ACBrTEFAPI1.ConfirmarTransacaoAutomaticamente := False;

 

Quando ela estiver desmarcada, no termino da transação, a aplicação perguntará se o Operador deseja Confirmar ou Estornar a transação...

Isso é feito através desse trecho de código, do Demo:

procedure TFormPrincipal.FinalizarVenda;
var
  MR: TModalResult;
begin
    //...trecho de código removido, para melhor  leitura... 
  
    StatusVenda := stsFinalizada;
    if not ACBrTEFAPI1.ConfirmarTransacaoAutomaticamente then
    begin
      MR := MessageDlg( 'Confirmação do TEF',
                        'Confirma a Transação ?', mtConfirmation,
                        [mbYes, mbNo], 0);
      if (MR = mrYes) then
        ACBrTEFAPI1.FinalizarTransacoesPendentes( tefstsSucessoManual )
      else
        ACBrTEFAPI1.FinalizarTransacoesPendentes( tefstsErroDiverso );

      AtualizarPagamentosVendaNaInterface;
    end;

Ou seja, inserimos um Dialogo com Sim ou Não, e Finalizamos a transação, com o Status apropriado, conforme a resposta do usuário...

 

  • Curtir 1
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.

  • Fundadores
Postado

Para simular a situação de queda de energia, seguida de desfazimento, do Teste 51 você pode aplicar a seguinte configuração

image.png

  ACBrTEFAPI1.TratamentoTransacaoInicializacao := tefopiCancelarOuEstornar;
  ACBrTEFAPI1.ConfirmarTransacaoAutomaticamente := True;

 

Além disso, insira um Break Point conforme indicado nos fontes do ACBrTEFAPIComum.pas

image.png

 

  • Derrube a aplicação quando chegar nesse Break Point...
  • Quando a aplicação subir novamente, ela já irá desfazer a Transação usando o Status PWCNF_REV_PWR_AUT, devido a configuração aplicada no componente

 

  • Obrigado 1
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.

  • 4 semanas depois ...
Postado (editado)
Em 29/09/2023 at 17:52, Daniel Simoes disse:

Após a reunião com a Setis, apliquei um novo ajuste nos Demos do ACBrTEFAPI, para que não seja necessário, derrubar a aplicação nos testes 35 e 37...

Nesses testes temos que Confirmar ou Estornar uma transação manualmente... Agora isso pode ser reproduzido no Demo, desmarcando a opção "Confirmar Transação Automaticamente"

image.png

  ACBrTEFAPI1.ConfirmarTransacaoAutomaticamente := False;

 

Quando ela estiver desmarcada, no termino da transação, a aplicação perguntará se o Operador deseja Confirmar ou Estornar a transação...

Isso é feito através desse trecho de código, do Demo:

procedure TFormPrincipal.FinalizarVenda;
var
  MR: TModalResult;
begin
    //...trecho de código removido, para melhor  leitura... 
  
    StatusVenda := stsFinalizada;
    if not ACBrTEFAPI1.ConfirmarTransacaoAutomaticamente then
    begin
      MR := MessageDlg( 'Confirmação do TEF',
                        'Confirma a Transação ?', mtConfirmation,
                        [mbYes, mbNo], 0);
      if (MR = mrYes) then
        ACBrTEFAPI1.FinalizarTransacoesPendentes( tefstsSucessoManual )
      else
        ACBrTEFAPI1.FinalizarTransacoesPendentes( tefstsErroDiverso );

      AtualizarPagamentosVendaNaInterface;
    end;

Ou seja, inserimos um Dialogo com Sim ou Não, e Finalizamos a transação, com o Status apropriado, conforme a resposta do usuário...

 

Aqui não ficou muito claro pra mim, no teste 35 na observação diz o seguinte: "A automação não pode confirmar nem desfazer a transação neste momento", no caso quando aparece o SIM ou NÃO qual das opções escolher, seria o NÃO do tefstsErroDiverso ? e a mesma pergunta para o teste 36? Já agradeço qualquer ajuda!

Editado por systronic
  • 2 semanas depois ...
  • Membros Pro
Postado
Em 29/09/2023 at 18:03, Daniel Simoes disse:

Para simular a situação de queda de energia, seguida de desfazimento, do Teste 51 você pode aplicar a seguinte configuração

image.png

  ACBrTEFAPI1.TratamentoTransacaoInicializacao := tefopiCancelarOuEstornar;
  ACBrTEFAPI1.ConfirmarTransacaoAutomaticamente := True;

 

Além disso, insira um Break Point conforme indicado nos fontes do ACBrTEFAPIComum.pas

image.png

 

  • Derrube a aplicação quando chegar nesse Break Point...
  • Quando a aplicação subir novamente, ela já irá desfazer a Transação usando o Status PWCNF_REV_PWR_AUT, devido a configuração aplicada no componente

 

Boa tarde Daniel.

 

Após atualizar o demo, notei que o delphi não passa por essas linhas e verificando, logo acima tem uma procedure com o mesmo nome. Após essa atualização, mudou alguma coisa na forma de fazer? estou pendente somente com esse passo 51.

  • Membros Pro
Postado

Bom dia Daniel.

E atualizei todos os fontes e notei que no acbrtefapiComum foi criado uma função nova FinalizarTransacao com mesmo nome e parâmetros diferentes, fiz o passo a passo do vídeo e ao compilar o demo, ele não passa no break point. 

Mudei o break point para a outra função e deu certo, porém ele não realiza o procedimento como tem que ser, me retornaram com o erro abaixo.

 Passo 51: Pelos logs, parece que você reiniciou o sistema para simular a queda de energia, até aí tudo certo. Porém, o resto do processo não está correto. Este teste não envolve transação pendente. Segue um passo a passo: em caso de queda de energia, é necessário enviar um desfazimento da transação. Como isso funciona? Quando o PW_iExecTransac retornar PWRET_OK (0), obter os parâmetros da confirmação através da função PW_iGetResult e salvar esses dados em um arquivo não-volátil. Depois, ler esse arquivo, chamar PW_iConfirmation com esses dados e, então, deletar o arquivo (esse procedimento deve ser realizado para confirmar qualquer transação). Na inicialização da automação, é necessário verificar se esse arquivo com os dados da confirmação está escrito. Em caso positivo, enviar o desfazimento da transação por queda de energia, PWCNF_REV_PWR_AUT (00083131h).

  • Fundadores
  • Solution
Postado
1 hora atrás, REGIS BENDER disse:

FinalizarTransacao

Esse método sempre existiu no ACBrTEFAPI

Para o 51 passar é fundamental que a configuração do componente esteja exatamente como descrito nesse tópico

 

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.

Postado
Em 14/11/2023 at 09:22, Daniel Simoes disse:

Esse método sempre existiu no ACBrTEFAPI

Para o 51 passar é fundamental que a configuração do componente esteja exatamente como descrito nesse tópico

 

Daniel bom dia, infelizmente na configuração que voce sugeriu ai nao mostra o menu, somente se escolher a opção - Perguntar - Processar Pendentes, por favor veja se é isso mesmo, porque tentei e não para no menu, so se mudar as opções!

image.png.700fec6887abad36673e0bc54feacacb.png

  • 5 semanas depois ...
Postado
Em 29/09/2023 at 17:52, Daniel Simoes disse:

Após a reunião com a Setis, apliquei um novo ajuste nos Demos do ACBrTEFAPI, para que não seja necessário, derrubar a aplicação nos testes 35 e 37...

Nesses testes temos que Confirmar ou Estornar uma transação manualmente... Agora isso pode ser reproduzido no Demo, desmarcando a opção "Confirmar Transação Automaticamente"

image.png

  ACBrTEFAPI1.ConfirmarTransacaoAutomaticamente := False;

 

Quando ela estiver desmarcada, no termino da transação, a aplicação perguntará se o Operador deseja Confirmar ou Estornar a transação...

Isso é feito através desse trecho de código, do Demo:

procedure TFormPrincipal.FinalizarVenda;
var
  MR: TModalResult;
begin
    //...trecho de código removido, para melhor  leitura... 
  
    StatusVenda := stsFinalizada;
    if not ACBrTEFAPI1.ConfirmarTransacaoAutomaticamente then
    begin
      MR := MessageDlg( 'Confirmação do TEF',
                        'Confirma a Transação ?', mtConfirmation,
                        [mbYes, mbNo], 0);
      if (MR = mrYes) then
        ACBrTEFAPI1.FinalizarTransacoesPendentes( tefstsSucessoManual )
      else
        ACBrTEFAPI1.FinalizarTransacoesPendentes( tefstsErroDiverso );

      AtualizarPagamentosVendaNaInterface;
    end;

Ou seja, inserimos um Dialogo com Sim ou Não, e Finalizamos a transação, com o Status apropriado, conforme a resposta do usuário...

 

Bom dia,

se eu entendi então, os passos 35/36 e 37/38 ficaram mais simples de reproduzir, bastando apenas clicar em SIM e NÃO (respectivamente) na pergunta ?

Att

Ricardo

 

  • Moderadores
Postado
11 minutos atrás, RicardoVoigt disse:

Bom dia,

se eu entendi então, os passos 35/36 e 37/38 ficaram mais simples de reproduzir, bastando apenas clicar em SIM e NÃO (respectivamente) na pergunta ?

Att

Ricardo

 

sim. no caso não testa diretamente o que deveria de fazer mas sim está muito mais simples

  • Curtir 1
Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • Este tópico foi criado há 341 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.