Criando um filtro do Publisher
Há dois métodos para estabelecer o filtro de editor: usando a propriedade MultiPublisherFilterCLSID da classe de evento ou usando IEventControl::SetPublisherFilter.
- Como ele permite compor o objeto de evento com o serviço de componentes em fila COM+, o método preferencial é usar a propriedade MultiPublisherFilterCLSID na classe de evento para definir o filtro de editor. Isso estabelece um objeto de filtro para todos os métodos das interfaces de evento para um objeto de evento. O objeto de evento ativa o filtro de editor quando o objeto de classe de evento é instanciado usando CoCreateInstance.
- Você também pode usar SetPublisherFilter. No entanto, se você escolher esse método, a interface não é enfileirável e, portanto, não pode usar o objeto de evento com o serviço de componentes em fila COM+ entre o editor e o objeto de classe de evento. Para obter informações adicionais sobre como usar o serviço de componentes em fila com eventos COM+, consulte Usando eventos COM+ com componentes em fila COM+.
Um evento pode ter um ou mais objetos de filtro ou nenhum. Os objetos de filtro do editor devem oferecer suporte a IPublisherFilter ou IMultiInterfacePublisherFilter, dependendo se você tiver uma única interface de disparo ou várias interfaces de disparo no objeto de classe de evento. As interfaces IPublisherFilter e IMultiInterfacePublisherFilter especificam um método Initialize. O método Initialize é chamado pelo objeto de classe de evento imediatamente após a criação do objeto de filtro.
COM+ Events tenta invocar dois métodos no filtro. Primeiro, ele chama IPublisherFilter::P repareToFire e passa um ponteiro de interface IFiringControl para o filtro. Em seguida, ele consulta o objeto de filtro para a interface de evento. Se o filtro oferecer suporte à interface de evento, ele invocará um método nele. Isso fornece acesso aos parâmetros do editor para um evento. O filtro pode usar esses parâmetros para determinar quais assinaturas devem ser acionadas.
Tópicos relacionados