Manuais
PHC GO Utilização do Monitor de Sistemas para debugar código Visual Basic .NET
 
Existem diversas peças no desenvolvimento de um Add-on onde é possível implementar código Visual Basic .NET.

As Regras de negócio e Bibliotecas de servidor, por exemplo, são 100% desenvolvidas com código VB.NET. Outras peças, como por exemplo Análises, podem ou não utilizar esse tipo de linguagem.

Durante a implementação destas peças, ferramentas de debug são importantíssimas para os developers, uma vez que facilitam a identificação e correção de bugs do seu código.

Vamos neste artigo dar duas dicas de como utilizar o Monitor de Sistemas para debugar código Visual Basic .NET implementado em peças de um Add-on.

No ecrã SQL Studio do PHC GO ( menu Menu > Definições > Monitor de Sistema > SQL Studio ), é possível executar códigos implementados nas linguagens Transact SQL e Visual Basic .NET. Esta ferramenta funciona como um terminal da aplicação.

Com esta ferramenta, podemos facilmente simular a execução de um comando que queremos implementar em uma peça da Framework, antes de efetivamente implementá-lo. Ou seja, podemos rapidamente validar se o código está funcional e também identificar erros no código.

Vamos supor que estamos a implementar um desenvolvimento que utiliza a função GenerateReport da classe SDK Report, cujo objetivo é gerar um ficheiro pdf de um determinado documento utilizando uma configuração de relatório.
sticky_note_2Notas

Neste artigo poderá obter informações detalhadas sobre as funções da classe Report.

Vamos então simular o funcionamento desta função com o SQL Studio, de forma a perceber rapidamente se teremos o resultado desejado.

Esta função recebe 5 parâmetros de entrada:
  • O nome da entidade
  • O stamp do relatório que será utilizado
  • O stamp do registo que será impresso
  • O número da série do documento (caso a entidade utilizar séries de documento
  • A via do documento, sendo este parâmetro opcional

Neste exemplo, vamos gerar a segunda via de um documento de faturação da série Fatura (ndoc igual a 1) cujo stamp é z202103181624060190137781.

O relatório que será utilizado será o PHC GO Documentos Faturação, cujo stamp é z202102180826521220071603.

No ecrã SQL Studio do PHC GO ( menu Menu > Definições > Monitor de Sistema > SQL Studio ), selecionar o tipo de comando Visual Basic .NET e executar o comando abaixo.

Dim relatorio As PHCResult = SDK.Report.GenerateReport(Ft.getTableName, "z202102180826521220071603", "z202103181624060190137781", 1, ReportSeries.VIA2)

Após a execução deste comando, será apresentada a mensagem “O comando foi executado no servidor mas não produziu resultados.”. No entanto, com esta mensagem não sabemos se o comando falhou ou se o ficheiro foi gerado com sucesso.

Esta mensagem foi despoletada pois não foi feito nenhum Return no código executado.

O SQL Studio, quando selecionado o tipo de comando Visual Basic .NET, espera um Return de um Objeto.

Por exemplo, se executarmos o comando abaixo no SQL Studio, será apresentado no ecrã a estrutura do objeto MessageVO, contento um registo com a mensagem “Hello World” na sua propriedade messageCode:

return New MessageVO("Hello World")


Isso porque estamos a retornar um objeto do tipo MessageVO.

Vamos então alterar o nosso código inicial que possui a função GenerateReport de forma que o objeto relatório seja retornado:

Dim relatorio As PHCResult = SDK.Report.GenerateReport(Ft.getTableName, "z202102180826521220071603", "z202103181624060190137781", 1, ReportSeries.VIA2)
Return relatorio

O resultado apresentará a estrutura de um objeto do tipo PHCResult. Como sua estrutura possui apenas três propriedades, sendo todas elas do tipo Object, não conseguimos ainda chegar a uma conclusão se o comando foi de facto executado com sucesso:


No entanto, esta informação é útil para passarmos para o próximo passo da análise desta função: vamos então retornar os objetos da propriedade result do PHCResult.

Assim, ao executar o código abaixo, já conseguimos chegar a valores mais legíveis, e podemos identificar que a propriedade relatorio.result.phcString carrega a informação do nome do ficheiro que foi gerado pela função GenerateReport, ou seja, o ficheiro foi de facto gerado.

Dim relatorio As PHCResult = SDK.Report.GenerateReport(Ft.getTableName, "z202102180826521220071603", "z202103181624060190137781", 1, ReportSeries.VIA2)
Return relatorio.result


Vamos agora forçar um erro na execução desta função, alterando o stamp do relatório para um valor que não existe:

Dim relatorio As PHCResult = SDK.Report.GenerateReport(Ft.getTableName, "XXXXXXX", "z202103181624060190137781", 1, ReportSeries.VIA2)
Return relatorio

Após analisar o retorno deste comando, podemos perceber que a propriedade result do PHCResult já não possui dados, enquanto que a propriedade messages tem informação.


Se no comando acima, retornarmos o valor relatorio.messages, já poderemos verificar o que se passou e qual foi o erro retornado pela aplicação ao executar a função GenerateReport:


Este exemplo mostrou como podemos utilizar o SQL Studio para analisar código VB.NET na aplicação. Conseguimos perceber com detalhes como funciona a função GenerateReport e validamos o seu funcionamento.

Neste artigo, no separador GenerateReport, poderá verificar um exemplo prático desta função aplicado a uma Regra de negócio Após Gravar da entidade Faturação, cujo objetivo é enviar por e-mail o documento de faturação para o cliente após a sua introdução.
 

No ecrã Logs e Erros do PHC GO ( menu Menu > Definições > Monitor de Sistema > Logs e Erros ), é possível verificar o conteúdo dos últimos registos existentes no ficheiro OnErrorLog.txt da instalação.

Quando existe um erro na aplicação, a informação detalhada do erro fica registada neste ficheiro de log.

No entanto, podemos executar código de forma a escrever informação neste ficheiro, simulando um “print na consola”.

As funções SDK da classe Debug são responsáveis por escrever mensagens no ficheiro OnErrorLog.txt da aplicação permitindo debugar código durante a sua execução.
sticky_note_2Notas

Neste artigo poderá obter informações detalhadas sobre as funções da classe Debug.

Vamos supor que estamos a implementar um desenvolvimento complexo que é bem compilado, mas na prática não tem o resultado resperado. Ao longo do código, poderemos implementar a função LogInfo para nos ajudar a debugar esta situação e perceber o que correu mal.

Podemos facilmente entender como essa estratégia poderá ser feita implementando por exemplo uma regra de negócio Ao Introduzir para a entidade Clientes, com o seguinte código:

SDK.Debug.LogInfo("Hello World")

Depois de instalar o addon que contém a peça desenvolvida, ao aceder ao ecrã de Clientes e clicar no botão Introduzir, a mensagem "Hello World" será gravada no ficheiro OnErrorLog.txt e no ecrã Logs e Erros poderemos verificar em que momento esta ação foi efetuada:


Assim, se necessário, podemos “printar” valores de variáveis e analisar cronologicamente os seus valores ao longo do nosso código VB.NET de forma a identificar possíveis erros existentes.