Skip to content
Markenson edited this page Aug 21, 2014 · 2 revisions

Esta página explica como configurar as extensões do SIGA.

Introdução

O SIGA permite divesas extensões permitindo que determinadas partes do sistema sejam customizadas.

Para obter os projetos de extensão, visite o site http://code.google.com/p/projeto-siga-ext/

Descrição

O siga possui suas interfaces de extensão localizadas no arquivo siga-ext.jar que reside no diretório LIB do servidor de aplicação.

No JBOSS 4.2.2, por exemplo, os caminhos poderiam ser um desses abaixo: no windows - C:\Desenvolvimento\Jboss-4.2.2.GA\server\default\lib\siga-ext.jar no linux - /usr/local/Jboss-4.2.2.GA/server/default/lib/siga-ext.jar

As interfaces disponíveis no momento são : - ConversorHTML - transforma um HTML para PDF - IMontadorQuery - monta a query da pesquisa de documentos.

Interface ConversorHTML (HTML para PDF)

Para criar uma extensão de conversão de html:

  • Exporte o projeto siga-ext.jar para a pasta lib do servidor (%JBOSS_HOME%/server/default/lib/siga-ext.jar)

  • Crie um projeto para a extensão (siga-ext-nome_da_extensao)

  • Implemente a interface ConversorHTML

  • Exporte o arquivo .jar (ex.: siga-ext-conv-html.jar)

  • Coloque o arquivo .jar gerado em server/default/lib/

  • No arquivo siga.properties, defina a propriedade siga.ex.conversor.html.ext = exemplo: siga.ex.conversor.html.ext = br.gov.jfrj.itextpdf.MyPD4ML

  • No banco de dados, configure os modelos que podem utilizar a extensão (TIPO_CONFIG_UTILIZAR_EXTENSAO_CONVERSOR_HTML). No banco de dados, o tipo de configuração está em CORPORATIVO.CP_TIPO_CONFIGURCAO, ID_TP_CONFIGURACAO=33 (Utilizar Extensão de Conversor HTML). (Vide Cp Ex Configuracao para maiores detalhes)

obs: você deverá inserir os dados de configuração tanto em CORPORATIVO.CP_CONFIGURACAO como em SIGA.EX_CONFIGURACAO; Os IDS da configuração inserida (ID_CONFIGURACAO e ID_CONFIGURACAO_EX id devem ser os mesmos).

  • Extensão PD4ML

Se você comprou a biblioteca PD4ML, você pode utilizar esta solução:

  • Faça do download deste arquivo;
  • Insira os arquivos que você adquiriu (pd4ml.jar e pd4ml_tl.jar) no diretório lib do arquivo baixado. Dica: Caso você não conheça outra ferramenta ou não queria descompactar e recompactar o arquivo manualmente, você pode usar o 7zip[que consegue manipular o arquivo .jar diretamente como se fosse um arquivo .zip;
  • Exporte o projeto siga-ext.jar para a pasta lib do servidor (%JBOSS_HOME%/server/default/lib/siga-ext.jar)

Interface IMontadorQuery (Busca Textual)

Para criar uma extensão de conversão de busca textual:

  • Exporte o projeto siga-ext.jar para a pasta lib do servidor (%JBOSS_HOME%/server/default/lib/siga-ext.jar)

  • Crie um projeto para a extensão (siga-ext-nome_da_extensao) (baixe o código http://code.google.com/p/projeto-siga-ext/source/checkout aqui)

  • Implemente a interface IMontadorQuery (você pode usar como modelo a classe MontadorQuerySJRJ.java disponível no repositório do git)

  • Exporte o arquivo .jar (ex.: siga-ext-busca-textual.jar)

  • Coloque o arquivo .jar gerado em server/default/lib/

  • No arquivo siga.properties, defina a propriedade

      siga.ex.montador.query	=	<Nome qualificado da classe que implementa a interface IMontadorQuery>
          siga.lucene.ativo = false	
    

    exemplo: siga.ex.montador.query = br.gov.jfrj.siga.hibernate.ext.MontadorQuerySJRJ siga.lucene.ativo = false

  • Coloque a definição da macro "extensaoBuscaTextual" do freemarker para o seu órgão. De modo que este campo esteja disponível quando a extensão estiver ativada.

Exemplo: [#macro extensaoBuscaTextual]

Conteudo: [/#macro]

plim

Configuração do Oracle Text como ferramenta de busca

Uma vez que se possua licença do Oracle, pode-se configurar o Oracle Text para indexar os campos binários do Siga-Doc e realizar a busca. A versão do Oracle precisa suportar o recurso de indexação de dados compactados.

Seguem as configurações necessárias para a indexação e sincronização do índice textual.

Mais informações em http://docs.oracle.com/cd/B19306_01/text.102/b14218/preface.htm

Indexar os documentos

Este código indexa os dados contidos na tabela EX_DOCUMENTO.

begin
	ctx_ddl.create_preference('CTXSTORE_SIGA', 'BASIC_STORAGE');
	ctx_ddl.set_attribute('CTXSTORE_SIGA', 'I_TABLE_CLAUSE', 'tablespace SIGA_CTX');
	ctx_ddl.set_attribute('CTXSTORE_SIGA', 'K_TABLE_CLAUSE', 'tablespace SIGA_CTX');
	ctx_ddl.set_attribute('CTXSTORE_SIGA', 'R_TABLE_CLAUSE', 'tablespace SIGA_CTX');
	ctx_ddl.set_attribute('CTXSTORE_SIGA', 'N_TABLE_CLAUSE', 'tablespace SIGA_CTX');
	ctx_ddl.set_attribute('CTXSTORE_SIGA', 'I_INDEX_CLAUSE', 'tablespace SIGA_CTX');
	ctx_ddl.set_attribute('CTXSTORE_SIGA', 'P_TABLE_CLAUSE', 'tablespace SIGA_CTX');
	Ctx_Ddl.Create_Preference ('mixed_case_lexer_pref','BASIC_LEXER');
	Ctx_Ddl.Set_Attribute ('mixed_case_lexer_pref', 'mixed_case', 'FALSE');
	Ctx_Ddl.Set_Attribute ('mixed_case_lexer_pref', 'base_letter','TRUE'); 
end;
	create index EX_DOCUMENTO_IDX_090 on siga.ex_documento(conteudo_blob_doc) indextype is ctxsys.context parameters ('storage CTXSTORE_SIGA LEXER MIXED_CASE_LEXER_PREF SYNC (MANUAL)')

Sincronizar

Este código atualiza os índices conforme as alterações realizadas na tabela EX_DOCUMENTO desde a última sincronização.

begin  
 ctx_ddl.SYNC_INDEX('EX_DOCUMENTO_IDX_090');
end;

Sincronização automática a cada updade, insert ou delete

Para que seja disparada a sincronização de modo automático, a cada alteração, inserção ou exclusão de documento, utiliza-se este código.

alter index EX_DOCUMENTO_IDX_090 REBUILD PARAMETERS ('REPLACE SYNC (ON COMMIT)')

Sincronização em intervalo de tempo

Para manter os índices sincronizados sem atrelar a operação de indexação às inserções, atualizações e deleções de documento, primeiro deve-se tornar manual a indexação e, em seguida, configurar um job de sincronização a ser executado de forma regular, a cada intervalo de tempo.

alter index EX_DOCUMENTO_IDX_090 REBUILD PARAMETERS ('REPLACE SYNC (MANUAL)')

@drjobdml EX_DOCUMENTO_IDX_090 10
Antes de executar o comando acima, setar parâmetro job_queue_processes no arquivo de inicialização do Oracle

Otimizar índices

Conforme mencionado em [é recomendável otimizar completamente mensalmente ou quando o desempenho se degradar o suficiente.

O rebuild pode levar menos tempo e ser mais eficiente que o FULL. A opção FULL é necessária para que seja executado o garbage collector, que elimina índices de registros apagados. Mais informações https://forums.oracle.com/forums/thread.jspa?threadID=386416 aqui.

Executar "exec ctx_ddl.optimize_index ('doc_index', 'REBUILD')" ou "alter index doc_index REBUILD ONLINE" para que as operações dml continuem liberadas durante o rebuilding.

begin 
	ctx_ddl.optimize_index('EX_DOCUMENTO_IDX_090','FAST'); 
end;

Extensão Editor de Texto

A edição de textos dos documentos do siga é realizada utilizando-se o editor FCKEditor. A definição de qual editor o SIGA-DOC usa é feita através da macro do freemarker chamada "editor".

Explicação rápida de como funciona a chamada da extensão

A macro "editor" faz uma verificação se o modelo especificado deve usar a extensão do editor ou não no código:

             [#if (func.podeUtilizarExtensaoEditor(lotaTitular, idMod?number))!false]
                                                   [@extensaoEditor nomeExtensao=var conteudoExtensao=v/]
                                                [#else]
                            <iframe id="${var}___Frame" src="/fckeditor/editor/fckeditor.html?InstanceName=${var}" width="100%" height="300" frameborder="no" scrolling="no" FCK="true"></iframe>
                                                [/#if]

Se a função "podeUtilizarExtensaoEditor" retornar true, a macro de extensão do editor é chamada. Se o retorno for false o FCKEditor é chamado.

Configuração

Para ter acesso às macros definidas:

  • Na página incial, clique no menu Ferramentas>Cadastro de Modelos

Para habilitar a extensão do editor, é necessário

  • redefinir a macro [nomeExtensao=var conteudoExtensao=v/](@extensaoEditor) com o código referente ao seu editor.

  • No banco de dados, configure os modelos que podem utilizar a extensão (TIPO_CONFIG_UTILIZAR_EXTENSAO_EDITOR). No banco de dados, o tipo de configuração está em CORPORATIVO.CP_TIPO_CONFIGURCAO, ID_TP_CONFIGURACAO=32 (Utilizar Extensão Editor). (Vide Cp Ex Configuracao para maiores detalhes)

obs: você deverá inserir os dados de configuração tanto em CORPORATIVO.CP_CONFIGURACAO como em SIGA.EX_CONFIGURACAO; Os IDS da configuração inserida (ID_CONFIGURACAO e ID_CONFIGURACAO_EX id devem ser os mesmos).

Extensão XStandard

Se você adiquiriu o Editor XStandard, para utilizá-lo siga esses passos:

  • Baixe o projeto siga-ext-editor do repositório

  • Inclua, no diretório WebContent/XStandard do projeto baixado, o arquivo license.txt, disponível no site do XStandard após a aquisição

  • Exporte o projeto siga-ext-editor.war e faça o deploy no sevidor de aplicação

  • Insira a seguinte macro para o seu órgão:

    [#macro XStandard nome="" conteudo=""] <script type="text/javascript" language="Javascript1.1">

          var insertingTable = false;
       
          function onSave() {
              var xstandard = document.getElementById('xstandard');
              if (xstandard){
                  document.getElementById('${nome}').EscapeUnicode = false;
                  document.getElementById('${nome}').value = xstandard.value;
              }
          }
      
          function xsDialogPropertiesActivated(id, qpath, element, attributes, metadata) {
          if (qpath == '' && element == 'table'){
              document.getElementById('xstandard').SetDialogProperties("<attributes><attr><name>summary</name><value>Tabela</value></attr><attr><name>bordercolor</name><value>#000000</value></attr><attr><name>style</name><value>border-width:1px;border-style:solid;border-collapse:collapse</value></attr></attributes>", false, false);
              }
          }
    
          setTimeout("verificaSeCarregou()",3000);
          function verificaSeCarregou()
          {
              var xstandard = document.getElementById('xstandard');
            if (!xstandard || xstandard.readyState != 4){
                document.getElementById('desconsiderarExtensao').value='true';
                sbmt();
              }
          }
    
          </script>
    
          <object classid="clsid:0EED7206-1661-11D7-84A3-00606744831D"
          codebase="http://${serverAndPort}/siga-ext-editor/XStandard/XStandard.cab#Version=3,0,0,0"
          type="application/x-xstandard" id="xstandard" width="800" height="400">
    
          <param nams="ImageLibraryURL"
          value="http://soap.xstandard.com/imagelibrary.aspx" />
          <param name="AttachmentLibraryURL"
          value="http://soap.xstandard.com/attachmentlibrary.aspx" />
          <param name="SpellCheckerURL"
          value="http://soap.xstandard.com/spellchecker.aspx" />
          <param name="DirectoryURL"
          value="http://soap.xstandard.com/directory.aspx" />
          <param name="SubdocumentURL"
          value="http://soap.xstandard.com/subdocument.aspx" />
          <param name="EscapeUnicode" value="false" />
    
           
          <param name="Value" value="${conteudo?html}" />
    
          <param name="SpellCheckerLangFilter" value="pt" />
          <param name="SpellCheckerLang" value="pt" />
          <param name="License" value="http://${serverAndPort}/siga-ext-editor/XStandard/license.txt" />
          <param name="CSS" value="http://${serverAndPort}/siga-ext-editor/XStandard/format.css" />
          <param name="Styles" value="http://${serverAndPort}/siga-ext-editor/XStandard/styles-pt.xml" />
          <param name="Buttons" value="http://${serverAndPort}/siga-ext-editor/XStandard/buttons-pt.xml" />
          <param name="Icons" value="http://${serverAndPort}/siga-ext-editor/XStandard/icons.xml" />
          <!-- Ver como coloca português -->
          <param name="Lang" value="pt" />
          <param name="Localization" value="http://${serverAndPort}/siga-ext-editor/XStandard/localization-pt.xml" />
          <param name="EnablePasteMarkup" value="yes" />
          <param name="ToolbarWysiwyg"
          value="cut,copy,paste,undo,redo,find-replace,,strong,em,underline,,align-left,align-center,align-right,justify,,undo-blockquote,blockquote,,undo-indent-first,indent-first,,ordered-list,unordered-list,,draw-data-table,,separator,pagebreak,,spellchecker,,source,,help" />
          <param name="BackgroundColor" value="white" />
          <param name="BorderColor" value="#888888" />
          <!-- <param name="Base" value="http://soap.xstandard.com/library/" /> -->
          <param name="LatestVersion" value="2.0.5.0" />
          <param name="ToolbarEffect" value="linear-gradient" />
          <param name="ShowStyles" value="yes" />
          <param name="ShowToolbar" value="yes" />
          <param name="Mode" value="wysiwyg" />
          <param name="Options" value="0" />
          <param name="IndentOutput" value="yes" />
          <param name="ProxySetting" value="platform" />
          <param name="Debug" value="yes" />
    
          <!-- Tem duas opções que talvez sejam úteis: PreviewXSLT e ScreenReaderXSLT -->
          <!-- A opção icons é pros ícones das operações principais. O Placeholders é pros ícones das tags customizadas -->
          <!-- Ver qual a utilidade desse aqui: param name = EditorCSS --> <!-- Essas abaixo definem os botões em outros modos de visualização 
          <param name="ToolbarSource" value="" />
          <param name="ToolbarPreview" value="" />
          <param name="ToolbarScreenReader" value="" /> 
          Talvez CustomInlineElements, CustomBlockElements e CustomEmptyElements sirvam pras tabelas
          Depois, ver se as integration settings servem pra alguma coisa
          VER HeartbeatURL e Heartbeat Interval. Parecem ser úteis pra verificar sessão
          Talvez algumas subs sejam úteis para mudar os contexts menus. Ver na seção Hooks & Extensions
          Funções TagList, Path e QPath e TagListXML são interessantes
          --> 
          </object>
    

    [/#macro]

  • Defina a extensão nas macros do seu órgão [#macro extensaoEditor nomeExtensao="" conteudoExtensao=""] [#if nomeExtensao == ""] [#local nomeExtensao = nomeExtensaoJsp!"" /] [/#if] [#if conteudoExtensao == ""] [#local conteudoExtensao = conteudoExtensaoJsp!"" /] [/#if] [@XStandard nome=nomeExtensao conteudo=conteudoExtensao /] [/#macro] As variáveis nomeExtensaoJsp e conteudoExtensaoJsp são oriundas da rotina de carregamento de extensão de editor de textos chamada a partir de página Jsp. São usadas, portanto, quando o modelo de documento que contém o editor de textos foi escritor em Jsp.

  • Crie um modelo no menu do SIGA-DOC (Ferramentas>Cadastro de modelos, não na página inicial, e sim no menu do módulo DOCUMENTOS) utilizando a macro "editor". Por exemplo:

    [@entrevista] [@grupo titulo="Texto a ser inserido no corpo do memorando"] [@grupo] [@editor titulo="Teste Extensão" var="texto_memorando_extensao" /] [/@grupo] [/@grupo] [@grupo] [@selecao titulo="Tamanho da letra" var="tamanhoLetra" opcoes="Normal;Pequeno;Grande" /] [/@grupo] [@grupo] [@selecao titulo="Fecho" var="fecho" opcoes="Atenciosamente;Cordialmente;Respeitosamente" /] [/@grupo] [/@entrevista]

    [@documento] [@memorando texto=texto_memorando_extensao! fecho=(fecho!)+"," tamanhoLetra=tamanhoLetra! /] [/@documento]

Informação adicional: Se você estiver com erros no XStandard, experimente desativar o XStandard diretamente nos complementos do Internet Explorer ou excluir os arquivos abaixo localizados em C:\Windows\Downloaded Program Files.

XStandard.inf
XStandard.ocx

Extensão Assinador (Assinatura Digital)

Por padrão, o SIGA-DOC realiza a assinatura digital de documentos utilizando o ActiveX Capicom (capicom.dll) disponível no Windows. Por esse fato, a assinatura digital padrão do SIGA-DOC só está disponível no navegador Internet Explorer. Uma alternativa para utilizar outros navegadores é definir uma extensão para o SIGA-DOC (usando um applet java ou outra tecnologia). O texto a seguir descreve como acrescentar outros assinadores no sistema.

A extensão da assinatura digital do SIGA-DOC é feita através da interface IDecodificadorAssinatura localizada no projeto siga-ext.

Para ativar a extensão do assinador é necessário:

  • Criar uma classe que implemente a interface IDecodificadorAssinatura
  • Definir para o seu órgão, via macro "botoesExtensaoAssinador" (`botoesExtensaoAssinador[do freemarker, os botões que chamarão a extensão do assinador na interface gráfica.
  • Definir para o seu órgão, via macro "extensaoAssinador" do freemarker ([#macro extensaoAssinador](/#macro]))[/#macro]`), os códigos que devem estar dispíveis na página para o correto funcionamento da extensão do assinador.

Extensão Assinador da Certisign

Se você adquiriu o assinador da Certisign siga os seguintes passos para disponibilizá-lo no SIGA-DOC:

  • Defina as seguintes propriedades no arquivo %JBOSS_HOME%/sever/default/conf/siga.properties:

    #Assinador siga.ex.assinatura.decodificador = br.com.esec.misc.Tools siga.ex.assinatura.codeBasePath = http://desenv:8080/siga-ext-assinatura siga.ex.assinatura.messagesUrlPath = http://desenv:8080/siga-ext-assinatura siga.ex.assinatura.policyUrlPath = http://desenv:8080/siga-ext-assinatura OBS: codeBasePath, messagesUrlPath e policyUrlPath ainda não estão sendo usados e são reservados para uso futuro

  • Coloque o diretório %JBOSS_HOME%/Server/default/lib os seguintes arquivos:

    sdk-base.jar sdj-provider.jar

  • Crie um projeto web e configure os arquivos (com o apoio da Certisign):

    ConfigAppBundle.java GravarAssinatura.java cfgApp.properties

  • Coloque no diretório WEB-INF/lib do projeto:

sdk-web.jar - applet fornecido pela Certsign CertDigitalLib.jar - biliotecas de certificado digital fornecido pela Certisign

  • Defina a macro do freeemarker "botoesExtensaoAssinador" para o seu órgão:

    [#macro botoesExtensaoAssinador] [/#macro]

  • Defina a macro do freemarker "extensaoAssinador" para o seu órgão:

    [#macro extensaoAssinador]

       <!--Adicionar applet na pagina -->
          <applet id="oApplet"
                  codebase="${request_scheme}://${request_serverName}:${request_localPort}/siga-ext-assinatura/applet"
                  code="br/com/esec/signapplet/DefaultSignApplet.class"
                  archive="sdk-web.jar" width="1" height="1">
                  <!--Parametros de cache -->
                  <param name="cache_archive" value="sdk-web.jar">
                  <param name="cache_version" value="1.8.2.01">
                  <param name="sdk-base-version" value="1.8.2.01">
    
                  <!--Parametros de configuracao -->
                  <param name="userid" value="sdk-web">
                  <param name="config.type" value="local">
              <param name="checkLibs" value="true" />
    
                  <!--Parametros de funcionamento -->
                  <!-- Modo de Operação=1 -> Download de documentos -->
                  <!-- Modo de Operação=2 -> Upload de documentos -->
                  <!-- Modo de Operação=4 -> Verificação de Assinaturas e Certificados -->
                  <!-- Modo de Operação=5 -> Assinatura de String -->
    
                  <param name="mode" value="1">
                  <param name="allowAddFiles" value="false">
                  <param name="allowViewFiles" value="true">
                  <param name="viewGui" value="false">
    
                  <!--Parametros de assinatura -->
                  <param name="detachedSignature" value="true">
                  <param name="addCertificatePath" value="true">
    
                  <!--Parametros de saida -->
                  <param name="jspServer"
                          value="${jspServer}">
                  <param name="encodedFileCount" value="QTYDATA">
                  <param name="encodedFileId" value="IDDATA">
                  <param name="encodedFileParam" value="ENCDATA">
                  <param name="nextURL"
                          value="${nextURL}">
                          
                  <!--Parametros de politica
          <param name="signTime" value="true" />    
          <param name="policyURL" value="${policy_url_path}/policies-ICP-BRASIL/PA_AD_RB.cer" />
          <param name="usePolicy" value="true" />
          <param name="envelopeType" value="cades" />
          <param name="globalField.0" value="politica=PA_AD_RB.cer" />
          -->
    
          <!-- Parametros para usar somente o hash -->
          <param name="useHashOnly" value="true" />
          <param name="digestAlgorithm" value="SHA1" />
          <param name="signingAlgorithm" value="SHA1withRSA" />
          
          <!--parametros de entrada-->
                  <param name="colCount" value="1" />
                  <param name="colName.0" value="Arquivo" />
                  <param name="colAlias.0" value="#arquivo" />
          <param name="Arquivo.0" value="${sigla}">
          <param name="url.0" value="${url_0}">
          </applet>
    
          <script type="text/javascript">
                  enableButtons(false);
    
                  // Verifica se a applet foi iniciada ou não.
                  var started = false;
                  function checkAppletStarted() {
                          if (document.applets['oApplet']) {
                                  try {
                                          started = document.applets['oApplet'].isStarted();
                                  } catch (err) {
                                  }
                          }
                          if (!started)
                                  window.setTimeout("checkAppletStarted()", 1000);
                          else
                                  enableButtons(true);
                  }
    
                  // Habilita e desabilita dos botões
                  function enableButtons(flag) {
                          document.frm.cmdAssinar.disabled = !flag;
                          document.frm.cmdConfigurar.disabled = !flag;
    
                          if (flag) {
                                  var appt = document.getElementById("oApplet");
                                  appt.markDocument(0);
                          }
                  }
    
                  function apptConfigurar() {
                          //Acessa o applet via javascript
                          var appt = document.getElementById("oApplet");
                          //Configurar o repositório do certificado
                          appt.showConfiguration();
                  }
    
                  function apptAssinar() {
                          //Acessa o applet via javascript
                          var appt = document.getElementById("oApplet");
                          //Executar a assinatura dos documentos selecionados
                          appt.signAndSendMarkedDocuments();
                  }
    
                  checkAppletStarted();
          </script>
    

    [/#macro]

  • Faça o deploy da sua aplicação no seu servidor de aplicação

Dicas Gerais

Se você estiver estudando ou depurando o código do SIGA, as extensões que usam o Freemarker são chamadas na classe br.gov.jfrj.siga.ex.util.FuncoesEL do projeto siga-ex com os seguintes métodos: obterBotoesExtensaoAssinador() obterExtensaoAssinador() obterExtensaoEditor() obterExtensaoBuscaTextual()

Clone this wiki locally