Vicente Gras comercializa uma solução completa de Joalheria feita em 4D mediante a sua empresa Digital Somnis localizada na província de Valência. Sua solução propõe um módulo de sincronização com Pocket PC que permite a seus clientes utilizar seu PDA como se fosse uma máquina cliente com 4D Client. Nos pareceu sumamente interessante pedir-lhe contar a sua experiência sobre este assunto relacionado com perguntas que os desenvolvedores nos fazem freqüentemente.
"A comunicação entre uma aplicação 4D e uma aplicação PocketPC, no princípio, não é algo comum. Depois de Googlear um pouco, podemos encontrar algum plugin que nos permita aceder aos bancos de dados de Contatos, Tarefas, etc., de Pocket Outlook. De fato, não resulta difícil encontrar, incluso algo de código C para realizar estas tarefas.
Parece que a rede empenha-se em que os programadores do 4D o único que podemos fazer com um PDA é usá-lo de agenda e um pouco mais. Não obstante, o que realmente precisamos os programadores 4D, é uma ferramenta que nos permita, de maneira simples (ou incluso não tanto) enviar e receber dados da nossa aplicação 4D a uma aplicação PocketPC.
A solução ideal seria uma versão do 4D sobre PDA (O que lhes parece tudo isso, senhores do 4D?). Enquanto esperamos esta solução temos algumas opções muito mais, ou menos interessantes.
Quando comecei a expor o desenvolvimento de Pocket Aurin percebi que a sincronização com 4D ia resultar um problema sério. Pocket Aurin é uma versão PocketPC de Digital Aurin, uma aplicação desenvolvida sobre o 4D orientada ao Setor Joalheiro.
Pocket Aurin devia permitir aos representantes realizar toda a gestão de Vendas Externas em casa do Cliente e posteriormente inverter os dados (recibos, Cobranças realizadas, Gênero em Condicional, Clientes novos, etc.) sobre Digital Aurin. No seu momento, Digital Aurin devia proporcionar a Pocket Aurin toda a informação sobre os artigos distribuídos pelo representante, preços, descrições, tarifas, pesos, traduções, etc., assim como os dados dos Clientes, seus saldos pendentes, etc. Incluso, por quê não? Poderíamos incluir as imagens dos Artigos proporcionando um Catálogo Digital.
Como plataforma de desenvolvimento PocketPC utilizei Microsoft.Net Compact Framework. A eleição desta plataforma é uma questão de gosto pessoal. Poderia usar-se qualquer outra como eMbedded Visual C++ o Basic, ou incluso qualquer plataforma Java.
O motor do Banco de Dados “nativo” do Compact Framework é SQL Server CE, assim que não tive que pensar muito para escolher o suporte de dados.
A peça chave na comunicação Digital Aurin - Pocket Aurin tinha que ser, evidentemente, XML. XML é uma dessas pequenas jóias informáticas que sempre estiveram aí, disfarçada ou mascaradas de alguma maneira, e que em um momento determinado alguém às faz ressurgir com força. O certo é que qualquer plataforma de desenvolvimento moderno tem suporte para XML. Isso permite que duas plataformas tão diferentes como 4D e Compact Framework entendam-se à perfeição.
Perfeito, os dados iam circular em formato XML, com tudo, ainda tinha que decidir o mecanismo de transporte. Cada uma das aplicações devia ser capaz de gerar e analisar dados XML, mais também tinha que ser capaz de receber e enviar estes dados.
Com respeito a isso, fiz algumas provas que poderia resumir no seguinte:
O caso 1, supõe-se que à aplicação origem empacota os dados em um arquivo XML que se fará chegar de alguma maneira à aplicação destino. Isso é simples, já que podemos configurar ActiveSync para que sincronize automaticamente o conteúdo de qualquer pasta. Por tanto, só temos que guardar os arquivos XML nesta pasta e automaticamente teremos uma cópia na máquina destino. O único que fica é que a aplicação destino analise o arquivo XML.
As provas que eu fiz com esta apresentação funcionaram bem, de fato as primeiras versões de Pocket Aurin usavam este mecanismo de sincronização.
No entanto, a sincronização baseada em ActiveSync resultou problemática em conexões remotas (GPRS). Também, tem que ter em conta que não pode haver múltiplas conexões ActiveSync simultâneas.
No caso 2 é um excelente exemplo da utilidade que podem proporcionar os Web Services em aplicações colaborativas multi-plataforma. Quando apresentei a Sincronização de Pocket Aurin era necessário uma licença do Servidor Web para poder servir Web Services com 4D por isso desestimei esta solução.
A versão 2004 do 4D oferece licenças diferentes para Web Server e Web Services. Quem sabe seja o momento de reformular o problema.
A terceira opção é a que usa Pocket Aurin nestes momentos. A idéia é simples e está baseada no paradigma Email Server. No esquema adjunto podemos ver a arquitetura empregada no Transporte da sincronização de Pocket Aurin.

No centro do esquema temos MSDE. Microsoft Desktop Engine é a versão gratuita de SQL Server, o servidor do Banco de Dados do Microsoft. Pode instalar-se em qualquer Windows posterior ao 98, incluso na mesma máquina que tem o banco de dados 4D. Escolhi MSDE como recurso intermédio por que é facilmente acessível, tanto, desde 4D como desde Compact Framework.
MSDE aloja um banco de dados com una única tabela. Cada registro desta tabela contem uma Unidade de Informação pendente de sincronizar, além do mais, contem informação sobre a máquina que gerou o registro, a quê máquinas vai dirigida, com quê versão do programa gerou-se, e algum parâmetro de controle adicional.
As Unidades de Informação mencionadas são, simplesmente, código XML guardado em um campo de tipo Texto. Podem se definir diferentes tipos de Unidades de Informação, por exemplo, um Pedido seria representado pelo código XML “completo” que define o Pedido, quer dizer, o registro do Pedido, as linhas de detalhes, forma de pagamento prevista, etc. Cada Unidade de Informação inclui todos os registros relacionados com uma mesma entidade.
Os Campos mais relevantes desta tabela são as seguintes:
Tabela de Sincronização
| Campo | Tipo | Descrição |
|---|---|---|
Id |
int |
Identificador do registro. |
From |
nvarchar35 |
Estação que emite a Unidade de Informação. |
To |
nvarchar35 |
Estações às que vai dirigida. |
Data |
ntext |
Informação: <?xml version="1.0" encoding… |
DataType |
nvarchar35 |
Tipo de Unidade de Informação. |
Version |
nvarchar15 |
Versão do programa que gerou o registro. |
Attach |
bin |
Possíveis dados binários. Imagens, etc. |
Sob este esquema a Sincronização apresenta-se de forma similar ao funcionamento de um Servidor de Correio. Cada estação (4D ou PocketPC), quando conecta-se com o Servidor de Sincronização (MSDE) recolhe às Unidades de Informação que a ela vão dirigidas e deixa as Unidades de Informação que precisa enviar a outras estações.
Na sincronização Digital Aurin – Pocket Aurin, a aplicação 4D (Digital Aurin) age como Estação Banco. Cada estação PocketPC têm associado um Representante, desta maneira, a Estação Banco sabe a quê máquina ou máquinas deve enviar cada Unidade de Informação. Assim então, o PDA do Representante X recebe a informação dos Clientes (dados gerais, carteira, etc.) associados ao Representante X, e não outros. Igualmente, só recebe as Existências do seu Mostruário (e outras lojas opcionalmente), alguns PDA receberão informação de custos e outros não, etc.
Aqui podemos ver exemplos de registros de informação sincronizada em Digital Aurin e em Pocket Aurin:

Artigo criado em 4D e passado à PDA

Recibo criado em PDA e passado à 4D
Como comentei, MSDE é a versão de livre distribuição de SQL Server. A conexão do 4D com MSDE deve estabelecer-se da mesma maneira que se faria com SQL Server. Podemos usar ODBC, OleDB, ADO, RDO ou qualquer tecnologia de aceso a dados compatíveis com SQL Server.
Para versões do 4D anteriores a 2004 podemos usar o plugin de ODBC para 4D. A versão 2004 inclui suporte nativo para ODBC que funciona perfeitamente com MSDE.
Digital Aurin acede a MSDE através de um plugin que desenvolvi especificamente para isto, baseado em OleDB.
O acesso a MSDE desde Compact Framework não supõe nenhuma dificuldade, já que, vem incluído um Data Provider específico.
As conexões podem ser locais ou remotas sem que tenha nenhuma diferença no suporte de umas e outras, já que estão baseadas em TCP/IP. Só devemos ter a precaução de abrir o porto TCP que usa MSDE para estabelecer as conexões. Qualquer PDA com PocketPC que tenha conexão a Internet (Seja de qualquer tipo) pode aceder ao Servidor de Sincronização baseada em MSDE.
A próxima versão de SQL Server CE, esperada para 2005, incluirá APIS que permitirão aceder diretamente às suas tabelas desde uma aplicação de escritório. Esta é uma excelente notícia, já que poderemos desenvolver facilmente um plugin que permita o 4D aceder diretamente a SQL Server CE, eliminando assim, a necessidade de instalar MSDE.
Em qualquer caso, a apresentação baseada na Web Services ofereceria uma solução tão compacta como esta, sem a necessidade de desenvolver nenhum plugin. Além do mais, as novas licenças do 4D para a publicação da Web Services, são agora, talvez, mais adequadas que nunca.
Apesar de que a Sincronização 4D – PocketPC é, atualmente, um problema complexo, oferece uma funcionalidade tremendamente atraente para certos clientes. Um PDA e seus periféricos (impressoras, leitores de códigos de barras, etc.) são dispositivos realmente pequenos e ligeiros. Felizmente, agora estamos em condições de oferecer aos Vendedores Externos a equipe que estiveram demandando durante anos. Por fim, podem levar a nossa gestão 4D nos seus bolsos".
Vicente Gras - Digital Somnis S.L. - Dezembro de 2004