INTEGRAÇÃO DE APLICAÇÕES AIRC COM FERRAMENTAS OFFICE



Documentos relacionados
Base de Dados para Administrações de Condomínios

PHC Serviços CS. A gestão de processos de prestação de serviços

Tarefa Orientada 2 Criar uma base de dados

GereComSaber. Desenvolvimento de Sistemas de Software. Universidade do Minho Conselho de Cursos de Engenharia Licenciatura em Engenharia Informática

Procedimento de Gestão PG 02 Controlo de Documentos e Registos

Manual do GesFiliais

5. Métodos ágeis de desenvolvimento de software

Rock In Rio - Lisboa

Mestrado em Sistemas Integrados de Gestão (Qualidade, Ambiente e Segurança)

Manual SAGe Versão 1.2 (a partir da versão )

Curso de Especialização Tecnológica em Aplicações Informáticas de Gestão (CET-AIG)

Programa de Parcerias e Submissão de Propostas 2014/15

TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO. SISTEMAS DE GESTÃO DE BASE DE DADOS Microsoft Access TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO

Serviço a Pedido ( On Demand ) da CA - Termos e Política de Manutenção Em vigor a partir de 1 de Setembro de 2010

DEPARTAMENTO DE MATEMÁTICA E CIÊNCIAS EXPERIMENTAIS

RECOLHA DE INFORMAÇÃO DE REMUNERAÇÕES, SUPLEMENTOS E DOS PONTOS DECORRENTES DA AVALIAÇÃO DE DESEMPENHO

Apresentação. Serviço de Apoio às Bibliotecas Escolares. Oliveira de Azeméis Novembro 2007

GUIA PARA O PREENCHIMENTO DOS FORMULÁRIOS ENTIDADE GESTORA ERP PORTUGAL

Componente de Formação Técnica. Disciplina de

Desenvolvimento Ágil de Software

UFG - Instituto de Informática

2 Diagrama de Caso de Uso

TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO - TIC 10º C. Planificação de. Curso Profissional de Técnico de Secretariado

Regulamento de Vigilâncias de Provas Escritas de Avaliação do DEEC

Certificação da Qualidade dos Serviços Sociais. Procedimentos

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

COMPETÊNCIAS BÁSICAS EM TIC NAS EB1

GereComSaber. Disciplina de Desenvolvimento de Sistemas de Software. Sistema de Gestão de Serviços em Condomínios

PEDIDO DE ACREDITAÇÃO PRÉVIA DE NOVO CICLO DE ESTUDOS (PAPNCE) (Ensino Universitário e Politécnico) Guião de apresentação

GESTÃO de PROJECTOS. Gestor de Projectos Informáticos. Luís Manuel Borges Gouveia 1

Sistema de Controle de Solicitação de Desenvolvimento

Modelo Cascata ou Clássico

ICORLI. INSTALAÇÃO, CONFIGURAÇÃO e OPERAÇÃO EM REDES LOCAIS e INTERNET

Engenharia de Software Sistemas Distribuídos

PROJECTO DE RESOLUÇÃO N.º 255/IX RECOMENDA AO GOVERNO A TOMADA DE MEDIDAS COM VISTA AO DESENVOLVIMENTO DO SOFTWARE LIVRE EM PORTUGAL

Orientação a Objetos

Guia de Utilização. Acesso Universal

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

WebSphere_Integration_Developer_D_Jan06 Script

MANUAL DO USUÁRIO SORE Sistema Online de Reservas de Equipamento. Toledo PR. Versão Atualização 26/01/2009 Depto de TI - FASUL Página 1

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Microsoft Office FrontPage 2003

Explorar os comandos no friso Cada friso tem grupos e cada grupo tem um conjunto de comandos relacionados.

Direcção Regional de Educação do Algarve

Mestrado em Segurança da Informação e Direito no Ciberespaço. Segurança da informação nas organizações Gestão de Configuração

Manual de Utilizador. Disciplina de Projecto de Sistemas Industriais. Escola Superior de Tecnologia. Instituto Politécnico de Castelo Branco

Acronis Servidor de Licença. Manual do Utilizador

Índice. Como aceder ao serviço de Certificação PME? Como efectuar uma operação de renovação da certificação?

P HC XL - Nem calcula o produto que temos para si...

III PROGRAMA DE ESTÁGIOS DE VERÃO AEFFUL

OFICIAL DA ORDEM MILITAR DE CRISTO MEDALHA DE EDUCAÇÃO FÍSICA E BONS SERVIÇOS. Circular n.º 023-A/2014 Portal F.P.T. - Inscrições (Aditamento)

Expresso Livre Módulo de Projetos Ágeis

A VISTA BACKSTAGE PRINCIPAIS OPÇÕES NO ECRÃ DE ACESSO

Aprend.e Sistema integrado de formação e aprendizagem

Aplicação Administrativa de Gestão

PHC dcontroldoc. O acesso a diversos tipos de ficheiros

Engenharia de Software

Caracterização dos cursos de licenciatura

Computadores Portáteis. Regulamento de utilização

Relatório SHST

II EDIÇÃO DO CONCURSO GESTÃO DE IDEIAS PARA ECONOMIZAR

PLANIFICAÇÃO MODULAR ANO LECTIVO 2015 / 2016

Um sistema SMS 1 simplificado

Curso de Eng. Informática Linguagens de Programação. C Sharp University Data Processing. (C Sharp Universidade de Processamento de Dados) Docente:

FACULDADE DE ENGENHARIA DE COMPUTAÇÃO. PROJETO FINAL I e II PLANO DE TRABALHO <NOME DO TRABALHO> <Nome do Aluno> <Nome do Orientador>

Gescom isales. Aplicação Mobile Profissional para Vendedores

SAFT para siscom. Manual do Utilizador. Data última versão: Versão: Data criação:

PLANEAMENTO DA INSTALAÇÃO DO WINDOWS SERVER 2003

Cláusula 1.º Objecto. Cláusula 2.º Especificação da prestação

Gestão Pessoal. Relatório Único. Manual preparação do software para o relatório único

O Manual do Desktop Sharing. Brad Hards Tradução: Pedro Morais

Referencial do Módulo B

Regulamento da Creditação

PHC dteamcontrol Interno

Múltiplos Estágios processo com três estágios Inquérito de Satisfação Fase II

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS)

Faculdade de Ciências da Universidade de Lisboa CURSO DE GPS. Módulo x. (Aula Prática) Reliance - Ashtech. Suas Aplicações Em SIG.

Um Driver NDIS Para Interceptação de Datagramas IP

Introdução a listas - Windows SharePoint Services - Microsoft Office Online

ZS Rest. Manual Profissional. BackOffice Mapa de Mesas. v2011

Base de dados I. Uma base de dados é um simples repositório de informação relacionado com um determinado assunto ou finalidade

PHC Serviços CS. A gestão de processos de prestação de serviços

Configuração do Ambiente de Trabalho

Processo do Serviços de Manutenção de Sistemas de Informação

TECNOLOGIAS DE INFORMAÇÃO E COMUNICAÇÃO

MANUAL DE PROCEDIMENTOS PLATAFORMA DE INSCRIÇÕES ONLINE

Análise de Sistemas. Conceito de análise de sistemas

Folha de Cálculo (Excel)

Desenvolvimento de uma Aplicação WEB para monitorização de BD Oracle

Trabalhos Práticos. Programação II Curso: Engª Electrotécnica - Electrónica e Computadores

GIAE VERSÃO JUNHO DE 2011 MUITO IMPORTANTE

Universidade da Beira Interior

O Manual do ssc. Peter H. Grasch

Transcrição:

Mestrado em Informática e Sistemas Instituto Politécnico de Coimbra Instituto Superior de Engenharia de Coimbra Departamento de Engenharia Informática e de Sistemas INTEGRAÇÃO DE APLICAÇÕES AIRC COM FERRAMENTAS OFFICE Ivo Manuel Ramos dos Santos Coimbra, Setembro, 2009

Instituto Politécnico de Coimbra Instituto Superior de Engenharia de Coimbra Departamento de Engenharia Informática e de Sistemas Mestrado em Informática e Sistemas Relatório Final de Estágio INTEGRAÇÃO DE APLICAÇÕES AIRC COM FERRAMENTAS OFFICE Orientador DEIS/ISEC: Prof. Doutor Jorge Barbosa Orientador AIRC: Eng.º João Carlos Eng.º José Cura Ivo Manuel Ramos dos Santos Coimbra, Setembro, 2009

Agradecimentos Ao Doutor Jorge Barbosa, pela sua orientação. Ao co-orientador Eng.º João Carlos e tutor Eng.º José Cura pela ajuda e orientação. Eng.ª Cláudia Ribeiro, Eng.ª Marta Cunha, Eng.º Pedro Rosa, Eng.º José Saraiva, Eng.º Luís Silva e Eng.º Anselmo Craveiro pelo apoio e ajuda prestada durante todo o estágio. Aos utilizadores do fórum de dúvidas de implementação de macros para o OpenOffice (www.oooforum.com) pela ajuda prestada directa ou indirectamente, nomeadamente: Andrew Pitonyak, DannyB, ms777, DVezina, B Marcelly, SergeM, JohnV, hol.sten, Villeroy, vitcaro, uros, probe1 e Rup.Xamqon. A Andrew Douglas Pitonyak pelo seu excelente documento sobre o OpenOffice. Ao meu irmão gémeo, Nuno. À minha esposa Cristina e família por todo o caminho percorrido até aqui. Aos meus amigos e colegas do DEIS com especial referência ao Nuno Teixeira, João Araújo, João Nascimento, Daniel Jorge e Sérgio Costeira. Aos meus colegas de estágio Eduardo Pratas, Ricardo Machado, Enoque Carvalho, André Simões e Bárbara Correia. Relatório de Estágio i

Resumo A utilização e suporte de pacotes de produtividade são parte integrante de muitas aplicações AIRC2000 devido às necessidades de criação, manipulação e gestão de documentos com base na informação relativa ao trabalho que cada aplicação AIRC2000 realiza. Estas necessidades verificam-se principalmente nas aplicações que fazem parte da Área Administrativa. O Sistema de Gestão Documental (SGD), que visa dar resposta às necessidades decorrentes do registo e circulação de documentos internos e externos, e o Sistema de Tratamento de Actas (STA) que visa facilitar a elaboração das Actas e dos documentos com elas relacionados. Verificam-se também as mesmas necessidades na Área de Urbanismo que é composta pelas aplicações, Sistema de Controlo de Empreitadas (SCE) que tem como objectivo o acompanhamento das empreitadas de obras públicas de modo a facilitar a sua gestão, e o Sistema de Processos de Obras (SPO) que tem como objectivo reduzir o tempo de trabalho manual e aumentar o grau de precisão, permitindo gerar e alterar os documentos usuais das Obras Particulares Autárquicas. Os clientes dependem destas aplicações para realizarem o seu trabalho no dia-a-dia. Num tempo de dificuldades económicas surgiu a necessidade das aplicações AIRC2000 suportarem pacotes de produtividade livres de custos nomeadamente, o OpenOffice, para a realização desse mesmo trabalho. Os objectivos deste estágio foram: a expansão do suporte ao OpenOffice, realizando o módulo de integração com o Calc, recorrendo a OLE Automation, visto que constitui a alternativa ao Excel; a criação de uma camada de gestão das várias alternativas de funcionamento com pacotes de produtividade, sem necessitar de configurações regulares do utilizador, usando a informação presente no registo do Windows; a minimização do impacto da transição da utilização do Microsoft Office para a utilização do OpenOffice, com a criação de extensões, no ambiente interno de criação de macros do OpenOffice, que visam a melhoria da performance de conversão dos modelos Word existentes para modelos OpenOffice completamente funcionais; a criação de Webservices que visam a manutenção da coerência entre a informação de marcadores obrigatórios e os marcadores que estão de facto no modelo; e por fim, a correcção de problemas existentes. O resultado do trabalho realizado permitirá que os utilizadores das aplicações AIRC2000 possam, finalmente, optar por um pacote de produtividade livre de custos para o seu trabalho, podendo desta forma reduzir os custos de operação, sem impacto nos seus hábitos de trabalho. Relatório de Estágio ii

Abstract The use and support of office software suites are a integral part of many AIRC2000 applications due to the needs of creation, manipulation and document management based on information related to the work that each AIRC2000 application develops. These needs exist mainly in applications that are part of the Administrative Area. The Sistema de Gestão Documental (SGD), which aims to meet the needs arising from the registration and use of internal and external documents, and Sistema de Tratamento de Actas (STA), which aims to facilitate the preparation of the Minutes and documents related to them. There are also the same needs in the Urban Area which consists of the following applications, Sistema de Controlo de Empreitadas (SCE), which aims at monitoring of public works contracts in order to facilitate administration, and the Sistema de Processos de Obras (SPO) which aims to cut down on manual labor and increase the degree of accuracy, allowing to generate and modify documents of local private works. Customers rely on them to do their day-to-day job. In a time of economic crisis the need of AIRC2000 applications to support office software suites free of cost, namely OpenOffice, to achieve that same work, have arise. The objectives of this work were: to expand the support for OpenOffice, performing the integration module with Calc, using OLE Automation, as it is the alternative to Microsoft Office Excel; to create a layer of management of the various alternative configurations, without requiring regular interaction from the user, using the information present in the Windows registry; to minimize the impact of the transition from the use of Microsoft Office for the use of OpenOffice, with the creation of extensions on the internal development environment to create macros on OpenOffice, which aim at improving the performance of converting existing Word templates to fully functional OpenOffice templates; to create Webservices aimed at maintaining consistency between the information of required bookmarks and the bookmarks that are in fact present in the template; and finally, the correction of existing problems. The result of the executed work will allow the customers of the AIRC2000 applications to, finally, choose a office software suite free of charge for their work and as an advantage reducing operating costs, without impacting existing work habits. Relatório de Estágio iii

Definições, Acrónimos e Abreviaturas Abreviatura ACE AIRC AIRC2000 AFC API CLSID COM DCOM DEIS EDAFC EPI ERP GUI IBM IDE IPC ISEC MIS OLE OO PB Definição Agente de Comunicações Externas Associação de Informática da Região Centro Pacote de software autárquico, constituído por um conjunto de módulos aplicacionais que cobrem quase a totalidade do sistema de informação das autarquias. AIRC Foundation Classes Application Programming Interface ou Interface de Programação de Aplicativos CLasS IDentifier - A identificação de um objecto COM Component Object Model Distributed Component Object Model Departamento de Engenharia Informática e de Sistemas Equipa de Desenvolvimento das AFC Estágio/Projecto Industrial Enterprise Resource Planning Graphical User Interface ou Interface Gráfica do Utilizador International Business Machines Integrated Development Environment ou Ambiente Integrado de Desenvolvimento Instituto Politécnico de Coimbra Instituto Superior de Engenharia de Coimbra Mestrado em Informática e Sistemas Object Linking and Embedding OpenOffice - Pacote de produtividade OpenSource Ferramenta de desenvolvimento, com programação orientada objectos, de aplicações Windows, onde existe uma forte interacção com Sistemas de Gestão de Bases de Dados Relacionais. Relatório de Estágio iv

PBL PFC PFE SCE SDK SGD STA URL XML Marcador Modelo Livro Folha de Cálculo PowerBuilder Library PowerBuilder Foundation Classes PowerBuilder Foundation Extension Sistema de Controlo de Empreitadas Software Development Kit Sistema de Gestão Documental Sistema de Tratamento de Actas Uniform Resource Locator ou Localizador de Recursos Universal extensible Markup Language Um marcador identifica uma localização ou uma selecção de texto à qual se atribuiu um nome e identifica para referência futura. No âmbito das aplicações AIRC é colocado em modelos de documentos e utilizado para substituição do seu texto por outro relevante à aplicação AIRC durante a geração de documentos através da API. Um modelo é um tipo de documento que cria uma cópia de si próprio quando o abre. No Microsoft Office Word 2007, um modelo pode ser um ficheiro.dot,.dotx ou um ficheiro.dotm. No OpenOffice Writer, um modelo é um ficheiro.ott. Um livro do Microsoft Office Excel ou OpenOffice Calc é um ficheiro que contém uma ou mais folhas de cálculo que podem ser utilizadas para organizar vários tipos de informações. Documento principal utilizado no Microsoft Office Excel ou OpenOffice Calc para armazenar e trabalhar com dados. Também denominada folha de trabalho. Uma folha de cálculo é composta por células organizadas em colunas e linhas; uma folha de cálculo está sempre armazenada num livro. Relatório de Estágio v

Índice Agradecimentos i Resumo ii Abstract iii Definições, Acrónimos e Abreviaturas iv Índice vi Índice de Figuras x Índice de Tabelas xii 1 Introdução 1 1.1 Contextualização do Problema 1 1.2 Objectivos 1 1.3 Estrutura do Documento 2 2 Enquadramento 3 2.1 AIRC 3 2.2 ISEC/DEIS/MIS 3 2.2.1 ISEC 3 2.2.2 DEIS 4 2.2.3 MIS 4 2.3 Proposta de Estágio 5 2.4 Processo de Software 6 2.5 Tecnologia Adoptada 7 2.5.1 PowerBuilder 11.2 7 2.5.2 Microsoft Office Word/Excel 2000, XP (2002), 2003 e 2007 7 2.5.3 OpenOffice 3.0, 3.1 8 2.5.4 Microsoft Virtual PC 2007 8 2.5.5 IHMC CmapTools 8 2.5.6 Notepad++ 8 2.5.7 XVI32 e Hex Editor Neo 8 2.5.8 WinMerge 8 3 - Trabalho realizado 9 3.1 Metodologia de Desenvolvimento 9 3.2 Plano de Desenvolvimento 10 3.3 Requisitos 11 Relatório de Estágio vi

3.4 Plano de Arquitectura 12 3.5 Implementação 13 3.5.1 Criação do módulo Calc 13 3.5.1.1 Tarefas de Suporte 14 3.5.1.1.1 Criar e conectar o objecto de ligação à API do OpenOffice Calc 15 3.5.1.1.2 Variável Desktop 15 3.5.1.1.3 Desligar ou desconectar do Objecto OLE remoto da API 16 3.5.1.2 Tarefas de Operação sobre Livros 16 3.5.1.2.1 Abrir Livros 16 3.5.1.2.1.1 PropertyValue 16 3.5.1.2.1.2 - Filename2url 18 3.5.1.2.1.3 Abertura 18 3.5.1.2.2 Activar Livros 19 3.5.1.2.3 Activar Folha de Cálculo 19 3.5.1.2.4 Guardar Livros 19 3.5.1.2.5 Saber Livro Activo 20 3.5.1.2.6 Saber Nome Folha de Cálculo Activa 20 3.5.1.2.7 Fechar Livros 21 3.5.1.2.8 Criar Novo Livro 21 3.5.1.2.9 Saber Número de Livros Abertos 22 3.5.1.2.10 Saber Número de Folhas 23 3.5.1.2.11 Saber se está Aberto 24 3.5.1.2.12 Saber se é Livro Activo 25 3.5.1.2.13 Alterar Nome da Folha de Cálculo Activa no Livro Activo 26 3.5.1.2.14 Saber se a Janela está Visível 26 3.5.1.2.15 Devolver Estado da Janela do OpenOffice 27 3.5.1.2.16 Definir Visibilidade da Janela do Livro 27 3.5.1.2.17 Definir Estado da Janela do Livro 28 3.5.1.2.18 Obtenção do Conteúdo de uma Célula (Linha, Coluna) 29 3.5.1.2.19 Obtenção do Conteúdo de uma Célula (Endereço) 29 3.5.1.2.20 Definir Conteúdo de uma Célula (Linha, Coluna) 30 3.5.1.2.21 Definir Conteúdo de uma Célula (Endereço) 30 3.5.1.2.22 Definir Formato de uma Célula (Linha, Coluna) 31 3.5.1.2.23 Definir Formato de uma Célula (Endereço) 32 3.5.1.2.24 Insere Linha 32 3.5.1.3 Testes 32 3.5.2 Camada de Abstracção 33 3.5.2.1 Criar camada de abstracção para permitir o funcionamento das aplicações Office ou OpenOffice de forma transparente 33 3.5.2.1.1 Implementação de funções que visam a obtenção coerente de informação relativa à criação, abertura e gravação de modelos, documentos e livros 37 3.5.2.1.1.1 Verifica se o OpenOffice Writer se encontra instalado 38 3.5.2.1.1.2 Verifica se o Microsoft Office Word se encontra instalado 39 3.5.2.1.1.3 Verifica se o OpenOffice Calc se encontra instalado 40 3.5.2.1.1.4 Verifica se o Microsoft Office Excel se encontra instalado 41 3.5.2.1.1.5 Obtém a aplicação associada a uma dada extensão 41 3.5.2.1.1.6 Preenchimento de dropdown com as extensões compatíveis com o que está instalado 42 Relatório de Estágio vii

3.5.2.1.1.7 Restantes funções que compõem a camada de abstracção 43 3.5.2.1.2 Criação de objectos de ligação 43 3.5.3 Tarefas auxiliares 44 3.5.3.1 Guardar documentos/livros em modo de compatibilidade 44 3.5.3.2 Guardar documentos no formato docx em Office s antigos que tenham o Pack de compatibilidade com 2007 instalado 44 3.5.3.3 Extensões para OpenOffice Writer que facilitam a visibilidade de marcadores em modelos Word (.dot,.dotx) convertidos para.ott. 46 3.5.3.3.1 Coloca Visibilidade Marcador 49 3.5.3.3.2 Apaga Visibilidade Marcador 51 3.5.4 Correcção dos problemas existentes nas funcionalidades já criadas pela AIRC que interagem com pacotes de produtividade 53 3.5.4.1 Reformulação Colocar Marca com dispatcher s para resolver problema de colocação de marcadores em tabelas e molduras no OpenOffice Writer 54 3.5.4.2 Outras correcções 58 3.5.5 WebServices 59 3.5.5.1 Webservice que, para o modelo associado a uma dada acção, devolva informação sobre os marcadores que estão presentes nesse modelo e se estão na Base de Dados 60 3.5.5.2 Webservice que recebe por argumento, acção ou um caminho para um modelo e um array de marcadores. Devolve os marcadores, do array recebido que não estão presentes no modelo 68 3.5.6 Detecção de marcadores obrigatórios na Janela de Acções 73 4 Utilização do Módulo de Integração Calc e Camada de Abstracção numa aplicação AIRC 76 4.1 Integração com o SCE 76 4.2 Funcionalidades do SCE 76 4.2.1 Exportar Orçamentação 76 4.2.2 Importar Orçamentação 78 4.2.3 Exportação de mapas 78 4.3 Efeito do funcionamento da camada de abstracção no SCE 79 5 Conclusões 82 5.1 Resultados do Estágio 82 5.1.1 Versão Alfa 1.0 do Módulo de Integração com OpenOffice Calc 82 5.1.2 Camada de Abstracção 82 5.1.3 Webservices 82 5.1.4 Janela de acções 83 5.2 Principais Dificuldades 83 5.3 Apreciação Crítica do Estágio 83 5.4 Trabalho Futuro 84 Relatório de Estágio viii

6 Bibliografia 85 Anexos 86 ANEXO A Objecto de ligação ao OpenOffice Calc Especificação de implementação e funcionalidades _ 87 ANEXO B Product Backlog e Sprint Backlog 97 ANEXO C Documentação Webservice 105 ANEXO D Informação Online Consultada 123 ANEXO E Documentação Extensões OpenOffice 132 Relatório de Estágio ix

Índice de Figuras Figura 3.1.1 Descrição da Metodologia Scrum 10 Figura 3.2.1 Mapa de Gantt 10 Figura 3.4.1 Esquema de Heranças da Framework da AIRC 12 Figura 3.5.1 Hierarquia de Operações 14 Figura 3.5.2 Processo de Desligar 16 Figura 3.5.3 Conversão de Caminhos para Livros 18 Figura 3.5.4 Abertura de Livros 18 Figura 3.5.5 Activar Livros 19 Figura 3.5.6 Activar Folha de Cálculo 19 Figura 3.5.7 Saber Livro Activo 20 Figura 3.5.8 Saber Nome Folha de Cálculo Activa 20 Figura 3.5.9 Fechar Livros 21 Figura 3.5.10 Criar Novo Livro 21 Figura 3.5.11 Saber Número de Livros Abertos 22 Figura 3.5.12 Saber Número de Folhas 23 Figura 3.5.13 Saber se está Aberto 24 Figura 3.5.14 Saber se é Livro Activo 25 Figura 3.5.15 Alterar Nome da Folha de Cálculo Activa no Livro Activo 26 Figura 3.5.16 Devolver Estado da Janela do OpenOffice 27 Figura 3.5.17 Definir Estado da Janela do Livro 28 Figura 3.5.18 Obtenção do Conteúdo de uma Célula (Linha, Coluna) 29 Figura 3.5.19 Definir Conteúdo de uma Célula (Linha, Coluna) 30 Figura 3.5.20 Definir Conteúdo de uma Célula (Linha, Coluna) 31 Figura 3.5.21 Insere Linha 32 Figura 3.5.22 Hierarquia dos objectos de ligação 34 Figura 3.5.23 Definição no registo do Windows para.doc 36 Figura 3.5.24 Definição no registo do Windows para.doc 37 Figura 3.5.25 Verifica se o OpenOffice Writer se encontra instalado 38 Figura 3.5.26 Verifica se o Microsoft Office Word se encontra instalado 39 Figura 3.5.27 Verifica se o OpenOffice Calc se encontra instalado 40 Figura 3.5.28 Verifica se o Microsoft Office Excel se encontra instalado 41 Figura 3.5.29 TabPage de Preferências 43 Relatório de Estágio x

Figura 3.5.30 TabPage de Preferências com definição de gravação em modo de compatibilidade 44 Figura 3.5.31 Guardar documentos no formato docx em Office s antigos que tenham o Pack de compatibilidade com 2007 instalado 46 Figura 3.5.32 Marcador após colocação no Word 47 Figura 3.5.33 Visual de um marcador normal após colocação no OpenOffice 47 Figura 3.5.34 Solução - Visual do marcador visível no OpenOffice 47 Figura 3.5.35 Primeiro passo Conversão de Modelos Word em Modelos OpenOffice Writer 47 Figura 3.5.36 Primeiro passo A realizar a conversão 48 Figura 3.5.37 Coloca Visibilidade Marcador 50 Figura 3.5.38 Apaga Visibilidade Marcador 52 Figura 3.5.39 Dispatch Framework do OpenOffice [6] 55 Figura 3.5.40 Colocação de Marcador Primeira Versão 56 Figura 3.5.41 Colocação de Marcador Segunda Versão 57 Figura 3.5.42 Documento aberto em modo de compatibilidade 59 Figura 3.5.43 Documento aberto sem estar em modo de compatibilidade 59 Figura 3.5.44 Pesquisa realizada à base de dados 61 Figura 3.5.45 Template de XML dos dados devolvidos 62 Figura 3.5.46 Webservice Marcadores Obrigatórios (Algoritmo) 63 Figura 3.5.47 Webservice Marcadores Obrigatórios (Arquitectura) 64 Figura 3.5.48 Configuração na DCOM 65 Figura 3.5.49 Webservice verifica presença marcadores (primeira forma de pesquisa) 70 Figura 3.5.50 Webservice verifica presença marcadores (segunda forma de pesquisa) 71 Figura 3.5.51 Webservice verifica presença marcadores (primeira e segunda forma de pesquisa) Diferenças de Arquitectura 72 Figura 3.5.52 Janela de Acções 73 Figura 3.5.53 Janela de Acções com verificação de marcadores obrigatórios (funcionalidade) 74 Figura 3.5.54 Janela de Acções com verificação de marcadores obrigatórios (funcionamento) 75 Figura 4.2.1 Exportar Orçamentação 77 Figura 4.2.2 Importar Orçamentação 78 Relatório de Estágio xi

Índice de Tabelas Integração de Aplicações AIRC com Ferramentas Office Tabela 2.3.1 Calendarização das Tarefas 5 Tabela 3.1.1 Constituição da Team de Scrum 9 Tabela 3.5.1 Sumário de tratamento de documentos com os diferentes pacotes de produtividade 34 Relatório de Estágio xii

1 Introdução 1.1 Contextualização do Problema A integração de aplicações AIRC com ferramentas Office assume diversas formas: a integração das ferramentas de pacotes de produtividade nas aplicações do ERP AIRC2000; a integração na forma de suporte com Webservices; a integração promovendo a correcção constante das funcionalidades desenvolvidas e aperfeiçoamento das mesmas. Não há apenas uma integração, mas sim um conjunto de diferentes integrações com diferentes pontos de origem que permitem alcançar os objectivos propostos. Pretende-se conciliar a integração das aplicações do ERP AIRC2000 com ferramentas Office, unificando as funcionalidades através da criação de uma camada de abstracção da tecnologia utilizada. Esta camada de abstracção dotará as aplicações do ERP AIRC2000 com a capacidade de tratar de forma transparente as chamadas aos diferentes pacotes de produtividade, tendo em conta, o documento ou livro que se queira trabalhar. Por outras palavras, independentemente do documento ou livro que se queira trabalhar, o processamento a realizar para executar essa chamada tem que ser efectuado sem ser necessária intervenção do utilizador da aplicação. Este comportamento da aplicação será resultante do funcionamento da referida camada de abstracção a ser desenvolvida. [Anexo B Product Backlog e Sprint Backlog] No entanto, para que se possa definir a camada de abstracção é necessário antes desenvolver um conjunto de tarefas auxiliares, tal como o módulo para funcionamento com o OpenOffice Calc, que constituirá a alternativa ao Excel do Microsoft Office e diversas outras tarefas presentes no planeamento do estágio. Pretende-se a construção de Webservices para verificação e manutenção da coerência entre marcadores considerados obrigatórios (obrigatórios a estar no modelo) e os marcadores que estão de facto no modelo. Pretende-se, também, a construção de extensões para o OpenOffice que melhorem a transição de Microsoft Office para OpenOffice, minimizando o tempo de trabalho associado a essa transição no que toca à conversão de modelos existentes do Microsoft Word para modelos OpenOffice Writer. 1.2 Objectivos O objectivo principal deste estágio foi o desenvolvimento de uma camada de abstracção que tenha a capacidade de tratar, de forma transparente, as chamadas aos pacotes de produtividade suportados, de forma a evitar interacção do utilizador. Para levar a cabo o objectivo principal é necessário cumprir com outros requisitos. Estes incluem, o desenvolvimento do módulo Calc; a obtenção de informação do registo do Windows em relação à associação de abertura dos ficheiros a trabalhar; o desenvolvimento da gravação em formato.docx nas versões de Microsoft Office Word anteriores ao Microsoft Office Word 2007; a criação de Webservices e Relatório de Estágio 1

correcções de funcionalidades existentes. (o anexo B refere as várias funcionalidades que fazem parte dos objectivos, a um nível crescente de detalhe) 1.3 Estrutura do Documento O presente relatório de estágio encontra-se organizado em 6 capítulos: Introdução, Enquadramento, Trabalho Realizado, Utilização do Módulo de Integração Calc e Camada de Abstracção numa aplicação AIRC, Conclusões e Bibliografia. Esta estrutura pretende abordar de uma forma concreta o trabalho desenvolvido ao longo do estágio, dando o seguimento desde a proposta de estágio, planeamento do projecto, trabalho desenvolvido durante o estágio, e finalizando com conclusões. O Capítulo 1, Introdução, visa contextualizar os problemas a resolver durante o estágio, bem como, apresentar os objectivos do estágio e apresentar a estrutura do presente documento. O Capítulo 2, Enquadramento, visa apresentar uma descrição da entidade de acolhimento (AIRC), da entidade escolar (ISEC), o problema apresentado na proposta de estágio, o modelo de processo de software, bem como da metodologia utilizada e, por fim, a tecnologia utilizada na realização do estágio. No Capítulo 3, Trabalho Realizado, encontram-se descritas as diversas actividades desenvolvidas ao longo do estágio, desde a análise de requisitos, implementação e testes. O Capítulo 4, Utilização do Módulo de Integração Calc e Camada de Abstracção numa aplicação AIRC, é dedicado a analisar e demonstrar de uma forma concreta as funcionalidades do módulo de integração desenvolvido quando integrado numa aplicação AIRC. É também evidenciado o funcionamento da camada de abstracção. O Capítulo 5, Conclusões, é dedicado a analisar e mostrar de uma forma concreta e organizada as conclusões retiradas com a realização deste estágio. Desta forma, as conclusões são divididas em 4 grupos: os resultados obtidos, as principais dificuldades sentidas ao longo do estágio e as soluções encontradas para as ultrapassar, uma análise crítica do estágio ao nível do trabalho desenvolvido e do desenvolvimento pessoal e as aspirações para o trabalho futuro. O Capítulo 6, Bibliografia, contém uma listagem dos recursos bibliográficos utilizados. Relatório de Estágio 2

2 Enquadramento Integração de Aplicações AIRC com Ferramentas Office O estágio é realizado no âmbito da unidade curricular Estágio/Projecto Industrial, do Mestrado em Informática e Sistemas (MIS), Ramo de Desenvolvimento de Software do Departamento de Engenharia Informática e de Sistemas (DEIS) do Instituto Superior de Engenharia de Coimbra (ISEC). O presente estágio foi elaborado nas instalações da AIRC e resultou da elaboração de uma proposta de estágio curricular que a AIRC submeteu à comissão de estágios do MIS do DEIS. 2.1 AIRC A Associação de Informática da Região Centro (AIRC) foi fundada por 30 municípios da região centro, e tem como principal actividade a produção de software e fornecimento de produtos e serviços para autarquias locais. Este software abrange todo o sistema de informação de uma autarquia. Esta associação iniciou a sua actividade em 1982 para um número muito restrito de câmaras municipais, tendo registado um crescimento constante e atingindo, nesta data, cerca de 300 clientes pertencentes à administração pública, entre os quais cerca de 60% das Câmaras Municipais, 50% dos Serviços Municipalizados, mais de meia centena de Juntas de Freguesia e ainda outros organismos da administração pública (Associações de Municípios, Regiões de Turismo, etc.). A AIRC possui uma forte estrutura composta por mais de meia centena de profissionais altamente qualificados, tanto ao nível da investigação e desenvolvimento de projectos, bem como da assistência técnica ao utilizador. A experiência colhida ao longo de quase 20 anos junto das câmaras municipais, conjugada com o elevado know-how dos seus profissionais, permitiu-lhe desenvolver um pacote de software autárquico de grande qualidade, denominado AIRC2000, constituído por um conjunto de módulos aplicacionais que cobrem a quase totalidade do sistema de informação das autarquias. Este pacote de software começou a ser idealizado em 1998, sendo criado nessa altura um novo modelo conceptual de todo o sistema de informação das autarquias, baseado num sistema de gestão de base de dados relacional, capaz de servir de base ao desenvolvimento de todo o novo pacote integrado de software da AIRC. 2.2 ISEC/DEIS/MIS 2.2.1 ISEC O Instituto Superior de Engenharia de Coimbra (ISEC) é uma unidade orgânica de ensino do Instituto Politécnico de Coimbra (IPC), e constitui um centro de criação, transmissão e difusão de cultura, ciência e tecnologia, cabendo-lhe ministrar a preparação para o exercício de actividades profissionais no domínio da Relatório de Estágio 3

engenharia e promover o desenvolvimento da região em que se insere. O ISEC abrange várias áreas do domínio tecnológico oferecendo aos alunos cursos modernos, práticos e com saídas profissionais. Os cursos, adequados ao paradigma de Bolonha, colocam o ISEC a par da realidade tecnológica europeia e internacional, permitindo aos alunos que frequentem este instituto de engenharia de renome nacional, alargar ainda mais os horizontes profissionais. O esforço contínuo de obtenção de parcerias constitui uma mais-valia, muito importante, pois aproxima os alunos do ISEC da realidade empresarial e preparam-nos para o futuro, focando o essencial e procurando a excelência. 2.2.2 DEIS O Departamento de Engenharia Informática e de Sistemas (DEIS) dedica-se à formação, investigação, desenvolvimento e prestação de serviços nas áreas da Engenharia Informática e das Tecnologias de Informação. O DEIS tem seguido uma política de aproximação ao sector empresarial através de estágios curriculares realizados em muitas empresas, maioritariamente da região centro, por certificações profissionais com empresas de referência mundial, e por protocolos de colaboração com organismos públicos e empresas privadas, de entre os quais, se destaca a AIRC. 2.2.3 MIS O Mestrado em Informática e Sistemas (MIS) do Instituto Superior de Engenharia de Coimbra (ISEC) tem por objectivo formar Mestres em Informática e em Sistemas capazes de exercerem a sua actividade profissional com um elevado nível de competência técnica, científica e profissional em cada uma das áreas de especialização propostas. O Mestrado em Informática e Sistemas organiza-se em 2 especializações: Desenvolvimento de Software Tecnologias da Informação e do Conhecimento A especialização em Desenvolvimento de Software do Mestrado em Informática e Sistemas (MIS) visa a formação pós-graduada em temas que integram os aspectos fundamentais relacionados com o processo de desenvolvimento de software, abrangendo as questões organizacionais, sociais e tecnológicas, relacionadas com a gestão de projectos de software e gestão de qualidade nas organizações. A especialização tem como principal objectivo o desenvolvimento de capacidades para a aplicação e melhoria contínua de boas práticas de Engenharia de Software nas organizações. O estágio final (unidade curricular "estágio ou projecto industrial") decorre em parte do terceiro semestre e na totalidade do quarto semestre lectivo do mestrado, sendo desenvolvido no ambiente das empresas acolhedoras e acompanhado pelos docentes do mestrado. Relatório de Estágio 4

2.3 Proposta de Estágio Actualmente, as aplicações AIRC, já têm a capacidade de utilizar o OpenOffice Writer e o Microsoft Office Word para trabalhar os seus documentos, no entanto, a definição da utilização de um ou outro pacote de produtividade é estática, requerendo alguma interacção com o utilizador para que possa modificar a definição do pacote de produtividade a utilizar. Tal como referido anteriormente, o principal objectivo passa por eliminar a ainda existente interacção do utilizador, passando, a decisão da escolha do pacote de produtividade mais apropriado a realizar tarefas sobre documentos para a aplicação AIRC e esta, recorrendo à informação presente no registo do Windows, verificará que pacote de produtividade é apropriado à abertura e gravação de cada ficheiro específico a trabalhar. Se um computador tiver os dois pacotes de produtividade instalados, Microsoft Office e OpenOffice, o registo do Windows, no seu conteúdo contém qual o pacote de produtividade apropriado ao tratamento de cada formato de documento que se queira trabalhar. No início deste estágio foi definido que, para além das actividades ocasionais, deveria ser cumprido um plano de actividades, bem definido, para o desenvolvimento da Integração de Aplicações AIRC com Ferramentas Office. Relativamente ao plano original de actividades do estágio inicial ficaram delineadas as seguintes tarefas: T1 Análise Análise e identificação dos requisitos necessários. T2 Desenho Apresentação de um protótipo de acordo com os requisitos recolhidos. T3 Implementação Construção dos âmbitos identificados, considerando a definição e criação das diferentes fases de produção. T4 Testes e Validação Execução de testes para validação das tarefas desenvolvidas. T5 Deployment Disponibilização da aplicação. Tabela 2.3.1 Calendarização das Tarefas INI Início dos trabalhos M1 (INI + 4 Semanas) Tarefa T1 terminada M2 (INI + 6 Semanas) Tarefa T2 terminada Relatório de Estágio 5

M3 (INI + 18 Semanas) Tarefa T3 terminada M4 (INI + 22 Semanas) Tarefa T4 terminada M5 (INI + 24 Semanas) Tarefa T5 terminada 2.4 Processo de Software O modelo de processo de software vigente na AIRC é o Desenvolvimento Iterativo e Incremental e é posto em prática usando uma metodologia de desenvolvimento ágil, o Scrum. O Scrum faz parte de um grupo alargado de metodologias consideradas ágeis. Estas são caracterizadas por promover o desenvolvimento iterativo e de também interactivo. Iterativo devido aos vários ciclos de Análise, Desenvolvimento, Testes e Disponibilização das funcionalidades desenvolvidas que ocorrem em intervalos de tempo pré-definidos. Interactividade visto que após disponibilização das funcionalidade tornase possível a colaboração aberta dos participantes e a adaptabilidade de processos durante todo o ciclo de vida do projecto com o objectivo do contínuo melhoramento das funcionalidades. Possui também a particularidade de permitir a realização das tarefas em pequenos incrementos, com o mínimo planeamento, ao contrário de outras metodologias de desenvolvimento que planeiam a longo prazo, em que só depois de finalizado todo o planeamento desenvolvem-se as funcionalidades, podendo haver maior propensão para erros devido a mau planeamento. Os métodos ágeis são a reacção aos processos que parecem bem na teoria mas, que na prática, não funcionam tão bem. Estes métodos ágeis são empíricos na medida em que se baseiam unicamente em experiências práticas e em métodos de trabalho que, na prática, funcionam bem. Baseando-se nessa premissa, o Scrum tem objectivos bem definidos que constituem factores críticos de sucesso, tanto para quem se baseia nele para desenvolver, como para quem usufrui dos resultados desta metodologia. Estes são: Melhorar a capacidade de resposta a necessidades urgentes do mercado; Reduzir o tempo desperdiçado e tempos de espera; Reduzir o stress dos colaboradores aumentando a produtividade. Os objectivos anteriormente apresentados são complementados da filosofia associada ao Scrum que define o que é essencial para a boa aplicação do método. Esta é apresentada em seguida: Importante Processos e ferramentas Documentação detalhada Negociação de contratos Seguir um plano Mais Importante Indivíduos e interacção Software que funciona Colaboração com o cliente Capacidade de adaptação a mudanças Relatório de Estágio 6

Para que a aplicação desta metodologia seja bem sucedida é preciso pôr em prática a estrutura que caracteriza o Scrum. Essa estrutura é composta pelo Product Owner, Scrum Master e a Team. O Product Owner é o cliente ou o representante do cliente e é quem tem o poder de definir tarefas a adicionar ao Product Backlog e orientar as prioridades de cada uma. O Product Backlog contém todas as tarefas a executar durante o estágio com uma estimativa de horas para a execução de cada requisito. O Product Backlog é depois segmentado em vários grupos lógicos de duração igual, que após implementação, originam valor acrescentado ao produto. Cada um desses grupos constitui um Sprint Backlog que deve ser realizado num período que vai de duas a quatro semanas. [9] [10] O Scrum Master gere a relação com o Product Owner e possíveis pedidos desse, modera as interferências externas ao trabalho desenvolvido pela Team (equipa de desenvolvimento) e gere o trabalho da Team tendo reuniões diárias (Daily Scrum) com esta para aferir três itens: O que foi feito no dia anterior? O que é que vai ser feito entre esta e a próxima reunião? Há algum constrangimento que está a inibir a Team de fazer o que está planeado? A Team deve auto-regular-se e tem total autoridade para fazer o que for possível para atingir o objectivo do Sprint Backlog definido de acordo com os standards e convenções da organização e do Scrum. 2.5 Tecnologia Adoptada Durante o período de estágio foram utilizadas diversas tecnologias e ferramentas necessárias para proceder à elaboração das tarefas relacionadas com os objectivos do estágio. De seguida são apresentadas essas tecnologias e ferramentas, incluindo uma breve descrição sobre estas. 2.5.1 PowerBuilder 11.2 O PowerBuilder (PB) consiste numa ferramenta de desenvolvimento de software, desenvolvida pela Sybase, que pela sua versatilidade é usada normalmente na construção de aplicações que funcionam de acordo com um ambiente cliente/servidor, onde existe uma forte interacção com base de dados. 2.5.2 Microsoft Office Word/Excel 2000, XP (2002), 2003 e 2007 O Microsoft Office Word e Excel foram utilizados para testes e inspecção de funcionalidades dos módulos de integração Word e Excel. O Microsoft Office Word foi utilizado para a elaboração dos documentos desenvolvidos ao longo do estágio. Relatório de Estágio 7

2.5.3 OpenOffice 3.0, 3.1 O OpenOffice é um pacote de software de produtividade, tendo sido a ferramenta mais importante utilizada em todo o estágio. É a partir da instalação desta que a Application Programming Interface (API) fica disponível a ser utilizada a partir do PowerBuilder, ou outros Integrated Development Environment (IDE) (ex: NetBeans), e a partir dela implementar as funcionalidades que constituem alguns dos objectivos do estágio. 2.5.4 Microsoft Virtual PC 2007 O Microsoft Virtual PC 2007 permite a criação de máquinas virtuais e foi utilizado para testar o módulo de integração com o OpenOffice com várias versões do OpenOffice e International Business Machines (IBM) Lotus Symphony. 2.5.5 IHMC CmapTools O IHMC CmapTools foi utilizado para desenvolver as figuras das funcionalidades. Devido ao carácter não visual do trabalho desenvolvido, esta aplicação, através da capacidade de construir mapas de conceitos, tornou-se providencial. 2.5.6 Notepad++ O Notepad++ consiste num editor de texto mais avançado, que suporta várias linguagens de programação e as suas regras de apresentação visuais. Foi utilizado para edição de código. 2.5.7 XVI32 e Hex Editor Neo O XVI32 e Hex Editor Neo foram utilizados para verificar a assinatura hexadecimal dos documentos e livros criados. 2.5.8 WinMerge O WinMerge é uma ferramenta de software livre de custos com a capacidade de comparação de conteúdo de ficheiros, oferecendo a funcionalidade de junção de texto. É útil para determinar o que mudou entre as versões do mesmo ficheiro. Relatório de Estágio 8

3 - Trabalho realizado Integração de Aplicações AIRC com Ferramentas Office 3.1 Metodologia de Desenvolvimento A metodologia de desenvolvimento adoptada pela AIRC, como anteriormente já foi referida é a metodologia Scrum. Para se iniciar o processo de Scrum, é preciso definir a constituição da Team, a equipa de desenvolvimento que executará as tarefas do Product Backlog. A tabela abaixo apresenta os elementos que constituem a Team e as suas respectivas funções. Tabela 3.1.1 Constituição da Team de Scrum No início do estágio a Team reuniu-se e definiu os requisitos do Product Backlog de acordo com as funcionalidades suportadas com o módulo de integração do Word. No início de cada Sprint, um conjunto de funcionalidades do Product Backlog, suficiente para perfazer a duração total do Sprint (30 dias) passa a integrar o Sprint Backlog. As funcionalidades escolhidas respeitam um critério de prioridade de implementação, sendo este definido pelo Product Owner. No final de cada Sprint foi realizado um Sprint Review com o Product Owner e o Tutor. Este consiste numa reunião informal que tem como objectivo dar a conhecer que funcionalidades foram realizadas no Sprint. Foram ainda realizadas Daily Scrum com os elementos da Team. Através dos Daily Scrum é possível apresentar, passo a passo, dia após dia, cada funcionalidade feita e cada dificuldade vivida e com base nessas informações gerir o trabalho até ao próximo Daily Scrum e também os objectivos do Sprint. Este processo é resumido na figura 3.1.1. Relatório de Estágio 9

Figura 3.1.1 Descrição da Metodologia Scrum 3.2 Plano de Desenvolvimento Neste subcapítulo é apresentado o plano de desenvolvimento definido para este projecto, sendo que este foi baseado na subdivisão das tarefas do Product Backlog nos vários Sprint de duração mensal incluídos em anexo (Anexo B Product Backlog e Sprint Backlog). A figura abaixo apresenta o Mapa de Gantt com a descrição das fases do projecto e datas de início e fim das tarefas de cada fase. Figura 3.2.1 Mapa de Gantt Relatório de Estágio 10

Fase de Formação: A fase de formação decorreu no início do estágio e incidiu sobre as seguintes aplicações: PowerBuilder, em que foram desenvolvidas várias aplicações, passando da construção do layout à funcionalidade com base de dados com DataWindow e DataStore e os vários serviços disponíveis na aplicação como é o caso, por exemplo, do Sharedata, Linkage e Row Manager.[1] [2] Foi aprendida a forma de utilização da Framework, comum ao desenvolvimento de todas as aplicações da AIRC, bem como, aprendidas as normas de programação internas.[4] [3] Também foi recebida formação em WebServices com a mesma aplicação. PowerDesigner com o intuito de familiarização com as regras usadas na AIRC, em termos de definição de nomes de tabelas e campos destas. Também foi recebida formação sobre a forma de operar a aplicação e geração de scripts nesta aplicação. Fase de Implementação das Tarefas do Product Backlog: Após a formação, seguiu-se a fase de implementação das funcionalidades e objectivos presentes no Product Backlog. A implementação foi realizada entre os Sprint de Junho até Agosto, tendo como base de pesquisa [11], [14], [5], [6], [12], [13], [7] e [8]. (Uma lista detalhada de recursos online pesquisados encontra-se no Anexo D Informação Online Consultada) A implementação foi acompanhada de integração das mesmas funcionalidades nas aplicações Sistema de Gestão Documental (SGD), Sistema de Tratamento de Actas (STA) e Sistema de Controlo de Empreitadas (SCE). Fase de Documentação: Esta fase inclui as tarefas de elaboração e revisão dos vários documentos produzidos ao longo do período de estágio, dos quais fazem parte o relatório de estágio e a documentação realizada durante as tarefas. 3.3 Requisitos Os requisitos são o ponto-chave de qualquer projecto de desenvolvimento de software. Os requisitos encontram-se descritos, de forma muito geral, na proposta de estágio, sendo estes: Criação da camada de abstracção; Criação das configurações e automatismos necessários à transparência de funcionamento para o utilizador final. Análise cuidada dos problemas existentes nas funcionalidades já existentes; Conhecimento das aplicações que irão utilizar a integração com as ferramentas Office; Relatório de Estágio 11

Os requisitos acima referidos, encontram-se descritos detalhadamente, com um escalonamento estimado de horas para o desenvolvimento. Estes contêm uma série de funcionalidades específicas como se pode observar no (Anexo B Product Backlog e Sprint Backlog). 3.4 Plano de Arquitectura A AIRC construiu ao longo do tempo uma Framework comum a todas as aplicações, tendo sido criada com base nas bibliotecas disponibilizadas pela Sybase, implementadas sobre a ferramenta de desenvolvimento, e designadas por PowerBuilder Foundation Classes (PFC). Este conjunto de bibliotecas originais foi, ao longo do tempo, reestruturado por uma equipa de programação, a EDAFC (Equipa de Desenvolvimento das AFC s), de acordo com as necessidades internas da AIRC, criando um outro nível de bibliotecas designadas por AIRC Foundation Classes (AFC). O nível das AFC s constitui a base da construção de aplicações da AIRC, visto que contém um conjunto de objectos, criados à margem das PFC s que são utilizados em praticamente todas as janelas das aplicações. O nível PFE permite realizar heranças e consequentemente alterações sobre os objectos das bibliotecas AFC s, sendo que aos programadores cabe a função de herdar os objectos do nível das PowerBuilder Foundation Extensions (PFE) e programá-los sobre o nível da aplicação. O esquema de modelo de heranças de bibliotecas, que origina o Framework comum de desenvolvimento de aplicações da AIRC, encontra-se apresentado na figura abaixo, sendo que os blocos de bibliotecas envolvidas por uma caixa a tracejado representam o nível de acesso dos programadores das aplicações, ou seja, o nível PFE e o nível da aplicação. Figura 3.4.1 Esquema de Heranças da Framework da AIRC Relatório de Estágio 12

Grande parte das funcionalidades resultantes, dos requisitos a desenvolver, serão colocadas ao nível AFC para que fiquem disponíveis a todos os programadores da AIRC. 3.5 Implementação A fase de implementação constituiu num conjunto alargado de diferentes tarefas, no entanto, todas elas se relacionam com funcionalidade documental e folhas de cálculo. 3.5.1 Criação do módulo Calc A criação do módulo Calc teve como objectivo conseguir através da API do OpenOffice, usando o PowerBuilder, realizar tarefas que se fazem no Graphical User Interface (GUI) do OpenOffice Calc, tal como guardar, abrir, fechar, havendo pouca ou nenhuma interacção do utilizador com o GUI. Ou seja, estas acções sobre folhas de cálculo são realizadas através de uma aplicação AIRC que contenha o módulo de integração com o OpenOffice Calc ou o existente do Excel. O mínimo de interacção do utilizador com o GUI e o máximo de automatismo de acções através da API é um objectivo claro do módulo a desenvolver. Este módulo ao utilizar a API permite a elaboração de tarefas complexas que seriam impossíveis de realizar com o mesmo rigor e performance através do GUI. A API do Excel e a API do OpenOffice Calc, através do PowerBuilder, são chamadas de forma similar. Ambas são chamadas usando OLE Automation. A OLE Automation é um mecanismo que disponibiliza várias funcionalidades através da utilização de objectos Object Linking and Embedding (OLE). A capacidade de estes pacotes de produtividade suportarem a OLE Automation permite que seja fornecida uma infra-estrutura à aplicação que a usa, neste caso, o PowerBuilder, possibilitando realizar operações sobre os dados, nomeadamente, folhas de cálculo. As operações são disponibilizadas pela OLE Automation através da criação de um OleObject no PowerBuilder. Este OleObject é uma variável do PowerBuilder orientada a utilizar a OLE Automation dos pacotes de produtividade referidos. O OleObject irá actuar como um proxy, visto que representa um objecto OLE remoto, existente na API, que aceita chamadas específicas ao seu código. Esse objecto ao disponibilizar as funcionalidades da API sobre a variável criada irá permitir programar usando a sintaxe da API do OpenOffice Calc ou Excel sobre uma outra qualquer aplicação, neste caso, o PowerBuilder. Resumindo, é necessário criar um objecto de ligação ao OpenOffice Calc pois é através dele que se torna possível interagir com a API do OpenOffice Calc para desenvolver o módulo de integração para as variadas funcionalidades necessárias. Este processo encontra-se esquematizado na figura seguinte: Relatório de Estágio 13

Figura 3.5.1 Hierarquia de Operações 3.5.1.1 Tarefas de Suporte Para se ter a base de trabalho preparada é necessário criar o objecto de ligação à API do OpenOffice, pois através desta é possível começar a desenvolver todas as funcionalidades. Tudo deriva deste primeiro objecto criado. Relatório de Estágio 14

3.5.1.1.1 Criar e conectar o objecto de ligação à API do OpenOffice Calc Pode-se criar e conectar/ligar o objecto de ligação à API de duas formas. Para ambas é necessária a criação de uma variável OleObject do PowerBuilder, que é feita como qualquer outra variável, por exemplo, OleObject objectoole. Esta variável irá conectar-se a um objecto OLE remoto existente na API. As formas de ligação encontramse definidas de seguida: A primeira das formas é resultado da tentativa de ligação a um objecto OLE remoto na API já existente, exemplificado de seguida: objectoole.connecttoobject(, classname), em que classname contém uma string característica para que a ligação seja possível à API do OpenOffice. classname com.sun.star.servicemanager A definição do PowerBuilder para classname é bastante descritiva e consiste numa string, cujo valor é um identificador programático que identifica um automation server ou Component Object Model (COM) server. Alternativamente ao identificador programático, classname, poderia assumir o Class Identifier (CLSID) do OpenOffice 82154420-0FBF-11d4-8313-005004526AB4. As utilizações referidas são equivalentes e ligam a um objecto remoto que é justamente a OLE Automation Bridge do OpenOffice. Com base no valor numérico que esta operação devolve é possível compreender se houve sucesso. No caso de insucesso, a operação devolve um valor numérico inferior ou igual a zero e, sendo assim, passa-se à segunda forma de ligar, exemplificado em seguida: objectoole.connecttonewobject ( classname ) A diferença desta chamada para a anterior é o simples facto de esta ignorar qualquer objecto OLE remoto que esteja disponível e criar uma nova ligação a um objecto OLE remoto. Após o sucesso de qualquer uma destas tentativas de ligar o objectoole fica disponível a todas as chamadas com as capacidades da API do OpenOffice e sendo assim, pode-se afirmar que este objecto é o ponto de partida para tudo o que se quer programar com a API do OpenOffice no PowerBuilder. O efeito mais visível desta operação é a criação de dois processos no Task Manager chamados de soffice.bin e soffice.exe. 3.5.1.1.2 Variável Desktop A variável Desktop consiste numa instância do objecto de ligação à API do OpenOffice criado anteriormente, como se observa na figura 3.5.1. Apesar de o primeiro objecto ser muito importante, pois tem a capacidade de criar tudo o que se pretende da API do OpenOffice, é necessário criar, a partir desta, uma outra variável OleObject de vital importância. Essa importância deve-se ao facto de esta nova variável permitir fazer um leque muito vasto de operações sobre os documentos/livros/componentes do OpenOffice, desde abrir, fechar, activar, guardar, inserir ou extrair informação e muitas mais funcionalidades. A variável Desktop é obtida através da criação de uma instância com a classname Relatório de Estágio 15

"com.sun.star.frame.desktop" usando o objecto de ligação à API do OpenOffice Calc anteriormente criado. Essa criação é o resultado da seguinte sintaxe: objectooledesktop=objectoole.createinstance("com.sun.star.frame.desktop") Usando a sintaxe, CreateInstance, esta oferece a possibilidade de criar um objecto num servidor remoto, neste caso o servidor com.sun.star.servicemanager da API do OpenOffice acima referido. O objecto desktop é o ponto de partida para todas as operações sobre documentos/livros que mais adiante se encontram detalhadas. 3.5.1.1.3 Desligar ou desconectar do Objecto OLE remoto da API A operação de Desligar corresponde à desconexão da variável OleObject criada do objecto OLE remoto da API do OpenOffice e, consequente destruição. Isso é feito da seguinte forma: Figura 3.5.2 Processo de Desligar O Objecto OpenOffice é uma variável OleObject que se quer desconectar de um objecto OLE remoto. 3.5.1.2 Tarefas de Operação sobre Livros As tarefas de operação sobre livros são muito diferentes entre si, mas têm em comum as tarefas de suporte essenciais ao seu sucesso. Os próximos pontos detalham todas as funcionalidades que foram desenvolvidas recorrendo à API do OpenOffice usando o PowerBuilder. A definição dos conceitos, livro e folha de cálculo encontra-se em Definições, Acrónimos e Abreviaturas. 3.5.1.2.1 Abrir Livros Para realizar a tarefa de Abrir Livros várias premissas têm que ser assistidas. Tem que se garantir que o caminho para o livro é compatível para abertura e, de acordo com a operação que se está a fazer, enviar alguns parâmetros (PropertyValue) que alteram a abertura. Por exemplo, abrir um livro em modo de leitura. 3.5.1.2.1.1 PropertyValue Os parâmetros PropertyValue têm como finalidade a alteração de um comportamento base de uma dada operação, por exemplo a abertura de um livro/modelo. A criação deste tipo de variáveis é mais difícil no PowerBuilder que noutros IDE, devido a não ter a API do OpenOffice disponível no momento da criação do código dos procedimentos pretendidos. Consequentemente, e por estar a trabalhar com OleObjects, a obtenção de métodos de um objecto usando "." não é possível e o código não é compilado pelo PowerBuilder no momento da sua criação. Só em caso de excepção devolvida pelo OleObject da API do OpenOffice, se sabe que há um erro no código desenvolvido. Relatório de Estágio 16

Em seguida são apresentados exemplos de criação de PropertyValue noutros IDE. Os quais têm acesso à API do OpenOffice usando o seu Software Development Kit (SDK). oprop = createunostruct( "com.sun.star.beans.propertyvalue" ) ou Dim oparm As New com.sun.star.beans.propertyvalue No entanto, qualquer uma destas alternativas não funciona em PowerBuilder devido ao facto das livrarias do OpenOffice não estarem disponíveis ao PowerBuilder. Esta limitação cria um entrave à investigação dos objectos criados para os conhecer melhor. A única fonte de informação sobre os objectos criados reside na investigação online e em documentos sobre a API do OpenOffice como é o caso de [5], [6] e [8]. Para criar as tão necessárias variáveis é preciso recorrer ao primeiro objecto criado, o objectoole, e sendo assim a alternativa correcta é: objectoolepropertyvalue=objectoole.bridge_getstruct("com.sun.star.beans.propertyvalue") Em que a chamada Bridge_GetStruct devolve uma variável com a forma de estrutura com quatro campos: Name, Handle,Value e State. Destes campos, dois têm maior importância, o Name e o Value. Name especifica o nome da propriedade. Value contém o valor da propriedade ou void, se nenhum valor está disponível. Tem a particularidade de poder receber qualquer tipo de variável na sua atribuição. Através destas variáveis torna-se possível fazer as operações anteriormente mencionadas se forem correctamente atribuídas. Para o caso de abrir um livro para leitura (read-only) seria preciso: objectoolepropertyvalue.name = ReadOnly e objectoolepropertyvalue.value = True Para o caso de se querer abrir um livro modelo para edição seria preciso: objectoolepropertyvalue.name = AsTemplate e objectoolepropertyvalue.value = false O comportamento que estas variáveis armazenam tem especial importância para a abertura de livros, como já foi referido, pois cada uma delas representa uma acção. Relatório de Estágio 17

3.5.1.2.1.2 - Filename2url Foi necessário desenvolver uma função (Filename2url) que tem como principal objectivo a preparação, fazendo a conversão, do caminho para um livro para que a abertura deste aconteça correctamente. Normalmente o caminho que se tem para um livro é algo de parecido com c:\livro.ods. No entanto, a função da API do OpenOffice (LoadComponentFromURL), que abre livros, necessita que o caminho esteja na forma file:///c:/livro.ods. A funcionalidade encontra-se na seguinte figura: Figura 3.5.3 Conversão de Caminhos para Livros 3.5.1.2.1.3 Abertura Tendo já percorrido os passos anteriores basta apenas chamar a LoadComponentFromURL com os parâmetros já construídos. A operação de abertura do livro é descrita na figura seguinte: Figura 3.5.4 Abertura de Livros O Array de PropertyValue é como o nome indica um vector de OleObject PropertyValue. Esse array define o comportamento de abertura do livro passado à LoadComponentFromURL. Se não se quiser definir algum comportamento, pode-se passar um array OleObject vazio ou um array qualquer vazio. O resultado visual de todas estas instruções é a abertura propriamente dita de um livro no GUI do OpenOffice Calc. Relatório de Estágio 18

3.5.1.2.2 Activar Livros A operação de Activar Livros é utilizada quando se pretende tornar visível um livro que se tenha aberto, visto que, ele poderá estar minimizado ou por trás de qualquer outra janela. O processo é descrito na seguinte figura: Figura 3.5.5 Activar Livros É preciso percorrer os livros/componentes abertos, comparando o caminho passado que é prontamente convertido com a filename2url já apresentada com os caminhos dos livros abertos. Ao ser verdadeira a comparação, foi encontrado o livro pretendido e pode depois ser activado e tornado visível com tofront e activate. 3.5.1.2.3 Activar Folha de Cálculo A operação de Activar Folha de Cálculo é utilizada quando se pretende tornar visível uma folha de cálculo específica de um livro que se encontra activo. A funcionalidade encontra-se descrita na seguinte figura: Figura 3.5.6 Activar Folha de Cálculo 3.5.1.2.4 Guardar Livros O processo de Guardar Livros tem como objectivo a gravação de alterações em livros abertos, activos ou não activos. Esta característica altera a forma como o processamento é feito, visto que, para o livro activo Relatório de Estágio 19

pode-se logo realizar a acção de guardar enquanto que, para livros abertos mas não activos, terá de existir uma fase preliminar de activação do livro a guardar. O processo de activação do livro foi já documentado acima em 3.5.1.2.2. A operação de Guardar Livros tem igualmente algum processamento de conversão de caminhos (Filename2URL) e de PropertyValue (ambas as operações já documentadas acima). A inclusão de variáveis PropertyValue podem adicionar informação que se quer guardar no livro ou alterar o processo de gravação, para além da gravação do conteúdo do livro propriamente dito. Neste caso específico em relação à definição do tipo de gravação. Existem duas formas para guardar livros: objectoolelivro.storetourl(caminhoconvertido,arrayobjectosolepropertyvalue) ou objectoolelivro.storeasurl(caminhoconvertido,arrayobjectosolepropertyvalue) A opção storetourl é orientada à operação de guardar livros acabados de criar que ainda não foram gravados nenhuma vez. O típico livro Sem título 1 no OpenOffice Calc ou o Livro1 no Microsoft Office Excel. A opção storeasurl é orientada a gravar livros que já têm localização física no disco. É o caso dos livros que são abertos, alterados e por fim gravados na localização que já possuem. 3.5.1.2.5 Saber Livro Activo A operação Saber Livro Activo é utilizada sempre que se quer saber qual o livro activo. Esta funcionalidade devolve a localização (fullpath) do livro activo. A figura 3.5.7 representa o processo efectuado. Figura 3.5.7 Saber Livro Activo 3.5.1.2.6 Saber Nome Folha de Cálculo Activa A operação Saber Nome Folha de Cálculo Activa é utilizada para saber qual é o nome da folha de cálculo activa no livro activo. Esta funcionalidade devolve o nome da folha que se encontra activa. A figura 3.5.8 representa o processo efectuado. Figura 3.5.8 Saber Nome Folha de Cálculo Activa Relatório de Estágio 20

3.5.1.2.7 Fechar Livros O processo de Fechar Livros existe para livros abertos e activos e, para livros abertos mas não activos. Esta característica altera a forma como o processamento é feito visto que para o livro activo pode-se logo realizar a acção de fechar enquanto que para livros abertos mas não activos terá de existir uma fase preliminar de activação do livro a fechar. O processo de activação do livro foi já documentado acima em 3.5.1.2.2. O processo de Fechar Livros é em seguida ilustrado: Figura 3.5.9 Fechar Livros Para haver sempre um livro/componente activo após o fecho do livro, outro livro existente é automaticamente activado. 3.5.1.2.8 Criar Novo Livro A criação de novos livros tem duas vertentes: a primeira refere-se ao criar um livro vazio; a segunda refere-se à criação de um livro tendo como base um modelo, ou seja, um livro base com já algum conteúdo. Para criar um livro vazio basta passar uma string característica, private:factory/scalc, à LoadComponentFromURL. Na figura seguinte corresponde ao trajecto superior: Figura 3.5.10 Criar Novo Livro Relatório de Estágio 21

Para criar um livro com base num modelo, o processamento é diferente, sendo necessário utilizar uma PropertyValue específica: objectoolepropertyvalue.name = "AsTemplate" objectoolepropertyvalue.value = true objectoolepropertyvaluearray[1]=ioo_objpropertyvalue A passagem da variável PropertyValue com AsTemplate definido a true cria um novo livro que terá o nome pré-definido Sem título e será completamente igual ao modelo que o originou. Este processo corresponde ao trajecto inferior na figura acima. 3.5.1.2.9 Saber Número de Livros Abertos A operação Saber Número de Livros Abertos é utilizada para saber o número de livros que se encontram abertos. É uma funcionalidade muito utilizada por outras funcionalidades do módulo OpenOffice Calc. A figura 3.5.11 representa como o processo é realizado. Figura 3.5.11 Saber Número de Livros Abertos Relatório de Estágio 22

3.5.1.2.10 Saber Número de Folhas A operação Saber Número de Folha é utilizada para saber o número de folhas de cálculo que o livro activo contém. A figura 3.5.12 representa o processo realizado. Figura 3.5.12 Saber Número de Folhas Relatório de Estágio 23

3.5.1.2.11 Saber se está Aberto A operação Saber se está Aberto tem como finalidade verificar se um livro específico está aberto. Para isso é necessário verificar se o caminho passado é igual a qualquer um dos caminhos dos livros abertos. A figura seguinte esquematiza esta operação. Figura 3.5.13 Saber se está Aberto Relatório de Estágio 24

3.5.1.2.12 Saber se é Livro Activo A operação Saber se é Livro Activo tem a finalidade de se perceber se um dado livro é de facto o livro activo. A figura 3.5.14 representa todo o processo. Figura 3.5.14 Saber se é Livro Activo Relatório de Estágio 25

3.5.1.2.13 Alterar Nome da Folha de Cálculo Activa no Livro Activo A operação Alterar Nome da Folha de Cálculo Activa no Livro Activo tem a finalidade de alterar o nome da folha de cálculo activa no livro activo. A figura 3.5.15 representa todo o processo. Figura 3.5.15 Alterar Nome da Folha de Cálculo Activa no Livro Activo 3.5.1.2.14 Saber se a Janela está Visível A operação Saber se a Janela está Visível tem como objectivo obter informação sobre a visibilidade da janela do livro. Mesmo que a janela esteja minimizada, o livro é considerado como visível, visto que aparece na barra de tarefas do Windows. O livro activo pode estar aberto mas invisível, nesse caso, não há nenhuma indicação visual de que o livro esteja de facto aberto. É útil para edição dos livros de forma invisível e no fim mostrar ao utilizador. ioo_objdesktop.getcurrentcomponent().getcurrentcontroller().getframe().getcontainerwindow().isvi sible() A propriedade IsVisible é devolvida. Relatório de Estágio 26

3.5.1.2.15 Devolver Estado da Janela do OpenOffice A operação Devolver Estado da Janela do OpenOffice tem como objectivo saber se a janela do livro está maximizada, minimizada ou normal. A figura 3.5.16 representa o processo. Figura 3.5.16 Devolver Estado da Janela do OpenOffice 3.5.1.2.16 Definir Visibilidade da Janela do Livro A operação Definir Visibilidade da Janela do Livro permite o controlo sobre a visibilidade do livro. Uma janela de um livro específico pode ser totalmente oculta, parecendo que nem existe, visto não haver nenhuma indicação visual disso. Da mesma forma, poderá ser tornada visível a qualquer instante. Existe no entanto diferença entre tornar invisível um livro e abrir um livro de forma invisível. Só é possível fazer a operação de tornar invisível num livro activo, ao contrário do que acontece no Excel. Neste, a operação de visibilidade ou invisibilidade é extensível a todos os livros abertos. ioo_objdesktop.getcurrentcomponent().getcurrentcontroller().getframe().getcontainerwindow().set Visible(ab_switch) A linha acima define a visibilidade da janela do livro activo. O valor do argumento boolean ab_switch definirá a visibilidade do livro activo. Relatório de Estágio 27

3.5.1.2.17 Definir Estado da Janela do Livro A operação Definir Estado da Janela do Livro tem como finalidade alterar a forma da janela do livro para vários estados. A figura 3.5.17 representa o processo. Figura 3.5.17 Definir Estado da Janela do Livro Relatório de Estágio 28

3.5.1.2.18 Obtenção do Conteúdo de uma Célula (Linha, Coluna) A operação Obtenção do Conteúdo de uma Célula (Linha, Coluna) tem como finalidade a obtenção do conteúdo de uma célula específica que representa a posição Linha, Coluna na folha de cálculo activa no livro activo. A figura 3.5.18 representa o processo. Figura 3.5.18 Obtenção do Conteúdo de uma Célula (Linha, Coluna) 3.5.1.2.19 Obtenção do Conteúdo de uma Célula (Endereço) A operação Obtenção do Conteúdo de uma Célula (Endereço) tem como finalidade a obtenção do conteúdo de uma célula específica que representa a o Endereço na folha de cálculo activa no livro activo. A única diferença relativamente à anterior funcionalidade resume-se à obtenção do ObjectoCélula com getcellrangebyname(endereço). Relatório de Estágio 29

3.5.1.2.20 Definir Conteúdo de uma Célula (Linha, Coluna) A operação Definir Conteúdo de uma Célula (Linha, Coluna) tem como finalidade a inserção de um valor numa célula específica que representa a posição Linha, Coluna na folha de cálculo activa no livro activo. Este valor pode ser numérico ou texto. A figura 3.5.19 representa o processo. Figura 3.5.19 Definir Conteúdo de uma Célula (Linha, Coluna) 3.5.1.2.21 Definir Conteúdo de uma Célula (Endereço) A operação Definir Conteúdo de uma Célula (Endereço) tem como finalidade a inserção de um valor numa célula específica que representa o Endereço na folha de cálculo activa no livro activo. A única diferença relativamente à anterior funcionalidade resume-se à obtenção do ObjectoCélula com getcellrangebyname(endereço). Relatório de Estágio 30

3.5.1.2.22 Definir Formato de uma Célula (Linha, Coluna) A operação Definir Formato de uma Célula (Linha, Coluna) tem como finalidade a definição do formato do conteúdo da célula específica que representa a posição Linha, Coluna na folha de cálculo activa no livro activo. Um exemplo de utilização é (3,4,"##.#########.##0,0###") em que se define um formato na célula especificada. Neste caso, um formato com 4 casas decimais em que uma será sempre visível e as outras só se forem números diferentes de zero. Para definir o formato para texto, no formato deve-se colocar @. A figura 3.5.20 representa o processo. Figura 3.5.20 Definir Conteúdo de uma Célula (Linha, Coluna) Relatório de Estágio 31

3.5.1.2.23 Definir Formato de uma Célula (Endereço) A operação Definir Conteúdo de uma Célula (Endereço) tem como finalidade a definição do formato do conteúdo da célula específica que representa o Endereço na folha de cálculo activa no livro activo. A única diferença relativamente à anterior funcionalidade resume-se à obtenção do ObjectoCélula com getcellrangebyname(endereço). 3.5.1.2.24 Insere Linha A operação Insere Linha tem como finalidade a inserção de uma linha vazia no endereço especificado na folha de cálculo activa no livro activo. A figura 3.5.21 representa o processo. Figura 3.5.21 Insere Linha A operação de seleccionar o ObjectoCélula garante que o ponto de inserção da linha vazia se encontra na posição pretendida (endereço especificado). A inserção da linha é feita acima do endereço. 3.5.1.3 Testes O módulo de integração desenvolvido foi testado várias vezes e de diversas formas. As funcionalidades do módulo OpenOffice Calc, foram conferidas com testes unitários, usando um ambiente de testes, e testes de integração, usando uma aplicação AIRC em que o módulo Calc foi integrado. Os testes unitários foram definidos com base no seguinte objectivo: Ao utilizar cada uma das funcionalidades do módulo OpenOffice Calc, o comportamento destas sobre uma folha de cálculo do Relatório de Estágio 32

OpenOffice Calc deve ser exactamente igual ao comportamento exibido quando é utilizada cada uma das funcionalidades correspondentes do módulo Microsoft Office Excel sobre uma folha de cálculo do Excel. Só desta forma, as funcionalidades do módulo desenvolvido para o OpenOffice Calc se poderiam considerar como aptas a utilização em aplicações AIRC. Após finalizada esta fase de testes foi possível passar à fase de integração do módulo desenvolvido e realizar testes de integração. Para isso usou-se a aplicação AIRC que mais usa o Microsoft Office Excel, o SCE. Os testes de integração foram definidos com base no seguinte objectivo: As funcionalidades da aplicação SCE que se realizam usando funcionalidades do módulo Microsoft Office Excel devem realizar-se da mesma forma, em termos de conteúdo(exemplo: a informação que é exportada do SCE ou importada para o SCE) e comportamento(exemplo: forma como os pacotes de produtividade operam), quando usadas as funcionalidades do módulo OpenOffice Calc desenvolvido. 3.5.2 Camada de Abstracção Findo o desenvolvimento do módulo Calc foi possível começar a desenvolver a Camada de Abstracção para o funcionamento transparente dos diferentes objectos de ligação aos pacotes de produtividade, Microsoft Office Word e Excel, e OpenOffice Writer e Calc. Deu-se então início a uma fase de análise das questões a ultrapassar: Como controlar a criação dos diferentes objectos de ligação sem definir uma preferência específica e estática? Em que situação se deve criar cada um deles? 3.5.2.1 Criar camada de abstracção para permitir o funcionamento das aplicações Office ou OpenOffice de forma transparente Para criar a camada de abstracção, teve de ser criada a hierarquia para os objectos de ligação (objectos pai para albergar objectos filhos Word/Writer e Excel/Calc). O objecto pai irá ser usado para se criar um dos dois existentes tipos de objectos filhos. Desta forma, centraliza-se a criação dos objectos filho e normaliza-se a sua utilização visto que, ambos apresentam as mesmas funcionalidades mas naturalmente em pacotes de produtividade diferentes. Esta hierarquia, permite que mais objectos de ligação a outros pacotes de produtividade venham a ser suportados no futuro sem impacto nos objectos de ligação existentes. A figura 3.5.22 representa a organização lógica criada. Relatório de Estágio 33

Figura 3.5.22 Hierarquia dos objectos de ligação Finda a hierarquia dos objectos de ligação foi necessário definir como estes seriam chamados/criados de acordo com as operações que são possíveis de realizar nas aplicações AIRC. A seguinte tabela representa as situações possíveis de utilização nas aplicações AIRC2000 para o caso de documentos. Tabela 3.5.1 Sumário de tratamento de documentos com os diferentes pacotes de produtividade A tabela acima foi resultante das tarefas de análise realizadas sobre esta matéria. Esta análise incidiu sobre que tarefas os pacotes de produtividade conseguiam suportar. Há dois grandes grupos de tarefas: Abertura e gravação de documentos Geração de documentos com base em modelos Tendo em conta as várias versões dos referidos pacotes de produtividade e, tendo em conta que é necessário manter a retro compatibilidade com as versões antigas do Microsoft Office, esta análise revelouse essencial. A tabela pretende responder a perguntas como as seguintes: Relatório de Estágio 34

P: É possível gerar um documento, a gravar com extensão.doc com base num modelo de extensão.ott? Que objecto de ligação se deve criar para tratar esta chamada? R: Sim. Neste caso apenas o OpenOffice consegue tratar esta chamada. As zonas na tabela a verde representam situações extremas de suporte representadas pelas seguintes perguntas: P: Tendo o Office 2003 instalado com o pacote de compatibilidade instalado (Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint 2007 File Formats) e o OpenOffice 3.0 é possível abrir e guardar modelos de extensão.dotx? R: Neste caso a abertura apenas é conseguida usando o OpenOffice mas não é possível guardar nesse formato visto não haver suporte. O Office 2003 mesmo com o pacote de compatibilidade instalado, não consegue realizar a abertura/gravação de modelos.dotx. P: Tendo o Office 2003 instalado com o pacote de compatibilidade instalado e o OpenOffice 3.0 é possível gerar um documento de extensão.doc baseado num modelo de extensão.dotx? R: Sim. O OpenOffice tratará esta chamada. Apesar de parecer estranho, é completamente possível o OpenOffice 3.0 tratar esta chamada visto que consegue abrir modelos de extensão.dotx e consegue guardar o documento resultante da geração com extensão.doc. Estas situações extremas apenas estão presentes na combinação Office 2003 com OpenOffice 3.0. Na combinação Office 2007 com OpenOffice 3.0 estas situações terão de ser tratadas pelo Office 2007. Naturalmente esta orquestração tem que ser definida com base em informação válida e independente da aplicação. A fonte dessa informação é o registo do Windows. O registo do Windows é o repositório de toda a informação do sistema e das instalações que são realizadas nesse. A particularidade interessante a reter é que quando se instala cada um dos pacotes de produtividade referidos, associações são feitas por extensão de documento. Dessa forma, é possível saber que pacote de produtividade é mais adequado ao tratamento de cada chamada. Essas associações podem ser visualizadas no próprio registo do Windows como mostra a figura seguinte. Relatório de Estágio 35

Figura 3.5.23 Definição no registo do Windows para.doc O campo Predefinição contém a descrição do formato do ficheiro, neste caso é um.doc no formato existente desde a versão Office 97 até ao Office 2003. O Office 2007 também cria ficheiros.doc neste formato antigo, mas o nativo é o.docx. Nesse caso o campo Predefinição conteria Word.Document.12. Com base no conteúdo do campo Predefinição uma nova pesquisa no registo é feita para devolver o resultado à seguinte pergunta: P: Qual é a aplicação que abre documentos no formato Word.Document.8? R: A resposta dependerá sempre dos pacotes de compatibilidade que terá instalado mas para a combinação Office 2007 com OpenOffice 3.0. A resposta encontra-se em HKEY_CLASSES_ROOT\Word.Document.8\shell\Open\command\@. Relatório de Estágio 36

Figura 3.5.24 Definição no registo do Windows para.doc Na figura acima o campo Predefinição (também conhecido por @ devido a ser essa a sua descrição em caso de exportação) refere qual o caminho para a aplicação que está definida para abrir os documentos no formato Word.Document.8. Com base nesta informação e outras complementares pode-se agora definir que objecto de ligação será criado para tratar cada tarefa da tabela acima apresentada [Ver tabela 3.5.1]. Estes procedimentos e outros semelhantes para outros formatos existentes de documentos e também para os formatos de livros, são realizados de forma a garantir o correcto funcionamento e, mais importante, que seja transparente para o utilizador. 3.5.2.1.1 Implementação de funções que visam a obtenção coerente de informação relativa à criação, abertura e gravação de modelos, documentos e livros A camada de abstracção é constituída pelas funcionalidades abordadas nos seguintes subcapítulos. Relatório de Estágio 37

3.5.2.1.1.1 Verifica se o OpenOffice Writer se encontra instalado A operação Verifica se o OpenOffice Writer se encontra instalado tem como finalidade a obtenção da informação relativa à instalação do OpenOffice Writer. A figura 3.5.25 representa o processo. Figura 3.5.25 Verifica se o OpenOffice Writer se encontra instalado Relatório de Estágio 38

3.5.2.1.1.2 Verifica se o Microsoft Office Word se encontra instalado A operação Verifica se o Microsoft Office Word se encontra instalado tem como finalidade a obtenção da informação relativa à instalação do Microsoft Office Word. Esta operação distingue as diferentes instalações do Microsoft Office Word que possam existir nos diferentes computadores, de acordo com as suas funcionalidades. A figura 3.5.26 representa o processo realizado. Figura 3.5.26 Verifica se o Microsoft Office Word se encontra instalado Relatório de Estágio 39

3.5.2.1.1.3 Verifica se o OpenOffice Calc se encontra instalado A operação Verifica se o OpenOffice Calc se encontra instalado tem como finalidade a obtenção da informação relativa à instalação do OpenOffice Calc. A figura 3.5.27 representa o processo realizado. Figura 3.5.27 Verifica se o OpenOffice Calc se encontra instalado Relatório de Estágio 40

3.5.2.1.1.4 Verifica se o Microsoft Office Excel se encontra instalado A operação Verifica se o Microsoft Office Excel se encontra instalado tem como finalidade a obtenção da informação relativa à instalação do Microsoft Office Excel. Esta operação distingue as diferentes instalações do Microsoft Office Excel que possam existir nos diferentes computadores, de acordo com as suas funcionalidades. A figura 3.5.28 representa o processo realizado. Figura 3.5.28 Verifica se o Microsoft Office Excel se encontra instalado 3.5.2.1.1.5 Obtém a aplicação associada a uma dada extensão O objectivo da função Obtém a aplicação associada a uma dada extensão (of_getappassociada) é definir qual dos pacotes de produtividade instalados deve ser utilizado para tratar cada determinada chamada. A escolha do pacote de produtividade tem como base os valores devolvidos das verificações acima descritas que se baseiam em informação independente da aplicação e que, vem do próprio registo do Windows. Relatório de Estágio 41

A função recebe uma extensão a verificar e devolve a sua associação, se existente, a um pacote de produtividade. É utilizada maioritariamente nas funções de criação de objectos de ligação e também nas funções de construção de strings de extensões de documentos/livros que serão usadas na janela de gravação de documentos/livros. 3.5.2.1.1.6 Preenchimento de dropdown com as extensões compatíveis com o que está instalado De acordo com a informação dos pacotes de produtividade que se encontram instalados, todas as dropdown s presentes na tabpage de Aplicações são dinamicamente preenchidas. Se os pacotes de produtividade não estivessem instalados as dropdown s não seriam preenchidas, devido a esse mesmo facto. As dropdown s, Extensão para documentos e Extensão para livros, são preenchidas com as extensões compatíveis tendo em conta o que está instalado. Estas informações são todas extraídas do registo do Windows. Por definição, a extensão definida para documentos é.doc, se ambos os pacotes de produtividade suportados, Microsoft Office Word e OpenOffice Writer, estiverem instalados. Similarmente, para a definição de extensões para livros as mesmas verificações são realizadas mas para o Microsoft Office Excel e OpenOffice Calc. As definições das extensões aqui presentes serão utilizadas para definir vários comportamentos nas aplicações. Por exemplo, a associação de modelos na janela de modelos, definição da ordem de formatos para abertura e gravação, definição de formatos de gravação de documento levando em conta o modelo utilizado, etc. A figura 3.5.29 representa o processo realizado. Relatório de Estágio 42

Figura 3.5.29 TabPage de Preferências 3.5.2.1.1.7 Restantes funções que compõem a camada de abstracção As funções anteriormente referidas são manifestamente as mais utilizadas, no entanto, existem uma série de outras funções auxiliares que implementam tarefas com dimensão inferior. Por exemplo, a definição das extensões com base na preferência para janelas de abertura e gravação de documentos/livros. Uma listagem mais detalhada pode ser verificada no Anexo B - Product Backlog e Sprint Backlog. 3.5.2.1.2 Criação de objectos de ligação Existem três funções com a tarefa de criação de objectos de ligação: uma é orientada à criação do objecto de ligação adequado ao tratamento de documentos com base no tipo de documento recebido; outra é orientada à criação do objecto de ligação adequado à geração de documentos levando em linha de conta o tipo de modelo que o origina e, o tipo de documento que se pretende criar; e por fim, outra é orientada à criação do objecto de ligação adequado ao tratamento de livros com base no tipo de livro recebido. As duas últimas funções tiveram de ser criadas de raiz e a primeira teve de ser bastante alterada de forma a se ajustar ao novo paradigma de criação dos objectos de ligação com base nas informações presentes no registo do Windows. Relatório de Estágio 43

3.5.3 Tarefas auxiliares A criação da camada de abstracção levou à definição de outras tarefas que visam maximizar a eficiência dessa. As subsecções abaixo descrevem essas tarefas auxiliares. 3.5.3.1 Guardar documentos/livros em modo de compatibilidade A funcionalidade guardar documentos/livros em modo de compatibilidade irá permitir a gravação dos formatos, docx, odt, xlsx e ods em modo de compatibilidade. Desta forma, os formatos enunciados serão suportados em versões anteriores, tanto do Microsoft Office Word/Excel como do OpenOffice Writer/Calc. A figura 3.5.30 representa o processo realizado. Figura 3.5.30 TabPage de Preferências com definição de gravação em modo de compatibilidade 3.5.3.2 Guardar documentos no formato docx em Office s antigos que tenham o Pack de compatibilidade com 2007 instalado Em versões do Microsoft Office Word anteriores à 2007, que tenham o pacote de compatibilidade com 2007 instalado, é possível gravar documentos no formato.docx através do interface gráfico do Microsoft Office Word. Visto ser possível realizar esta operação através do interface gráfico, a mesma tem de ser possível realizar usando a API. A qual ainda não existia e era necessária para que as aplicações AIRC Relatório de Estágio 44

pudessem gravar documentos nesse formato e também para ser respeitada a tabela 3.5.1 definida durante a análise da camada de abstracção. Todos os formatos de gravação para documentos encontram-se estaticamente definidos para cada versão do Microsoft Office Word, sendo-lhes atribuída uma constante. Por exemplo, para documentos.doc o valor da constante é 0 (wdformatdocument97), para documentos.rtf o valor da constante é 6 (wdformatrtf), para documentos.docx no Microsoft Office 2007 o valor da constante é 12 (wdformatxmldocument). No entanto, ao desenvolver esta funcionalidade ao nível da API para versões do Microsoft Office Word anteriores à 2007, foi detectada variabilidade do valor de SaveFormat associado ao formato.docx entre instalações das diferentes versões do Office com o Compatibility Pack, recorrendo ao teste de gravação de macro. A variabilidade detectada é caracterizada em seguida. Após pesquisa [Anexo D Informação Online Consultada» Pesquisa para guardar documentos em docx em Office s anteriores ao 2007 com o pack de compatibilidade instalado, através da API], detectou-se que apesar do formato.docx assumir um valor numérico de SaveFormat dinâmico em diferentes instalações, em diferentes computadores, do Office(2000, XP, 2003) com Compatibility Pack instalado, este SaveFormat tinha uma designação constante (Classname) no array de Item do FileConverter, tendo como designação Word12. Tendo em conta a variabilidade existente foi necessário pesquisar dinamicamente o valor de SaveFormat do formato.docx com base no Classname. Só após esse procedimento se poderia guardar o documento nesse formato. A figura abaixo representa a funcionalidade implementada. Relatório de Estágio 45

Figura 3.5.31 Guardar documentos no formato docx em Office s antigos que tenham o Pack de compatibilidade com 2007 instalado 3.5.3.3 Extensões para OpenOffice Writer que facilitam a visibilidade de marcadores em modelos Word (.dot,.dotx) convertidos para.ott. A tarefa associada a esta subsecção teve como origem a seguinte questão: Os utilizadores que no seu trabalho estão habituados a trabalhar com o Microsoft Office Word resistirão à mudança para OpenOffice Writer? Sim, devido essencialmente a três razões: Simplesmente por estarem habituados à ferramenta que sempre usaram até agora. Diferença visual. Necessidade de conversão manual dos modelos Word existentes para modelos Writer para realizar geração de documentos. É a terceira razão que esta subsecção visa minimizar visto que, as primeiras duas são de carácter intrinsecamente pessoal. De facto, era necessária a conversão manual dos modelos, dentro do contexto da aplicação AIRC, pois os marcadores presentes nos modelos do OpenOffice Writer não são visíveis ao contrário dos presentes nos modelos do Microsoft Word, como nas seguintes figuras se expõe. Relatório de Estágio 46

Figura 3.5.32 Marcador após colocação no Word Figura 3.5.33 Visual de um marcador normal após colocação no OpenOffice Figura 3.5.34 Solução - Visual do marcador visível no OpenOffice Resumindo, indirectamente era possível converter os modelos Word existentes criando novos modelos OpenOffice Writer, com a aplicação AIRC, à imagem dos modelos Word existentes para que os modelos OpenOffice contivessem a solução ao problema dos marcadores sem identificadores visuais da sua presença (realizando a colocação de cada marcador individualmente). (A definição dos conceitos, marcador e modelo encontra-se em Definições, Acrónimos e Abreviaturas.) Tendo em conta o facto de haver um número elevado de modelos, a criação um a um de cada modelo OpenOffice Writer, como alternativa aos modelos Word existentes, torna-se incomportável e lenta. Uma nova abordagem era necessária para que os utilizadores de Office pudessem usar o OpenOffice com o mínimo impacto. Essa abordagem baseou-se em dois passos. Primeiro proceder à conversão de modelos Word, usando o assistente Conversor de documentos, incluído no OpenOffice e acessível através de Ficheiro Assistentes Conversor de Documentos. (Ver figuras 3.5.35 e 3.5.36.) Figura 3.5.35 Primeiro passo Conversão de Modelos Word em Modelos OpenOffice Writer Relatório de Estágio 47

Figura 3.5.36 Primeiro passo A realizar a conversão No final da conversão obtém-se tantos modelos OpenOffice Writer quantos os modelos Word existentes. Um por cada modelo convertido, portanto. Tendo agora os modelos OpenOffice Writer como resultado da conversão dos modelos Word existentes, verifica-se que contêm os marcadores já existentes nos modelos Word mas sem a visibilidade que os caracteriza no Word como se vê na figura 3.5.32. Ao abrir o modelo Word e o modelo OpenOffice Writer resultante da conversão, verifica-se que neste último o mesmo marcador estará como 3.5.33. Tendo os modelos convertidos, basta apenas colocar os marcadores visíveis, visto que o OpenOffice não o faz. [15] Assim sendo, há lugar a um segundo passo para se obter modelos plenamente funcionais e que possam constituir uma alternativa séria aos modelos do Word. Para a execução deste segundo passo foi necessária investigação [consultar Anexo D - Informação Online Consultada» Pesquisa para as extensões OpenOffice], visto que a solução não é implementada usando o Powerbuilder mas sim o próprio OpenOffice e o seu ambiente de desenvolvimento de macros. [Consultar Anexo E - Documentação Extensões OpenOffice] O OpenOffice, tal como muitas aplicações hoje em dia (Ex: Mozilla Firefox) suportam a adição de plugins ou extensões, que adicionam comportamentos à aplicação base. Assim sendo, porque não criar extensões para adicionar o comportamento que falta ao OpenOffice? Porque não colocar os marcadores visíveis nós mesmos? Relatório de Estágio 48

De forma a obter o comportamento necessário desenvolvi duas extensões para o OpenOffice: uma que coloca visibilidade aos marcadores existentes nos modelos previamente convertidos; e outra que a retira, caso necessário. 3.5.3.3.1 Coloca Visibilidade Marcador A extensão Coloca Visibilidade Marcador pode ser usada por qualquer utilizador que adicione a extensão desenvolvida à sua instalação de OpenOffice. Esta, durante a execução, pergunta qual a pasta onde o utilizador quer que os modelos.ott e os seus marcadores no conteúdo sejam alterados para se tornarem visíveis. Todos os modelos nessa directoria serão alterados. Para mais detalhe, relativamente à utilização da extensão, é essencial consultar o anexo E - Documentação Extensões OpenOffice. A figura 3.5.37 representa o processo realizado. A necessidade da criação e aplicação de um estilo de nome Invisível deve-se ao facto de ter de ser possível a ocultação dos identificadores visuais. Isso é feito colocando a propriedade CharHidden de objectocharstyle a false. O objectocharstyle corresponde ao objecto resultante da pesquisa no array de estilos procurando por Invisível. Relatório de Estágio 49

Figura 3.5.37 Coloca Visibilidade Marcador Relatório de Estágio 50

3.5.3.3.2 Apaga Visibilidade Marcador Se por algum motivo for necessário eliminar os identificadores visuais colocados, basta executar a extensão Apaga Visibilidade Marcador sobre os modelos modificados anteriormente. Para mais detalhe, relativamente à utilização, verificar anexo E - Documentação Extensões OpenOffice. A figura 3.5.38 representa o processo realizado. Relatório de Estágio 51

Figura 3.5.38 Apaga Visibilidade Marcador Relatório de Estágio 52

3.5.4 Correcção dos problemas existentes nas funcionalidades já criadas pela AIRC que interagem com pacotes de produtividade Os problemas ou os erros existentes são algo que depende sempre de vários factores. Aponto os três que considero ser os mais relevantes: Conhecimento do objecto de trabalho. Experiência do programador. Análise. O problema relacionado com a colocação de marcadores (subcapítulo 3.5.4.1) foi uma conjunção dos três factores enunciados. A funcionalidade que antes era realizada era limitada devido a uma análise menos exaustiva mas que se pensava rigorosa. Quando surgiram novas situações sobre a qual a mesma funcionalidade teria de actuar sem problemas, teve de ser feita a escolha entre corrigir o código, alterando-o, ou corrigir refazendo-o de origem. Após análise, verificou-se que era preferível refazer, devido a novos conhecimentos relacionados com a API do OpenOffice que serão referidos no subcapítulo 3.5.4.1. Os restantes problemas (subcapítulo 3.5.4.2) também são resultantes de análises superficiais, na altura do desenvolvimento da funcionalidade. Curiosamente, estas análises só se revelaram insuficientes muito tempo mais tarde, tanto por evolução dos programadores, por conhecimento de limitações dos pacotes de produtividade ou por tentativa de utilização da funcionalidade fora do seu âmbito inicial de utilização. Analisando os problemas existentes, as suas características específicas e a forma como cada um foi resolvido, destaco as seguintes frases, com as quais me identifico: Os erros são os portais da descoberta James Joyce Até um erro pode revelar-se um elemento necessário a um feito meritório Henry Ford Relatório de Estágio 53

3.5.4.1 Reformulação Colocar Marca com dispatcher s para resolver problema de colocação de marcadores em tabelas e molduras no OpenOffice Writer A versão inicial da colocação de marcadores no OpenOffice foi reconstruída, devido a limitações funcionais. Esta não suportava a colocação de marcadores em molduras e tabelas devido a problemas de posicionamento do cursor e seu controlo. Esta falta de suporte deveu-se principalmente, a não se conhecer todos os requisitos, quando a funcionalidade foi inicialmente realizada. Analisando as seguintes figuras (3.5.39, 3.5.40 e 3.5.41) é possível verificar as diferenças estruturais entre as duas versões. Na primeira versão, era necessário um controlo enorme da posição do cursor e só depois se podia colocar os identificadores visuais e o marcador em si. Na segunda versão, apesar de, funcionalmente ser feito o mesmo trabalho, evita-se o controlo do cursor, que assumia grande complexidade em molduras (caixas de texto) e principalmente em tabelas, por exemplo, na gestão de cada célula. É possível evitar o controlo do cursor utilizando chamadas ao dispatcher do OpenOffice. O dispatcher é um componente que se encontra à escuta de ordens genéricas a executar (Command Url s), por exemplo, ordens como Alinhar à Esquerda ou Seleccionar Tudo. A cada uma delas corresponderá necessariamente diferentes chamadas e obrigatoriamente diferentes Command URL. Por exemplo, Alinhar à Esquerda tem como Command URL ".uno:alignleft" e Seleccionar Tudo tem como Command URL ".uno:selectall". Da perspectiva da utilização através da API, de tais funcionalidades, é preferível definir que será o dispatcher a tratar estas chamadas, libertando desta forma o programador de duas tarefas que antes necessitava de executar: Controlo do cursor (local onde vai ocorrer determinada operação), visto que para realizar as mesmas funcionalidades era necessário sempre saber onde está o cursor, por exemplo, se está numa posição válida, etc. Trabalho relacionado com a execução das tarefas, que tendo em conta a posição do cursor podem assumir sintaxes diferentes ou mais complexas. Relatório de Estágio 54

Figura 3.5.39 Dispatch Framework do OpenOffice [6] Relatório de Estágio 55

Figura 3.5.40 Colocação de Marcador Primeira Versão Relatório de Estágio 56

Figura 3.5.41 Colocação de Marcador Segunda Versão Relatório de Estágio 57

3.5.4.2 Outras correcções Foram realizadas outras correcções a funcionalidades existentes, tais como: A obtenção do nome completo do documento (usando a API do Word) para activação usando funções do Windows (SetForegroundWindow e FindWindow da user32.dll) A activação de documentos falhava sempre que um documento era aberto em modo de compatibilidade no Office 2007. A activação era feita em três passos: 1 - Obtenção do nome do documento. ls_name = this.ioo_obj.application.activedocument.name + " - Microsoft Word" 2 - Obter o handle da janela com a passagem do nome obtido para a FindWindow. lul_handle = lnv_platform.of_findwindow(ls_null, ls_name) 3 Activar a janela correspondente ao handle usando a SetForegroundWindow. lnv_platform.of_setforegroundwindow(lul_handle) Após testes o que se verificou é que this.ioo_obj.application.activedocument.name não devolve todo o nome necessário à passagem para a FindWindow e, como resultado, não encontrava a janela correspondente e consequentemente, não a activava na SetForegroundWindow. A solução obtida resume-se à alteração de this.ioo_obj.application.activedocument.name para this.ioo_obj.application.activewindow.caption. A forma anterior apenas devolvia o nome do documento aberto, nas figuras abaixo devolveria Exemplo.doc e Exemplo.docx, respectivamente. O problema deve-se ao facto de ao se abrir um documento.doc, o Office 2007, assumir o modo de compatibilidade, verificando-se que o nome do documento não é suficiente para obter o handle da janela correspondente, visto que falta a string [Modo de Compatibilidade]. A solução passa por usar ActiveWindow.Caption, que devolve o nome da barra de título do documento, ou seja, o nome da janela. Desta forma a solução passa a ser geral. A anterior forma apenas funcionava para Office s anteriores ao 2007 e para documentos abertos sem modo de compatibilidade no Office 2007. Relatório de Estágio 58

Figura 3.5.42 Documento aberto em modo de compatibilidade Figura 3.5.43 Documento aberto sem estar em modo de compatibilidade Protecção de inserção de quebras em cabeçalho, rodapé, caixa de texto, comentários, etc. Através do GUI a colocação de quebras (quebra de página, quebra de coluna, etc.) encontra-se protegida, não sendo possível a sua colocação. No entanto, através da utilização da API nada nos impede de tentar essa colocação. Naturalmente a API devolverá um erro devido a essa funcionalidade não existir. Assim sendo, essa protecção tem de ser efectuada no próprio código. Tendo em conta que apenas é possível inserir quebras no corpo do documento, no momento anterior à colocação da quebra, verifica-se se o cursor está no corpo do documento ou se está noutro local qualquer (cabeçalho, rodapé, comentário, caixa de texto, etc.). if this.ioo_obj.application.activewindow.activepane.view.seekview = wdseekmaindocument then Só se estiver no corpo do documento será inserida a quebra. Protecção ActiveDocument Grande parte do processamento realizado sobre documentos é feito usando a referência ao documento que se encontra activo no Word, no entanto, esta propriedade nem sempre é válida. Por exemplo, quando se fecha o documento activo e não temos mais nenhum aberto, a ActiveDocument não terá conteúdo válido. Para evitar os erros decorrentes de tentar aceder ao documento activo quando ele não existe, é feita a protecção usando blocos de captura de excepções try catch. Esta protecção evita que o programa termine de forma fatal. 3.5.5 WebServices Os Webservices a implementar visam, através da sua execução, obter informação relativa à presença de marcadores em modelos e verificar a coerência dessa informação. Ambos os WebServices foram implementados no projecto ACE Agente de Comunicações Externas. Relatório de Estágio 59

3.5.5.1 Webservice que, para o modelo associado a uma dada acção, devolva informação sobre os marcadores que estão presentes nesse modelo e se estão na Base de Dados Este WebService possibilita várias pesquisas importantes na sua execução, no que se refere ao conhecimento que é extraível dos marcadores presentes nos modelos e na tabela de acções. A criação deste WebService seguiu quatro fases distintas: Análise Desenvolvimento Configuração Testes Análise Durante esta fase foi realizada uma averiguação dos pré-requisitos necessários à implementação do WebService. Este WebService é diferente de todos os realizados até agora no Agente de Comunicações Externas (ACE) visto que, necessita de aceder aos modelos associados às diferentes acções para obter os marcadores e conseguir fazer a necessária pesquisa e comparação. Para aceder a modelos é preciso usar um pacote de produtividade para os abrir. A escolha neste caso, recai sobre o OpenOffice visto que consegue aceder a todos os modelos existentes, mesmo os criados no Microsoft Word, e verificar os marcadores neles contidos. Desta forma, previu-se a instalação do OpenOffice no servidor. Tendo em conta que o projecto do ACE não contém as AFC, com as quais se cria instâncias do objecto de ligação, prevê-se a criação da hierarquia de objectos de ligação a pacotes de produtividade no âmbito do ACE. Desconhecia-se, no entanto, se a hierarquia presente nas AFC seria compatível com a forma de funcionamento do ACE. Mais tarde, verificou-se que os objectos pertencentes à hierarquia tinham de ser reformulados devido a características específicas de utilização de WebServices. Os objectos que constituem a hierarquia devem conter apenas os procedimentos necessários, de modo a reduzir a quantidade de memória e o processamento necessário para execução. Relativamente ao problema a tratar, há a necessidade de aceder à base de dados e também, que o resultado de todos estes processos deve ser devolvido na forma de XML. Relatório de Estágio 60

Desenvolvimento A criação da hierarquia dos objectos de ligação teve nos seus procedimentos as seguintes alterações: Remover todos os procedimentos que são supérfluos ao trabalho em mãos para minimizar a carga dos objectos de ligação na memória do servidor; Remover/alterar procedimentos que não façam sentido no âmbito do ACE, devido a serem na sua essência objectos das AFC com o seu próprio contexto de execução. Resumindo, há que adaptar a forma de actuação destes objectos para o contexto do ACE. Para obter a informação dos marcadores obrigatórios de uma acção e saber se esses se encontram no modelo a si associado é necessária uma pesquisa à base de dados. Nessa pesquisa, obtém-se diversas informações: quais os marcadores que estão associados a uma determinada acção; desses, quais são considerados obrigatórios; e qual o caminho do modelo associado a uma aplicação para a qual a acção se encontra associada. Na figura seguinte verifica-se a pesquisa realizada. Figura 3.5.44 Pesquisa realizada à base de dados Chave_c_acc, integer, representa a chave não repetida da acção Required_omacc, smallint, flag que representa se um determinado marcador é obrigatório ou não. Cod_capli, char(3), código da aplicação Ex: SGD, STA, etc. Moddef_fmtda, integer, representa a chave não repetida do modelo Desig_c_acc, varchar(250), representa o nome da acção Ex: Pedido de Certidão. Chave_fmarc, integer, representa a chave não repetida do marcador Código_fmarc, varchar(25), representa o nome do marcador Ex: GRLNOMEPAI Desig_fmarc, varchar(75), representa a designação do marcador Ex: Nome do Pai Dirdocum_capli, varchar(100), representa a directoria de documentos de cada aplicação Nomefich_fmtda, varchar(200), representa o nome do modelo da chave na tabela de acções Relatório de Estágio 61

Como o resultado da operação tem de ser devolvido na forma de XML, é necessário, antes adequá-lo a um template específico. Figura 3.5.45 Template de XML dos dados devolvidos Desta figura retira-se bastante informação. GRLMRC é a área sobre a qual é realizada a pesquisa quando o Webservice é chamado. Naturalmente a informação relativa à área tem de ser única. Os campos têm de ser em maiúsculas e respeitando a ordem na qual foram seleccionadas na criação da pesquisa da DataWindow. Os campos têm de ter associados a característica de CDATA, para efeitos de compatibilidade do XML devolvido. Se não fosse utilizado poderia haver erros no XML devido à interpretação de caracteres da mensagem como um terminador ou token. Para cada campo que seja pesquisado é necessário definir na Tag de cada um, MRP= nome do campo no template de XML. Tendo a hierarquia dos objectos concluída e os dados da pesquisa à disposição é possível criar o resto da funcionalidade pretendida. As seguintes figuras representam a funcionalidade na forma de algoritmo e na forma de como arquitectura se encontra organizada para a realizar: Relatório de Estágio 62

Figura 3.5.46 Webservice Marcadores Obrigatórios (Algoritmo) Relatório de Estágio 63

Figura 3.5.47 Webservice Marcadores Obrigatórios (Arquitectura) Relatório de Estágio 64

Configuração e Testes No início da fase Testes, comecei por instalar o OpenOffice no servidor. Em seguida, usando a aplicação de Ambiente de testes do ACE (ACE - Consultas), foi possível invocar o WebService desenvolvido para validar as funcionalidades realizadas. Verifiquei nesses testes que o objecto de ligação não era criado correctamente. Após alguma pesquisa [Anexo D - Informação Online Consultada» Pesquisa para Webservices» Resolução questão da entrada OpenOffice no DCOM no servidor], verifiquei que é necessário configurar alguns itens no servidor para que o funcionamento seja o correcto. Houve então lugar a uma fase de configuração. Acedendo ao servidor Windows Server 2003 R2: Iniciar Programas Administrative Tools Component Services. Na janela que abre Expandir Component Services Computers My Computer DCOM Config. Em Documento de texto do OpenOffice.org 1.1 Identity é necessário definir um utilizador que seja administrador da máquina e simultaneamente utilizador do domínio. Desta forma, verifica-se que é necessário ter em atenção as características do utilizador que usa/cria o objecto de ligação ao OpenOffice. Este tem de ser administrador da máquina, para poder criar o objecto de ligação correctamente, e para aceder a documentos remotos tem que ser um utilizador do domínio. A próxima figura demonstra esses requisitos: Figura 3.5.48 Configuração na DCOM Relatório de Estágio 65

Se não for definido um utilizador administrador da máquina na DCOM, os processos são criados mas não passam o teste isalive do PB e os acessos à API do OpenOffice não têm sucesso. Se for definido um utilizador administrador da máquina na DCOM, mas não sendo utilizador do domínio de rede, os processos são criados correctamente, passam o teste isalive do PB e os acessos à API do OpenOffice têm sucesso. No entanto, se se quiser aceder a um documento numa pasta partilhada remota dá excepção na chamada à função loadcomponentfromurl. Se for definido um utilizador administrador da máquina na DCOM, e sendo utilizador do domínio de rede, os processos são criados correctamente, passam o teste isalive do PB e os acessos à API do OpenOffice têm sucesso. Os acessos a um documento numa pasta partilhada remota são bem sucedidos. Testes (parte 2) Tendo tudo configurado é possível agora verificar as funcionalidades realizadas. É possível realizar um número alargado de pesquisas, apresentando-se de seguida, as três mais importantes. Saber os marcadores não obrigatórios que estejam na Base de dados. <filter name='chavecacc' oper='=' >7</filter> <filter name='requiredomacc' oper='=' >0</filter> <filter name='marcadorbd' oper='=' >1</filter> Saber os marcadores obrigatórios e se estão presentes no modelo. <filter name='chavecacc' oper='=' >7</filter> <filter name='requiredomacc' oper='=' >1</filter> Saber os marcadores que estão no modelo e não são iguais a nenhum da Base de dados. <filter name='chavecacc' oper='=' >7</filter> <filter name='marcadorbd' oper='=' >2</filter> <filter name='marcadormodelo' oper='=' >1</filter> Após a verificação do resultado das pesquisas acima procedeu-se a testes de carga nomeadamente, com acessos simultâneos que tiveram como base as seguintes questões: Relatório de Estágio 66

1 É suportada a reutilização dos objectos de ligação ao OpenOffice para as várias chamadas (consulta) à GRLMRC? Sim. O tempo de utilização antes da reutilização era de 4.5 segundos. (Este tempo inclui obtenção de sessão, criação do objecto de ligação, abertura do documento, obtenção dos marcadores presentes, fecho do documento e término dos processos do OpenOffice) O tempo de utilização com reutilização é de 1 segundo. (Este tempo inclui obtenção de sessão, reutilização do objecto de ligação já criado, abertura do documento, obtenção dos marcadores presentes e fecho do documento) A melhoria do tempo de consulta deve-se ao tempo que se poupa por não se criar o objecto de ligação sempre que se consulta. 2 Quanta memória é utilizada pelo OpenOffice em chamadas dispersas no tempo? A utilização oscila entre os 56 megabytes e os 57 megabytes durante a utilização. No final da utilização fica a 56 megabytes. 3 Qual o comportamento em 7 chamadas concorrentes com a mesma pesquisa com o objecto de ligação existente no servidor? A utilização da memória oscila entre os 56 megabytes e os 58 megabytes durante a utilização. No final da utilização fica a 56 megabytes. Não ficam documentos abertos apesar das diferentes pesquisas se realizarem todas sobre o mesmo modelo. O tempo de retorno da resposta neste teste de 7 chamadas simultâneas oscilou entre 0,8 segundos e 1,1 segundos. 4 Qual o comportamento em 7 chamadas concorrentes com a mesma pesquisa com o objecto de ligação inexistente no servidor? A utilização da memória oscila entre os 0 megabytes (devido à criação) e os 60 megabytes durante a utilização. No final da utilização fica a 60 megabytes. Não ficam documentos abertos apesar das diferentes pesquisas se realizarem todas sobre o mesmo modelo. O tempo de retorno da resposta neste teste de 7 chamadas simultâneas oscilou entre 0,6 segundos e 4,3 segundos. Relatório de Estágio 67

5 Qual o comportamento em 7 chamadas concorrentes com 3 diferentes pesquisas, em que algumas são iguais, com o objecto de ligação já existente no servidor? A utilização da memória oscila entre os 56 megabytes e os 58 megabytes durante a utilização. No final da utilização fica a 56 megabytes. Não ficam documentos abertos apesar das diferentes pesquisas se realizarem todas sobre o mesmo modelo. O tempo de retorno da resposta neste teste de 7 chamadas simultâneas oscilou entre 0.6 segundos e 1,1 segundos. 6 Qual o comportamento em 7 chamadas concorrentes com 3 diferentes pesquisas, em que algumas são iguais, com o objecto de ligação inexistente no servidor? A utilização da memória oscila entre os 0 megabytes (devido à criação) e os 57 megabytes durante a utilização. No final da utilização fica a 56 megabytes. Não ficam documentos abertos apesar das diferentes pesquisas se realizarem todas sobre o mesmo modelo. O tempo de retorno da resposta neste teste de 7 chamadas simultâneas oscilou entre 0,7 segundos e 4,3 segundos. A fase de testes encontra-se com mais detalhe no Anexo C Documentação Webservice. 3.5.5.2 Webservice que recebe por argumento, acção ou um caminho para um modelo e um array de marcadores. Devolve os marcadores, do array recebido que não estão presentes no modelo Este WebService tem como funcionalidade principal devolver quais os marcadores passados por argumento que não estão presentes no modelo. O modelo que entra na comparação dos marcadores pode ser o que está associado a uma acção ou pode ser um modelo acessível por um caminho que é passado ao Webservice por argumento. Desta forma, estipula-se duas formas de pesquisa: Para o modelo associado à chave de acção pesquisar se os marcadores passados por argumento estão ou não no modelo. <filter name='chavecacc' oper='=' >7</filter> <filter name='codigofmarc' oper='m'>tax2009 TAX2010 TAX22_R1 FANTASMA TAX38_R1 MAISUM TAX2025_R1 OUTRO</filter> Para o caminho para o modelo passado por argumento pesquisar se os marcadores, também passados por argumento, estão ou não no modelo. <filter name='pathmodeloporxml' oper='m' >\\Servidor\documentos\Registo.dot</filter> Relatório de Estágio 68

<filter name='codigofmarc' oper='m' >TAX2009 TAX2010 TAX22_R1 FANTASMA TAX38_R1 MAISUM TAX2025_R1 OUTRO EMAISOUTRO</filt er> Ambas as pesquisas devolvem os marcadores do array passado por argumento que não estão presentes no modelo. Neste Webservice dispensou-se a fase de configurações visto que já estava definida devido ao primeiro Webservice desenvolvido. As próximas figuras representam a funcionalidade desenvolvida: Relatório de Estágio 69

Figura 3.5.49 Webservice verifica presença marcadores (primeira forma de pesquisa) Relatório de Estágio 70

Figura 3.5.50 Webservice verifica presença marcadores (segunda forma de pesquisa) Relatório de Estágio 71

Figura 3.5.51 Webservice verifica presença marcadores (primeira e segunda forma de pesquisa) Diferenças de Arquitectura Analisando as figuras acima verifica-se que em termos de arquitectura não há grandes diferenças entre a primeira e segunda forma de pesquisa. A primeira forma de pesquisa consulta a base de dados para obter o caminho do modelo associado à acção que, em seguida, utiliza para abrir o modelo de forma a obter os marcadores a comparar. Já a segunda forma de pesquisa abre o modelo recebido por argumento para obter os marcadores a comparar, não sendo necessária a pesquisa à base de dados. Relatório de Estágio 72

3.5.6 Detecção de marcadores obrigatórios na Janela de Acções No âmbito do trabalho desenvolvido no Webservice Marcadores Obrigatórios, tornou-se necessário verificar na janela de acções se no modelo associado à acção estão presentes todos os marcadores definidos como obrigatórios na treeview que a janela contém. Figura 3.5.52 Janela de Acções Analisando a figura acima várias informações são obtidas: Em está definida a aplicação sobre a qual a janela de acções mostra o detalhe em baixo; Em são mostradas as acções existentes para essa aplicação; Em e é mostrado o detalhe para a selecção feita em ; Em está a informação do modelo associado e em considerados obrigatórios. está uma lista de marcadores. Os marcadores assinalados com um visto serão De acordo com a informação aqui apresentada será feito o trabalho de verificação, procurado assim apurar se, de facto, os marcadores considerados obrigatórios para a acção estão no modelo associado à acção. Este procedimento é despoletado quando o utilizador carrega no botão Verificar. A próxima figura representa essa funcionalidade. Relatório de Estágio 73

Figura 3.5.53 Janela de Acções com verificação de marcadores obrigatórios (funcionalidade) Relatório de Estágio 74

A figura seguinte apresenta o funcionamento da funcionalidade detalhada em 3.5.53. Figura 3.5.54 Janela de Acções com verificação de marcadores obrigatórios (funcionamento) Quando se detecta que existem marcadores obrigatórios na treeview que não estão também no modelo, estas duas mensagens (marcadas com ) são apresentadas para informar o utilizador que os marcadores obrigatórios, que na treeview não estão a negrito, não se encontram no modelo. Relatório de Estágio 75

4 Utilização do Módulo de Integração Calc e Camada de Abstracção numa aplicação AIRC 4.1 Integração com o SCE O Sistema de Controlo de Empreitadas (SCE) é a aplicação que mais funcionalidades utiliza do módulo Excel e consequentemente do módulo OpenOffice Calc após a integração. Deste modo, ao suportar as operações que o SCE realiza, com o módulo OpenOffice Calc desenvolvido, têm-se a certeza que todas as funcionalidades do Excel que as outras aplicações do pacote AIRC2000 usam, são suportadas devido ao facto de essas aplicações utilizarem apenas um conjunto das funcionalidades que estão presentes no SCE, já suportadas pelo OpenOffice Calc. Sendo assim, ao verificar a aceitação das funcionalidades desenvolvidas no módulo OpenOffice Calc como correctas, devido a exibirem o mesmo comportamento das do módulo Excel, o esforço passa a ser unicamente o resultante do dotar das aplicações do comportamento necessário à utilização de livros OpenOffice Calc visto que estão apenas preparadas para abrir livros Excel. Dotar a aplicação do suporte do OpenOffice Calc e manter a interoperabilidade com o Excel é o objectivo. Alguns detalhes da integração serão abordados neste capítulo, no entanto, dificuldades de integração serão abordadas no subcapítulo de Dificuldades Sentidas no capítulo 5 de Conclusões. A definição dos conceitos, livro e folha de cálculo encontra-se em Definições, Acrónimos e Abreviaturas. 4.2 Funcionalidades do SCE Os próximos pontos a abordar referem-se ao suporte de funcionalidades específicas do SCE através do OpenOffice Calc. 4.2.1 Exportar Orçamentação A funcionalidade Exportar Orçamentação refere-se ao processo de criação de um livro com base no conjunto de informações presentes no SCE. Relatório de Estágio 76

Este procedimento teve de ser adaptado para suportar a exportação para Excel e Calc, de acordo com a escolha do utilizador. Aquando da exportação para um livro são utilizadas várias funcionalidades implementadas no módulo de integração desenvolvido. Por exemplo, a exportação da orçamentação de um processo de empreitada passa pelas seguintes funcionalidades implementadas no módulo de integração do OpenOffice Calc: Ligar Saber se está Aberto Saber Número de Livros Abertos Filename2url Criar Novo Livro Activar Livros Abrir Livros Definir Visibilidade da Janela do Livro Definir Conteúdo de uma Célula (Endereço) Definir Formato de uma Célula (Endereço) Definir Conteúdo de uma Célula (Endereço) para texto Este procedimento, durante a sua execução, reutiliza várias vezes as mesmas funcionalidades. As reutilizações não foram inseridas na lista acima. Como resultado da exportação obtém-se um livro com os dados preenchidos. Como o procedimento da aplicação não inclui a funcionalidade de Guardar Livros, devido a razões estritamente algorítmicas, o utilizador tem a opção de guardar as alterações ao livro no final da geração. Aquando da execução da operação Criar Novo Livro, o livro é criado numa localização em disco definida pelo utilizador. Figura 4.2.1 Exportar Orçamentação Relatório de Estágio 77

4.2.2 Importar Orçamentação A funcionalidade Importar Orçamentação refere-se ao processo de entrada da informação presente num livro para a área de orçamentação do SCE. Este procedimento teve de ser adaptado para suportar a importação de informação de livros Excel e Calc, de acordo com a escolha do utilizador. Aquando da importação da informação presente no livro são utilizadas várias funcionalidades implementadas no módulo de integração desenvolvido. Por exemplo, a importação através de um livro para a orçamentação de um processo de empreitada passa pelas seguintes funcionalidades implementadas no módulo de integração do OpenOffice Calc: Ligar Abrir Livros Activar Livros Saber Número de Livros Abertos Filename2url Definir Visibilidade da Janela do Livro Obtenção do Conteúdo de uma Célula (Endereço) Este procedimento, durante a sua execução, reutiliza várias vezes as mesmas funcionalidades. As reutilizações não foram inseridas na lista acima. Tendo em conta que a camada de abstracção já se encontra implementada, é possível importar uma parte da orçamentação a partir de livros Microsoft Excel e outra a partir de livros OpenOffice Calc, bastando para isso escolher o livro pretendido na janela de escolha de livro de onde importar. Figura 4.2.2 Importar Orçamentação 4.2.3 Exportação de mapas No SCE existe a possibilidade de exportar mapas para livros Excel e Calc. Desta forma basta seleccionar um processo em alguns mapas específicos e proceder à exportação da informação. Relatório de Estágio 78

Este procedimento teve de ser adaptado para suportar a exportação para Excel e Calc, de acordo com a escolha do utilizador. Aquando da exportação para um livro são utilizadas várias funcionalidades implementadas no módulo de integração desenvolvido. A exportação de um mapa passa pelas seguintes funcionalidades implementadas no módulo de integração do OpenOffice Calc: Ligar Abrir Livros Activar Livros Saber Número de Livros Abertos Filename2url Definir Visibilidade da Janela do Livro Definir Formato de uma Célula (Endereço) Definir Conteúdo de uma Célula (Endereço) Definir Conteúdo de uma Célula (Endereço) para texto Insere Linha 4.3 Efeito do funcionamento da camada de abstracção no SCE É possível verificar o efeito do funcionamento da camada de abstracção nas tarefas que se realizam no SCE. Esta implementa um comportamento dinâmico muito diferente do anteriormente presente. Antes do desenvolvimento da camada de abstracção e da sua utilização, as criações de objectos de ligação eram estáticas, no sentido em que, não se verificava se de facto, no computador onde se executava a aplicação AIRC2000 estavam instalados pacotes de produtividade compatíveis ou se, o que estava instalado era compatível com um determinado tipo de livro. Simplesmente tentava-se criar o objecto de ligação, o que resultava em erros por não estar instalado ou, devido ao que está instalado não ser capaz de gerir os livros pretendidos. Sempre que se criava um objecto de ligação Excel para tratar livros do Calc, resultava em fracasso pois o Excel não consegue tratar esses livros pois não são compatíveis. Em seguida referem-se as funções da camada de abstracção que são utilizadas no âmbito do SCE: Relatório de Estágio 79

No caso de exportar orçamentação: Função que abre a janela de escolha de localização de gravação de um livro, em que as extensões possíveis para guardar são alimentadas automaticamente usando outras funções realizadas. Função que devolve as extensões de Livros possíveis para gravação ordenadas pela preferência de extensão para livros, e de acordo com o que está instalado. Função que devolve a preferência de extensão para Livros. Função que detecta que se o Microsoft Office Excel está instalado. Função que detecta que se o OpenOffice Calc está instalado. Função que visa a criação do objecto de ligação ao Excel/Calc. Função que verifica a aplicação associada a uma dada extensão. No caso de importar orçamentação: Função que abre a janela de escolha de localização de abertura de um livro, em que as extensões possíveis para abertura são alimentadas automaticamente usando outras funções realizadas. Função que devolve as extensões de Livros possíveis para abertura ordenadas pela preferência de extensão para livros, e de acordo com o que está instalado. Função que devolve a preferência de extensão para Livros. Função que detecta que se o Microsoft Office Excel está instalado. Função que detecta que se o OpenOffice Calc está instalado. Função que visa a criação do objecto de ligação ao Excel/Calc. Função que verifica a aplicação associada a uma dada extensão. No caso de exportar um mapa: Função que abre a janela de escolha de localização de gravação de um livro, em que as extensões possíveis para guardar são alimentadas automaticamente usando outras funções realizadas. Função que devolve as extensões de Livros possíveis para gravação ordenadas pela preferência de extensão para livros, e de acordo com o que está instalado. Função que devolve a preferência de extensão para Livros. Função que detecta que se o Microsoft Office Excel está instalado. Função que detecta que se o OpenOffice Calc está instalado. Relatório de Estágio 80

Função que visa a criação do objecto de ligação ao Excel/Calc. Função que verifica a aplicação associada a uma dada extensão. As funções acima mencionadas estão orientadas às funções relacionadas com a funcionalidade desenvolvida para livros na camada de abstracção mas, existem funções similares para o tratamento de documentos e modelos em aplicações AIRC2000 que trabalhem com documentos. Relatório de Estágio 81

5 Conclusões 5.1 Resultados do Estágio 5.1.1 Versão Alfa 1.0 do Módulo de Integração com OpenOffice Calc A versão alfa 1.0 do módulo de integração Calc constitui uma versão que contém todas funcionalidades, ou seja, as funcionalidades existentes no módulo Excel, necessárias à boa aceitação da mesma por parte dos possíveis clientes, como resultado da integração do módulo nas aplicações. 5.1.2 Camada de Abstracção A construção da camada de abstracção constitui um passo importante na utilização dos objectos de ligação a pacotes de produtividade. Utilizando-a, será sempre construído um objecto compatível com o documento/livro a tratar. Caso o computador não tenha as condições mínimas necessárias, ou seja, não ter os pacotes de produtividade necessários instalados, não são apresentados erros devido a tentar criar objectos de ligação a esses pacotes de produtividade. Dantes esta operação resultava num erro que terminava a aplicação. Neste momento é apresentado ao utilizador, na tabpage de preferências (figura 3.5.29), a causa de a aplicação não estar a funcionar na plenitude das suas capacidades (abrir/gravar/fechar documentos/livros) devendo aplicar acções correctivas, ou seja, instalar o(s) pacote(s) de produtividade necessários. A utilidade da camada de abstracção e foi validada através da utilização das funcionalidades do SCE, subcapítulo 4.3, sendo previsível que venha a ser aperfeiçoada no futuro, caso surjam novos pacotes de produtividade(ex: IBM Lotus Symphony), novas versões de pacotes de produtividade ou novos formatos de documentos. 5.1.3 Webservices Os Webservices criados visam aumentar, através da sua utilização, a coerência entre os marcadores presentes no modelo e os presentes na base de dados, ou lista de marcadores, para que se possa saber se um determinado modelo contém os marcadores necessários. O primeiro Webservice verifica os marcadores que estão na base de dados e os marcadores que se encontram nos modelos para uma determinada acção. O segundo, entre marcadores passados por argumento e os marcadores no modelo associado à acção ou num modelo específico. Através da sua utilização, um conjunto de informações de grande importância é extraída para a gestão da informação e sua concordância. (Ver subcapítulo 3.5.5.1, 3.5.5.2 e Anexo C - Documentação Webservice) Relatório de Estágio 82

Os WebServices foram criados com sucesso. 5.1.4 Janela de acções Na Janela de acções o mesmo princípio enunciado para os Webservices manteve-se. O procedimento de verificação de coerência de informação foi criado com sucesso. (Ver subcapítulo 3.5.6) 5.2 Principais Dificuldades As principais dificuldades sentidas foram as seguintes: Criação do objecto de ligação válido e vivo no servidor: Esta dificuldade foi ultrapassada após pesquisa e configuração no servidor. (Ver Anexo D Documentação Webservice e Anexo E Informação Online Consultada Resolução questão da entrada OpenOffice no DCOM no servidor) Obtenção do SaveFormat dinâmico para.docx em Office s anteriores ao 2007: Esta dificuldade foi ultrapassada após pesquisa. (Ver Anexo E Informação Online Consultada Pesquisa para guardar documentos em docx em Office s anteriores ao 2007 com o pack de compatibilidade instalado, através da API) Definição do formato para Calc: Esta dificuldade foi ultrapassada após pesquisa. (Ver Anexo E Informação Online Consultada Criar e aplicar formato de número específico) 5.3 Apreciação Crítica do Estágio O módulo de integração com o Calc veio colmatar uma lacuna no funcionamento das aplicações AIRC. Com o desenvolvimento deste módulo, mais um passo é dado no sentido da redução de custos indirectos nos nossos clientes. São livres de escolher entre OpenOffice e Microsoft Office para a utilização das aplicações para a AIRC2000 e, mais importante, deixam de ter de comprar um pacote de produtividade para usarem a aplicação AIRC2000. A construção da camada de abstracção foi um passo no sentido da interoperabilidade e melhoramento da integração dos módulos existentes, no sentido de evitar configurações constantes da parte do utilizador, bem como, de configurações estáticas com base em nenhuma informação palpável e não verificável. É devido a estes motivos que o funcionamento da camada de abstracção é baseado na informação presente no registo do Windows. Relatório de Estágio 83

A criação das extensões para o OpenOffice liberta o utilizador de um trabalho entediante e longo de conversão de modelos. Com estas novas funcionalidades, o utilizador pode fazer uma transição muito rápida e suave entre uma aplicação que só trabalhava com o Word e que tinha os seus modelos, para uma que trabalhe com o Word e OpenOffice com a conversão dos modelos Word já existentes e colocação de identificadores visuais usando a extensão apropriada ao efeito. A correcção das funcionalidades existentes não é mais do que um aperfeiçoar contínuo dos processos implementados, muitas vezes desenvolvidos à vários anos atrás. Os Webservices foram a par da construção do objecto Calc as tarefas que necessitaram de mais pesquisa. A camada de abstracção foi a tarefa que mais tempo de análise necessitou. A tarefa Uniformizar sistemas de actualização de marcadores (Sistema do ACE e sistema do ERP) presente no Product Backlog foi suspensa pelo Product Owner devido a ser necessária uma reanálise de fundo ao requisito. Este requisito tem sido alvo de diferentes abordagens e encontra-se pouco definido e fragmentado. O trabalho desenvolvido foi validado e já se encontra nas AFC à disposição dos programadores. Relativamente às condições de trabalho, foram propícias à realização de um bom trabalho. O orientador e tutor auxiliaram-me nas minhas tarefas, ao longo de todo o percurso do estágio, no sentido de as clarificar e definir. Ao nível do desenvolvimento pessoal, este estágio constituiu uma experiência muito enriquecedora devido ao contacto com paradigmas diferentes de programação, novos desafios e novas metodologias de desenvolvimento. Em suma, o facto de contribuir para o desenvolvimento e melhoramento de várias aplicações que são comercializadas nos clientes AIRC é uma razão de orgulho e de satisfação pessoal. 5.4 Trabalho Futuro Desenvolver o único ponto do Product Backlog que ficou por criar, a funcionalidade Uniformizar sistemas de actualização de marcadores (Sistema do ACE e sistema do ERP), e dar suporte às funcionalidades desenvolvidas. Relatório de Estágio 84

6 Bibliografia [1] PowerBuilder Foundation Classes Getting Started, Julho 2004, Sybase (documentação do PowerBuilder) [2] PowerBuilder Foundation Classes Library User s Guide, Junho 2001, Sybase (documentação do PowerBuilder) [3] Normas de Programação, Outubro de 2000, AIRC (documentação interna da AIRC) [4] Criação inicial do Framework, Outubro de 2000, AIRC (documentação interna da AIRC) [5] Useful Macro Information For OpenOffice By Andrew Pitonyak, Junho 2009, Andrew Pitonyak [6] OpenOffice.org 2.3 - Developer's Guide, Junho 2007, Sun Microsystems, Inc. [7] Personalizar el teclado con OpenOffice.org Basic, 2007, Ariel Constenla-Haile [8] Guía de programación de StarOffice 8 para BASIC, Junho 2005, Sun Microsystems, Inc. [9] Scrum in five minutes, SoftHouse [10] Notes from Agile Project Management with Scrum, Maio 2006, Bruno Orsier [11] http://www.oooforum.org/, fórum onde a comunidade troca impressões e tira dúvidas sobre macros do OpenOffice. Acedido em todos os momentos da fase de implementação. [12] http://api.openoffice.org/, permite a consulta do Developer Guide e realizar pesquisas nas mailing list e diversos recursos sobre o OpenOffice. Acedido em todos os momentos da fase de implementação. [13] http://lxr.go-oo.org/, permite a consulta do código fonte do OpenOffice. Acedido várias vezes no decorrer da fase implementação. [14] http://msdn.microsoft.com/pt-pt/library/dd146899(en-us).aspx, Word 2007 Developer Reference, permite a investigação dos membros e propriedades dos objectos da API do Word. [15] http://www.openoffice.org/issues/show_bug.cgi?id=2517, Limitação do OpenOffice presente no seu próprio Issue Tracker relativa a não colocar os marcadores visíveis no OpenOffice. Relatório de Estágio 85

Anexos Relatório de Estágio 86

ANEXO A Objecto de ligação ao OpenOffice Calc Especificação de implementação e funcionalidades Relatório de Estágio 87

Objecto de ligação ao OpenOffice Calc Objecto(s) Problema Descrição n_oleoocalc Há necessidade de criar uma alternativa válida à integração já existente nas nossas aplicações (Excel) tendo como base aplicações OpenSource como é o caso do OpenOffice, nomeadamente, o Calc. O objecto n_oleoocalc fornece uma série de funcionalidades que permitem fazer uma boa parte desta integração. Basicamente estabelece uma ligação a uma instância do Calc e comunica com esta, de forma a executar uma série de operações sobre Books e sheets. Nota: Um book é um livro Calc, ou seja um ficheiro com a extensão ods. Uma sheet é uma folha dentro de um livro, nas quais é possível realizar operações. Revisão Histórica Descrição Criação do documento e explicação das funções equivalentes ao objecto Excel que foram implementadas através de chamadas à API do OpenOffice. Acrescentar novas funcões ( as of_setcelltext( ) e a of_setformato(row,column,formato)) Autor Ivo Santos Ivo Santos Na prática: A primeira coisa a fazer é criar o objecto de ligação. Para isso utiliza-se a função: f_setolebook( objecto de ligação, extensão/aplicação) O primeiro parâmetro é uma variável do tipo n_oleoocalc. O segundo deve ser uma string com a extensão do livro ou o tipo de aplicação que se pretende abrir. No caso do OpenOffice Calc a aplicação é Calc e as extensões suportadas são: ods e ots Posteriormente deve ser estabelecida a ligação com o Calc propriamente dito. Para isso utiliza-se a função: of_ligar() Para desligar utiliza-se a função: of_desligar() Não se deve esquecer de desligar antes de destruir o objecto de ligação. Relatório de Estágio 88

Uma vez criado o objecto e efectuada a ligação podem ser utilizadas as seguintes funções, divididas em 3 grupos: Funções de configuração Funções de manipulação de livros e folhas Funções de exportação e importação Notas importantes: Caso não se indique o parâmetro livro, é assumido o livro activo no OpenOffice Calc nesse momento O parâmetro livro deve ser sempre o nome completo. Por ex.: c:\temp\exemplo.ods Todas as constantes referidas são do objecto de ligação Funções de configuração Definir o tamanho da janela do Calc of_setwindowstate(estado) O parâmetro deve ser uma das seguintes constantes: NORMAL MAXIMIZED MINIMIZED Saber o tamanho da janela do Calc of_getwindowstate() Devolve: -1 em caso de erro 0 para janela no estado normal (não maximizada) 1 para janela maximizada 2 para janela minimizada Nota: Para aferir o estado actual da janela procede-se à obtenção do tamanho da janela e da resolução do ecrã, ambos em pixéis. Através da comparação destes dados é possível discernir em que estado a janela do livro estará. Relatório de Estágio 89

Definir o estado da janela do Calc of_setvisiblestate(estado) Devolve: TRUE para janela visível FALSE para janela invisível Nota: Só é possível executar esta operação sobre um livro aberto e activo. Saber o estado de visibilidade da janela do livro of_getvisiblestate() Devolve: TRUE para janela visível FALSE para janela invisível Funções de manipulação de livros e folhas Nota: O parâmetro livro deve ser sempre o nome completo. Por exemplo: c:\temp\exemplo.ods Ao contrário do Excel, o Calc permite a abertura simultânea de dois ficheiros com o mesmo nome em localizações diferentes. Abrir um livro of_openbook(livro) Se o livro já estiver aberto torna-se o livro activo no Calc. Devolve: 1 se o livro for aberto -1 se o livro não for encontrado -2 se houver outro livro com o mesmo nome já aberto (com fullpath diferente) -3 se houver algum erro mais esquisito Relatório de Estágio 90

Activar um livro já aberto of_activatebook(livro) Devolve: TRUE se o livro for activado FALSE se o livro não estava aberto Criar um novo livro of_newbook(livro) Devolve: 1 se o livro for criado 0 se o livro já existir -1 se ocorrer um erro de sintaxe -2 se houver outro livro com o mesmo nome já aberto (com fullpath diferente) -3 se houver algum erro mais esquisito É possível criar com um template com: of_newbook(livro, template) Fechar um livro of_closebook(livro, {savemode}) O parâmetro savemode deve ser TRUE para gravar as alterações ou FALSE para não gravar. Caso não seja indicado o parâmetro savemode, o livro é gravado por defeito. Se houver modificações no livro, ao se passar FALSE para fechar o livro, é perguntado ao utilizador se ele pretende salvar as alterações ou não. Devolve: TRUE se o livro estava aberto e for fechado FALSE se o ocorrer um erro Guardar um livro of_savebook(livro) Devolve: TRUE se o livro estava aberto e for gravado Relatório de Estágio 91

FALSE se ocorrer um erro Saber quantos livros estão abertos of_getbookcount() Devolve: -1 se erro N número de livros abertos Saber qual o livro que está activo of_getactivebook() Devolve: String vazia se erro String com o caminho se sucesso Saber se um determinado livro está activo of_isbookactive(livro) Devolve: TRUE se é o livro activo FALSE se não é o livro activo Saber se um determinado livro está aberto of_isbookopen(livro) Devolve: TRUE se aberto FALSE se fechado Saber quantas folhas tem o livro activo of_getsheetcount() Devolve: -1 se erro 0 se não existir um livro activo N número de folhas do livro activo Relatório de Estágio 92

Saber qual a folha que está activa of_getactivesheet() Devolve: String vazia se houver um erro ou não houver um livro activo String com o nome da folha do livro activo Tornar uma folha activa of_activatesheet(folha) Devolve: FALSE se houver um erro ou não existir a folha especificada TRUE se encontrou e activou a folha Alterar o nome da folha activa of_renamesheet(novo nome) Devolve: String vazia se houver um erro Funções de exportação e importação Colocar um valor numa célula of_setcellvalue( Endereço, valor) ou of_setcellvalue(row, column, valor) Endereço deve ser uma referência tipo A1 O valor deve ser uma variável do tipo any row e column devem ser numéricos Devolve: -1 se erro 1 se sucesso Relatório de Estágio 93

Insere um valor numa célula como texto e muda o formato para texto of_setcelltext( Endereço, valor) ou of_setcelltext(row, column, valor) Endereço deve ser uma referência tipo A1 O valor deve ser uma variável do tipo any row e column devem ser numéricos Devolve: -1 se erro 1 se sucesso Nota: Ideal para colocar numerações devido à limitação do OpenOffice que ao inserir, por exemplo, 1.1.1.1 colocava 1111 na célula. Saber o valor de uma célula of_getcellvalue( Endereço ) ou of_getcellvalue(row, column) Endereço deve ser uma referência tipo A1 row e column devem ser numéricos Devolve: uma variável do tipo any Inserir uma linha/row no livro of_insertrow(endereço) Devolve: -1 se erro 1 se insere com sucesso Nota: endereço deverá ser uma referência tipo A1 Relatório de Estágio 94

Definir um formato de dados específico of_setformato(endereço,formato) ou of_setformato(row,column,formato) Devolve: -1 se erro 1 se sucesso Nota: Um exemplo de utilização é of_setformato("e5","##.#########.##0,0###") em que se define um formato na célula especificada. Neste caso, um formato com 4 casas decimais em que uma será sempre visível e as outras só se forem números diferentes de zero. Para definir o formato para texto, no formato deve-se colocar @. endereço deverá ser uma referência tipo A1 row e column devem ser numéricos Exportar dados de uma datawindow, datastore ou datawindowchild para o Calc of_export ( dataobject, sourcecolumns, {startrow, endrow,} targetcolumns, targetrow) dataobject deve ser uma datawindow, um datastore ou uma datawindowchild sourcecolumns deve ser um array com os nomes das colunas do dataobject que se pretendem exportar startrow e endrow devem indicar as rows de inicio e fim da exportação no dataobject (se não forem indicados todas as rows são passadas) targetcolumns deve ser um array com as colunas onde colocar os valores no Calc. Podem ser letras ou números. targetrow é o número da row no Calc onde começar a colocar os dados Importar dados do Calc para uma datawindow, datastore ou datawindowchild of_import ( dataobject, sourcecolumns, startrow, endrow, targetcolumns, targetrow) dataobject deve ser uma datawindow, um datastore ou uma datawindowchild sourcecolumns deve ser um array com as colunas de onde ler os valores no Calc. Podem ser letras ou números. Relatório de Estágio 95

startrow e endrow devem indicar as rows de inicio e fim da exportação no Calc targetcolumns deve ser um array com os nomes das colunas do dataobject para onde se pretende importar targetrow é o número da row no dataobject onde começar a colocar os dados. Caso a row não exista é criada uma em rowcount + 1 e quantas mais forem necessárias. Exportar o valor ou o displayvalue das colunas tipo dddw ou ddlb of_setexportdisplayvalues(true/false) // Default é FALSE Exportar primeiro os headers dos campos of_setexportheaders(true/false) // Default é FALSE Os headers são colocados na primeira linha de exportação. Não importar linhas com células todas a null of_setimportemptylines(true/false) // Default é FALSE Comportamentos impróprios: Os comportamentos impróprios foram enunciados nas notas junto à função em causa. Alguns detalhes de implementação podem também ser lá encontrados. Relatório de Estágio 96

ANEXO B Product Backlog e Sprint Backlog Relatório de Estágio 97

Tarefas Responsável Sprint Estado Prioridade Horas Estimadas OpenOffice Calc 50 Analisar documento "Ligação ao Excel.doc" Ivo Santos 6 Concluído Alta 1 Criar janela de testes que permita invocar funções do objecto de ligação ao Excel e as suas correspondentes para OpenOffice Calc Ivo Santos 6 Concluído Alta 1 Criar objecto de ligação ao OpenOffice Calc Ivo Santos 6 Concluído Alta 1 Implementação de funções básicas de ligação ao OpenOffice Calc (ligar, desligar, activar, etc.) Ivo Santos 6 Concluído Alta 2 Implementação de funções básicas de manipulação de livros (guardar, abrir, fechar, criar novo, etc.) Ivo Santos 6 Concluído Alta 5 Implementação de funções de importação de informação de objectos PB (datawindow, datawindowchild, datastore) Ivo Santos 6 Concluído Alta 6 Implementação de funções de exportação de informação para objectos PB (datawindow, datawindowchild, datastore) Ivo Santos 6 Concluído Alta 5 Implementação de funções de colocação e obtenção de informação no livro. (getcellvalue, setcellvalue, setcelltext, etc.) Ivo Santos 6 Concluído Alta 8 Implementação de funções de definição de formato dos dados. (@ - Texto, ###.#00 - duas casas decimais, etc.) Ivo Santos 6 Concluído Alta 7 Implementação de funções de configuração do ambiente (Maximizar janela, etc) Ivo Santos 6 Concluído Alta 2 Implementação de funções complementares de manipulação de livros e folhas (renamesheet, activatesheet, getbookcount, etc.) Ivo Santos 6 Concluído Alta 4 Implementação de funções diversas (Outras funções) Ivo Santos 6 Concluído Alta 4 Criação de documentação sobre o objecto de ligação ao OpenOffice Calc Ivo Santos 6 Concluído Alta 4 Relatório de Estágio 98

Criar camada de abstracção para permitir o funcionamento das aplicações Office ou OpenOffice de forma transparente 21 Análise inicial e definição de lógica de criação de objectos de ligação Ivo Santos 6 Concluído Alta 14 Definição e criação da hierarquia para os objectos de ligação (objectos pai para albergar objectos filhos Word/Writer e Excel/Calc) Ivo Santos 6 Concluído Alta 7 Implementação de funções que visam a obtenção coerente de informação relativa à criação, abertura e gravação de modelos, documentos e livros 32 Implementar função que verifica a aplicação associada a uma dada extensão. Ivo Santos 6 Concluído Alta 5 Implementar conjunto de funções que detectam que ferramentas específicas por pacote de produtividade estão instaladas Ivo Santos 6 Concluído Alta 3 Implementar função que preenche uma dropdown com as extensões compatíveis com o que está instalado Ivo Santos 6 Concluído Alta 2 Guardar a preferência de extensão de documento da dropdown por aplicação. Ivo Santos 6 Concluído Alta 2 Implementar função que devolve a preferência de extensão de documento da dropdown. Ivo Santos 6 Concluído Alta 0,5 Implementar função que devolve a preferência para extensão de modelo tendo como base a extensão de documento da dropdown Ivo Santos 6 Concluído Alta 0,5 Implementar função que devolve as extensões de documentos possíveis para abertura ordenadas pela Ivo Santos 6 Concluído Alta 2 Relatório de Estágio 99

preferência da dropdown, de acordo com o que está instalado Implementar função que devolve as extensões de modelo possíveis para abertura ordenadas pela preferência da extensão de modelo, de acordo com o que está instalado Ivo Santos 6 Concluído Alta 2 Implementar função que devolve as extensões de documento possíveis de guardar com base na extensão de modelo que recebe, de acordo com o que está instalado Ivo Santos 6 Concluído Alta 2 Implementar função que devolve as extensões de documento possíveis de guardar, de acordo com o que está instalado Ivo Santos 6 Concluído Alta 2 Implementar função que devolve as extensões de modelo possíveis de guardar ordenadas pela preferência de modelo, de acordo com o que está instalado Ivo Santos 6 Concluído Alta 2 Implementar funções que usam a of_getfileopenname e alimentam automaticamente as extensões possíveis para abertura (documentos ou modelos), usando as novas funções acima. Ivo Santos 6 Concluído Alta 2 Implementar funções que usam a of_getfilesavename e alimentam automaticamente as extensões possíveis para guardar (documentos ou modelos), usando as novas funções acima. Ivo Santos 6 Concluído Alta 2 Implementar funções equivalentes para o Excel e Calc Ivo Santos 6 Concluído Alta 4 Implementar função que verifica se estão instalados pacotes de produtividade compatíveis com a extensão de modelo.dotx (para proteger a limitação de abrir/guardar do MS Office Word 2003 e anteriores com o pacote de compatibilidade) Ivo Santos 6 Concluído Alta 1 Relatório de Estágio 100

Continuar camada de abstracção para permitir o funcionamento das aplicações Office ou OpenOffice de forma transparente 28 Alteração da função de criação do objecto de ligação a documentos para suportar as alterações realizadas (f_setoledoc) Ivo Santos 6 Concluído Alta 7 Implementação da função que visa a criação do objecto de ligação ao Excel/Calc. Ivo Santos 6 Concluído Alta 7 Implementação da função de criação do objecto de ligação adequado à informação de modelo e documento passada por argumento Ivo Santos 6 Concluído Alta 14 Mecanismo de obtenção de informação de associação de pacotes de produtividade a ficheiro do registo 14 Analisar função of_getaplicationpath do objecto afc_n_cst_registry Ivo Santos 7 Concluído Alta 2 Implementar a alteração dinâmica da informação presente na tabpage de Aplicações para reflectir o estado actual da instalação dos pacotes de produtividade Ivo Santos 7 Concluído Alta 12 Criar possibilidade de guardar documentos/livros em modo de compatibilidade 7 Alterar tabpage de Aplicações para reflectir essa necessidade Ivo Santos 7 Concluído Alta 1 Criação de mecanismo de gravação dos documentos/livros(docx, odt, xlsx, ods) em modo de compatibilidade Ivo Santos 7 Concluído Alta 6 Relatório de Estágio 101

Mecanismo de guardar em docx em Office s antigos que tenham o Pack de compatibilidade com 2007 instalado 28 Investigação para obtenção do SaveFormat dinâmico resultante da instalação do FileConverter para Office s anteriores ao 2007 Ivo Santos 7 Concluído Alta 14 Implementação da solução no objecto de ligação ao Word (filho) Ivo Santos 7 Concluído Alta 14 Reformulação Colocar Marca com dispatcher s para resolver problema de colocação de marcadores em tabelas, caixas de texto e molduras no OpenOffice Writer Ivo Santos 7 Concluído Alta 14 Criação de extensões para OpenOffice Writer que facilitam a visibilidade de marcadores em modelos Word (.dot,.dotx) convertidos para.ott. Essencial para os utilizadores de Office passar a usar OpenOffice com o mínimo impacto. 35 Definição e implementação do algoritmo que detecte a posição dos marcadores presentes nos modelos convertidos e coloque identificadores laterais visualmente evidentes com a possibilidade de serem ocultáveis. Ivo Santos 7 Concluído Alta 21 Definição e implementação do algoritmo que detecte a posição dos marcadores presentes nos modelos convertidos e elimine os identificadores laterais anteriormente colocados pela Ivo Santos 7 Concluído Alta 14 Relatório de Estágio 102

extensão acima. Criação de Webservice que, para o modelo associado a uma dada acção, devolva informação sobre as marcas que estão presentes nesse modelo e se estão na BD 39 Criação do Webservice. Ivo Santos 7 Concluído Alta 7 Implementação de função que devolve todos os marcadores presentes no modelo. Ivo Santos 7 Concluído Alta 7 Implementação de função que devolve todos os marcadores de uma acção (ERP) (grlomacc) e todos os marcadores do modelo (sem repetições) Ivo Santos 7 Concluído Alta 21 Documentação e testes. Ivo Santos 7 Concluído Alta 4 Validar a existência dos marcadores definidos como obrigatórios para cada acção nos modelos definidos para essa mesma acção 14 Validar marcadores num modelo (se estão os obrigatórios ou não) argumentos(ficheiro, acção) Ivo Santos 7 Concluído Alta 7 Validar marcadores num modelo (se estão os obrigatórios ou não) argumentos(ficheiro,marcadores ) Ivo Santos 7 Concluído Alta 7 Criação de Webservice que recebe, acção ou para um path de modelo, e um array de marcadores. Deve devolver os marcadores, do array que não estão presentes no modelo 14 Relatório de Estágio 103

Implementação de função que recebe os critérios de pesquisa do Webservice. (acção,arraymarcadores) ou (pathmodelo,arraymarcadores) e devolve todos os marcadores do array não presentes no modelo. Ivo Santos 8 Concluído Alta 14 Criação de mecanismo de sincronização que permita registar na Base de dados do ERP, os marcadores presentes em cada modelo de documento. Ivo Santos 8 Concluído Alta 35 Criação de função na janela de acções que verifica se os marcadores obrigatórios definidos para uma dada acção estão presentes no modelo definido para essa mesma acção. Ivo Santos 8 Concluído Alta 14 Uniformizar sistemas de actualização de marcadores (Sistema do ACE e sistema do ERP) Ivo Santos 8 Suspenso Alta 90 Relatório de Estágio 104

ANEXO C Documentação Webservice Relatório de Estágio 105

ACE Consultas Dinâmicas Relatório de Estágio 106

Consultas Dinâmicas Introdução Objectivo O objectivo deste teste é validar o funcionamento das consultas dinâmicas do ACE (Agente de Comunicações Externas). Âmbito O âmbito deste teste incide sobre o funcionamento das consultas dinâmicas a funcionar na aplicação ACE. Visão global Este documento está organizado em duas partes: 1ª Parte Identificação do autor e do sistema onde o mesmo está a ser realizado. 2ª Parte Passos e verificações que devem ser percorridos pelo utilizador, preenchendo o resultado dos mesmos. Execução do teste Data: 03/08/2009 Responsável: Ivo Santos Computador e configuração: Quad 2.6Ghz 4Gb ram Base de dados: ace_gondomar Relatório de Estágio 107

Scripts de teste São realizados vários testes sobre a mesma área visto que é possível fazer diferentes pesquisas sobre ela. Podem ser feitas diversas pesquisas sobre GRLMRC através da combinação dos diferentes critérios de pesquisa. Neste documento são apresentadas as três pesquisas mais frequentes. A chave é obrigatória para cada pesquisa. 1- Saber os marcadores não obrigatórios e que estejam na base de dados: <filter name='chavecacc' oper='=' >7</filter> <filter name='requiredomacc' oper='=' >0</filter> <filter name='marcadorbd' oper='=' >1</filter> 2- Saber os marcadores obrigatórios e se estão presentes no modelo ou não: <filter name='chavecacc' oper='=' >7</filter> <filter name='requiredomacc' oper='=' >1</filter> 3- Saber os marcadores que estão no modelo e não são iguais a nenhum da base de dados: <filter name='chavecacc' oper='=' >7</filter> <filter name='marcadorbd' oper='=' >2</filter> <filter name='marcadormodelo' oper='=' >1</filter> Nota: 1 significa sim, 2 significa não. Relatório de Estágio 108

Área de pesquisa de marcadores obrigatórios em modelo GRLMRC Pedido (1) <?xml version='1.0' encoding='iso-8859-1'?><requests id='2'><fields aplic='grlmrc' ><filter name='chavecacc' oper='=' >7</filter> <filter name='requiredomacc' oper='=' >0</filter> <filter name='marcadorbd' oper='=' >1</filter></fields></requests> Resposta (1) <?xml version="1.0" encoding="utf-16le" standalone="no"?> <requests><grlmrc><desigfmarc><![cdata[chave Fabricante]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDA TA[Pedido de Registo de Nova Máquina de Diversão]]></DESIGCACC><CODCAPLI><![CDATA[MDV]]></CODCAPLI><CHAVECACC><![CDATA[7]]></CHAVE CACC><CODIGOFMARC><![CDATA[MDVCHAVEFAB]]></CODIGOFMARC><CHAVEFMARC><![CDATA[38790]]> </CHAVEFMARC><MARCADORMODELO><![CDATA[2]]></MARCADORMODELO><MARCADORBD><![CDATA[ 1]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[Registo de Máquina de Diversão.dot]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[\\srvwst02\Documentos_estrela\MDV - Documentos]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[326]]></MODDEFFMTDA></GRLMRC></re quests> Considerações (1) Nada a apontar. Pedido (2) <?xml version='1.0' encoding='iso-8859-1'?><requests id='2'><fields aplic='grlmrc' ><filter name='chavecacc' oper='=' >7</filter> <filter name='requiredomacc' oper='=' >1</filter></fields></requests> Resposta (2) <?xml version="1.0" encoding="utf-16le" standalone="no"?> <requests><grlmrc><desigfmarc><![cdata[nº Entidade (Prop.)]]></DESIGFMARC><REQUIREDOMACC><![CDATA[1]]></REQUIREDOMACC><DESIGCACC><![CDATA[P Relatório de Estágio 109

edido de Registo de Nova Máquina de Diversão]]></DESIGCACC><CODCAPLI><![CDATA[MDV]]></CODCAPLI><CHAVECACC><![CDATA[7]]></CHAVE CACC><CODIGOFMARC><![CDATA[MDVNUMFENTI]]></CODIGOFMARC><CHAVEFMARC><![CDATA[38757]]> </CHAVEFMARC><MARCADORMODELO><![CDATA[2]]></MARCADORMODELO><MARCADORBD><![CDATA[ 1]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[Registo de Máquina de Diversão.dot]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[\\srvwst02\Documentos_estrela\MDV - Documentos]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[326]]></MODDEFFMTDA></GRLMRC><GR LMRC><DESIGFMARC><![CDATA[Chave Tipo de Jogo]]></DESIGFMARC><REQUIREDOMACC><![CDATA[1]]></REQUIREDOMACC><DESIGCACC><![CDATA[Ped ido de Registo de Nova Máquina de Diversão]]></DESIGCACC><CODCAPLI><![CDATA[MDV]]></CODCAPLI><CHAVECACC><![CDATA[7]]></CHAVE CACC><CODIGOFMARC><![CDATA[MDVCHAVETPJG]]></CODIGOFMARC><CHAVEFMARC><![CDATA[38818]] ></CHAVEFMARC><MARCADORMODELO><![CDATA[2]]></MARCADORMODELO><MARCADORBD><![CDATA [1]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[Registo de Máquina de Diversão.dot]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[\\srvwst02\Documentos_estrela\MDV - Documentos]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[326]]></MODDEFFMTDA></GRLMRC><GR LMRC><DESIGFMARC><![CDATA[Nº de Fabrico]]></DESIGFMARC><REQUIREDOMACC><![CDATA[1]]></REQUIREDOMACC><DESIGCACC><![CDATA[ Pedido de Registo de Nova Máquina de Diversão]]></DESIGCACC><CODCAPLI><![CDATA[MDV]]></CODCAPLI><CHAVECACC><![CDATA[7]]></CHAVE CACC><CODIGOFMARC><![CDATA[TAX2009]]></CODIGOFMARC><CHAVEFMARC><![CDATA[38759]]></CHA VEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[1]]></ MARCADORBD><NOMEFICHFMTDA><![CDATA[Registo de Máquina de Diversão.dot]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[\\srvwst02\Documentos_estrela\MDV - Documentos]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[326]]></MODDEFFMTDA></GRLMRC><GR LMRC><DESIGFMARC><![CDATA[Ano de Fabrico]]></DESIGFMARC><REQUIREDOMACC><![CDATA[1]]></REQUIREDOMACC><DESIGCACC><![CDATA[ Pedido de Registo de Nova Máquina de Diversão]]></DESIGCACC><CODCAPLI><![CDATA[MDV]]></CODCAPLI><CHAVECACC><![CDATA[7]]></CHAVE CACC><CODIGOFMARC><![CDATA[TAX2010]]></CODIGOFMARC><CHAVEFMARC><![CDATA[38761]]></CHA VEFMARC><MARCADORMODELO><![CDATA[2]]></MARCADORMODELO><MARCADORBD><![CDATA[1]]></ MARCADORBD><NOMEFICHFMTDA><![CDATA[Registo de Máquina de Diversão.dot]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[\\srvwst02\Documentos_estrela\MDV - Documentos]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[326]]></MODDEFFMTDA></GRLMRC><GR LMRC><DESIGFMARC><![CDATA[Chave Modelo]]></DESIGFMARC><REQUIREDOMACC><![CDATA[1]]></REQUIREDOMACC><DESIGCACC><![CDATA[ Pedido de Registo de Nova Máquina de Diversão]]></DESIGCACC><CODCAPLI><![CDATA[MDV]]></CODCAPLI><CHAVECACC><![CDATA[7]]></CHAVE CACC><CODIGOFMARC><![CDATA[MDVCHAVEMODELO]]></CODIGOFMARC><CHAVEFMARC><![CDATA[388 08]]></CHAVEFMARC><MARCADORMODELO><![CDATA[2]]></MARCADORMODELO><MARCADORBD><![CD ATA[1]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[Registo de Máquina de Diversão.dot]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[\\srvwst02\Documentos_estrela\MDV - Documentos]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[326]]></MODDEFFMTDA></GRLMRC><GR LMRC><DESIGFMARC><![CDATA[Chave MArca]]></DESIGFMARC><REQUIREDOMACC><![CDATA[1]]></REQUIREDOMACC><DESIGCACC><![CDATA[P edido de Registo de Nova Máquina de Relatório de Estágio 110

Diversão]]></DESIGCACC><CODCAPLI><![CDATA[MDV]]></CODCAPLI><CHAVECACC><![CDATA[7]]></CHAVE CACC><CODIGOFMARC><![CDATA[MDVCHAVEMARCA]]></CODIGOFMARC><CHAVEFMARC><![CDATA[3880 6]]></CHAVEFMARC><MARCADORMODELO><![CDATA[2]]></MARCADORMODELO><MARCADORBD><![CDA TA[1]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[Registo de Máquina de Diversão.dot]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[\\srvwst02\Documentos_estrela\MDV - Documentos]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[326]]></MODDEFFMTDA></GRLMRC></re quests> Considerações (2) Nada a apontar. Pedido (3) <?xml version='1.0' encoding='iso-8859-1'?><requests id='2'><fields aplic='grlmrc' ><filter name='chavecacc' oper='=' >7</filter> <filter name='marcadorbd' oper='=' >2</filter> <filter name='marcadormodelo' oper='=' >1</filter></fields></requests> Resposta (3) <?xml version="1.0" encoding="utf-16le" standalone="no"?> <requests><grlmrc><desigfmarc><![cdata[]]></desigfmarc><requiredomacc><![cdata[0]]></re QUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECA CC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX20_R1]]></CODIGOFMARC><CHAVEFMAR C><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCAD ORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUM CAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><G RLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMAC C><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[ 0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX21_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0 ]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDAT A[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDAT A[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESI GFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCAC C><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVE CACC><CODIGOFMARC><![CDATA[TAX22_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEF MARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MA RCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRD OCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![ CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[ ]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODI Relatório de Estágio 111

GOFMARC><![CDATA[TAX24_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MAR CADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD>< NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI> <MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></ DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGC ACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX25_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMOD ELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHF MTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFF MTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMAR C><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODC APLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TA X26_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDA TA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CD ATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CD ATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIRE DOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDA TA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX27_R1]]></ CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></M ARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></N OMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></ MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CO DCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX32_R1]]></CODIGOFM ARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORM ODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHF MTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFF MTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0 ]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><C HAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX33_R1]]></CODIGOFMARC><CHA VEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO>< MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DI RDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GR LMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUI REDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC> <![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX34_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORB D><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAP LI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRL MRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC> <DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0] ]></CHAVECACC><CODIGOFMARC><![CDATA[TAX35_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]] ></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA [2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA []]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIG FMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC Relatório de Estágio 112

><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVEC ACC><CODIGOFMARC><![CDATA[TAX36_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEF MARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MA RCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRD OCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![ CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[ ]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODI GOFMARC><![CDATA[TAX37_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MAR CADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD>< NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI> <MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></ DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGC ACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX41_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMOD ELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHF MTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFF MTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMAR C><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODC APLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TA X38_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDA TA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CD ATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CD ATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIRE DOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDA TA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX43_R1]]></ CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></M ARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></N OMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></ MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CO DCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX39_R1]]></CODIGOFM ARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORM ODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHF MTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFF MTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0 ]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><C HAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX40_R1]]></CODIGOFMARC><CHA VEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO>< MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DI RDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GR LMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUI REDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC> <![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2001_R1]]></CODIGOFMARC><CHAVEFMARC ><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADO RBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMC APLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><G Relatório de Estágio 113

RLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMAC C><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[ 0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2002_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA [0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CD ATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CD ATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DE SIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCA CC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAV ECACC><CODIGOFMARC><![CDATA[TAX2003_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHA VEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></ MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></D IRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC ><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDA TA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><C ODIGOFMARC><![CDATA[TAX2004_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC ><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADO RBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUM CAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA []]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></D ESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFM ARC><![CDATA[TAX2005_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCA DORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NO MEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><M ODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESI GFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC> <CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CD ATA[TAX2006_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODEL O><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMT DA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMT DA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC>< REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI ><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX200 7_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA [1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDAT A[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDAT A[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDO MACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[ ]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2008_R1]]></C ODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MA RCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NO MEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></M ODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![ CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODC APLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2009_R1]]></CODIGOFM ARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORM ODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHF Relatório de Estágio 114

MTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFF MTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0 ]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><C HAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2010_R1]]></CODIGOFMARC><C HAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO> <MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA>< DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></ GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQ UIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECAC C><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2011_R1]]></CODIGOFMARC><CHAVEFMA RC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCA DORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCU MCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC> <GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOM ACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDA TA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2012_R1]]></CODIGOFMARC><CHAVEFMARC><![CD ATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><! [CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><! [CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC> <DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESI GCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></C HAVECACC><CODIGOFMARC><![CDATA[TAX2013_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></ CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]] ></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]> </DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFM ARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![ CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC ><CODIGOFMARC><![CDATA[TAX2020_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFM ARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARC ADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDO CUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![C DATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]] ></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIG OFMARC><![CDATA[TAX2021_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MA RCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD> <NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI ><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></ DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGC ACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2022_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORM ODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFIC HFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDE FFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFM ARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CO DCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[ TAX2023_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><! Relatório de Estágio 115

[CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA> <![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQ UIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![ CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2024_R 1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]] ></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[] ]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0] ]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMA CC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]>< /CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2025_R1]]></CODI GOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCA DORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOME FICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MOD DEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CD ATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAP LI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2030_R1]]></CODIGOFMAR C><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMOD ELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTD A><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA ></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></R EQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVEC ACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2031_R1]]></CODIGOFMARC><CHAVEF MARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MAR CADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDO CUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMR C><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDO MACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CD ATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2040_R1]]></CODIGOFMARC><CHAVEFMARC><![C DATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD> <![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI> <![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMR C><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><D ESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]>< /CHAVECACC><CODIGOFMARC><![CDATA[TAX2041_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]> </CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[ 2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[ ]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGF MARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC> <![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECA CC><CODIGOFMARC><![CDATA[TAX2032_R2]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEF MARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MA RCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRD OCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![ CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[ ]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODI Relatório de Estágio 116

GOFMARC><![CDATA[TAX2033_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><M ARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD ><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAP LI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]> </DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIG CACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC> <![CDATA[TAX2034_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADOR MODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEF ICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODD EFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFM ARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CO DCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[ TAX2035_R1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><! [CDATA[1]]></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA> <![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQ UIREDOMACC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![ CDATA[]]></CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2036_R 1]]></CODIGOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]] ></MARCADORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[] ]></NOMEFICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0] ]></MODDEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMA CC><![CDATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]>< /CODCAPLI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2037_R1]]></CODI GOFMARC><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCA DORMODELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOME FICHFMTDA><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MOD DEFFMTDA></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CD ATA[0]]></REQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAP LI><CHAVECACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2038_R1]]></CODIGOFMAR C><CHAVEFMARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMOD ELO><MARCADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTD A><DIRDOCUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA ></GRLMRC><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></R EQUIREDOMACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVEC ACC><![CDATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2039_R1]]></CODIGOFMARC><CHAVEF MARC><![CDATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MAR CADORBD><![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDO CUMCAPLI><![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMR C><GRLMRC><DESIGFMARC><![CDATA[]]></DESIGFMARC><REQUIREDOMACC><![CDATA[0]]></REQUIREDO MACC><DESIGCACC><![CDATA[]]></DESIGCACC><CODCAPLI><![CDATA[]]></CODCAPLI><CHAVECACC><![CD ATA[0]]></CHAVECACC><CODIGOFMARC><![CDATA[TAX2060_R1]]></CODIGOFMARC><CHAVEFMARC><![C DATA[0]]></CHAVEFMARC><MARCADORMODELO><![CDATA[1]]></MARCADORMODELO><MARCADORBD> <![CDATA[2]]></MARCADORBD><NOMEFICHFMTDA><![CDATA[]]></NOMEFICHFMTDA><DIRDOCUMCAPLI> <![CDATA[]]></DIRDOCUMCAPLI><MODDEFFMTDA><![CDATA[0]]></MODDEFFMTDA></GRLMRC></reques ts> Relatório de Estágio 117

Considerações (3) Nada a apontar. Configurações para teste Devido ao facto de se querer usar OLE Automation com o OpenOffice, é necessário configurar o componente DCOM correspondente ao OpenOffice no servidor, visto que a criação do objecto de ligação não é similar à realizada num computador local. Para que seja possível executar o OpenOffice e utilizar a sua API foi necessário realizar a seguinte configuração no servidor. Acedendo ao servidor Windows Server 2003 R2: Iniciar Programas Administrative Tools Component Services. Na janela que abre Expandir Component Services Computers My Computer DCOM Config. Em Documento de texto do OpenOffice.org 1.1 Identity definir o utilizador que é administrador da máquina e é utilizador do domínio. Desta forma, verifica-se que é necessário ter em atenção as características do utilizador que usa/cria o objecto de ligação ao OpenOffice. Tem que ser administrador da máquina, para poder criar o objecto de ligação correctamente, e para aceder a documentos remotos tem que ser um utilizador do domínio. As próximas figuras demonstram esses requisitos: Relatório de Estágio 118

Figura 1 Configuração do componente do OpenOffice no DCOM Relatório de Estágio 119

Figura 2 Grupo de administradores do servidor Como se vê na figura acima airc\ivo.santos e airc\jose.saraiva encaixam nos dois requisitos, tendo, por conseguinte, capacidade de executar a consulta à GRLMRC com sucesso. Se não for definido um utilizador administrador da máquina no DCOM os processos são criados, mas não passam o teste isalive do PB e os acessos à API do OpenOffice não têm sucesso. Se for definido um utilizador administrador da máquina, mas não sendo simultaneamente utilizador do domínio de rede, no DCOM os processos são criados correctamente, passam o teste isalive do PB e os acessos à API do OpenOffice têm sucesso. No entanto, se se quiser aceder a um documento numa pasta partilhada dá excepção na chamada à loadcomponentfromurl. Se for definido um utilizador administrador da máquina, sendo simultaneamente utilizador do domínio de rede, no DCOM os processos são criados correctamente, passam o teste isalive do PB e os acessos à API do OpenOffice têm sucesso. Os acessos a um documento numa pasta partilhada são bem sucedidos. Relatório de Estágio 120

Testes de funcionalidade e de carga Acessos simultâneos 1 É suportada a reutilização dos objectos de ligação ao OO para as várias chamadas (consulta) à GRLMRC? Sim. O tempo de utilização antes da reutilização era de 4.5 segundos. (Este tempo inclui obtenção de sessão, criação do objecto de ligação, abertura do documento, obtenção dos marcadores lá presentes, fecho do documento e término dos processos do OpenOffice) O tempo de utilização com reutilização é de 1 segundo. (Este tempo inclui obtenção de sessão, reutilização do objecto de ligação já criado, abertura do documento, obtenção dos marcadores lá presentes e fecho do documento) A melhoria do tempo de consulta deve-se ao tempo que se poupa por não se criar o objecto de ligação sempre que se consulta. 2 Qual a memória utilizada pelo OpenOffice em chamadas dispersas no tempo? A utilização oscila entre os 56 megabytes e os 57 megabytes durante a utilização. No final da utilização fica a 56 megabytes. 3 Qual o comportamento em 7 chamadas concorrentes com a mesma pesquisa com o objecto de ligação existente no servidor? A utilização da memória oscila entre os 56 megabytes e os 58 megabytes durante a utilização. No final da utilização fica a 56 megabytes. Não ficam documentos abertos apesar das diferentes pesquisas se realizarem todas sobre o mesmo modelo. O tempo de retorno da resposta neste teste de 7 chamadas simultâneas oscilou entre 0,8 segundos e 1,1 segundos. 4 Qual o comportamento em 7 chamadas concorrentes com a mesma pesquisa com o objecto de ligação inexistente no servidor? A utilização da memória oscila entre os 0 megabytes (devido à criação) e os 60 megabytes durante a utilização. No final da utilização fica a 60 megabytes. Não ficam documentos abertos apesar das diferentes pesquisas se realizarem todas sobre o mesmo modelo. O tempo de retorno da resposta neste teste de 7 chamadas simultâneas oscilou entre 0,6 segundos e 4,3 segundos. 5 Qual o comportamento em 7 chamadas concorrentes com 3 diferentes pesquisas, em que algumas são iguais, com o objecto de ligação já existente no servidor? A utilização da memória oscila entre os 56 megabytes e os 58 megabytes durante a utilização. No final da utilização fica a 56 megabytes. Relatório de Estágio 121

Não ficam documentos abertos apesar das diferentes pesquisas se realizarem todas sobre o mesmo modelo. O tempo de retorno da resposta neste teste de 7 chamadas simultâneas oscilou entre 0.6 segundos e 1,1 segundos. 6 Qual o comportamento em 7 chamadas concorrentes com 3 diferentes pesquisas, em que algumas são iguais, com o objecto de ligação inexistente no servidor? A utilização da memória oscila entre os 0 megabytes (devido à criação) e os 57 megabytes durante a utilização. No final da utilização fica a 56 megabytes. Não ficam documentos abertos apesar das diferentes pesquisas se realizarem todas sobre o mesmo modelo. O tempo de retorno da resposta neste teste de 7 chamadas simultâneas oscilou entre 0,7 segundos e 4,3 segundos. Relatório de Estágio 122

ANEXO D Informação Online Consultada Relatório de Estágio 123

Pesquisa para o módulo Calc: Geral: http://www.oooforum.org/forum/viewtopic.phtml?t=342&highlight=calc http://www.oooforum.org/forum/viewtopic.phtml?t=759&highlight=calc http://www.oooforum.org/forum/viewtopic.phtml?t=15548&highlight=number+sheets+document Activar livro: http://www.oooforum.org/forum/viewtopic.phtml?t=1615&highlight=calc Optimal Column Width: http://www.oooforum.org/forum/viewtopic.phtml?t=2296&highlight=calc Copiar Sheet para outro Livro: http://www.oooforum.org/forum/viewtopic.phtml?t=2131&highlight=calc Filtrar dados numa Sheet: http://www.oooforum.org/forum/viewtopic.phtml?t=2368&highlight=calc Saber número de Sheets existentes num livro: http://api.openoffice.org/servlets/search?resultsperpage=40&query=number+of+sheets+many&scope=domain&a rtifact=picayune+all&artifact=wedge+all&artifact=nidaba+all&artifact=apache+helpdocs&artifact=apache+content&artifact=issuezilla+all&artifact=eyebrowse+all&artifact=scarab+all&artifact=hel m+project&button=search http://wiki.services.openoffice.org/wiki/documentation/devguide/spreadsheets/working_with_spreadsheet_do cuments#spreadsheet_document http://api.openoffice.org/docs/common/ref/com/sun/star/sheet/xspreadsheetdocument.html http://www.oooforum.org/forum/viewtopic.phtml?t=69343&highlight=number+sheets+document http://www.oooforum.org/forum/viewtopic.phtml?t=15548&highlight=number+sheets+document Relatório de Estágio 124

Tornar folhas de cálculo do livro invisíveis: http://www.oooforum.org/forum/viewtopic.phtml?t=57446&highlight=visible+document http://www.oooforum.org/forum/viewtopic.phtml?t=39354&highlight=visible+document Visibilidade do livro: http://www.oooforum.org/forum/viewtopic.phtml?t=50832&highlight=visible+document Tornar visível um livro invisível - problemas: http://www.oooforum.org/forum/viewtopic.phtml?t=34726&highlight=visible+document http://www.oooforum.org/forum/viewtopic.phtml?t=27567&highlight=isvisible Abrir livro como invisível ou tornar invisível/visível: http://www.oooforum.org/forum/viewtopic.phtml?t=4816&highlight=l]http://www.oooforum.org/forum/viewtop ic.phtml?t=4816&highlight= Nomes/Paths de livros abertos: http://www.oooforum.org/forum/viewtopic.phtml?t=34665&highlight=visible+document Saber se o livro está visível: http://www.oooforum.org/forum/viewtopic.phtml?t=28657&highlight=visible+document http://api.openoffice.org/docs/common/ref/com/sun/star/awt/xwindow2.html http://api.openoffice.org/docs/common/ref/com/sun/star/sheet/spreadsheet.html Saber visibilidade de uma folha: http://www.oooforum.org/forum/viewtopic.phtml?t=59601&highlight=isvisible Relatório de Estágio 125

Visibilidade de colunas e linhas: http://www.oooforum.org/forum/viewtopic.phtml?t=73711&highlight=isvisible http://www.oooforum.org/forum/viewtopic.phtml?t=56920&highlight=isvisible Saber folha activa: http://www.oooforum.org/forum/viewtopic.phtml?t=75726&highlight=number+sheets+document Saber qual é a última folha: http://www.oooforum.org/forum/viewtopic.phtml?t=69343&highlight=number+sheets+document Activar folha: http://www.oooforum.org/forum/viewtopic.phtml?t=54537&highlight=number+sheets+document http://api.openoffice.org/docs/common/ref/com/sun/star/sheet/xspreadsheetview.html Inserir nova linha na folha de cálculo: http://www.oooforum.org/forum/viewtopic.phtml?t=764 Definir valor (inteiro) de célula: http://api.openoffice.org/docs/common/ref/com/sun/star/form/binding/xvaluebinding.html#setvalue http://www.oooforum.org/forum/viewtopic.phtml?t=18119&highlight=setvalue+setstring http://www.oooforum.org/forum/viewtopic.phtml?t=5399&highlight=setvalue+setstring http://codesnippets.services.openoffice.org/calc/calc.cellaccess.snip Definir valor (string) de célula: http://www.oooforum.org/forum/viewtopic.phtml?t=52559&highlight=setvalue+setstring http://www.oooforum.org/forum/viewtopic.phtml?t=28150&highlight=setvalue+setstring Relatório de Estágio 126

http://www.oooforum.org/forum/viewtopic.phtml?t=58928&highlight=setvalue+setstring http://www.oooforum.org/forum/viewtopic.phtml?t=4996&highlight=setvalue+setstring http://www.oooforum.org/forum/viewtopic.phtml?t=7638&highlight=setvalue+setstring Detecção do que se está a inserir e escolher tipo de inserção (inteiro ou string): http://www.oooforum.org/forum/viewtopic.phtml?t=66913&highlight=setvalue+setstring Criar e aplicar formato de número específico: http://www.oooforum.org/forum/viewtopic.phtml?t=75169&highlight=numberformat http://www.oooforum.org/forum/viewtopic.phtml?t=74789&highlight=numberformat http://www.oooforum.org/forum/viewtopic.phtml?t=74753&highlight=numberformat http://www.oooforum.org/forum/viewtopic.phtml?t=42758&highlight=numberformat http://www.oooforum.org/forum/viewtopic.phtml?t=71252&highlight=numberformat http://www.oooforum.org/forum/viewtopic.phtml?t=65868&highlight=numberformat http://www.oooforum.org/forum/viewtopic.phtml?t=66131&highlight=numberformat http://www.oooforum.org/forum/viewtopic.phtml?t=60770&highlight=numberformat http://www.oooforum.org/forum/viewtopic.phtml?t=34867&highlight=numberformat http://www.oooforum.org/forum/viewtopic.phtml?t=24825&highlight=numberformat http://download.openoffice.org/servlets/search?resultsperpage=40&query=numberformat&scope=domain&artifa ct=picayune+all&artifact=wedge+all&artifact=nidaba+all&artifact=apache+helpdocs&artifact=apache+content&artifact=issuezilla+all&artifact=eyebrowse+all&artifact=scarab+all&artifact=hel m+project&button=search http://api.openoffice.org/docs/common/ref/com/sun/star/i18n/numberformatindex.html http://www.google.pt/search?hl=pt-pt&safe=strict&q=excel+numberformat&btng=pesquisar&meta= http://wiki.services.openoffice.org/wiki/documentation/devguide/officedev/applying_number_formats#xnumb erformatpreviewer http://api.openoffice.org/servlets/readmsg?list=dev&msgno=8435 http://api.openoffice.org/servlets/search?resultsperpage=40&query=formats&scope=project&artifact=picayune+ ALL&artifact=wedge+ALL&artifact=nidaba+ALL&artifact=apache+help- Relatório de Estágio 127

docs&artifact=apache+content&artifact=issuezilla+all&artifact=eyebrowse+all&artifact=scarab+all&artifact=hel m+project&button=search http://api.openoffice.org/docs/common/ref/com/sun/star/util/numberformat.html http://api.openoffice.org/servlets/readmsg?listname=dev&msgno=13148 http://api.openoffice.org/servlets/readmsg?listname=dev&msgno=13152 http://api.openoffice.org/servlets/readmsg?listname=dev&msgno=13149 http://api.openoffice.org/docs/common/ref/com/sun/star/util/xnumberformats.html http://wiki.services.openoffice.org/wiki/documentation/devguide/officedev/managing_number_formats http://www.oooforum.org/forum/viewtopic.phtml?p=264305#264305 Guardar em XLS: http://doc.services.openoffice.org/wiki/framework/article/filter/filterlist_ooo_2_1 Pesquisa para várias correcções: Obtenção do conteúdo da titlebar para activação do documento: http://msdn.microsoft.com/en-us/library/ms633539(vs.85).aspx http://msdn.microsoft.com/en-us/library/ms633499(vs.85).aspx http://msdn.microsoft.com/pt-pt/library/bb258015(en-us).aspx http://msdn.microsoft.com/pt-pt/library/bb257531(en-us).aspx Detectar posição do cursor no documento (corpo do documento, cabeçalho, rodapé, etc.): http://msdn.microsoft.com/pt-pt/library/bb148332(en-us).aspx http://msdn.microsoft.com/pt-pt/library/bb178821(en-us).aspx http://msdn.microsoft.com/pt-pt/library/bb257687(en-us).aspx http://msdn.microsoft.com/pt-pt/library/bb255868(en-us).aspx http://msdn.microsoft.com/pt-pt/library/bb258011(en-us).aspx http://msdn.microsoft.com/pt-pt/library/bb148273(en-us).aspx Relatório de Estágio 128

Pesquisa para guardar documentos em docx em Office s anteriores ao 2007 com o pack de compatibilidade instalado, através da API: http://msdn.microsoft.com/en-us/library/bb257579.aspx http://msdn.microsoft.com/en-us/library/bb215525.aspx http://msdn.microsoft.com/en-us/library/aa662193(office.10).aspx http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.fileconverter(vs.80).aspx http://support.microsoft.com/kb/224066/pt-br http://support.microsoft.com/kb/932127 http://blogs.msdn.com/microsoft_office_word/archive/2006/09/27/774087.aspx http://beta.blogs.msdn.com/microsoft_office_word/default.aspx?p=7 http://www.microsoft.com/communities/newsgroups/enus/default.aspx?dg=microsoft.public.word.oleinterop&tid=04647fbc-785c-4250-afebee3d6635c940&cat=&lang=en&cr=us&sloc=&p=1 http://blogs.msdn.com/microsoft_office_word/archive/2006/10/30/programmatically-opening-saving-the-newdefault-file-formats-in-previous-versions-of-office.aspx http://www.microsoft.com/communities/newsgroups/enus/default.aspx?dg=microsoft.public.word.oleinterop&tid=04647fbc-785c-4250-afebee3d6635c940&cat=en_us_95e0d20c-e614-46d3-8f07-1ec5d3f03035&lang=en&cr=us&sloc=&p=1 http://msdn.microsoft.com/en-us/library/bb288731.aspx http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.fileconverter_members(vs.80).aspx http://groups.google.com/group/microsoft.public.office.developer.automation/browse_thread/thread/9345dfb0f d519084/7d55993579d4c910?lnk=raot&fwc=1 http://support.microsoft.com/kb/209186/pt http://support.microsoft.com/kb/185052/pt Pesquisa para as extensões OpenOffice: Macros de OpenOffice que percorrem os modelos OpenOffice numa directoria e coloca nonbreakingspace com estilo antes e depois dos marcadores: http://api.openoffice.org/servlets/readmsg?listname=dev&msgno=9111 Relatório de Estágio 129

http://codesnippets.services.openoffice.org/writer/writer.mergedocs.snip http://www.oooforum.org/forum/viewtopic.phtml?t=7945&view=previous http://www.oooforum.org/forum/viewtopic.phtml?t=7631 Pesquisa para Webservice: ConnectToObject em servidor: http://www.google.pt/search?hl=pt-pt&safe=strict&q=easerver+connecttoobject&btng=pesquisar&meta= http://www.experts-exchange.com/programming/editors_ides/powerbuilder/q_20772143.html ClassID do OpenOffice (uso em ConnectToObject e ConnectToNewObject): http://www.oooforum.org/forum/viewtopic.phtml?t=81229 http://www.techno-kitten.com/changes_to_powerbuilder/new_in_powerbuilder_7/pb7new_- _Using_a_CLSID_to_conn/pb7new_-_using_a_clsid_to_conn.html http://www.dominux.co.uk/index.php/2007/09/10/the-notes-productivity-editors-just-got-a-heap-moreinteresting/ Resolução questão da entrada OpenOffice no DCOM no servidor: http://www.oooforum.org/forum/viewtopic.phtml?t=26366 http://www.oooforum.org/forum/viewtopic.phtml?t=30120 http://translate.google.pt/translate?u=http%3a%2f%2fwww.gotdotnet.ru%2fforums%2fweb%2f596038.aspx&s l=ru&tl=pt&hl=pt-pt&ie=utf-8 http://www.mail-archive.com/dev@udk.openoffice.org/msg00859.html http://www.mail-archive.com/dev@udk.openoffice.org/msg00858.html http://www.mail-archive.com/dev@udk.openoffice.org/msg00861.html http://msdn.microsoft.com/en-us/library/ms686587(vs.85).aspx http://wiki.services.openoffice.org/wiki/documentation/devguide/prouno/bridge/dcom http://www.oooforum.org/forum/viewtopic.phtml?p=335121 Relatório de Estágio 130

Problema loadcomponentfromurl no acesso a documentos por rede (a outro servidor): http://www.oooforum.org/forum/viewtopic.phtml?t=41663 http://www.oooforum.org/forum/viewtopic.phtml?t=85727 http://www.oooforum.org/forum/viewtopic.phtml?t=21113 Relatório de Estágio 131

ANEXO E Documentação Extensões OpenOffice Relatório de Estágio 132

OpenOffice Conversão de Modelos e Extensões para manutenção da Visibilidade de Marcadores Versão 1 Relatório de Estágio 133

Assunto Extensões OpenOffice para Marcadores Para agilizar a utilização do OpenOffice é necessária a conversão de modelos já existentes do Word para modelos do OpenOffice. Este documento específica os procedimentos a realizar para a conversão dos modelos, bem como acções a ter em conta para a visibilidade dos marcadores no OpenOffice. Conversor de Documentos O OpenOffice disponibiliza um assistente para automatização de conversão de documentos. Este possibilita a conversão de modelos do Word de extensão.dotx e.dot para modelos do OpenOffice. Os modelos do Word devem estar desprotegidos (sem palavra-chave) para agilizar a conversão. Para executar o Conversor de Documentos vá a Ficheiro» Assistentes» Conversor de Documentos, no OpenOffice, como indica a figura abaixo. Figura 1 Menu para Conversor de Documentos Relatório de Estágio 134

Após carregar na opção Conversor de Documentos surge a seguinte figura. Figura 2 Menu para escolha de Documentos Word para conversão Marque a opção Microsoft Office juntamente com a opção Documentos do Word. Carregue Seguinte e aparecerá a figura abaixo. Relatório de Estágio 135

Figura 3 Pastas para conversão dos modelos Word e para gravação dos modelos OpenOffice resultantes Desmarque a opção Documentos do Word. Seleccione os caminhos correspondentes para os respectivos campos Importar de: e Guardar em: através dos botões 3 pontos correspondentes. Nota: Se tiver a opção A incluir subdirectórios seleccionada, tem em conta os subdirectórios da directoria escolhida para Importar de: para a conversão dos modelos de Word presentes. De seguida, surgirá a confirmação de definições realizadas como se apresenta na figura seguinte. Relatório de Estágio 136

Figura 4 Confirmação de definições Seleccione o botão Converter para conversão de modelos Word para modelos do OpenOffice e aparecerá a figura abaixo. Relatório de Estágio 137

Figura 5 Fim de conversão Para terminar a conversão basta seleccionar o botão Fechar. A conversão terminou e os modelos resultantes da conversão estão na pasta que escolheu em cima em Guardar em:. Instalação das extensões VisibilidadeMarcador Faça duplo clique sobre o ficheiro VisibilidadeMarcador_v1.1.oxt. A seguinte figura surge: Figura 6 Instalação da extensão VisibilidadeMarcador Relatório de Estágio 138

Após instalação surge a seguinte figura: Figura 7 Gestor de extensões ApagaVisibilidadeMarcador Faça duplo clique sobre o ficheiro ApagaVisibilidade Marcador_v1.1.oxt. A seguinte figura surge: Figura 8 Instalação da extensão ApagaVisibilidade do Marcador Relatório de Estágio 139

Após instalação surge a figura abaixo descrita. Pode fechar a respectiva janela. Figura 9 Gestor de extensões Relatório de Estágio 140

Utilização das Extensões Em seguida é descrita a forma de utilização das extensões desenvolvidas para minimizar o facto de os marcadores não estarem visíveis nos modelos de OpenOffice. VisibilidadeMarcador Com o OpenOffice aberto ir a Ferramentas» Macros» Executar Macro, como mostra a figura seguinte. Figura 10 Janela de selecção de macros a executar Proceder à expansão de As minhas macros. Expandir VisibilidadeMarcador totalmente e seleccione VisibilidadeMarcador do lado direito na zona abaixo de Nome da macro como a figura abaixo refere. Relatório de Estágio 141

Carregue Executar. Figura 11 Execução da extensão VisibilidadeMarcador É aberta uma janela Seleccionar Caminho para indicação de uma pasta com os modelos do OpenOffice convertidos dos modelos do Word (Ver figura seguinte). Essa pasta é a resultante da conversão dos modelos descrita acima. Relatório de Estágio 142

Figura 12 Janela para escolha de pasta dos modelos OpenOffice resultantes da conversão dos modelos Word existentes Após seleccionada a pasta carregue no botão OK. Surge a seguinte janela: A conversão é neste momento executada com êxito: Figura 13 Informação antes da conversão Figura 14 Informação após conversão Os marcadores dos modelos do OpenOffice presentes na pasta pretendida foram alterados para terem uma indicação visual da sua presença como se indica abaixo. Relatório de Estágio 143

Exemplo: marcador Nota: Se tiver os modelos convertidos do Word para modelos do OpenOffice em várias pastas terá de repetir este procedimento para cada uma das pastas. ApagaVisibilidade Se por algum motivo for necessário apagar as modificações que a Extensão VisibilidadeMarcador executa sobre os modelos do OpenOffice é disponibilizada a Extensão ApagaVisibilidade Marcador_v1.1.oxt. Com o OpenOffice aberto ir a Ferramentas» Macros» Executar Macro. Surge a janela Selector de Macros, como mostra a figura seguinte. Figura 15 - Janela de selecção de macros a executar Proceder à expansão de As minhas macros. Expandir ApagaVisibilidade totalmente e seleccione ApagaVisibilidade do lado direito na zona abaixo de Nome da macro como a figura abaixo indica: Relatório de Estágio 144

Figura 16 Execução da extensão ApagaVisibilidade Seleccione o botão Executar. É aberta uma janela Seleccionar Caminho para indicação de uma pasta com os modelos do OpenOffice, resultantes da conversão dos modelos Word, e que já foram convertidos com a extensão VisibilidadeMarcador (ver figura abaixo). Essa pasta é a resultante da conversão dos modelos descrita acima. Relatório de Estágio 145