Tivoli Service Desk 6.0 Developer's Toolkit - Referência de Linguagem do TSD Script
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.
Não aplicável.
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.
Para obter maiores informações sobre os eventos, consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script.
Permite que um identificador de eventos acesse os parâmetros extra incluídos em uma mensagem.
FUNCTION $EventParm(n: INTEGER, digite: DATATYPE): DATATYPE;
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. |
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 ...
EVENT MyEvent(REF r: MyRecord); VARIABLES width, height: INTEGER; ACTIONS WHEN $Event IS $MsgSize THEN width:=$EventParm(1,Integer); height:=$EventParm(2,Integer); ...
Para obter mais informações sobre os eventos, consulte o Tivoli Service Desk 6.0 - Guia de Programação do TSD Script.
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.
EVENT MyEvent(REF r: MyData); ACTIONS WHEN $Event IS $MsgCreate THEN WinSetIconBar($Handle,{'CREATE.ICO','DESTROY.ICO'}: LIST OF STRING); ...
Não especifica nenhum processamento de evento para uma instrução que requer um parâmetro identificador de eventos.
EVENT $NullHandler{initializationData}: INTEGER;
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. |
A sintaxe utilizada para $NullHandler é a mesma sintaxe que é utilizada para todos os valores em dólar utilizados com manipuladores de eventos.
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;
Delega o tratamento de um evento a partir de uma rotina de tratamento de evento para outra.
FUNCTION DelegateEvent ( VAL handler: EVENT, [ REF userData: ANY ] ): INTEGER;
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.
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.
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;
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.
Envia uma mensagem para um identificador de eventos de janela.
PostMessage( VAL whdl: mensagem WINDOW, VAL: INTEGER, [ VAL msgParm: ANY ... ] ): INTEGER;
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:
|
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. |
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ó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 |
Envia uma mensagem para uma janela ou caixa de diálogo.
SendMessage( VAL whdl: mensagem WINDOW, VAL: INTEGER, [ VAL ou REF messageParm: ANY ... ] ): INTEGER;
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. |
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.
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ó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 |
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