Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Capítulo 5: Programação Orientada por Eventos

Retornar ao Índice


Introdução

A programação orientada por eventos é utilizada para desenvolver aplicativos em plataformas e redes de interface gráfica com o usuário (GUI). Os recursos da interface do usuário do TSD são primeiramente orientadas por eventos. Para ilustrar os conceitos de um programa orientado por eventos, reveja a seqüência de eventos em um programa interativo projetado para capturar informações do usuário:

  1. Aplicativo cria uma janela principal com um menu.
  2. Aplicativo aguarda que um usuário faça uma seleção do menu.
  3. Usuário seleciona um comando do menu (um evento).
  4. Aplicativo responde ao pedido do usuário.
  5. Aplicativo aguarda.

Definição

Em um programa orientado por eventos, um aplicativo é uma coleção de janelas individuais. Os aplicativos são construídos montando janelas individuais dentro da coleção de janelas que se comunicam entre si.

Cada janela possui uma rotina associada a ela chamada rotina de tratamento de eventos. Uma vez que o usuário interage com uma janela, sua rotina de tratamento de eventos processa o evento gerado por esta interação. A interação entre usuário e computador é dinâmica. Ou seja, os eventos ou os processos ocorrem imediata e concorrentemente, conforme necessário.

Influências orientadas a objeto

Os programas orientados por eventos são freqüentemente construídos utilizando os conceitos baseados no objeto:

O encapsulamento de objetos motiva sua reutilização pois os objetos não precisam ser reinventados cada vez que são utilizados.

As mensagens da rede podem ser tratadas da mesma maneira que as janelas e as rotinas de tratamento de eventos são tratadas. Ou seja, cada mensagem da rede e cada conexão de rede pode ser tratada como um objeto encapsulado. Consulte o Capítulo 11, Conceitos sobre Rede, para obter informações sobre as funções de rede do TSD Script.

Um aplicativo orientado por eventos é construído montando um ou mais objetos de janelas e permitindo que se comuniquem por meio de transmissão de mensagem. O TSD Script possui recursos eficientes para criação de janelas encapsuladas e para transmissão de mensagens.

Rotinas de Tratamento de Eventos

As rotinas de tratamento de eventos são utilizadas em todo do TSD Script e Developer's Toolkit para suportar um ambiente orientado por eventos. Em um ambiente orientado por eventos, um evento (como uma digitação ou um clique no mouse) ativa, pelo aplicativo, a resposta apropriada (abertura de uma nova caixa de diálogo ou a seleção de uma entrada em um campo). Para processar eventos, cada aplicativo utiliza rotinas de tratamento de eventos projetadas especificamente para eles. As rotinas de tratamento de eventos são chamadas pelo sistema quando há um evento para ser enviado ao aplicativo. Um único objeto ou janela pode ter múltiplas rotinas de tratamento de eventos.

Como definir rotinas de tratamento de eventos

Uma rotina de tratamento de eventos é definida na seção de rotinas de um programa TSD Script. Para tornar uma rotina de tratamento de eventos ativa, ela deve estar associada a uma fonte de evento, como uma janela, uma caixa de diálogo ou um serviço de rede.

Recursos da rotina de tratamento de eventos

Uma rotina de Evento contém a coleção de instruções TSD Script que constitui uma rotina de tratamento de eventos. Da mesma forma que procedimentos e funções, uma rotina de tratamento de eventos é uma coleção de instruções TSD Script inclusos em um bloco ACTIONS...END. Como outros blocos TSD Script, uma rotina de tratamento de eventos também pode conter:

Recursos especiais das rotinas de tratamento de eventos incluem:

$Handle

Os identificadores estão contidos no parâmetro $Handle e passados à janela de evento.

$Handle é um parâmetro implícito que é passado a cada rotina de tratamento de eventos que identifica exclusivamente a janela ou conexão de rede que está recebendo a mensagem.

Parâmetros Implícitos

Como receber parâmetros de eventos

Cada vez que uma rotina de tratamento de eventos é notificada de um evento, ela recebe duas informações importantes:

O identificador pode ser outro identificador de janela ou um identificador de rede, dependendo da maneira que a rotina de tratamento de eventos é declarada.

Informações específicas do evento

Além do $Handle e do $Event, uma rotina de tratamento de eventos pode receber informações adicionais referente a um evento específico.

Por exemplo, um evento $MsgSize é acompanhado por duas partes adicionais de dados:

Estas partes extras de informações podem sempre ser acessadas através do evento $EventParm. $EventParm tem dois argumentos:

Portanto, uma expressão do tipo $EventParm(1,Integer) permite obter a largura de uma nova janela durante o processamento de um evento $MsgSize

As funções de atalho existem em muitos parâmetros de evento de mensagens definidas pelo sistema. Outros parâmetros implícitos existem em formulários

Dados de Ocorrência

Ao trabalhar com rotinas de tratamento de eventos, também é possível trabalhar com dados de ocorrência.São os dados associados a uma janela ou a uma conexão de rede em particular. Conforme mostrado exemplo de aplicativo no final deste capítulo, os dados de ocorrência geralmente são um registro. Os dados de ocorrência são de propriedades da janela e existem exatamente enquanto a janela estiver aberta.

O conteúdo dos dados de ocorrência podem ser iniciados na chamada para criar a janela, WinCreate. Por exemplo:

WinCreate($Desktop,context.mainWindow,
          MainEvent {context}, 
          1,1,100,30,'Main Window Title', 
          BitOr($WinBorder,$WinResize,
                $WinTitle,$WinSysMenu, 
                $WinMinMax,$WinIconBar,$WinTaskList)); 

Rotinas de tratamento de eventos e dados de ocorrência

Enquanto ele processa uma instrução semelhante àquela na última seção, o TSD Script vê a declaração para a rotina de tratamento de eventos indicada, MainEvent. Ele vê que o MainEvent toma como seu argumento formal um registro do tipo ContextRecord. Este informa ao TSD Script para reservar espaço suficiente para um ContextRecord nos dados de ocorrência da nova janela.

O TSD Script, então, olha para a direita do nome da rotina de tratamento de eventos na instrução WinCreate. Lá, ele vê um formulário de inicialização - {context}. Este formulário faz com que o conteúdo da variável de registro do contexto seja copiado nos dados de ocorrência da janela.

Nota: As variáveis que aparecem neste formulário devem ser do mesmo tipo do argumento formal para a rotina de tratamento de eventos.

Cada vez que uma rotina de tratamento de eventos é chamada, ela recebe uma referência dos dados de ocorrência da janela. Desse modo, a rotina de tratamento de eventos pode inspecionar o conteúdo atual dos dados de ocorrência e fazer alterações nele. Um processo de inicialização semelhante está disponível para outros objetos de interface não-Windows que utilizam rotinas de tratamento de eventos (por exemplo, conexões de rede).

A combinação de dados de ocorrência da janela e a rotina de tratamento de eventos faz com que as janelas e conexões de rede do TSD Script se comportem como objetos encapsulados. As implicações práticas disso são que:

Nota: Evite utilizar variáveis globais em um programa TSD Script. Em vez disso, utilize dados de ocorrência da janela e transmissão de mensagem para disseminar informações por todo o programa.

Como manter itens atuais

Suponha que você deseje manter um item atual. Há pelo menos três maneiras para conseguir:

SendMessage(mainWindow,QUERY_CURRENT_ID,current_ID); 

QUERY_CURRENT_ID precisaria ser uma constante global, como:

CONSTANTS 
  QUERY_CURRENT_ID IS $MsgUser+1;

e a janela principal deveria ser capaz de manusear esta mensagem, conforme mostrado abaixo:

EVENT MainEvent(REF context: ContextRecord) IS 
VARIABLES 
      iconList: List of String; 
ACTIONS 
      WHEN $Event IS $MsgCreate THEN 
        iconList:={'ADDINV.ICO','SRCHINV.ICO',
                   'REPORTS.ICO'): LIST OF STRING; 
        WinSetIconBar($Handle,iconList); 
      ELSWHEN $MsgSelect THEN 
        WHEN $EventParm(1,Integer) IS 1 THEN 
          CreateAddWindow; 
        ELSWHEN 2 THEN 
          CreateSearchWindow; 
        ELSWHEN 3 THEN 
          CreateReportWindow; 
END; 
      ELSWHEN QUERY_CURRENT_ID THEN 
        $EventParm(1,String):=context.current_ID; 
END; 
    END (* Main Event *); 

Neste exemplo, MainEvent foi avançado para incluir uma verificação no evento QUERY_CURRENT_ID. Quando um evento é detectado, MainEvent copia o valor do campo current_ID a partir dos dados de ocorrência da janela principal para a variável da cadeia passada como o terceiro argumento para SendMessage pelo responsável pela chamada que é, realmente, o primeiro parâmetro do evento. Após o responsável pela chamada finalizar seu comando SendMessage, o terceiro argumento conterá o valor atribuído a ele pelo MainEvent.


Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Retornar ao Índice

Copyright