Tivoli Service Desk 6.0 Developer's Toolkit - Referência de Linguagem do TSD Script

Tratamento de Eventos

Retornar à Página Principal


$Event

Descrição

Esta variável é um parâmetro implícito que contém um número de eventos para um manipulador de eventos (por exemplo, um número de mensagem como $MsgPaint, etc.) para a chamada atual do manipulador.

Sintaxe

Não aplicável.

Notas

Em um aplicativo do TSD Script em janela, os eventos representam a força principal do aplicativo. Esses eventos surgem de uma variedade de origens, incluindo o seguinte:

Os eventos são entregues pelo TSD Script para manipuladores de eventos. Várias rotinas do TSD Script (como aquelas que criam janelas ou diálogos) permitem que você especifique uma rotina para interceptar e reapresentar os eventos.

Um manipulador de eventos acessa o parâmetro $Event interno. $Event contém uma das constantes de mensagens predefinidas ou uma constante de mensagem definida pelo programador do TSD Script. Cada constante de mensagem indica o tipo de evento sendo entregue.

Consulte também

Para obter maiores informações sobre os eventos, consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script.


$EventParm

Descrição

Permite que um identificador de eventos acesse os parâmetros extra incluídos em uma mensagem.

Sintaxe

FUNCTION $EventParm(n: INTEGER, digite: DATATYPE): DATATYPE;

Notas do Argumento

Nome do Argumento Descrição
n Este argumento identifica o parâmetro de evento. Os parâmetros de eventos são numerados começando com 1.
Tipo Este é um tipo de dados, predefinidos ou definidos pelo usuário, que corresponde ao tipo de dados do parâmetro referenciado. Se o tipo de dados especificado aqui não corresponder àquele do parâmetro transmitido pelo emissor da mensagem, será exibida uma mensagem de erro de tempo de execução.

Notas

Os manipuladores de eventos do TSD Script sempre recebem três parâmetros fixos. O primeiro é uma cópia do registro de ocorrência da janela. Este parâmetro é explicitamente recebido na declaração do manipulador de eventos. Os dois próximos são parâmetros implícitos, $Event e $Handle, que identificam o evento a ser processado e a janela que causa o evento, respectivamente.

Um manipulador de eventos pode receber um número de variável de parâmetros adicionais. Determinados eventos do sistema (como $MsgSize) são acompanhados por partes adicionais de informações que são transmitidas como parâmetros adicionais.

As mensagens definidas pelo usuário pela instrução SendMessage podem transmitir parâmetros adicionais. O emissor e o receptor devem estar de acordo com o número, tipos e significados desses parâmetros. Um manipulador de eventos acessa estes parâmetros de eventos através do $EventParm.

$EventParm considera dois argumentos: um número inteiro que identifica qual parâmetro extra deve ser recuperado e um tipo de dados que corresponde ao tipo de dados do parâmetro enviado. Embora um número de variável de parâmetros extra pode ser enviado para um manipulador de eventos, o número e os tipos de parâmetros devem ser implicados pelo próprio número de eventos.

Por exemplo, um evento definido pelo usuário deve ser configurado para que qualquer janela possa pedir qualquer outra janela para seu nome. Suponha que existe um campo de nome nos dados de ocorrência para cada janela e que seja transmitido através de dados de inicialização. Uma mensagem definida pelo usuário pode ser configurada através da definição de uma constante global com em:

CONSTANTS
 QUERY_WINDOW_NAME IS $MsgUser+1;

Depois disso, determinado um manipulador de janela, você pode obter o nome dessa janela da seguinte forma:

 VARIABLES
window_name: String;
 ACTIONS
SendMessage(some_window,QUERY_WINDOW_NAME,window_name);

Cada janela deve ter o seguinte manipulador de eventos:

 ACTIONS
WHEN $Event IS ...
 ...
ELSWHEN QUERY_WINDOW_NAME THEN
 $EventParm (1,String):=myData.myName;
ELSWHEN ...

Exemplo

EVENT MyEvent(REF r: MyRecord);
 VARIABLES
width, height: INTEGER;
 ACTIONS
WHEN $Event IS $MsgSize THEN
 width:=$EventParm(1,Integer);
 height:=$EventParm(2,Integer);
 ...

Consulte também

Para obter mais informações sobre os eventos, consulte o Tivoli Service Desk 6.0 - Guia de Programação do TSD Script.


$Handle

Descrição

Parâmetro implícito transmitido a cada identificador de eventos que identifica a janela que recebe a mensagem.

Atenção: $Handle sempre contém o parâmetro identificador de janela que recebe o evento atual. $Handle somente aparece dentro de um parâmetro identificador de eventos.

Exemplo

EVENT MyEvent(REF r: MyData);
 ACTIONS
     WHEN $Event IS $MsgCreate THEN
 WinSetIconBar($Handle,{'CREATE.ICO','DESTROY.ICO'}: LIST
 OF STRING);
...

$NullHandler

Descrição

Não especifica nenhum processamento de evento para uma instrução que requer um parâmetro identificador de eventos.

Sintaxe

EVENT $NullHandler{initializationData}: INTEGER;

Notas do Argumento

Nome do Argumento Descrição
initilizationData Este argumento é opcional. Se atual, ele fará com que dados de ocorrência do mesmo tipo que o próprio seja criado. Os dados de ocorrências são inicializados para o valor deste argumento.

Notas

A sintaxe utilizada para $NullHandler é a mesma sintaxe que é utilizada para todos os valores em dólar utilizados com manipuladores de eventos.

Exemplo

KNOWLEDGEBASE Desktop;

    ROUTINES
 PROCEDURE Example;

PRIVATE
    ROUTINES

 (* Crie uma janela de deslocamento tendo como pai o ambiente de trabalho com
 processamento de evento padrão *)
 PROCEDURE Example IS
 VARIABLES
 whdl: WINDOW;

 ACTIONS
 WinCreateScrollWindow($Desktop, 
(* A janela é um filho do
 (*ambiente de trabalho do OS/2 *)
 whdl, 
(* parâmetro identificador de retorno da nova
 janela *)
 $NullHandler,
(* Processamento de evento
 padrão *)
 5, 5, 80, 20,
(* Localização e tamanho da
 janela *)
 'Exemplo', 
(* Título da
 janela *)
 '', 
(* Utilizar fonte
 padrão *)
 0, 
(* O tamanho do ponto é
 ignorado por padrão *)
                    BitOr($WinTitle, $WinBorder,
       $WinSysMenu ));
    WinWait(whdl);
              END;

Consulte também


DelegateEvent

Descrição

Delega o tratamento de um evento a partir de uma rotina de tratamento de evento para outra.

Sintaxe

FUNCTION DelegateEvent ( VAL handler: EVENT,
 [ REF userData: ANY ] ): INTEGER;

Notas do Argumento

Nome do Argumento Descrição
handler Nome de uma função de tratamento de evento.
userData Variável transmitida pela referência para a função de tratamento de evento especificado.

Atenção: Chamadas para a função DelegateEvent deve estar no escopo de uma rotina de tratamento de evento.

Notas

Freqüentemente, várias caixas de diálogo ou outros objetos de tratamento de mensagem lidam com os mesmos tipos de dados e respondem a muitas das mesmas mensagens da mesma forma. A função DelegateEvent pode ser utilizada para evitar repetir o mesmo código nas rotinas de tratamento de mensagem para cada objeto.

DelegateEvent chama a rotina de tratamento de eventos especificada e transmite todos os parâmetros pseudo a partir do parâmetro identificador de encerramento (por exemplo, $Event, $Handle e todos os parâmetros $EventParm). Se o identificador especificado obtiver um parâmetro explícito para os dados do usuário e nenhum for especificado na chamada DelegateEvent, os dados do usuário transmitidos para o parâmetro identificador de encerramento será transmitido por padrão.

Exemplo

KNOWLEDGEBASE Test;

    ROUTINES
 PROCEDURE Main;

PRIVATE

TYPES

 BaseData IS RECORD
 f1: INTEGER;
 f2: STRING;
              END;

 DerivedData IS RECORD
 base: BaseData;
 f3: REAL;
              END;

CONSTANTS

 MSG_ONE IS $MsgUser + 1;
 MSG_TWO IS $MsgUser + 2;
 MSG_THREE IS $MsgUser + 3;

    ROUTINES

 EVENT BaseHandler (REF userData: BaseData) IS
 ACTIONS
 WHEN $Event IS MSG_ONE THEN
 userData.f1 := $EventParm(1, INTEGER);
 WinWriteLn($Handle,
 'f1 definido como [' & userData.f1 &']');
 ELSWHEN MSG_TWO THEN
 userData.f2 := $EventParm(1, STRING);
 WinWriteLn($Handle,
 'f2 definido como [' & userData.f2 & ']');
              END;
              END;

 EVENT DerivedHandler (REF userData: DerivedData) IS
 ACTIONS
 WHEN $Event IS MSG_THREE THEN
 userData.f3 := $EventParm(1, REAL);
 WinWriteLn($Handle,
 'f3 definido como [' & userData.f3 & ']');
ELSE
 $Result := DelegateEvent(BaseHandler, userData.base);
              END;
              END;

 PROCEDURE Main IS
 VARIABLES
 w: WINDOW;
 ACTIONS
 IF 0 > WinCreateScrollWindow($Desktop,
 w, DerivedHandler,
 10, 10, 80, 25, 'Test',
 $Courier, 8,
 $WinDefaultStyle)
                 THEN
    EXIT;
              END;

 WinWriteLn(w, 'Pronto para enviar MSG_ONE.');
 SendMessage(w, MSG_ONE, 37);

 WinWriteLn(w, 'Pronto para enviar MSG_TWO.');
 SendMessage(w, MSG_TWO, 'I''m pink, therefore I''m
 Spam.');

 WinWriteLn(w, 'Pronto para enviar MSG_THREE.');
 SendMessage(w, MSG_THREE, $Pi);

 WinWriteLn(w, 'Teste concluído.');
 SendMessage(w, $MsgClose);
              END;

              END;

Códigos de Retorno

O valor do número inteiro retornado de DelegateEvent é o valor retornado pelo parâmetro identificador de evento chamado. As semânticas do valor de retorno variam com a mensagem $Event.

Consulte também


PostMessage

Descrição

Envia uma mensagem para um identificador de eventos de janela.

Sintaxe

PostMessage( VAL whdl: mensagem WINDOW, VAL: INTEGER,
 [ VAL msgParm: ANY ... ] ): INTEGER;

Notas do Argumento

Nome do Argumento Descrição
whdl O parâmetro identificador de um objeto de processamento de evento, como uma janela.
message PostMessage envia uma mensagem para uma janela e imediatamente retorna um sucesso ou código de erro sem esperar que a mensagem seja enviada. A mensagem é incluída na fila de mensagem de processo da janela de destino. É feito o dispatch para a janela de destino quando o aplicativo insere um parâmetro identificador de evento.
As instruções do Tivoli Service Desk Developer's Toolkit que incluem um loop de processamento de mensagem são:
  • DlgBox
  • WinFileDialog
  • WinMessageBox
  • WinWait
messageParameters Qualquer um. É responsabilidade do remetente e do destinatário estarem de acordo com os tipos, ordem e número de parâmetros de mensagens a serem transmitidas. Todos os parâmetros são transmitidos por valor.

Exemplo

KNOWLEDGEBASE PostMsg;
    ROUTINES
 PROCEDURE PostMessageExample;

PRIVATE
CONSTANTS
 menuList IS { 'Options', 'Post message', 'Exit' }:
 LIST OF STRING;

    ROUTINES
EVENT PostMessageEvent( REF whdlTarget: WINDOW ) IS

 VARIABLES
        i: INTEGER;

 ACTIONS
     WHEN $Event IS $MsgCreate THEN
 WinSetMenuBar( $Handle, menuList );
  ELSWHEN $MsgMenu THEN
    WHEN $MenuSelection IS 101 THEN
 FOR i := 1 TO 5 DO
 WinWriteLN( $Handle, 'Posting message #' & i );
 PostMessage( whdlTarget, $MsgUser + i );
              END;
 WinWriteLN( $Handle );
 WinWriteLN( $Handle, 'Aguarde 5 segundos' );
 WinWriteLN( $Handle );
 SysDelay( 5000 );
 ELSWHEN 102 THEN
      SendMessage( $Handle, $MsgClose );
 SendMessage( whdlTarget, $MsgClose );
              END;
ELSE
 IF $Event = $MsgUser THEN
 WinWriteLN( $Handle, 'Parâmetro identificador da janela de destino recebido'
 );
 whdlTarget := $EventParm( 1, WINDOW );
 ELSIF $Event > $MsgUser THEN
 WinWriteLN( $Handle,
 'Mensagem recebida #' &
 $Event - $MsgUser );
              END;
              END;
 NOTHING;
              END;
 PROCEDURE PostMessageExample IS
 VARIABLES
 whdl1: WINDOW;
 whdl2: WINDOW;


 ACTIONS
 WinCreateScrollWindow( $Desktop, whdl1,
 PostMessageEvent{whdl1 },
 0, 0, 40, 25,
 'Janela de mensagem de envio 1',
 $TimesRoman, 14,
                      BitOr($WinBorder,
 $WinTitle, $WinMenu,
                         $WinAutoPos ) );
 WinCreateScrollWindow( $Desktop, whdl2,
 PostMessageEvent{ whdl2 },
 0, 0, 40, 25,
 'Janela de mensagem de envio 1',
 $TimesRoman, 14,
                      BitOr($WinBorder,
 $WinTitle, $WinMenu,
 $WinVScroll, $WinAutoPos ) );
 PostMessage( whdl1, $MsgUser, whdl2 );
 PostMessage( whdl2, $MsgUser, whdl1 );
 WinWait( whdl1 );
              END;

Códigos de Retorno

Código de Retorno Descrição
>0 Sucesso
0 O envio da mensagem falhou
-1 O parâmetro identificador de janela não se refere a uma janela válida. A janela pode não mais existir ou não suportar o comando
-2 Valor Desconhecido
-9 Sintaxe incorreta
-11 Valor fora do intervalo

Consulte também


SendMessage

Descrição

Envia uma mensagem para uma janela ou caixa de diálogo.

Sintaxe

SendMessage( VAL whdl: mensagem WINDOW, VAL: INTEGER,
 [ VAL ou REF messageParm: ANY ... ] ): INTEGER;

Notas do Argumento

Nome do Argumento Descrição
whdl O parâmetro identificador de um objeto de processamento de evento como uma janela.
Mensagem A mensagem a ser enviada.
messageParm Um número variável de expressões de qualquer tipo. Essas expressões são acessíveis para o identificador de eventos de recepção através do valor $EventParm.

Notas

O TSD Script oferece uma arquitetura de transmissão de mensagem forte. Os destinatários mais comuns de mensagens são os identificadores de eventos associados a janelas ou caixas de diálogo.

SendMessage pode iniciar um evento em um identificador de eventos determinado um parâmetro identificador de objeto (por exemplo, um parâmetro identificador de janela) que sofreu manutenção por esse identificador. O segundo argumento para SendMessage mapeia o parâmetro $Event para o identificador de eventos. Os argumento subseqüentes mapeados nos parâmetros de eventos no identificador de eventos.

O identificador de eventos acessa esses argumentos chamando $EventParm e fornece o número de argumento (de 1 a n) e o tipo de dados do argumento. Se um valor atribuído (como uma variável) for transmitido pelo emissor, ele será automaticamente transmitido pela referência. Do contrário, será transmitido por valor. SendMessage procede como uma chamada de função, porque o controle não retorna à instrução seguindo a chama SendMessage, até que o identificador de eventos tenha processado a mensagem e retornado.

A rotina de chamada pausa até que o identificador de evento retorne. O valor de retorno do identificador de eventos é o valor retornado pela SendMessage.

Exemplo

GLOBALS.KB
----------
CONSTANTS
 ADD_WINDOW_TO_LIST IS $MsgUser+1;
 REMOVE_WINDOW_FROM_LIST IS $MsgUser+2;
 VARIABLES
 mainWindow: WINDOW;

SENDER.KB
---------
USES
  Globals;
    ROUTINES
 EVENT MyEvent(REF r: MyRecord);
 ACTIONS
     WHEN $Event IS $MsgCreate THEN
 SendMessage(mainWindow,ADD_WINDOW_TO_LIST,
 $Handle);
   ELSWHEN $MsgDestroy THEN
 SendMessage(mainWindow,
 REMOVE_WINDOW_FROM_LIST,$Handle);
 ...

MAIN.KB
-------
USES
  Globals;
TYPES
 MainRecord IS RECORD
 ...
 openList: LIST OF WINDOW;
              END;
    ROUTINES
 EVENT MainEvent(REF r: MainRecord);
 ACTIONS
 WHEN $Event IS ...
 ...
 ELSWHEN ADD_WINDOW_TO_LIST THEN
 ListInsert(r.openList,$EventParm(1,Window));
 ELSWHEN REMOVE_WINDOW_FROM_LIST THEN
 ListDelete(r.openList,$EventParm(1,Window));

Códigos de Retorno

Código de Retorno Descrição
Valor de retorno do identificador de eventos O valor de retorno da rotina de tratamento de eventos é o valor retornado por SendMessage
-1 O parâmetro identificador de janela não se refere a uma janela válida. A janela pode não mais existir ou não suportar o comando
-2 Valor Desconhecido
-9 Sintaxe incorreta
-11 Valor fora do intervalo

Consulte também

Para obter informações sobre identificadores de eventos, consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do TSD Script.


Tivoli Service Desk 6.0 Developer's Toolkit - Referência de Linguagem do TSD Script

Retornar à Página Principal

Copyright