Artigo

Tratamento de Retornos na DarumaFramework

Quando prestamos um concurso ou uma prova de certificação, todos gostariam de ter o resultado na hora, certo?

Da mesma maneira acontece quando estamos programando!

Desenvolvemos o código, mas antes de rodar e fazer todos os testes necessários, não teremos a resposta se a solução é funcional ou não.

É o que acontece quando chamamos uma função; a mesma pode ser executada com sucesso ou não. Isto é algo que nossa equipe de Integração e Desenvolvimento Urmet Daruma se preocupou antes de desenvolver a DarumaFramework.dll, caprichando em seu tratamento de retornos, deixando-o de uma forma rápida e pratica para o desenvolvimento.

Por quê? Porque não adianta trabalhar sem saber o resultado na hora da execução ou ter todo aquele trabalho de rodar o sistema em modo debug.
Os mais de 230 métodos disponibilizados na DarumaFramework.dll possuem retornos, que indicam se a execução do método ocorreu com sucesso ou não, se tem algum aviso com relação à execução e ainda no caso de uma execução mal sucedida nos indica o motivo da Não-Execução(Erro).

Como, por exemplo:
Erro Ex. RZ do movimento anterior pendente.
Confira mais na tabela de erros: http://bit.ly/stw9Re

Aviso: Ex. Papel acabando
Confira mais na tabela de avisos: http://bit.ly/uWSqW0
Configurando o DarumaFramework.xml:

O DarumaFramework.XML possui uma chave exclusiva para facilitar no tratamento de retornos.
Sim, a chave <RetornarAvisoErro>1</RetornarAvisoErro>,  caso o valor desta chave seja  “0”, os retornos de método serão limitados a “0” (Método Não Executado) e ”1” (MétodoExecutado), sendo sempre necessário analisar os códigos de erro e aviso.


Quando o valor da chave for configurado para “1” retornará o inteiro “-12” no Retorno do Método caso o método executado tenha algum aviso ou erro.


Assim podemos reduzir o tratamento de erros e avisos, tratando erro e aviso apenas se o Retorno do Método for < 1, caso sim mostre o retorno conforme a tabela de retornos. Caso o retorno do método venha = 1, é sinal que o método foi executado com sucesso, não precisando chamar as funções para verificação de erros e avisos.

Funções:

Primeiramente antes de trabalhar com um retorno necessitamos chamar uma função, logo em seguida para receber os códigos de erro e aviso referentes ao último comando executado, devemos utilizar o método:
rStatusUltimoCmdInt_ECF_Daruma

Este método possui 2 variáveis inteiras indicadas por referência para receber o número de erro e de aviso.       

Agora você deve estar pensando:
-Poxa, agora vem aquele monte de IF, CASE etc...

Como, por exemplo:

If (Int_NumAviso <> 0) Then

Select Case Int_NumAviso

              Case "1"
                Str_Msg_NumAviso = "[1] - Papel Acabando"
            Case "2"
             Str_Msg_NumAviso = "[2] - Tampa aberta"
            Case "3"
              Str_Msg_NumAviso = "[4] - Bateria fraca"
            Case "4"
              Str_Msg_NumAviso = "[40] - Compactando"
            Case Else ' Se o NumAviso desconhecido
              Str_Msg_NumAviso = "[" + Str_Msg_NumAviso + "] - Aviso Desconhecido!"
           End Select
        Else
        'Se Aviso = 0 (ok)
          Str_Msg_NumAviso = "[0] - Sem Aviso"       
End If


Chega destas rotinas! Com a DarumaFramework.dll nosso problema esta resolvido com apenas 2 funções para interpretar os retornos.
Para analisar os códigos recebidos pela função rStatusUltimoCmdInt_ECF_Daruma, não precisamos mais realizar vários testes de comparação de valores, podemos utilizar os comandos: eInterpretarErro_ECF_Daruma e eInterpretarAviso_ECF_Daruma.
Ambos os métodos possuem 2 parâmetros cada, um inteiro que usamos para indicar o código que foi recebido e uma variável String para receber a descrição do erro.
Esta String, já contém o numero e descrição do código, prontinha para ser exibida para o usuário, não precisando ser montado uma imensa estrutura de condições (IF/Cases) como demonstrado mais acima.

Conhecendo esta facilidade na prática:

VB6

Private Sub LeituraX_Click()

Dim int_erro, int_aviso As Integer
Dim str_erro, str_aviso As String
str_erro = Space(100)
str_aviso = Space(100)

iRetorno = iLeituraX_ECF_Daruma
If (iRetorno < 1) Then

iRetorno = rStatusUltimoCmdInt_ECF_Daruma(int_erro, int_aviso)

iRetorno = eInterpretarAviso_ECF_Daruma(int_aviso, str_aviso)
iRetorno = eInterpretarErro_ECF_Daruma(int_erro, str_erro)
MsgBox (CStr(str_erro) + CStr(str_aviso))

Else
MsgBox ("Método executado com Sucesso")

End If

End Sub

C

void retornosExtendidos(int iRetornoMetodo)
{
int iErro;
int iAviso;
char cInterpreta[201];memset(cInterpreta, 0, sizeof((string) cInterpreta));
if(iRetornoMetodo < 1)
{
rStatusUltimoCmdInt_ECF_Daruma(&iErro,&iAviso);
eInterpretarErro_ECF_Daruma(iErro,cInterpreta);
printf("Erro ECF: %s\n", cInterpreta);
eInterpretarAviso_ECF_Daruma(iAviso,cInterpreta);
printf("Aviso ECF: %s\n\n\n", cInterpreta);
printf("-------------------------------------------------------------------------------\n");
}
else
{
printf("Comando Executado com Sucesso!!!, Sem Erros e Sem Avisos\n\n");
printf("-------------------------------------------------------------------------------\n");
}
}

C(Sharp)
      private void métodoILeituraXECFDarumaToolStripMenuItem_Click(object sender, EventArgs e)
      {
        DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iLeituraX_ECF_Daruma();

       
        int Int_NumErro = 0;
        int Int_NumAviso = 0;

        if (DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno == 1)
        {

        System.Windows.Forms.MessageBox.Show("Método executado com Sucesso!");

        }
       
        else
        {
StringBuilder Str_Msg_NumErro = new StringBuilder(300);
          StringBuilder Str_Msg_NumAviso = new StringBuilder(300);

        DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.rStatusUltimoCmdInt_ECF_Daruma(ref Int_NumErro,
ref Int_NumAviso);
        DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.eInterpretarErro_ECF_Daruma(Int_NumErro, Str_Msg_NumErro);
        DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.eInterpretarAviso_ECF_Daruma(Int_NumAviso, Str_Msg_NumAviso);

System.Windows.Forms.MessageBox.Show(Convert.ToString((Str_Msg_NumAviso)));
          System.Windows.Forms.MessageBox.Show(Convert.ToString((Str_Msg_NumErro)));

        }
   }
Delphi:

procedure TLeituraXECFDaruma1Click(
  Sender: TObject);

begin

   Int_Retorno:=  iLeituraX_ECF_Daruma();
   Int_NumErro:= 0;
           Int_NumAviso:= 0;
   Str_Msg_NumErro:=StringOFChar(' ',300);
   Str_Msg_NumAviso:=StringOFChar(' ',300);
   Str_Msg_RetMetodo:=StringOFChar(' ',300);


   Int_Retorno:=rStatusUltimoCMDInt_ECF_Daruma(Int_NumErro, Int_NumAviso);

// Mensagem do erro
   Int_Retorno:=eInterpretarErro_ECF_Daruma(Int_NumErro, Str_Msg_NumErro);
// Mensagem aviso
   Int_Retorno:=eInterpretarAviso_ECF_Daruma(Int_NumAviso, Str_Msg_NumAviso);

  Str_Erro:=Str_Msg_NumErro;
  Str_Aviso:=Str_Msg_NumAviso;
  Str_Msg_Retorno_Metodo:=Str_Msg_RetMetodo;

   Application.MessageBox( Pchar('Número Erro = ' + pchar(Str_Erro) +  #13 + 'Número Aviso = ' + pchar(Str_Aviso)), 'DarumaFramework Retorno do Método', mb_ok);

end;

E já que estamos falando de retornos dos métodos, você sabia que a maior parte dos métodos nos devolve também uma Informação Estendida?

A Informação Estendida nada mais é, do que uma informação extra para facilitar um posterior trabalho. Estas informações sobre cada método nos permitem obter informações
como, por exemplo: COO, CCF, Sub Total, etc., com relação ao último comando de impressão enviado, sem a necessidade de executar outros métodos, fazer cálculos ou criar rotinas para obter estas informações.
E tudo isto foi desenvolvido na intenção de otimizar a aplicação e proporcionar mais este recurso para um rápido desenvolvimento.

Como é o caso da função  iCFTotalizarCupom_ECF_Daruma onde é possível capturar  o Subtotal do Cupom Fiscal.
No exemplo citado acima, da função iCFTotalizarCupom_ECF_Daruma, é possível capturar apenas uma Informação Estendida, que é, o Subtotal do Cupom Fiscal.
 Para capturar esta informação é necessário chamar a função de Resposta Estendida:
rInfoEstentida_ECF_Daruma

Parâmetros:
                1- Índice da Informação Desejada.
                2- Variável por referência para receber a resposta estendida

Vejamos na prática:

  • Foi aberto o Cupom Fiscal
  • Vendido o Item
  • Totalizado o Cupom
  • Solicitada a Resposta Estendida índice 1 (Subtotal)

 

Código da chamada da função de Totalização e da Informação Estendida

private void Totalizar_Click(object sender, EventArgs e)
      {
        string Str_ValorDescAcresc, Str_TipoDescAcresc;

      Str_ValorDescAcresc = TB_ValorDescAcresc.Text.Trim();
      Str_TipoDescAcresc = TB_Tipo_Desc_Acresc.Text.Trim();
        StringBuilder Str_Informacao = new StringBuilder(100);

      DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iCFTotalizarCupom_ECF_Daruma
(Str_TipoDescAcresc, Str_ValorDescAcresc);
      DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.rInfoEstentida_ECF_Daruma
(1, Str_Informacao);
        MessageBox.Show(Str_Informacao.ToString());
      
 
      }
    }


O que foi Impresso no Cupom Fiscal:


O que foi Retornado na Aplicação

Viu só como é fácil? Agora é só implementar mais este recurso que a Daruma desenvolveu exclusivamente para você parceiro desenvolvedor!  

Veja todas as Respostas Estendidas em nosso Help Online:
http://bit.ly/sbybtK

Um abraço a todos,
E-mails:
ddc.suporte@daruma.com.br
suporte.ddc@daruma.com.br
desenvolvedores.suporte@daruma.com.br
suporte.desenvolvedores@daruma.com.br
desenvolvedores.daruma@daruma.com.br
suporte@daruma.com.br
suporte.alexandre@daruma.com.br
claudenir@daruma.com.br
Skypes:
ddc_suporte_daruma
suporte_ddc_daruma
desenvolvedores_suporte_daruma
suporte_desenvolvedores_daruma
desenvolvedores_daruma
suporte_daruma
suporte_alexandre_daruma
claudenir_andrade


  • Daruma Developer

    Daruma Developer