Comunicação “Inter Contextos” no Magic xpa

Uma das muitas habilidades do Magic xpa (UniPaaS), inclui a capacidade de executar rotinas (programs ou tasks) em paralelo.

Ao iniciar um programa/tarefa definido com “paralelo”, um novo contexto (thread) é criado para ele. Contexto neste caso significa área de memória particular. Nela, estarão cópias das variáveis do Main Program, variáveis de ambiente Magic xpa (GetParam/SetParam), configurações de ambiente (MAGIC.INI) e tabelas de memória. Tudo privativo, à parte das demais existentes. E justamente por serem cópias, significa que alterações nas originais (de onde foram copiadas) não serão refletidas aqui.

Como então trocar informações entre estas rotinas que estão rodando em paralelo?

Isto é possível através de uma combinação de recursos existentes no Magic xpa:

1)      Eventos no Main Program

2)      Contextos identificados

3)      Raise Event direcionado

 

1) Definindo-se um evento no Main Program (CTRL+U), qualquer programa /tarefa pode criar um manipular (handler) para ele, ou dispará-lo (raise event).

2) Usando-se a função CtxSetName(…) pode-se definir uma identificação conhecida ao contexto (thread) atual

3) Usando-se o argumento Destination Context Name do comando Raise Event, pode-se definir um contexto/thread específico onde o evento deverá ser capturado.

Neste endereço <clique aqui> há um programa exemplo Magic xpa, onde uma mesma tabela é acessada por dois programas em paralelo: Consulta e Cadastro. Eles estão abertos (em execução) simultaneamente e à medida que alterações são realizadas no programa “Cadastro”, os dados são automaticamente refletidos/atualizados no programa “Consulta”.

 

Como funciona?

A)     Um evento denominado “Sincroniza” foi definido no Main Program (CTRL+U)

B)      O programa “Consulta” tem um handler para este evento, e neste handler ele realiza um Raise Event View Refresh

C)      O programa “Consulta” define um nome para o seu contexto (TelaConsulta) logo no início, no seu Task Prefix.

D)     O programa “Cadastro” realiza um Raise Event Sincroniza sempre que ele quer avisar que houve alteração de dados (neste exemplo foi escolhido o Record Prefix para isto). No Destination Context está definido TelaConsulta, e o Wait está NO (para não deixar este programa em espera até o outro processar o evento).

OBS: Este exemplo requer o Magic xpa 1.9g. Se não puser atualizá-lo, altere a definição do banco de dados da tabela, para poder rodar a aplicação.

Manoel Frederico - Gerente de Produto e Magic Evangelista
Manoel Frederico – Gerente de Produto e Magic Evangelista

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *