Aplicação Web + Javascript = Aptana Studio

Delphi, Dicas Blog, Ferramentas, JavaScript, Programação maio 10th, 2011

Se você desenvolve aplicações Web, em qualquer momento queira ou não, terá que desenvolver código Javascript. Com Javascript seu site ou aplicação web se transforma e ganha recursos que normalmente só conseguíamos em aplicações desktop comuns. Códigos HTML ou XHTML puros podem ser muito bem feitos, mas, sem uma “pitada” de javascript eles não conseguem oferecer uma interface realmente boa. Javascript roda em todos os browsers (alguns cuidados são necessários).

Há muito tempo atrás, em 2001, comecei a desenvolver uma nova versão da minha aplicação principal e, queria que rodasse em Linux e Windows, comecei a desenvolver em Delphi e Kilyx; não preciso dizer que não deu muito certo. Nem a Borland deu continuidade no Kilyx (esse estava muito longe de oferecer o que era prometido; embora algumas coisas funcionassem bem).

Se tivesse o conhecimento que tenho hoje naquela época teria desenvolvido em PHP (com isso não teria perdido tanto tempo).  Mas, dominava muito mais o Delphi e parti então para o velho WebBroker (na época, novo! rsrsrs). Não posso dizer que me arrependo, pois, a aplicação aconteceu e consegui realizar todas as minhas idéias; bem, quase todas, o servidor da aplicação tem que ser Windows, pois, as regras de negócio e serviços são compiladas em Delphi; mas, não importa, porque meu cliente pode trabalhar com ela em qualquer equipamento com um Firefox, Internet Explorer ou Chrome instalados.

Os clientes gostaram de ter um sistema fácil de manter e atualizar, mas, reclamavam da interface. No sistema antigo era mais prático!. A tela não precisava ser atualizada sempre…etc. Eu já sabia desses detalhes!. Mas, tinha que convencê-los que a Web era o futuro. É, agora é, certo?.

Mas, foi então que percebi que tinha que agilizar logo as novidades para a interface, mas, na época, Web 2.0 era uma promessa e, desenvolver código javascript puro, era coisa de maluco!. Bom, eu comecei a desenvolver mesmo assim.

A maior dificuldade era que não havia um editor de código javascript amigável. Trabalhei muito tempo com o “SciTe”, ao menos ele “colorizava” o código facilitando um pouco as coisas. Mas, estava longe do “code insight” do Delphi. Tomava um bom tempo “normalizar” o código.

Foi quando descobri o Aptana, o editor de códigos perfeito para javascript; contendo: colorização, code complection e até depuração de código integrados. No começo perde-se um tempo para se adaptar, mas, em seguida, fica tudo sob controle. Vida mais fácil!.

Hoje, não importa a linguagem que vou utilizar para criar meus serviços web (Delphi, .Net, Java, Ruby, etc). As aplicações cliente (a interface) sempre são construídas com código: html, xhtml, xml e  javascript. A imaginação (e o tempo é claro) se tornam o limite.

O mundo desktop, de uns anos para cá, saiu também daquela terrível plataforma cliente x servidor para se integrar à WEB; mas, ainda fico com os códigos que me permitem rodar a aplicação no navegador web, visto que não quero ter que me preocupar em instalar programas clientes em cada máquina do meu cliente novamente. Ou, pior, ter que apelar para “terminais server” ou outras caríssimas soluções. Arghhh!.

Dica: Além do javascript o Aptana permite gerenciar, muito bem, projetos: PHP, Ruby e Rails.

Tags: , ,

Envio de E-mail com Delphi 2010, Indy 10, OpenSSL e GMail

Código-Fonte, Delphi, Open Source, Programação abril 7th, 2011

Depois de alguma horas de pesquisa, devido, dificuldades no envio de e-mail usando uma conta do GMAIL e outras; tivemos que modificar o código para usar autenticação segura. Interessante que em algumas máquinas funcionava sem o serviço de autenticação (qdo descobrir o motivo eu digo, rsrsrs). Compartilho com vocês essas informações.

Alguns erros reportados durante as falhas de envio de e-mail foram: “Must issue a STARTTLS command first” (indicando que seria necessário TLS ou, autenticação de segurança) e depois de implentado o código abaixo sem baixar a OpenSSL na máquina “Could not load SSL library”.

Modificamos então, o código para permitir o envio de e-mails usando autenticação ou não. Usando autenticação, é necessário instalar a OpenSSL  e, declarar alguns units no seu código. Na web encontrei vários artigos sobre isso, mas, a maioria com informações incompletas, agradeço mesmo assim essas informações, pois me auxiliaram a entender o que precisaria fazer e, juntando as peças (copiando e colando) montei o código abaixo.

As ferramentas e recursos de desenvolvimento utilizadas são: Delphi 2010, Indy 10 (disp. no Delphi), OpenSSL e testado com uma conta do GMAIL.

Veja o código:

Clique para continuar lendo “Envio de E-mail com Delphi 2010, Indy 10, OpenSSL e GMail”

Tags: , , ,

JEDI VCS – Controle de Versões

Código-Fonte, Delphi, Dicas Blog, Ferramentas, Open Source, Programação setembro 16th, 2010

Introdução

Tenho visto que muitos colegas não usam nenhum sistema de controle de versões; uns por acharem que é muito caro, outros muito difícil de implementar. Para quem usa o Delphi, por exemplo, existem algumas opções interessantes; sem nenhum custo e de fácil implementação.

Eu diria que, se vc. nunca usou um sistema de controle de versões, não sabe quanta dor de cabeça poderia ter evitado; Lembra aquele código que vc modificou, não deu certo e, quando vc. viu já era tarde para recuperar o antigo. Ou pior, seu computador deu problema (HD pifou, foi roubado, etc), backup desatualizado e dai?.

Um sistema integrado de “Controle de Versões” resolve todos esses problemas. Vou citar aqui o “JEDI VCS” cujo projeto está disponível no “sourceforge”. É muito fácil de instalar, eu uso com o meu banco de dados preferido, o Firebird.

JEDI VCS

O JediVCS versão 4.5 é a versão estável mais recente; a 2.5 está na Beta 3. Eu instalei o Jedi há alguns anos atrás e

Clique para continuar lendo “JEDI VCS – Controle de Versões”

Tags: , , ,

Delphi Conference Brasil – Resumo

Delphi, Notícias fevereiro 25th, 2010

Terminou agora há pouco a “Delphi Conference Brasil’ que foi transmitida via “live meeting” com apresentações muito interessantes; para quem não conhece e também para quem conhece mas pretende se atualizar ou e aprimorar conhecimento com novas técnicas e recursos.

  • Touch e Gestures” no Delphi (Andreano Lanusse da Embarcadero). O Delphi 2010 oferece agora suporte completo para a criação de aplicações baseadas e “toques” ou e “gestos” (aplicações estilo Iphone por exemplo).
  • “DataSnap” com exemplos (usando webservices,comparação SOAP e REST apresentado por Rodrigo Leonhardt Silva da Polishop). DataSnap com REST é uma nova tecnologia disponível no Delphi que permite acessar dados de um servidor usando JSON (JavaScript Object Notation), dispensa o uso do XML para troca de informação entre aplicações e é muito rápido e fácil de implementar no novo DataSnap do Delphi.
  • Uma apresentação do “ressuscitado” e agora muito melhor “Intraweb” e com boas perspectivas para o futuro (por Jackson Gomes da Atozed). Quem usa o Intraweb e está com idéia de refazer tudo, não deixe de conferir essa nova versão, com os novos “eventos” em AJAX ficou bem mais interessante. O Jackson nos disse que estão trabalhando numa nova versão onde estarão disponibilizando recursos para utilização de frameworks como: JQuery, YUI, Dojo, etc.
  • Boas Práticas OOP (com exemplos focados no Delphi Prism) por Adilson Jr da TDS; nessa apresentação o Adilson dá uma verdadeira aula de como trabalhar com objetos distribuídos.
  • Testes para desenvolvedor Delphi; onde o palestrante Daniel Width; deu uma visão geral dos motivos para aplicação de testes e recursos e softwares disponíveis para testes com o Delphi, exemplificando o uso do Dunit, um plugin para o Firefox algumas opções free e outras comerciais.
  • E, por ultimo, uma excelente apresentação (muito completa) de recursos do Rave Reports por Alan Glei, onde com muita paciência ele demonstrou recursos interessantes e indispensáveis para organizar e estruturar os seus relatórios com Rave;

Clique para continuar lendo “Delphi Conference Brasil – Resumo”

Tags: , , , , ,

Delphi 2010, Problema com “encoding” usando TXMLDocument

Código-Fonte, Dicas Blog, Programação dezembro 17th, 2009

Estava recompilando alguns componentes do meu sistema, desenvolvidos originalmente com o Delphi 7 para o Delphi 2010, e percebi o seguinte erro ao tentar abrir um XML gerado pela aplicação compilada com o D2010 “caractere inválido encontrado no texto“.

Na verdade o XML contêm campos acentuados usando “ISO-8859-1″ e, após algum tempo perdido descobri que o código abaixo, embora estivesse correto não gerava o XML como deveria; ou seja, a propriedade “encoding” simplesmente não é adicionada (como deveria) no cabeçalho do XML. Isso não acontece no Delphi 7, por exemplo.

01 – Codigo que não funciona no Delphi 2010:

Clique para continuar lendo “Delphi 2010, Problema com “encoding” usando TXMLDocument”

Tags: , , ,

Code Rage 4 – mostrou o poder das novas ferramentas

Notícias setembro 13th, 2009

O evento “Code Rage 4″ realizado on-line pela Embarcadero nesses ultimos dias 8-11 de Setembro mostrou definitivamente que a nova suíte de desenvolvimentos baseada no Delphi está simplesmente sensacional!. A Embarcadero investiu pesado em novos controles e recursos e muito, mas.., muito, em integração com outros fornecedores de soluções;

O Delphi engoliu o Visual Studio na versão Delphi Prism; então quem ficava na dúvida se migrava para o VS ou não, agora não precisa mais, já que o ambiente RAD Studio engloba o VS com o Prism.

O desenvolvimento WEB ganhou reforços de todos os lados; o novo DATASNAP muito mais poderoso, o novo INTRAWEB mais flexível contando com recursos AJAX, o Delphi Prism para quem desenvolve em .NET; sem falar no Indy, cada vez mais poderoso.

Duas coisas justificaram de imediato para mim a compra do novo RAD Studio; os novos recursos do DATASNAP e a facilidade de integração com os serviços web disponíveis (pudemos ver um pouco disso na apresentação do Marco Cantú que deu um show! “10 REST Clients in Delphi”).

Sem falar na quantidade de novos recursos disponibilizados através do novo compilador, que inaugura novas formas de escrever código, código mais poderoso e eficiente  (muita coisa nova para aprender). Eu diria que é material para mais 10 anos de trabalho e aprendizagem.

Tags: , ,

Distribuição da NF-e autorizada para o Destinatário (Parte II)

Código-Fonte janeiro 26th, 2009

Vimos no artigo anterior como gerar o arquivo da NF-e compartilhada à partir do XML da NF-e assinada e do XML do protocolo de autorização da NF-e. Nesse artigo vamos demonstrar o uso do componente Indy do Delphi para enviar o arquivo da NF-e compartilhada via E-mail; complentando-se assim, o processo de compartilhamento da NF-e com o destinatário:

Vamos partir do código anterior e implementar os recursos de envio do e-mail para o destinatário. Nesse exemplo, fazemos uso do componente Indy também disponível nas distribuições do Delphi.

Adicione os seguintes componentes no seu programa: idSMTP e idMessage; em seguida escreva o código abaixo:

Código-fonte para comandar o envio do e-mail da NF-e compartilhada para o destinatário:

begin
    // configura servidor smtp
    idSMTP1.Host := 'smtp.empresaxyz.com.br';
    idSMTP1.Username := 'controlenfe@empresaxyz.com.br';
    idSMTP1.Password := 'xxxxxxxx';
 
    // configurando mensagem
    // e-mail da sua loja
    idmessage1.ContentType := 'text/html';
    idmessage1.from.address := 'controlenfe@empresazyz.com.br';
    // e-mail destinatario
    idmessage1.recipients.emailaddresses := 'contato@empresaxyz.com.br';
    // Assunto (titulo E-mail)
    idmessage1.subject := 'Empresa XYZ (Envio automático NF-e) '+DateTimeToStr(now);
 
    // Corpo da Mensagem (use aqui um HTML ou texto que deseja enviar
    // juntamente com a mensagem.
    idmessage1.body.Add(
    'Prezado Cliente,'+
    'Obrigado por comprar na Empresa XYZ. Estamos encaminhando esse e-mail contendo'+
    ' em anexo, o arquivo eletrônico da sua Nota Fiscal de Compra; de acordo com '+
    ' o "Manual de Integração do Contribuinte" da Nota Fiscal Eletrônica. '+
    'Sds,'+
    'A administração!'+
    '
'+
    'PS. Caso tenha alguma dúvida favor entrar em contato conosco '+
    'pelos fones: xx xxx xxxxx ou E-mail: xxxxxx@xxxxx.xx.x'+
    ';
'+
    '<strong>Favor não responder!</strong>. Esse e-mail foi enviado automáticamente pelo'+
    ' nosso servidor após registro da autorização de uso da NF-e para a vossa '+
    'Empresa.'
    );
    // ou carregue uma mensagem pré-definida em um arquivo
    //idmessage1.Body.LoadFromFile('mensageNFe_destinatario.html');
 
    // anexa o XML da NFe compartillhada no e-mail
    TIdAttachment.create(idmessage1.MessageParts,
    TFileName('c:\nfe_arquivos\compartilhadas\procNFE.xml'));
 
    // conecta com o servidor SMTP
    idSMTP1.connect;
    try
    // Envia o e-mail
    idSMTP1.send(idmessage1);
    finally
        idSMTP1.Disconnect;
    end;
end;

Com isso concluímos o artigo sobre a Nota Fiscal Eletrônica Compartilhada, na primeira parte (parte I) geramos o arquivo da NF-e compartilhada à partir dos arquivos XML da NF-e assinada e do XML do recibo de autorização da NF-e. Nesse ultimo artigo vimos como enviar esse arquivo via e-mail para o destinatário.

Espero que essas informações sejam úteis para vcs e que eliminem com isso, algumas horas de pesquisa e trabalho.

Tags: , , , ,

Consulta CEP com Webbroker e JavaScript

Código-Fonte, Delphi, JavaScript, Novidades, Sem categoria dezembro 24th, 2008

Uma das funções mais interessantes hoje em qualquer tipo de cadastro que contenha endereço postal é a busca pelo CEP, para obter o endereço, bairro, cidade e estado; muitos desenvolvedores mantém uma base de dados do CEP local (em cada cliente) para que possa ser usada pela aplicação durante a edição dos endereços no cadastro.

O “buscarcep.com.br” é um WebService de consulta de CEP gratuíto e foi usado nesse exemplo. Esse serviço pode facilitar a vida de muita gente, já que usando o serviço, não mais será necessário manter uma base de dados do CEP local (em cada cliente).

Abaixo dou um exemplo de como implementar isso em uma aplicação WEB usando Delphi Webbroker e Javascript (para dar um toque Web 2.0 na aplicação).

Clique para continuar lendo “Consulta CEP com Webbroker e JavaScript”

Tags: , , ,

Delphi Prism disponível para Download em Breve

Notícias outubro 29th, 2008

A versão para avaliação do mais novo lançamento da Embarcadero o “Delphi Prism” estará disponível em breve para download no site da CodeGear. Para quem não ainda não sabe essa é a próxima versão do Delphi (não contempla mais a VCL).

Clique para continuar lendo “Delphi Prism disponível para Download em Breve”

Tags: , , ,

Lendo o XML com o TXMLDocument

Código-Fonte, Delphi outubro 20th, 2008

Algumas pessoas têm me procurado com muitas dúvidas sobre gerar um arquivo XML; mas, ultimamente, principalmente, como fazer para ler os dados de um XML. Já mostrei como fazer isso usando o utilitário que acompanha o Delphi “XML Mapper”; o qual uso muito (veja o post) quando preciso integrar um arquivo XML com meu sistema de forma definitiva.

Outra forma de executar a leitura parcial ou total de um arquivo XML é usando o componente TXMLDocument; com ele vc. pode buscar facilmente a informação que vc precisa dentro do arquivo; no código exemplo, que disponibilizo abaixo: vamos ler os itens do arquivo exemplo gerado no post “Dados XML como começar” (poderia ser usado para ler os itens da sua NF-e com pequenos ajustes):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
procedure TForm1.Button32Click(Sender: TObject);
var vXMLDoc: TXMLDocument;
    NodePai,NodeSec,NodeTmp: IXMLNode;
    nome, codigo: WideString;
begin
  // Cria a variável baseada no TXMLDocument
  vXMLDoc := TXMLDocument.Create(self);
 
  // Le conteúdo do arquivo XML informado 
  vXMLDoc.LoadFromFile('EnviNFe.xml');
  // Poderia ser uma URL como abaixo:
  //vXMLDoc.FileName := 'http://www.caiooliveira.com.br/?feed=rss2';
  //vXMLDoc.Active := True;
 
  // Vou colocar os dados no memo apenas como exemplo
  Memo.lines.Add( '-------------------------------------------------');
  Memo.lines.Add( 'Vamos inserir num campo memo (apenas para ver o resultado do teste');
  Memo.lines.Add( VXMLDoc.XML.Text +#13+#13 );
 
  // Aqui eu peço para encontrar a primeira ocorrencia da Tag <det>>
  NodePai := vXMLDoc.DocumentElement.childNodes.First.ChildNodes.FindNode('det');
  // Esse nó vai ser usado no LOOP
  NodeSec := NodePai;
  // Posiciona o primeiro elemento encontrado
  NodeSec.ChildNodes.First;
  repeat
    // referencia a tag <prod> dentro de <det>
    NodeTmp  := NodeSec.ChildNodes['prod'];
    // da pra ver que é um XML resumido da NFe (so temos uma tag <prod> para cada <det> então não precisaria da linha abaixo
    // agora se tivéssemos mais de uma seria o caso de posicionar também na primeira ocorrencia.
    NodeTmp.ChildNodes.First;
    repeat
      // pega os dados que vc quiser dentro da tag <prod>
      nome := NodeTmp.ChildNodes['cProd'].text;     // posso ler assim
      codigo := NodeTmp.ChildValues['cEan'];        // ou assim
 
      // vamos inserir no Memo os dados
      Memo4.Lines.Add('-----------------------------------------------');
      Memo4.Lines.Add( nome+' ---- '+codigo );
 
      // vai para a proxima ocorrência </prod><prod> (se houvesse)
      NodeTmp := NodeTmp.NextSibling;
    until NodeTmp = nil;
    // vai para a proxima ocorrência <det>
    NodeSec := NodeSec.NextSibling;
  until NodeSec = nil;
end;
</det></prod></det></prod></det></prod></det>

Tags: ,