Manoel Frederico da Silva / Product Manager & MAGIC Evangelist / Magic Software Brasil
Você provavelmente já deve estar bem familiarizado com esta prática.
Diferentes aplicações/soluções tendem a ter procedimentos e recursos comuns (até iguais).
O objetivo da componentização é claro: reaproveitar o que já existe, ao invés de refazer.
Uma pequena imagem para ilustrar isso:
Os benefícios também são claros: menor tempo no desenvolvimento de novas soluções, menos “duplicações” e “repetições” desnecessárias, atualizações nos objetos compartilhados se refletem em todos os que os utilizam, facilidade para atualizações parciais das soluções, departamentalização do desenvolvimento, etc…
Com as soluções UniPaaS não é diferente.
Embora o UniPaaS não gere arquivos .exe ou .dll, é perfeitamente possível (e prático) dividir uma solução em módulos (.ecf) independentes.
Praticamente todos os objetos podem ser modularizados: programas, funções, definições de tabelas, modelos, ajudas…
O procedimento para realizar isso é também bastante simples:
Você cria um (ou vários) projetos UniPaaS representando a sua biblioteca de rotinas e recursos (objetos) que deseja compartilhar (tornar reutilizável em outros projetos).
Não é obrigatório compartilhar todos os objetos existentes. Você pode escolher quais deseja tornar “públicos”, e quais deseja manter “internos”.
Os objetos que deseja publicar devem possuir um “Nome Público”.
Em seguida, você acessa o “wizard” de publicação de componentes do UniPaaS Studio (menu: Options à Interface Builder à UniPaaS) para gerar um descritor dos objetos públicos. Este descritor contém a lista dos objetos que estão compartilhados e que podem ser utilizados em outros projetos. É um arquivo texto com a extensão .eci.
Vamos imaginar, por exemplo, que você criou um programa que calcula Juros em Atraso, e deseja utilizar o mesmo programa em dois sistemas diferentes: Contas a Pagar e Contas a Receber. Se a rotina é exatamente a mesma (cálculo dos juros), não há porque tê-la duas vezes, uma em cada sistema. Você cria um projeto só para ela e publica-a como um componente reutilizável. Você terá então:
CalculoJurosAtraso.ecf (projeto executável UniPaaS)
CalculoJurosAtraso.eci (descritor dos objetos publicados)
Vejamos agora a outra parte do processo, que é a utilização de objetos existentes em outros projetos.
Seguindo o exemplo do projeto Contas a Pagar, abrindo-o no UniPaaS Studio nós vamos até o repositório de componentes (CRR à Shift+F7). Para cada componente que quiser acoplar a este projeto, acrescentamos uma linha e informamos (usando F5) a localização do seu descritor (.eci). Todos os objetos publicados nele (ex: programa de cálculo dos juros) tornam-se-ão disponíveis para uso, como se estivessem ali definidos/codificados (mas não estão; estão localizados (fisicamente) no outro projeto [.ecf]).
No momento da distribuição da solução (ambiente final de produção), é necessário disponibilizar todos os .ecf que compõem a solução (ex: ContasPagar.ecf e CalculoJurosAtraso.ecf). O descritor (.eci) só é necessário durante o desenvolvimento.
Quando o UniPaaS RunTime carregar a solução (Contas a Pagar), ele carregará também todos os outros .ecf que estiverem vinculados a ela, como se fossem um único projeto.
Se na vinculação do componente (cálculo de juros) for definida a propriedade LoadImmediate=Y, a carga do seu .ecf é imediata. Senão, ele será carregado apenas quando algum de seus objetos precisar ser utilizado, e ainda haverá a opção de descarregá-los com a função CabinetUnload().
Além disso, o UniPaaS Studio possui um “wizard” chamado Composite Resource Generator (menu: Options à Composite Resource Generator, ou CTRL+SHIFT+G). Com este “wizard” nós podemos selecionar um recurso/rotina externo (não UniPaaS) que necessitamos utilizar:
- WebService
- Stored Procedure
- Classe Java
- Fila MSMQ
- Rotinas iSeries (AS/400)
e ele gera automaticamente um projeto UniPaaS para acessar este recurso, na forma de componente reutilizável.
Veja mais detalhes sobre componentização com UniPaaS nesta página do DevNET da MAGIC Software.
Neste link você pode baixar um pequeno projeto UniPaaS (1.9g) de exemplo, com alguns programas publicados, de forma que você poderá acoplá-lo como componente de suas aplicações.
Relação de programas:
MemPack = Libera a memória física do UniPaaS (UniRTE.exe), sem uso
GetScreenSize = Retorna as dimensões atuais da tela (ex: 1024 x 768)
GetUserName = Retorna o nome do usuário logado no MS-Windows
GetComputerName = Retorna o nome do máquina atual
GetCurrentDirectory = Retorna a pasta corrente do MS-Windows
SetCurrentDirectory = Altera a pasta corrente do MS-Windows
CreateDirectory = Cria uma pasta nova no MS-Windows
IsUnderTS = Verifica se o UniPaaS (UniRTE.exe) está rodando numa sessão TS
GetWindowsFolder = Retorna o caminho completo da pasta “Windows”
GetSystemFolder = Retorna o caminho completo da pasta “System”
GetTempFolder = Retorna o caminho completo da pasta “Temp”
GetTempFileName = Retorna um nome único (novo) de arquivo temporário
GetAppDataFolder = Retorna o caminho completo da pasta “APP_DATA”
GetCommonAppDataFolder = Retorna o caminho completo da pasta “COMMON_APP_DATA”
GetMyDocumentsFolder = Retorna o caminho completo da pasta “MY_DOCS”
GetCommonDocumentsFolder = Retorna o caminho completo da pasta “COMMON_ MY_DOCS”
GetProgramFilesFolder = Retorna o caminho completo da pasta “PROGRAM_FILES”
GetCommonFilesFolder = Retorna o caminho completo da pasta “COMMON_FILES”
INIGetValue = Lê um valor de um arquivo .INI (outro, que não o MAGIC.INI)
INISetValue = Altera um valor em um arquivo .INI (outro, que não o MAGIC.INI)