Translate this page now :



»Programação
»Programação.NET
»Banco de Dados
»Webdesign
»Office
» Certificações Microsoft 4
»Treinamentos4
»Programação 4
»Webdesign«
»Office & User Tips«
»Grupos de Usuários
»Células Acadêmicas«

Morcegando
Você já está cadastrado e participa do grupo de usuários de sua cidade ? Se não, comente o porque.
 
 
Faça um pequeno teste com 10 questões de VB
.:.
Teste seus conhecimentos em Visual Basic, SQL Server e ASP 3.0 com nossas provas on-line
.:.
Aprimore seus conhecimentos em programação com nosso treinamento on-line de lógica de programação
.:.
Veja nosso calendário de treinamentos
Gostou da Página?
Então

para um amigo!
 







Pesquisa personalizada
Pesquisar Dicas:

 






Quer saber mais?
Não deixe escapar essa oportunidade!
::Treinamento para Certificação Microsoft - MCP::
::Treinamento para Certificação Microsoft - MCSD::
::Leia também o artigo:Conheça como funcionam as arquiteturas de desenvolvimento p/Web::

Metodologia de vinculo entre os módulos : COM+Events

Após este artigo você gostará de ler :

Criação de Componentes ActiveX - Parte I

Criação de Componentes ActiveX - Parte II

Conheça como funcionam as arquiteturas de desenvolvimento p/Web

Após este arquivo você gostará de estudar :

Técnicas de desenvolvimento com VB 6

Banco de dados em 3 camadas com VB 6

 

Um dos grandes desafios do desenvolvimento de software é conseguir montar uma integração versátil entre módulos de software. Módulos expansíveis, que permitam que outros módulos se encaixem no futuro é um dos maiores desafios que temos.

Dentro de uma aplicação e o sistema de controle ActiveX a arquitetura de eventos, montar um componente com eventos que outros programadores possam utilizar posteriormente, torna a programação bem versátil.

Mas como aproveitar o sistema de eventos para fazer a interligação de módulos, em especial módulos desenvolvidos com componentes inseridos no COM+ ?

Para isso utilizamos um recurso que o próprio COM+ nos oferece : O COM+ Events.

Através do COM+ Events podemos expor um evento em um componente. Desta forma componentes do mesmo módulo ou até mesmo de outros módulos podem se vincular a este evento.

Por exemplo, uma operação de cadastramento pode expor um evento de cadastramento. Desta forma abre-se uma dezena de possibilidades : Pode-se adicionar novas validações de dados a esse cadastramento, pode-se cadastrar informações adicionais ou gerar um cadastramento adicional com base nas informações cadastradas e muito mais.

Para utilizarmos o COM+ Events temos que seguir algumas regras especiais. Os eventos precisam ser criados em uma classe a parte, só para eles. Serão implementados pelo componente que terá os eventos. Os usuários dos eventos são chamados de assinantes ou subscritores.

Desta forma, no disparo e uso de um evento existem 3 componentes envolvidos : O disparador do evento, que pertence ao módulo/aplicação que irá disponibilizar o evento, o subscritor do evento, que pertence ao módulo que irá utilizar o evento e a classe de evento, utilizada pelos 2.

Uma classe de evento é criada como uma interface, com um método sem código, como no exemplo abaixo, em que criamos um evento evTeste em uma classe clsEvento :


Public Sub evTeste(testando As Integer)

End Sub

Para disparar o evento é ainda mais simples : Basta fazer referencia a interface (prjEvento) e disparar o método criado nesta interface. O COM+ automaticamente irá instanciar todos os componentes que houverem se sobrescrito a este evento e irá transmitir para eles os parâmetros que o diparador houver transmitido para a interface.

Veja um exemplo simples, após o references ter sido realizado :

Sub disparador()
Dim x As New clsEvento
x.evTeste 10
Set x = Nothing
End Sub

A classe de evento (clsEvento) precisa ser registrada no COM+ de forma especial. Não basta arrasta-la para o COM+, pois ela seria registrada como um componente comum. É necessário utilizar o wizard de instalação de um novo componente clicando-se com o botão direito sobre a pasta "Components" e selecionando a opção New component. No Wizard encontraremos a opção de instalar uma classe de evento e poderemos selecionar a DLL que contém a interface que criamos.

 

Vamos também inserir o disparador do evento dentro do COM+

 

É interessante observar que um evento pode possuir multiplos disparadores. Podemos ter vários componentes que disparem o mesmo evento, desta forma causando as mesmas consequencias.

Já o subscritor do evento precisa implementar esta interface utilizando a instrução Implements e codificar a sub evteste.

Primeiramente utiliza-se o menu project->References para fazer uma referencia a classe que contém o evento. A instrução Implements em seguida nos obriga a implementar todas as Subs/Functions que a classe possui.

Veja um exemplo    : 
   
   Implements clsEvento
Private Sub clsEvento_evTeste(testando As Integer)
   App.LogEvent "passou aqui " & testando, 1
End Sub

Da mesma forma que ocorre com o disparador, também podem haver mútiplos subscritores para o evento. Quando um evento for disparado todos os componentes que houverem assinado aquele evento serão disparados.


O componente que assinará o evento (subscritor, que implementa a interface) é instalado no COM+ normalmente.

É interessante observar como que pelo fato de implementar uma interface ao expandirmos o componente subscritor vemos duas interfaces : A interface do evento que ele implementa e a sua própria interface default, que no nosso exemplo está vázia, pois não implementamos nada além da resposta ao evento.

Agora precisamos, abaixo do componente, na pasta subscriptions, registrar que este componente deverá ser disparado quando o evento ocorrer. Para isso clicamos com o botão direito e entramos no Wizard New Subscription.


Primeiramente o Wizard nos solicita que informemos o método que será usado na subscrição. Seguindo o exemplo, devemos apontar para o método evteste implementado da clsEvento.


Em seguida ele pede para selecionarmos a qual classe de evento iremos nos subscrever. O wizard já listará nossa classe de evento que registramos anteriormente e assim completaremos a subscrição, dando um nome para a assinatura ao finalizar o processo.




Desta forma existe uma considerável independência entre os módulos disparador e subscritor, que certamente poderão existir independentemente um do outro, sem que um afete grandemente as tarefas do outro.

Para exemplificarmos o disparo do evento basta criarmos uma aplicação standar para chamar o componente disparador. Vamos inserir um botão e colocar o seguinte código :

Private Sub cmdDisparo_Click()
   Dim x As New clsDisparador
   x.disparador
   Set x = Nothing
End Sub
 

Após o disparo o efeito que teremos é que veremos uma mensagem no event viewer com o parâmetro transmitido.

Observe como a chamada foi indireta : A aplicação client chamou o componente disparador. Que chamou a classe de evento passando o parâmetro, mas esta não possui código algum. A subscrição existente no COM+ fez com que a classe de evento disparasse o subscritor e gerasse o resultado, a mensagem no event viewer. Observe como seria simples alterar o subscritor e/ou criar novos subscritores, gerando resultados diversos sem que isso afetasse os disparadores.

O COM+ Events possui ainda alguns recursos adicionais :

Filtering :

Nas propriedades da assinatura encontramos a opção de filtering. Essa opção nos permite filtrar os subscritores que serão disparados conforme os parâmetros transmitidos pelo evento. Podemos, por exemplo, fazer com que um subscritor só seja chamado em uma condição específica, por exemplo, se o parâmetro testando for igual a 12. Veja um exemplo na figura :

Observe que posso testar se um parâmetro é igual ou se é diferente a um determinado valor, mas não posso testar se é maior ou menor que um detemrinado valor.

Desta forma o COM+ events facilita bastante a integração entre aplicações, veja :

Havendo necessidade de integrar o disparador com um sistema legado cria-se um subscritor personalizado que receba os dados do disparador e envie para o sistema legado.

Havendo a necessidade de integrar o subscritor com um sistema legado cria-se um disparador personalizado que dispare o evento transmitindo as informações do sistema legado, que acabarão por chegar ao subscritor.

[]'s

Dennes Torres
MCSD,MCSE,MCDBA



� Búfalo Informática, Treinamento e Consultoria - Rua Álvaro Alvim, 37 Sala 920 - Cinelândia - Rio de Janeiro / RJ
Tel.: (21)2262-1368 (21) 9240-5134 (21) 9240-7281 e-Mail:
contato@bufaloinfo.com.br