Desenvolvimento - Mobile
Palm OS: Segurança da Informação
Quando um programador é chamado para desenvolver um sistema dedicado a plataforma Palm OS, a fim de automatizar um processo ele deve estar ciente que o novo sistema deve ser seguro, não só quanto a roubo de informação mas também a perca de informação.
por Wellington Pinto de OliveiraQuando um programador é chamado para desenvolver um sistema dedicado a plataforma Palm OS, a fim de automatizar um processo ele deve estar ciente que o novo sistema deve ser seguro, não só quanto a roubo de informação mas também a perca de informação.
Na plataforma Palm OS é comum a perda de dados quando o Hardware perde toda a carga, isso porque as maiorias dos equipamentos ainda trabalham com uma memória interna RAM. Mesmo os novos equipamentos que já possuem memória Flash não estão 100% seguros.
O ideal é manter além dos dados na memória interna dados também salvos em cartão, isso garante que a possibilidade de algum imprevisto ocorrer nas duas memórias seja um evento muito raro. Os dados do cartão só devem ser invocados caso realmente seja necessário, pois a velocidade de acesso a dados no cartão é muito inferior ao acesso a dados na memória interna.
Imagine que um vendedor tenha que voltar a um cliente para refazer o pedido, este evento é constrangedor para todos os envolvidos no processo, e isso é comum em muitos sistemas.
Pacote Softpalm HBK
Neste pacote temos uma série de classes e funções já criadas dada a necessidade de padronizar e aumentar a produção em uma empresa desenvolvedora de softwares. Ela está baseada na linguagem abordada no Handheld-Basic e é distribuída gratuitamente.
Neste artigo vamos apenas abordar a classe clsVFSBackup, nos próximos artigos vamos estar nos aprofundando em outras classes deste pacote.
Recordando
Antes de continuar o leitor deve ler os seguintes artigos:
Instalando o Handheld-Basic:
http://www.linhadecodigo.com.br/artigos.asp?id_ac=755
Conhecendo o Handheld-Basic
http://www.linhadecodigo.com.br/artigos.asp?id_ac=799
Download
Realize o download do Pacote SoftpalmFW no link: http://www.softpalm.com.br/arquivo.aspx?ID=73 .Atualmente este pacote está na versão: 1.00.b3 compilado no dia 16/08/2006 19:30:01 e nos dá suporte a operações com cartão.
Para realizar os testes vamos utilizar o Palm OS Simulation, este emulador é gratuito e pode ser adquirido no link: http://www.softpalm.com.br/arquivo.aspx?ID=30001
Projeto
Nosso projeto será uma simples agenda, por sem muito simples vamos implementar ela com uma estrutura procedural.
Vamos ter uma simples tabela contendo dois campos:
Campo |
Tipo |
NOME |
String(50) |
TELEFONE |
String(20) |
Inicie um novo projeto e crie uma tabela com as seguintes características:
Propriedade |
Valor |
Name |
dbAgenda |
Crie os campos NOME e TELEFONE com os dados apresentados na Tabela. Na tela inicial adicione um ListBox, dois Labels, dois Fields, um Button e um Graffiti, altere as propriedades nome destes conforme a tabela abaixo:
Objeto |
Propriedade Name |
ListBox |
lstAgenda |
Field |
fldNome |
Field |
fldTelefone |
Button |
btGravar |
Posicione estes objetos segundo a figura abaixo:
Agora vamos criar o menu, para isso acesse Tools | Menu Editor, com esta pequena ferramenta vamos poder criar menus de forma rápida.
Para criar um novo Menu pressione o botão “New Menu”, a propriedade Caption deste menu será: Backup.
Crie agora dois itens, para isso basta pressionar “New Item”, altere as propriedades destes itens segundo as tabelas abaixo:
Propriedade (Item Menu) |
Valor |
Caption |
Exibir |
Name |
mnuExibir |
Shortcut |
E |
Propriedade (Item Menu) |
Valor |
Caption |
Restaurar |
Name |
mnuRestaurar |
Shortcut |
R |
Abaixo temos uma figura ilustrando o menu.
Agora que temos a interface e o menu vamos importar o pacote SoftpalmFW.hbk para iniciar a codificação do projeto.
Para adicionar o pacote é simples, acesse Project | Add Files... e selecione o pacote.
Vamos iniciar a codificação pela classe principal, abra a classe clsApplication e altere seu código conforme a Listagem 1.
1 Private Sub Application_NormalLaunch()
2 dim f as new frmMain
3
4 DebugPrint "Versão do Pacote: " & versaoFrameWork(true)
5
6 f.Show hbFormModeless+hbFormGoto
7 End Sub
Apenas foi inserida ao código a linha 4, onde estamos imprimindo na área de Debug a versão do pacote.
Abra agora o formulário frmMain e edite o seguinte código para este formulário:
1
"Arquivo vai armazenar o nome do arquivo
2 Private Dim arquivo as String
3 "Cartão é uma instancia da classe Backup
4 Private Dim cartao as new clsVFSBackup
5
6 "devemos carregar o nome do arquivo a a ser gerado
7 Private Sub Initialize()
8 arquivo = "agenda"
9 End Sub
10
11 "Quando o formulário carregar
12 Private Sub Form_Load()
13 CarregaList
14 End Sub
15
16 "Método que carrega o ListBox
17 Private Sub CarregaList()
18 Dim rs as new dbAgenda
19
20 rs.OpenTable hbModeOpenAlways+hbModeReadOnly
21
22 "Listo os dados existentes no PDB
23 while not rs.EOF
24 lstAgenda.AddItem rs.NOME
25 rs.MoveNext
26 wend
27
28 "Fecho o arquivo
29 rs.Close
30 Set rs = nothing
31 End Sub
32
33 "Evento que grava um registro
34 Private Sub btGravar_Click()
35 Dim rs as new dbAgenda
36
37 rs.OpenTable hbModeOpenAlways+hbModeReadWrite
38
39 "Gravando no arquivo PDB, este PDB está na
40 "memoria interna 0
41 rs.AddNew
42 rs.NOME = fldNome.Text
43 rs.Update
44
45 "Gravando no cartao, o cartão é a memoria 1
46 cartao.Escrever arquivo, Cstr(rs.UniqueID) & ";" & fldNome.Text & ";" & fldTelefone.Text
47
48 "Exibindo o novo dado no list
49 lstAgenda.AddItem fldNome.Text
50
51 "Limpando os Fields
52 fldNome.Text = ""
53 fldTelefone.Text = ""
54
55 "Fechando o PDB
56 rs.Close
57 Set rs = nothing
58 End Sub
59
60 "Evento que exibe todos os registros existentes no cartao
61 Private Sub mnuExibir_Click()
62 "Vetor que será carregado com os dados do arquivo
63 Dim resultado() as String
64 "A classe clsString possui o método Coluna() que é capaz de trazer
65 "de forma fácil parte de uma string dado um delimitador
66 Dim str as new clsString
67 "Variável auxiliar no FOR
68 Dim i as Integer
69
70 "Chamo o método que carrega os dados do arquivo no Array
71 cartao.Ler arquivo,resultado
72
73 "Vou varrer o vetor e exibir os dados
74 For i = 1 to UBound(resultado)
75 str.TEXT = resultado(i)
76 MsgBox "Nome: " & str.Coluna(";",2) & "\nTelefone: " & str.Coluna(";",3)
77 next
78 End Sub
79
80 "Evento que restaura os dados do cartao
81 Private Sub mnuRestaurar_Click()
82 "Vetor que será carregado com os dados do arquivo
83 Dim resultado() as String
84 "A classe clsString possui o método Coluna() que é capaz de trazer
85 "de forma fácil parte de uma string dado um delimitador
86 Dim str as new clsString
87 "Variável auxiliar no FOR
88 Dim i as Integer
89 "Vamos usar a DatabaseInfo para apagar o arquivo PDB da memória
90 "interna do palm
91 Dim di as new DatabaseInfo
92 Dim rs as dbAgenda
93
94
95 "Chamo o método que carrega os dados do arquivo no Array
96 cartao.Ler arquivo,resultado
97
98 if UBound(resultado) = 0 then
99 "Vamos abordar a execução se não tiver nenhum registro
100 Exit Sub
101 end if
102
103 if di.FindByName(app.Info.Creator & "_dbAgenda") then
104 di.Delete
105 end if
106
107 "Vou varrer o vetor e exibir os dados
108 For i = 1 to UBound(resultado)
109 str.TEXT = resultado(i)
110 set rs = new dbAgenda
111 rs.OpenRecordset "UniqueID=" & str.Coluna(";",1),hbModeOpenAlways+hbModeReadWrite
112
113 "Se não existir um UniqueID no PDB compativel com o registro eu uso o AddNew, se existir eu uso o Edit
114 if rs.EOF then
115 rs.AddNew
116 rs.UniqueID = CLng(str.Coluna(";",1))
117 else
118 rs.Edit
119 end if
120 "informo os dados
121 rs.NOME = str.Coluna(";",2)
122 rs.TELEFONE = str.Coluna(";",3)
123 rs.Update
124
125 "Sempre fecho para abrir novamente
126 rs.Close
127 Set rs = nothing
128 next
129 "recarrego o List
130 CarregaList
131 End Sub
Testes
Agora que terminamos o programa vamos testar, para isso pressione F5. Se o Handheld-Basic estiver bem configurado ele automaticamente carregara o programa no Palm OS Simulation, conforme a Figura abaixo:
Nenhuma informação foi inserida ainda, para inserir dados é simples, basta adicionar o nome e o telefone, ao final pressione o botão Gravar, conforme a Figura abaixo:
Caso ocorra algum problema com o Handheld, tais como perca de dados, falha no hardware basta entrar no menu e selecionar “Restaurar” e ele vai restaurar a base de dados.