Uma das vantagens que ninguém discute da componentização de programas é “não reinventar a roda”. Um pedaço de código que faz deste as coisas mais simples até as mais complexas.

Boleto.NET

Há um tempo atrás, li na revista .NET Magazine nº 42 (de 2007!) uma resenha sobre diversos componentes para ASP.NET e um dizer logo no penúltimo parágrafo do artigo me chamou a atenção:

Tome cuidado com componentes gratuitos, podem ser um problema, principalmente se não vierem acompanhados do código-fonte.

Em princípío achei que esse dizer representava um preconceito do articulista com componentes grátis, que ele poderia estar “levando um por fora” para desmerecer o trabalho de várias pessoas que disponibilizam seu tempo na confecção destes componentes. Mas foi só eu sentir na pele o que um erro bem simples que um componente grátis causou em um sistema que percebi que a afirmação tem fundamento.

Recentemente necessitei fazer uma aplicação web que gerasse boletos bancários que deveriam ser pagos em um banco de origem espanhola famoso, com o pequeno detalhe que isto deveria ser feito “pra ontem”, ou seja, o tempo era BEM curto. Quando recebi a especificação do banco, dei uma tremida nas bases. Tinha que calcular digitos verificadores, fator de vencimento, código de barras, linha digitável e o escambau, e além disso tinha que fazer o layout do boleto em HTML!

Como não sou um às do HTML, pensei: F*DEU! Não vou conseguir entregar isso nem a pau...

Dei uma pesquisada na net e achei um componente em C# chamado “Boleto.Net” no Codeplex. Pensei: Me salvou a pátria! Baixei o danado, vi os exemplos e implementei-o na minha aplicação.

Daí tinha que homologar os boletos no banco, né? Até aí continua tudo bem, gerei os boletos e mandei para a homologação. Recebi a resposta do banco e os boletos estavam homologados, já poderiam entrar em produção.

O sistema entra em produção, e uma pessoa que gerou um boleto e foi pagá-lo no homebanking não conseguiu, pois estava dando “código de barras inválido”. WTF? O banco não disse que tava certo?

Aí fui “depurar” o boleto com uma app para iPhone (BoletoScanner): O código de barras era lido normalmente, porém  um bloco da linha digitável não estava batendo com o do boleto impresso, aquele número que fica sozinho e que corresponde ao DV do código de barras.

Mas pô, o cara do banco disse que estava certo, ou seja, ele HOMOLOGOU os boletos com esse erro na linha digitável! Daí foi uma correria para o cara do banco falar que realmente estava errado, baixar o código-fonte do componente, fazê-lo compilar no Visual Studio 2010, depurar, e finalmente corrigir o erro na linha digitável.

Com esse erro grave corrigido (e olha que o sistema já estava em plena produção!) novamente levamos os boletos para homologar no banco, e eu também estava fazendo testes paralelos com a app do iPhone, e finalmente atualizei a aplicação no servidor com os boletos corrigidos.

E quem já tinha gerado o boleto com erro (o sistema era aberto ao público), como que fica? Ainda bem que eu tive a idéia de fazer uma função de reimpressão, bastando informar um documento. Era só a pessoa gerar novamente o boleto e ir pagar (sem refazer todo o processo que culmina na geração do boleto), simples assim.

E isso tudo que eu contei foi causado por um erro em um componente grátis em que a última versão é de 14/06/2010 (quase um ano já), e na descrição fala que ele está homologado para trabalhar com o banco espanhol que falei acima.

Já pensou se ele não tivesse o fonte para eu alterar e gerar a linha digitável correta? Só por UM dígito? Eu estaria f**ido!

Então, devemos testar bem os componentes que utilizamos, sejam gratuitos ou pagos, para podemos aproveitar melhor os seus recursos.

Um abraço!