Em uma aplicação Magic xpa (uniPaaS), todo objeto ‘programa’ (rotina ou sub-rotina) possui o seu DataView. DataView é o nome do conjunto de campos disponíveis ao programa em um determinado momento. Estes campos podem ser variáveis de memória (Virtual), argumentos de entrada (Parameter) ou colunas de tabelas (Column).
Do ponto de vista do desenvolvedor, estão disponíveis para uso na lógica (regras de negócio) do programa apenas o seu DataView e o do MainProgram (quando existir). Porém, quando a aplicação está em execução (.ecf aberto pelo UniRTE.exe), o cenário muda.
O contexto que está executando no momento possui um DataView que é a união do MainProgram mais todos os programas abertos (executando) dentro dele (dele = contexto).
Na seguinte situação:
- Main Program = Campo “A”
- Programa #1 = Campo “B”
- Programa #2 = Campo “C”
O desenvolvedor pode fazer uso dos campos “A” e “B” na lógica do Programa #1, e “A” e “C” no Programa #2.
Durante a execução da aplicação, entretanto, se o Programa #1 for aberto e ele abrir também o Programa #2 (não paralelo, no mesmo contexto), todos os campos (A, B e C) estarão disponíveis no DataView. Isto é verdade tanto para programas que pertencem a mesma aplicação (.ecf) quanto programas em aplicações separadas (componentes .ecf) que foram abertos dinamicamente pela aplicação ‘Host’.
O Magic xpa possui um conjunto de funções que permite acessar os campos do DataView do contexto, mesmo aqueles que não eram conhecidos em tempo de desenvolvimento. Algumas delas:
VarName( <idx> ) => Nome do campo da posição dinâmica <idx>
VarIndex( <name> ) => Posição dinâmica do campo de nome <name>
VarAttr( <idx> ) => Atributo/Tipo do campo da posição dinâmica <idx>
VarPic( <idx> ) => Máscara de I/O do campo da posição dinâmica <idx>
VarCurr( <idx> ) => Ler o conteúdo do campo da posição dinâmica <idx>
VarSet( <idx> ) => Alterar o conteúdo do campo da posição dinâmica <idx>
Desta maneira, uma aplicação Magic xpa pode acessar diretamente campos de uma outra aplicação, que não eram conhecidos durante o desenvolvimento mas estarão disponíveis (existirão) durante a execução.
Exemplo:
Acesse este endereço e baixe o projeto exemplo acima (Magic xpa 1.9g), onde um componente Magic xpa carregado dinamicamente está acessando um campo definido na aplicação ‘host’.