-
Notifications
You must be signed in to change notification settings - Fork 96
Extensoes
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/
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.
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)
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
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;
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".
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.
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).
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
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.
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
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()