Changes between Initial Version and Version 1 of WF/ExportacaodedadosdeaplicacoesLotusNotes


Ignore:
Timestamp:
07/24/07 15:01:43 (17 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • WF/ExportacaodedadosdeaplicacoesLotusNotes

    v1 v1  
     1Existem duas possibilidades de exportação de dados do Notes. Uma é utilizando Java e outra utilizando o produto !NotesSQL. Este documento descreve a alternativa Java, e é recomendado caso existam campos texto-rico nos documentos a serem exportados. 
     2  
     3 
     4== Configuração do servidor Lotus Domino == 
     5 
     6 
     7 
     8No 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.  
     9 
     10 
     11 
     121) Edite o arquivo Notes.ini, do servidor, e na chave "ServerTasks" acrescente a tarefa "diiop" 
     13 
     142) 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" 
     15 
     163) No mesmo documento, nas “opções de autenticação”, marque “Sim” para as categorias “nome e senha” e “anônimo” 
     17 
     184) Selecione a aba "Segurança" e na seção "Restrições Java/Com" preencha com "*" 
     19 
     205) 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' 
     21 
     226) Caso existam firewalls no caminho entre a estação cliente e o servidor, deve-se liberar a porta 63148 
     23 
     24 
     25 
     26No ambiente Celepar, o servidor Celepar2_cta_m, já está configurado adequadamente. Para facilitar as coisas, copie a base Notes para este servidor, ao invés de configurar um servidor de cliente. 
     27 
     28 
     29 
     30== Configuração da base Notes == 
     31 
     32 
     33 
     34Depois 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 útimo da base e ler o conteúdo das colunas.  
     35 
     36 
     37 
     381) Crie uma visão na base com o nome 'Dump'. Construa a fórmula de seleção de documentos conforme necessário. 
     39 
     402) 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: 
     41 
     42 
     43 
     44Coluna 1: @Text(@!DocumentUniqueID) 
     45 
     46Coluna 2: @Text(Data_Publicacao) 
     47 
     48Coluna 3: Titulo 
     49 
     50 
     51 
     52Na coluna 3, 'titulo' é uma campo qualquer do documento 
     53 
     54 
     55 
     56[[Image(http://doc.workflow.celepar.parana/wiki/notes_view.png)]] 
     57 
     58 
     59 
     60Em 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. 
     61 
     62 
     63 
     641) Edite o documento onde o campo texto rico está 
     65 
     662) Coloque o identificador <!-- rtini --> antes do campo texto rico 
     67 
     683) Coloque o identificaror <!-- rtend --> após o campo texto rico 
     69 
     704) Marque os dois identificadores como texto html. (Selecione o texto e clique no menu Texto/Html) 
     71 
     725) Salve o documento 
     73 
     74 
     75 
     76[[Image(http://doc.workflow.celepar.parana/wiki/notes_doc.png)]] 
     77 
     78 
     79 
     806) 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. 
     81 
     82 
     83 
     84== Configuração do ambiente Java == 
     85 
     86 
     87 
     88As configurações a seguir referem-se ao programa 'Eclipse' como ferramenta para rodar Java. Também podem ser utilizados outros compiladores, mas o 'Eclipse' seria o mais indicado, devido às suas facilidades de gerenciamento de projeto. 
     89 
     90 
     91 
     921) Copiar os arquivos Notes.jar e NCSO.jar para algum diretório do seu disco local 
     93 
     942) Abrir o Eclipse 
     95 
     963) Criar um projeto do tipo java 
     97 
     984) 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 
     99 
     100 
     101 
     102[[Image(http://doc.workflow.celepar.parana/wiki/notes_eclipse.png)]]  
     103 
     104 
     105 
     1065) Volte para a interface de programação e importe o arquivo exemplo de código java 
     107 
     1086) 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. 
     109 
     110 
     111 
     112{{{ 
     113 
     114 
     115 
     116import java.io.*; 
     117 
     118import java.net.*; 
     119 
     120import java.util.*; 
     121 
     122import lotus.domino.*; 
     123 
     124 
     125 
     126public class detran { 
     127 
     128        public static void main(String args[]) { 
     129 
     130                try { 
     131 
     132                                Session s = NotesFactory.createSession("10.15.61.13","viani"," * * *"); 
     133 
     134                                Database db = s.getDatabase(s.getServerName(), "teste\empregado.nsf"); 
     135 
     136                                View visao = db.getView("dump");                                 
     137 
     138                                ViewNavigator nav = visao.createViewNav(); 
     139 
     140                                ViewEntry entrada = nav.getFirst(); 
     141 
     142         
     143 
     144                                String unid; 
     145 
     146                                String data; 
     147 
     148                                String titulo; 
     149 
     150                                 
     151 
     152                                String linha; 
     153 
     154                                String conteudo = ""; 
     155 
     156                                boolean flag = false; 
     157 
     158                                BufferedWriter out = new BufferedWriter(new FileWriter("detrandump.txt")); 
     159 
     160                         
     161 
     162                                String[] sessoes = {    "1,2,3,4,5,6,7,8,9,", 
     163 
     164                                                        "1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,", 
     165 
     166                                                        "2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,", 
     167 
     168                                                        "3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9,", 
     169 
     170                                                        "4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,", 
     171 
     172                                                        "5.1,5.2,5.3,5.4,5.5,5.6,5.7,5.8,5.9,", 
     173 
     174                                                        "6.1,6.2,6.3,6.4,6.5,6.6,6.7,6.8,6.9,", 
     175 
     176                                                        "7.1,7.2,7.3,7.4,7.5,7.6,7.7,7.8,7.9,", 
     177 
     178                                                        "8.1,8.2,8.3,8.4,8.5,8.6,8.7,8.8,8.9,", 
     179 
     180                                                        "9.1,9.2,9.3,9.4,9.5,9.6,9.7,9.8,9.9"  
     181 
     182                                }; 
     183 
     184                                 
     185 
     186                                while(entrada != null) { 
     187 
     188                                        unid            = (String) entrada.getColumnValues().elementAt(0); 
     189 
     190                                        data            = (String) entrada.getColumnValues().elementAt(1); 
     191 
     192                                        titulo          = (String) entrada.getColumnValues().elementAt(2); 
     193 
     194                                         
     195 
     196                                        System.out.println(unid); 
     197 
     198                                         
     199 
     200                                        URL notesUrl = new URL( "http://10.15.61.13/teste/empregado.nsf/0/" +  
     201 
     202                                                        unid + "?opendocument&expandsection=" +  
     203 
     204                                                        sessoes[0] + sessoes[1] + sessoes[2] +  
     205 
     206                                                        sessoes[3] + sessoes[4] + sessoes[5] +  
     207 
     208                                                        sessoes[6] + sessoes[7] + sessoes[8] +  
     209 
     210                                                        sessoes[9] ); 
     211 
     212     
     213 
     214                                        URLConnection con = notesUrl.openConnection(); 
     215 
     216                                        String usuSenha = "viani:mausenha"; 
     217 
     218                                        con.setRequestProperty("Authorization", "Basic " + usuSenha); 
     219 
     220                                        con.setDefaultUseCaches(false); 
     221 
     222                                        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
     223 
     224 
     225 
     226                                        flag = false; 
     227 
     228                                        linha = in.readLine(); 
     229 
     230                                        while[wiki:WF_linha=in.readLine(] 
     231!=null&&!flag){ 
     232 
     233                                                if (linha.indexOf("<!-- rtini -->") != -1) { 
     234 
     235                                                        flag = true; 
     236 
     237                                                        conteudo = linha; 
     238 
     239                                                } 
     240 
     241                                        } 
     242 
     243                                    
     244 
     245                                        flag = false; 
     246 
     247                                        if (conteudo.indexOf("<!-- rtend -->") != -1) { 
     248 
     249                                                flag = true; 
     250 
     251                                        } 
     252 
     253                             
     254 
     255                                        while[wiki:WF_linha=in.readLine(] 
     256!=null&&!flag){ 
     257 
     258                                                if (linha.indexOf("<!-- rtend -->") != -1) { 
     259 
     260                                                        flag = true; 
     261 
     262                                                } 
     263 
     264                                                conteudo = conteudo + linha; 
     265 
     266                                        } 
     267 
     268                             
     269 
     270                                        in.close(); 
     271 
     272                             
     273 
     274                                        StringBuffer buff = new StringBuffer(conteudo);             
     275 
     276                             
     277 
     278                                        buff.replace(0, buff.indexOf("<!-- rtini -->") + 14, ""); 
     279 
     280                                        buff.replace(buff.indexOf("<!-- rtend -->"), buff.length(), ""); 
     281 
     282                                                             
     283 
     284                                        out.write(data  + "@@@"); 
     285 
     286                                        out.write(titulo  + "@@@"); 
     287 
     288                                        out.write(buff.toString() + " 
     289"); 
     290 
     291                             
     292 
     293                                        entrada = nav.getNext(); 
     294 
     295                                } 
     296 
     297                                out.close(); 
     298 
     299                        } 
     300 
     301                        catch (Exception e) { 
     302 
     303                                e.printStackTrace(); 
     304 
     305                } 
     306 
     307        } 
     308 
     309} 
     310 
     311 
     312 
     313}}} 
     314 
     315 
     316 
     317Este exemplo produzirá um arquivo texto, com uma linha para cada documento Notes, onde os campos estão separados pelo delimitador '@@@' 
     318 
     319 
     320 
     32131/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> 
     322 
     323 
     324 
     32531/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> 
     326 
     327 
     328 
     32931/10/2006 09:44:43@@@Trânsito violento deixa dois mortos no fim de semana@@@<P><FONT SIZE=2 FACE="Verdana">PONTA GROSSA – Duas pessoas morreram e uma ficou gravemente ferida em três acidente de trânsito registrados nesse final de semana em ruas e rodovia de Ponta Grossa. Um coroinha da igreja São Francisco, da Vila Borato, está entre as vítimas. As ocorrências foram atendidas pela Polícia Militar e Polícia Rodoviária Federal (PRF).</FONT><P><FONT SIZE=2 FACE="Verdana">Na madrugada de domingo o motoqueiro Ícaro Luciano Mayer, 26, perdeu a vida no cruzamento das ruas Balduíno Taques e Theodoro Rosas, na área central da cidade. A moto que ele pilotava – uma Yamaha YBR de placa ANV-4924 – ficou destruída ao se envolver numa colisão com a camioneta Ford F-250 de placas AKB-1659, dirigida por Ângelo César Alves Pinto. O rapaz sofreu afundamento de tórax. O corpo foi encaminhado ao necrotério do Instituto Médico Legal. A polícia apurar responsabilidades pela colisão.</FONT><P><FONT SIZE=2 FACE="Verdana">A Polícia Civil da cidade trabalha com a expectativa de identificar a pessoa que dirigia a Variant II de placas ABX-9209, envolvida no atropelamento de Leonardo Rodrigues, 11. O acidente aconteceu às 16 horas de domingo na Rua Alameda Nabuco de Araújo, proximidades da Costalco, no bairro de Uvaranas. O menino sofreu ferimentos em várias partes do corpo, foi socorrido pelo Siate e internado no Hospital Municipal. As lesões são graves, mas ele não corre risco de morte.</FONT><P><FONT SIZE=2 FACE="Verdana">A Variant, segundo o Corpo de Bombeiros, foi encontrada em chamas, minutos depois do acidente, nas imediações da fábrica da Sadia, na Vila Marina. Moradores da região disseram à Polícia Militar que viram o momento em que o motorista desceu do carro, retirou o aparelho de som e em seguida o incendiou com gasolina. Depois subiu na garupa de um motoqueiro e desapareceu. Através das placas do veículo a polícia identificou o nome da pessoa que consta no documento original. Ela será chamada na delegacia para prestar esclarecimentos. </FONT><P><FONT SIZE=2 FACE="Verdana">Repercutem na cidade as informações sobre a morte prematura de um menino de 11 anos numa das rodovias mais perigosas do Paraná. Alexandre Willian da Rosa voltava para casa quando foi atropelado pela Ford F-1000, de placas CEQ-1815, de Ivaiporã (PR). O acidente aconteceu por volta das 19h15 de domingo no km 178 da BR-373 – perímetro urbano da Avenida Souza Naves. O motorista do veículo, Silvano Bueno, se apresentou no Posto Caetano da 3ª Delegacia da PRF, fez o teste de alcoolemia (resultado foi negativo), prestou declarações e foi liberado. Ele responderá a processo por homicídio culposo – sem a intenção de matar. </FONT><P><FONT SIZE=2 FACE="Verdana">Alexandre era coroinha na igreja São Francisco, na Vila Borato, onde morava com os pais e dois irmãos. Ele faria a primeira comunhão no final do ano.</FONT><P><FONT SIZE=2 FACE="Verdana">DIÁRIO DOS CAMPOS</FONT>