DET - Documento de Especificação Técnica de integração entre TCE-Docs e plugin Word

UnidadeNomeFonee-mail
GER-TILeonardo Ferreira Reis lfreis@tce.go.gov.br

Com a funcionalidade de criação de documentos e modelos de documento no sistema TCE-Docs, no momento da edição de arquivos docx/dotx dentro do Microsoft Word, existe a necessidade de garantir a identidade do usuário que deseja manipular um documento ou modelo de documento controlado pelo TCE-Docs, esteja devidamente identificado no ambiente Microsoft Word.

  1. O Usuário deve estar autenticado no sistema TCE-Docs;
  2. O Registro de modelo ou documento deve ter sido inserido no banco;

Com base na necessidade acima apresentada, foi identificada a seguintes Estória de Usuário, a qual é identificada pelo prefixo EU (Estória de Usuário) seguida de um número, como apresentado abaixo:

CódigoDescrição
EU.27 Como usuário do TCE-GO, QUERO documentar o meio de comunicação entre o portal do TCE-Docs e o plugin do TCE-Docs (Middleware) , PARA que no futuro algumas possíveis melhorias, ou evoluções sirva-se de referência para o desenvolvimento do mesmo.

A proposta de solução descrita neste escopo é uma sugestão e poderá sofrer mudanças durante o processo de desenvolvimento, caso se identifique a necessidade.

Em alinhamento com a necessidade acima apresentada, foi definido como solução a identificação do usuário através de uma tela de login, onde o usuário responsável pelo documento deverá informar seu usuário e senha, sendo estes os mesmos utilizados no sistema TCE-Docs.

O MSWord enviará as informações via AJAX para um WebApi que fará a validação e identificação do usuário. Detalhes dos serviços WebApi, como tipos de resposta e dados de retorno, estão especificados em FIXME.

Segue abaixo, protótipo da tela de login a ser exibida no momento da abertura do arquivo:

No momento em que o sistema disponibiliza o arquivo para download, deve ser incluso informações necessárias à identificação do arquivo pelo sistema e que serão extraídas e usadas pelo Plugin MSWord:

  1. Id: Sequencial que identifica o registro em banco de dados referente ao arquivo em questão
  2. TipoDocumento: Identifica se o arquivo é um Modelo de Documento ou Documento

Após prova de conceito, foi definido que a inclusão de dados dentro do arquivo será feita manipulando o arquivo MSWord como se vê abaixo:

using Microsoft.Office.Core;
using Microsoft.Office.Interop.Word;
 
    string id = "99";
    string tipoArquivo = "Modelo";
 
    Application wordApp = new Application();
 
    Document documento = wordApp.Documents.Open("caminhoCompletoDoArquivoDOC");
 
    string Hash = Seguranca.ObtenhaHashMd5("Informação que deve estar no TOKEN");
 
            var xml = string.Format(
                "<tcedocs xmlns=\"internals\">" +
                "<arquivo>" +
                    "<id>{0}</id>" +
                    "<tipo>{1}</tipo>" +
                "</arquivo>" +
                "</tcedocs>"                
                , id, tipoArquivo);
 
            var part = documentoWord.CustomXMLParts.Add(xml);    
    ...

No momento da abertura do arquivo MSWord, o Plugin deverá extrair os dados previamente inclusos, que serão utilizados no momento do login. Após prova de conceito, foi definido que a extração de dados do arquivo será feita manipulando o arquivo MSWord como se vê abaixo:

        Office.context.document.customXmlParts.getByNamespaceAsync("internals", function (eventArgs) {
 
            if (eventArgs.status !== Office.AsyncResultStatus.Succeeded) {
                showNotification('Error:', result.error.message);
                return;
            }
            if (eventArgs.value.length > 0) {
 
                var parts = eventArgs.value[0];
 
                parts.getNodesAsync('*', function (nodeResults) {
 
                    var node = nodeResults.value[0];
 
                    node.getNodesAsync('*', function (nodeResults) {
 
                        var node = nodeResults.value[0];//id
                        node.getTextAsync(function (asyncResult) {
                            var id = asyncResult.value;
                        });
 
                        node = nodeResults.value[1];//tipoDocumento
                        node.getTextAsync(function (asyncResult) {
                            var tipoDocumento = asyncResult.value;
                        });
                    });
 
                });
	   }
           else {
                showNotification('Error:', "Não encontrou o token");
           }
 
        }); 
 

A definir Detalhes dos serviços WebApi, como tipos de resposta e dados de retorno, estão especificados em FIXME.

  • pres/gerti/servico_de_desenvolvimento_de_sistemas_de_informacao/projetos/tce-docs/documento_esp_tec_integracao_docs_plugin.txt
  • Última modificação: 10/11/2017 16:44
  • por lfreis