Desenvolvimento - Mobile

Palm OS: Função BeginDownload

Neste pequeno tutorial descrevo como realizar um download de arquivos TXT utilizando um PDA PalmOS.

por Wellington Pinto de Oliveira



OBS.:

1 - Requer a leitura do artigo Instalando_RMS_V1;
2 - Versão do servidor: 3.0;
3 - Versão da API HB++: 3.1

A função BeginDownload é utilizada para realizar download de fontes de dados TXT e SQL parametrizada. Não é a única forma de download, existe ainda a BeginSQLAction que é a mais indicada para transferência direta com SGBDs. Utilize a BeginDownload para transferência de arquivos TXT.

Como Funciona

O sistema retaguarda gera um arquivo TXT no diretório publico para todos os equipamentos:
C:\RemoteSync\Download\Publico\Nome_Fonte conforme a imagem abaixo:


Figura 1 - Fonte de dados de um projeto

Quando o PDA se conectar é passado o nome da fonte de dados, no exemplo da figura acima é: Retorno_e58dbf25-e07f-48c7-8e21-8cde3b61a6ae o servidor RemoteSync localiza esta pasta dentro do diretório Publico e carrega o arquivo TXT que possui o mesmo nome da fonte de dados Retorno_e58dbf25-e07f-48c7-8e21-8cde3b61a6ae.txt.

Para utilizar o consultas utilizando a instrução SQL, basta apenas trocar a extensão do arquivo e por conseqüência seu conteúdo. Quando o PDA se conectar é passado o nome da fonte de dados e uma série de parâmetros, o servidor identifica que o arquivo possui a extensão .sql (ver Figura 2) e carrega a instrução SQL existente dentro deste arquivo, ele utiliza os parâmetros passados para atualizar a SQL e então executa na base de dados.


Figura 2 - Fonte de dados .SQL

Vantagens

- Excelente para transferência de arquivos TXT pela simplicidade;
- Muito rápido e simples;
- Excelente para integração com sistemas complexos que não possuem base de dados aberta.

Desvantagens

- Embora seja possível fazer transferência de dados por SQL não é recomendado este método pois as SQL são fixas, a função BeginSQLAction se mostrou mais eficiente em campo;
- Requer a geração de arquivos TXT;
- Não é possível filtrar arquivos TXT, logo estes arquivos devem ser carregados na integra.

Implementando um Projeto Básico

Devemos iniciar criando o arquivo TXT que deverá ser carregado pelos PDAs, para isso abra o Windows Explorer e procure a pasta C:\RemoteSync\Download\Publico nesta pasta crie uma nova pata chamada ImaosW e dentro da pasta IrmaosW crie um arquivo TXT chamado IrmaosW.txt. Neste arquivo entre com o texto exibido na listagem abaixo.

Wallace Pinto de Oliveira;Ciências da Computação;Belo Horizonte;MG
Wellington Pinto de Oliveira;Ciências da Computação;São Paulo;SP
Wanderson Pinto de Oliveira;Ciências da Computação;São Paulo;SP

Conforme exibido na Figura 3.


Figura 3 - Fonte de dados IrmaosW

Inicie um novo projeto no Handheld-Basic (se tiver dúvidas neste ponto consulte www.softpalm.com.br/download/LivroHB.zip), importe o pacote RemoteSync.hbk. No formulário principal adicione um novo botão chamado btDownload.

Para este botão adicione uma ação Click(), e edite o código da Listagem abaixo.

1.   Dim server as new RemoteServer
2.	
3.   "Passando parametros
4.   server.SetConnection "127.0.0.1",9760
5.   server.SetLogin "admin","demo"
6.   server.TimeOut = 3000
7.	
8.   if server.BeginDownload("IrmaosW",100,"",Nothing) then
9.      while server.ReadLine()
10.        DebugPrint "#===============================#"
11.        DebugPrint "Nome: " & server.GetCol(1)
12.        DebugPrint "Formação: " & server.GetCol(2)
13.        DebugPrint "Reside atualmente em: " & server.GetCol(3) & " " & server.GetCol(4)
14.     wend
15.	    server.EndDownload hbSocketClose
16.   else
17.      DebugPrint server.LastError
18.   end if

O código deve sempre ser iniciado com a criação das variáveis, neste caso só precisamos da variável server (Linha 1). Na linha 4 foi passado como parâmetro o IP e a porta de conexão, que no exemplo foi "127.0.0.1" (maquina local) e porta 9760.

Logo em seguida na Linha 5 informamos login e senha para a conexão, também foi preciso informar o TimeOut, que no exemplo acima é de 3 segundos (1 segundo equivale a 1000).

Iniciamos o download na Linha 8, informando na seqüência a fonte de dados (IrmaosW), o numero de máximo de registros enviados em um bloco (100), Ticket e os Parâmetros.

Logo em seguida o servidor responde ao PDA, iniciando com a transferência, na Linha 9 o PDA transforma os dados armazenados na Stream em String formando uma linha, a partir daí é só utilizar os métodos GetCol() para capturar as colunas necessárias na linha.

É muito importante finalizar o download, para liberar o Servidor sem exception, isso é feito na Linha 15. Caso haja algum erro vamos exibir utilizando a propriedade LastError, conforme a Linha 17.

Ao final do teste, podemos observar na janela output o seguinte texto:

#===============================#
Nome: Wallace Pinto de Oliveira
Formação: Ciências da Computação
Reside atualmente em: Belo Horizonte MG
#===============================#
Nome: Wellington Pinto de Oliveira
Formação: Ciências da Computação
Reside atualmente em: São Paulo SP
#===============================#
Nome: Wanderson Pinto de Oliveira
Formação: Ciências da Computação
Reside atualmente em: São Paulo SP
FIM 3

Se tiver utilizando uma versão demonstração, alguns registros vêm informando COPIADEMO, conforme a Listagem abaixo:

#===============================#
Nome: COPIADEMO
Formação: 
Reside atualmente em:
#===============================#
Nome: Wellington Pinto de Oliveira
Formação: Ciências da Computação
Reside atualmente em: São Paulo SP
#===============================#
Nome: Wanderson Pinto de Oliveira
Formação: Ciências da Computação
Reside atualmente em: São Paulo SP
FIM 3

Sintaxe dos Principais Métodos Utilizados

Public Sub SetConnection(ByVal IP as String, ByVal Port as Integer)

Onde:
IP: IP na qual o equipamento deve se conectar;
Port: Porta liberada para a conexão.

Armazena dados de IP e porta utilizadas na conexão, fique sempre atento as regras de FireWall, 97% dos problemas de instalação estão relacionados a FireWall e Redirecionamentos na rede para esta porta.

Public Sub SetLogin(ByVal User as String, ByVal Password as String)

Onde:
User: Usuário registrado no RemoteSync;
Password: Senha do usuário.

Por padrão o RemoteSync já vem com usuário "Admin" de administrador e "demo" de demonstração.

Public Property Let TimeOut(iTimeOut as Long)

Onde:
ITiemOut: É o tempo em que o equipamento deve esperar pela resposta do servidor.

Public Function ReadLine() as Boolean

Carrega os dados na Stream para a variável String.

Public Function GetCol(ByVal Index as Integer) as String

Onde:
Index: Indice da coluna desejada.

Public Sub EndDownload(Close as HbSocket)

Onde:
Close: Modo de finalização da comunicação.

Links

Site dedicado ao HB++ no Brasil (fórum, exemplos, materiais, etc..)
http://www.softpalm.com.br

Site do desenvolvedor do HB++
www.handheld-basic.com

Código fonte do exemplo
http://www.softpalm.com.br/arquivo.aspx?ID=3601

Download do RemoteSync
http://remotesync.venki.com.br

Wellington Pinto de Oliveira

Wellington Pinto de Oliveira - Autor do livro "Desenvolvendo Aplicações Palm com NS Basic", atualmente trabalha com automação de processos industriais e códigos de barras. http://www.softpalm.com.br.