wiki:WF/ExportacaodedadosdeaplicacoesLotusNotes

Version 10 (modified by viani, 14 years ago) (diff)

--

Exportação de Dados de Aplicações Lotus Notes

Este documento descreve uma alternativa de exportação utilizando Java, e é recomendada caso existam campos texto-rico nos documentos a serem exportados.

Configuração do servidor Lotus Domino

No lado servidor, o Lotus Domino possui uma tarefa chamada Diiop (Domino Internet Inter-Orb Protocol) que deve ser configurada para aceitar conexões dos programas java e retornar os dados adequadamente.

1) Edite o arquivo Notes.ini, do servidor, e na chave "ServerTasks" acrescente a tarefa "diiop"

2) Edite o documento de configuração do servidor e na aba "Portas" "Portas da Internet" "IIOP", coloque o status da porta TCP/IP em "Ativado"

3) No mesmo documento, nas “opções de autenticação”, marque “Sim” para as categorias “nome e senha” e “anônimo”

4) Selecione a aba "Segurança" e na seção "Restrições Java/Com?" preencha com "*"

5) Dê um reboot no servidor. Observe se a tarefa Diiop carrega corretamente. Para isso acesse o console do servidor e entre com o comando 'sh ta'

6) Caso existam firewalls no caminho entre a estação cliente e o servidor, deve-se liberar a porta 63148

Nota: Em ambientes Linux, pode ser que as portas padrão (63148 e 63149) utilizadas pelo Diiop não estejam disponíveis. Se for este o caso, é necessário incluir a chave abaixo no arquivo notes.ini, fazendo com que o Diiop passe a utilizar as portas 60148 e 60149.

DIIOP_IGNORE_PORT_LIMITS=1

Configuração da base Notes

Depois de termos quebrado a cabeça exportando dados do Notes em outras ocasiões, concluímos que a melhor coisa a fazer é criar uma visão temporária na base, com todos os dados necessários. Desta maneira fica mais fácil obter os dados via um programa java. Basta fazer um loop do primeiro registro ao último da base e ler o conteúdo das colunas.

1) Crie uma visão na base com o nome 'Dump'. Construa a fórmula de seleção de documentos conforme necessário.

2) Crie colunas na visão, uma para cada campo que será exportado. A primeira coluna obrigatoriamente deverá ser o ID do documento. É importante que todos os dados das colunas seja do tipo texto. Exemplo:

Coluna 1: @Text(@DocumentUniqueID)

Coluna 2: @Text(Data_Publicacao)

Coluna 3: Titulo

Na coluna 3, 'titulo' é uma campo qualquer do documento

Em seguida é necessário modificar o formulário onde está o campo texto rico, para que o programa java consiga identificar onde ele começa e termina. Toda esta gambiarra está sendo feita porque no Domino versão 5 não existe classe para tratar o conteúdo de campos texto rico. A solução encontrada foi fazer uma requisição Http ao Domino, obter o código html do documento e separar a parte correspondente ao campo texto rico.

1) Edite o formulário onde o campo texto rico está

2) Coloque o identificador <!-- rtini --> antes do campo texto rico

3) Coloque o identificaror <!-- rtend --> após o campo texto rico

4) Marque os dois identificadores como texto html. (Selecione o texto e clique no menu Texto/Html?)

5) Salve o formulário

6) Por último, crie um usuário 'anonymous', no controle de acesso da base, com direitos de leitura, só para garantir que não haverá bloqueios de acesso quando o programa java rodar.

Configuração do ambiente Java

As configurações a seguir referem-se ao programa 'Eclipse' como ferramenta para rodar Java. Também podem ser utilizados outros compiladores, mas preferimos o 'Eclipse', devido às suas facilidades de gerenciamento de projeto.

1) Copiar os arquivos Notes.jar e NCSO.jar para algum diretório do seu disco local. (Os arquivos podem ser obtidos em uma instalação Notes ou Domino versão 6, na pasta Lotus\Notes\Data\domino\java. Não podemos distribuí-los aqui por serem software proprietário).

2) Abrir o Eclipse

3) Criar um projeto do tipo java

4) Configurar o projeto para reconhecer os arquivos Notes.jar e NCSO.jar. Para isso, clique no menu Project/Properties?. Selecione 'Java Build Path' e adicione os arquivos

5) Volte para a interface de programação e importe o arquivo exemplo de código java

6) Edite o arquivo exemplo para atender as suas necessidades. Mude o nome da classe, o ip do servidor, usuário, senha e o caminho para a base notes. Um detalhe: utilize a senha internet do usuário, e não a senha do id.

import java.io.*;

import java.net.*;

import java.util.*;

import lotus.domino.*;

public class detran {

	public static void main(String args[]) {

		try {

				Session s = NotesFactory.createSession("10.xx.xx.xx","usuario","senha");

				Database db = s.getDatabase(s.getServerName(), "teste\\empregado.nsf");

				View visao = db.getView("dump");				

				ViewNavigator nav = visao.createViewNav();

				ViewEntry entrada = nav.getFirst();


				String unid;

				String data;

				String titulo;
		

				String linha;

				String conteudo = "";

				boolean flag = false;

				BufferedWriter out = new BufferedWriter(new FileWriter("detrandump.txt"));

        

				String[] sessoes = {    "1,2,3,4,5,6,7,8,9,",

							"1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,",

							"2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,",

							"3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9,",

							"4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,",

							"5.1,5.2,5.3,5.4,5.5,5.6,5.7,5.8,5.9,",

							"6.1,6.2,6.3,6.4,6.5,6.6,6.7,6.8,6.9,",

							"7.1,7.2,7.3,7.4,7.5,7.6,7.7,7.8,7.9,",

							"8.1,8.2,8.3,8.4,8.5,8.6,8.7,8.8,8.9,",

							"9.1,9.2,9.3,9.4,9.5,9.6,9.7,9.8,9.9" 

				};

				
				while(entrada != null) {

					unid 		= (String) entrada.getColumnValues().elementAt(0);

					data	 	= (String) entrada.getColumnValues().elementAt(1);

					titulo		= (String) entrada.getColumnValues().elementAt(2);

					

					System.out.println(unid);

					

					URL notesUrl = new URL( "http://10.xx.xx.xx/teste/empregado.nsf/0/" + 

							unid + "?opendocument&expandsection=" + 

							sessoes[0] + sessoes[1] + sessoes[2] + 

							sessoes[3] + sessoes[4] + sessoes[5] + 

							sessoes[6] + sessoes[7] + sessoes[8] + 

							sessoes[9] );

    

					URLConnection con = notesUrl.openConnection();

					String usuSenha = "usuario:senha";

					con.setRequestProperty("Authorization", "Basic " + usuSenha);

					con.setDefaultUseCaches(false);

					BufferedReader in = new 
					            BufferedReader(new InputStreamReader(con.getInputStream()));



					flag = false;

					linha = in.readLine();

					while (linha=in.readLine()!=null&&!flag) {

						if (linha.indexOf("<!-- rtini -->") != -1) {

							flag = true;

							conteudo = linha;

						}

					}

		                   

					flag = false;

					if (conteudo.indexOf("<!-- rtend -->") != -1) {

						flag = true;

					}

		            

					while (linha=in.readLine()!=null&&!flag) {

						if (linha.indexOf("<!-- rtend -->") != -1) {

							flag = true;

						}

						conteudo = conteudo + linha;

					}

		            

					in.close();

		            

					StringBuffer buff = new StringBuffer(conteudo);            

		            

					buff.replace(0, buff.indexOf("<!-- rtini -->") + 14, "");

					buff.replace(buff.indexOf("<!-- rtend -->"), buff.length(), "");

		                        	            

					out.write(data  + "@@@");

					out.write(titulo  + "@@@");

					out.write(buff.toString() + "\n");

		            

					entrada = nav.getNext();

				}

				out.close();

			}

			catch (Exception e) {

				e.printStackTrace();

		}

	}

}

Este exemplo produzirá um arquivo texto, com uma linha para cada documento Notes, onde os campos estão separados pelo delimitador '@@@'

31/10/2006 09:50:26@@@Rua fica bloqueada até amanhã@@@<BR><FONT SIZE=2 FACE="Verdana">A Prefeitura de Curitiba fará obras emergenciais de recuperação das galerias de águas pluviais na Rua Conselheiro Laurindo, no trecho de duas quadras entre os cruzamentos com as ruas André de Barros e Itararé, no Centro. O trabalho começou às 8 horas de ontem e deve terminar amanhã</FONT><BR><FONT SIZE=2 FACE="Verdana">Os motoristas que seguem pela Conselheiro Laurindo deverão entrar à direita na André de Barros, e só poderão retornar à Conselheiro após o cruzamento com a Rua Itararé.</FONT><BR><BR><FONT SIZE=2 FACE="Verdana">A Diretoria de Trânsito de Curitiba (Diretran) recomenda aos motoristas que, sempre que possível, procurem caminhos alternativos aos locais de obras. Além disso, é necessário planejar bem o itinerário e sair com antecedência para evitar atrasos, especialmente nos horários de pico, pois existe a possibilidade de pontos de lentidão no tráfego da região. A Rádio-Trânsito, serviço oferecido pela Prefeitura de Curitiba, com boletins em 15 emissoras de rádio da cidade, alertará os motoristas sobre os desvios durante o período de obras e bloqueio.</FONT><BR><BR><BR><FONT SIZE=2 FACE="Verdana">JORNAL DO ESTADO</FONT>

31/10/2006 09:46:49@@@Polícia Civil fecha desmanche caseiro na Vila Esperança@@@<BR><FONT SIZE=2 FACE="Verdana">A Polícia Civil apreendeu ontem dezenas de peças de veículos nos fundos e uma residência na rua Pirapó, Vila Esperança, em Maringá. Segundo os policiais, o local era usado como um desmanche e as peças serviam para regularizar carros comprados em leilões.</FONT><BR><FONT SIZE=2 FACE="Verdana">Os investigadores da PC, informaram que vinham monitorando o local há cerca de 30 dias. Durante a operação de ontem, os policiais encontraram cerca de 50 mini-frentes de diversos veículos, várias carcaças com as numerações raspadas e metade de um Fiat Palio, também sem identificação.</FONT><BR><FONT SIZE=2 FACE="Verdana">Em outro local, na avenida Morangueira, os policiais encontraram um motor e um câmbio, que suspeitam ser do Palio. Ambos estavam com a numeração raspada. Segundo a PC, o proprietário do local comprava veículos batidos em leilões e usava as peças para montar um carro novo e com isso regularizar carros furtados.</FONT><BR><FONT SIZE=2 FACE="Verdana">O proprietário da casa, Rayner Fernando Silva, negou os crimes e afirmou na delegacia que havia comprado tudo com nota e dentro da lei. Ele disse que todas as peças estavam regularizadas e não havia cometido crime algum.</FONT><BR><FONT SIZE=2 FACE="Verdana">No entanto, os policiais informaram que o volume de peças é muito superior as notas apresentadas por Silva. </FONT><BR><BR><FONT SIZE=2 FACE="Verdana">JORNAL HOJE - </FONT><B><I><FONT SIZE=2 FACE="Verdana">Maringá</FONT></I></B>

Attachments