Skip to content
jmolivei edited this page Dec 13, 2020 · 28 revisions

Descrição da importação de arquivos XML para a base corporativa

Introdução

O SIGA possui uma base de dados de usuários e órgãos que são alimentadas via arquivos XML. Este documento possui informações referentes a essa importação de dados.

Descrição

O SIGA importa a base de usuários de arquivos XML em um formato pré-definido e insere os dados em seu banco de dados.

A importação é realizada pelo módulo ImportarXML que é um arquivo jar programado para ser executado periodicamente.

Criando o seu órgão no banco de dados

Antes de importar o XML para o seu banco de dados, você deve criar o órgão diretamente no banco de dados. Segue o comando de exemplo:

   Insert 
      into CP_ORGAO_USUARIO (ID_ORGAO_USU,NM_ORGAO_USU,MUNICIPIO_ORGAO_USU,SIGLA_ORGAO_USU,UF_ORGAO_USU,ACRONIMO_ORGAO_USU) 
      values (102,'Tribunal de Justiça do Estado do Rio de Janeiro','Rio de Janeiro','JR','RJ','TJRX');

Onde:

  • ID_ORGAO_USU: ID do órgão. Qualquer ID livre para a tabela cp_orgao_usuario
  • NM_ORGAO_USU: Nome por extenso do órgão
  • MUNICIPIO_ORGAO_USU: Munício on de está localizado o órgão
  • SIGLA_ORGAO_USU: corresponde às duas letras que devem ser acrescentadas à matrícula do durante o login (SIGLA+MATRICULA, por exemplo JR12345)
  • UF_ORGAO_USU: Sigla da unidade federativa
  • ACRONIMO_ORGAO_USU: corresponde ao campo orgaoUsuario do XML

O Programa Importador do XML

#f03c15 FUNCIONA APENAS NO JAVA 7

Faça o donwload do importador de XML na página Versoes do Siga. A última versão do importador está na versão 5.4.12.2 com o nome siga-cp-sinc-one.jar

#f03c15 FUNCIONA APENAS NO JAVA 8 ANTES DA VERSÃO 10

Faça o donwload do importador de XML na página Versoes do Siga. A última versão do importador está na versão 9.0.0.5f com o nome siga-cp-sinc-one.jar

Criando um arquivo XML com os dados a serem importados

O programa importador espera como entrada um arquivo XML com os dados a serem inseridos no banco de dados. Então, será necessário montá-lo (exportar o XML com os dados de algum sistema existente ou construí-lo manualmente). Para obter informações detalhadas sobre como criar seu próprio arquivo XML, veja Dados Corporativos.

Apenas como exemplo, salve o XML abaixo com o nome arquivo.xml:

OBS: Altere o campo orgaoUsuario="ZZ" pelo valor definido em SIGLA_ORGAO_USU (descrito na seção "Criando o seu órgão no banco de dados" acima)

<?xml version="1.0" encoding="UTF-8"?>
<base orgaoUsuario="ZZ">
   <cargos>
      <cargo nome="ANALISTA JUDICIARIO" id="240001" />
   </cargos>
   <funcoes>
      <funcao nome="ASSISTENTE I" id="3" />
   </funcoes>
   <lotacoes>
      <lotacao nome="DESENVOLVIMENTO" id="8631" idPai="8630" sigla="DESENV" />
      <lotacao nome="SECRETARIA DE INFORMÁTICA" id="8630" idPai="" sigla="INFO" />
   </lotacoes>
   <pessoas>
      <pessoa nome="ANGELICA" id="148238" funcaoConfianca="" email="[email protected]" lotacao="8631" situacao="1" 
         cargo="240001" matricula="32017" grauInstrucao="" tipoSanguineo="A+" naturalidade="SC" nacionalidade="BRASILEIRA" 
         dtNascimento="17091976" sexo="F" cpf="11111111111" rua="" bairro="" cidade="" uf="" cep="" dtInicioExercicio="" 
         atoNomeacao="" dtNomeacao="" dtAtoPublicacao="" dtPosse="" padraoReferencia="" rg="12345678-9" rgOrgao="DIC" 
         rgUf="" rgDtExp="02072008" estCivil="" sigla="AHP" tipo="" />
   </pessoas>
</base>

Definindo as configurações

É necessário criar um arquivo de propriedades contendo as configurações de conexão ao banco e servidor de e-mail para enviar as notificações de importação. Segue exemplo de arquivo de propriedade chamado siga.properties:

######################## 
### siga.cp.sinc.xml  ## 
######################## 

#Envio de Email
siga.cp.sinc.xml.servidor.smtp=SERVIDOR_DE_EMAIL
siga.cp.sinc.xml.servidor.debug=false
siga.cp.sinc.xml.servidor.usuario.remetente=Administrador do SIGA<[email protected]>

# Destinatário dos emails
siga.cp.sinc.xml.lista.destinatario=EMAIL_1, EMAIL_2

#Configurações de conexão
hibernate.connection.url=jdbc:oracle:thin:@[servidor]:1521:[instancia]
hibernate.connection.username=[usuario]
hibernate.connection.password=[senha]
hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver

c3p0.min_size=5
c3p0.max_size=20
c3p0.timeout=300
c3p0.max_statements=50

Executando o programa importador

O siga-cp-sinc.one-jar.jar deve ser executado da seguinte maneira:

    java [-Dsiga.properties.file=CAMINHO_DO_ARQUIVO_siga.properties] -jar [CAMINHO_DO_ARQUIVO]/siga-cp-sinc.one-jar.jar -[ambiente] -[localidade]

Onde:

  • *ambiente: desenv, prod ou homolo
  • *localidade: sjrj,trf2, sjes ou -url=ENDEREÇO_DE_UM_XML_A_SER_IMPORTADO

Obs.: Se o arquivo siga.properties estiver no mesmo diretório do siga-cp-sinc.one-jar.jar, o parâmetro -Dsiga.properties.file pode ser omitido.

Exemplo 1 (Arquivo no file system)

    java -Dsiga.properties.file=[CAMINHO_DO_ARQUIVO]/siga.properties -jar [CAMINHO_DO_ARQUIVO]/siga-cp-sinc.one-jar.jar -desenv -url file:///arquivo.xml

Exemplo 2:

    java -Dsiga.properties.file=[CAMINHO_DO_ARQUIVO]/siga.properties -jar [CAMINHO_DO_ARQUIVO]/siga-cp-sinc.one-jar.jar -desenv -url http://127.0.0.1/arquivo.xml

ou

    java -Dsiga.properties.file=[CAMINHO_DO_ARQUIVO]/siga.properties -jar [CAMINHO_DO_ARQUIVO]/siga-cp-sinc.one-jar.jar -homolo -trf2

Agendando o programa importador

Configure o cron (através do comando crontab -e no linux) para executar periodicamente o siga-cp-sinc.one-jar.jar. (Se você não sabe o que é o cron, tente começar por aqui)

Exemplo de cron:

    #Prod - manhã----------------------------------------------
    0 3 * * * java -Dsiga.properties.file=/usr/local/jboss4/server/default/conf/siga.properties -jar /home/tomcat/importarxml.jar -prod -sjrj
    0 1 * * * java -Dsiga.properties.file=/usr/local/jboss4/server/default/conf/siga.properties -jar /home/tomcat/importarxml.jar -prod -sjes
    0 2 * * * java -Dsiga.properties.file=/usr/local/jboss4/server/default/conf/siga.properties -jar /home/tomcat/importarxml.jar -prod -trf2
    0 4 * * * java -Dsiga.properties.file=/usr/local/jboss4/server/default/conf/siga.properties -jar /home/tomcat/importarxml.jar -prod -url http://127.0.0.1/arquivo.xml

Processo de Importação

O processo de importação se dá de forma automática (agendada), com execução diária. É executado pelo seguinte comando java: java -jar /home/tomcat/ImportarXml.jar -prod –sjrj

O primeiro parâmetro indica se a importação se dá na produção, desenvolvimento ou homologação. O segundo, informa qual a base (ou órgão usuário) está sendo importado.

O arquivo /ImportarXml/src/application.properties do pacote br.gov.jfrj.importar possui os atributos necessários à execução do programa, como:

  • O nome do servidor smtp;
  • Se o programa executará em ‘debug’ ou não;
  • Os endereços de e-mail para onde o programa enviará o resultado da execução do mesmo;
  • As URL onde o programa encontrará o arquivo XML que executará para cada órgão usuário.

Utilizando o WebService de Importação

#f03c15 `FUNCIONA APENAS DA VERSÃO 9.0.17.1 EM DIANTE

Em versões mais recentes do Siga, é possível fazer a importação enviando o XML para uma webservice do próprio sistema, não sendo mais necessária a utilização do ImportarXml.jar.

Nos exemplos abaixo utilizaremos o seguinte arquivo XML:

<?xml version="1.0" encoding="UTF-8"?>
<base orgaoUsuario="TESTE">
   <cargos>
      <cargo nome="ANALISTA JUDICIARIO" id="250001" />
   </cargos>
   <funcoes>
      <funcao nome="ASSISTENTE I" id="3" />
   </funcoes>
   <lotacoes>
      <lotacao nome="DESENVOLVIMENTO" id="8631" idPai="8630" sigla="DESENV" />
      <lotacao nome="SECRETARIA DE INFORMÁTICA" id="8630" idPai="" sigla="INFO" />
   </lotacoes>
   <pessoas>
      <pessoa nome="ANGELICA" id="148238" funcaoConfianca="" email="[email protected]" lotacao="8631" situacao="1" 
         cargo="250001" matricula="32017" grauInstrucao="" tipoSanguineo="A+" naturalidade="SC" nacionalidade="BRASILEIRA" 
         dtNascimento="17091976" sexo="F" cpf="11111111111" rua="" bairro="" cidade="" uf="" cep="" dtInicioExercicio="" 
         atoNomeacao="" dtNomeacao="" dtAtoPublicacao="" dtPosse="" padraoReferencia="" rg="12345678-9" rgOrgao="DIC" 
         rgUf="" rgDtExp="02072008" estCivil="" sigla="AHP" tipo="" />
   </pessoas>
</base>

O XML acima pressupõe a existência de um órgão usuário com o acrônimo 'TESTE' na tabela cp_orgao_usuario. Para criá-lo, conecte-se com o banco de dados e realize o seguinte commando:

INSERT INTO corporativo.cp_orgao_usuario (ID_ORGAO_USU, NM_ORGAO_USU, MUNICIPIO_ORGAO_USU, SIGLA_ORGAO_USU, ACRONIMO_ORGAO_USU) VALUES ('1', 'ORGAO DE TESTE TT', 'Rio de Janeiro', 'TT', 'TESTE');

Será necessário definir uma propriedade do JBoss, no arquivo standalone.xml, chamada siga.sinc.password. Utilize uma senha bem complexa, como por exemplo uma GUID:

<property name="siga.sinc.password" value="***GUID***"/>

Depois, envie o XML para o Siga utilizando um comando do tipo:

$ curl -H "Authorization: ***GUID***" -F file=@./exemplo.xml \
    "http://localhost:8080/siga/public/app/admin/sinc?sigla=TESTE&maxSinc=100&modoLog=true"

Estando tudo correto, será retornado um JSON que, entre outros parâmetros, apresentará o log da importação:

{
    "maxSinc": 100,
    "modoLog": true,
    "sigla": "TESTE",
    "log": [
        "--- Processando Tue Mar 03 13:37:37 BRT 2020 ---",
        "*** MODO LOG: use -modoLog=false para sair do modo LOG e escrever as alterações",
        "MAX SINC = 100",
        "Importando: XML",
        "XML confirma órgão usuário: TESTE (2)",
        "Importando: BD",
        "Gravando alterações",
        "Incluindo: ASSISTENTE I (0)",
        "Incluindo: ANALISTA JUDICIARIO (0)",
        "Incluindo: SECRETARIA DE INFORMÁTICA (0)",
        "Incluindo: DESENVOLVIMENTO (1)",
        "Incluindo: ANGELICA (2)",
        "*** 32017",
        "*** MODO LOG: as alterações não serão efetivadas! Executando rollback...",
        "Total de alterações: 5",
        "Tempo total de execução: 0 segundos (0 min)",
        " ---- Fim do Processamento --- "
    ]
}

Quando modoLog=true, o log é apresentado, mas as alterações não são efetivadas, porque é feito um rollback no banco de dados. Para efetivá-las, use modoLog=false e verá um resultado assim:

{
    "maxSinc": 100,
    "modoLog": false,
    "sigla": "TESTE",
    "log": [
        "--- Processando Tue Mar 03 13:42:03 BRT 2020 ---",
        "MAX SINC = 100",
        "Importando: XML",
        "XML confirma órgão usuário: TESTE (2)",
        "Importando: BD",
        "Gravando alterações",
        "Incluindo: SECRETARIA DE INFORMÁTICA (0)",
        "Incluindo: ASSISTENTE I (0)",
        "Incluindo: ANALISTA JUDICIARIO (0)",
        "Incluindo: DESENVOLVIMENTO (1)",
        "Incluindo: ANGELICA (2)",
        "*** 32017",
        "Transação confirmada",
        "Total de alterações: 5",
        "Tempo total de execução: 0 segundos (0 min)",
        " ---- Fim do Processamento --- "
    ]
}

Caso ocorra algum tipo de erro, como por exemplo se a sigla informada na URL não for a mesma existente na propriedade orgaoUsuario do XML, será retornado um erro como este:

{
    "errordetails": [{
        "stacktrace": "java.lang.Exception: Sigla de órgão usuário desconhecida: TESTE2\n\tat br.gov.jfrj.siga.cp.util.SigaCpSinc.importarXml(SigaCpSinc.java:498)\n\tat br.gov.jfrj.siga.cp.util.SigaCpSinc.importxml(SigaCpSinc.java:311)\n\tat br.gov.jfrj.siga.vraptor.SincController.sinc(SincController.java:43)\n",
        "service": "sigadocsigner",
        "context": "/siga"
    }],
    "errormsg": "Sigla de órgão usuário desconhecida: TESTE2"
}
Clone this wiki locally