Manuale per la programmazione Tivoli Service Desk 6.0 Developer's Toolkit Script

Capitolo 5: Programmazione basata sugli eventi

Ritorna all'Indice analitico


Introduzione

La programmazione basata sugli eventi viene utilizzata per sviluppare le applicazioni per le reti e le piattaforme GUI (graphical user interface). Le funzioni dell'interfaccia utente TSD Script sono basate innanzitutto sugli eventi. Per illustrare i contenuti di un programma basato sugli eventi, rivisualizzare la sequenza degli eventi in un programma interattivo, strutturato per catturare le informazioni dagli utenti:

  1. L'applicazione crea una finestra principale con un menu.
  2. L'applicazione attende che l'utente scelga una voce nel menu.
  3. L'utente seleziona un comando dal menu (un evento).
  4. L'applicazione risponde alla richiesta dell'utente.
  5. L'applicazione attende.

Definizione

In un programma basato sugli eventi, l'applicazione è una raccolta di singole finestre. Le applicazioni vengono create assemblando le singole finestre in un insieme di finestre comunicanti tra loro.

Ad ogni finestra viene associata una routine denominata handler degli eventi. Poiché un utente interagisce con una finestra, il rispettivo handler degli eventi elabora l'evento creato da quella interazione. L'interazione tra utente e computer è dinamica.Ciò significa che gli eventi o le elaborazioni si verificano immediatamente e contemporaneamente, come richiesto.

Influenze object-oriented

I programmi basati sugli eventi vengono spesso creati utilizzando i concetti che si basano sugli oggetti:

L'incapsulamento degli oggetti predispone al loro riutilizzo in quanto gli oggetti non devono essere reinventati ogni volta che vengono utilizzati.

I messaggi di rete possono essere trattati allo stesso modo delle finestre e degli handler degli eventi. Ciò significa che ogni connessione di rete e ogni messaggio di rete può essere trattato come oggetto incapsulato. Consultare Capitolo 11, Concetti di rete, per le informazioni sulle funzioni di rete TSD Script.

Un'applicazione basata sugli eventi viene creata assemblando uno o più oggetti della finestra e permettendo a tali oggetti di comunicare attraverso l'inoltro dei messaggi. Il TSD Script dispone di funzioni affidabili per creare le finestre incapsulate e per inoltrare i messaggi.

Handler degli eventi

Gli handler degli eventi vengono utilizzati nel TSD Script e Developer's Toolkit per supportare un ambiente basato sugli eventi. In un ambiente basato sugli eventi, un evento (come ad esempio una sequenza tasti o un clic sul mouse) effettua un trigger della risposta appropriata attraverso l'applicazione (aprendo una nuova casella di dialogo o selezionando una voce in un campo). Per elaborare gli eventi, ogni applicazione utilizza gli handler degli eventi creati espressamente per essi. Gli handler degli eventi vengono richiamati dal sistema quando deve consegnare un evento all'applicazione. Un singolo oggetto o una singola finestra può disporre di più handler degli eventi.

Definizione degli handler degli eventi

Gli handler degli eventi vengono definiti nella sezione delle routine di un programma TSD Script. Per attivare un handler degli eventi, questo deve essere associato ad una origine eventi come ad esempio una finestra, una casella di dialogo o un servizio di rete.

Caratteristiche dell'handler degli eventi

Una routine Eventi contiene la raccolta di istruzioni TSD Script che costituisce un handler degli eventi. Come le procedure e le funzioni, un handler degli eventi è una raccolta di istruzioni TSD Script racchiuse in un blocco ACTIONS...END. Come altri blocchi TSD Script, un handler degli eventi può inoltre contenere:

Le caratteristiche speciali degli handler degli eventi comprendono:

$Handle

Gli Handle sono contenuti nel parametro $Handle e vengono inoltrati alla finestra degli eventi.

$Handle è un parametro implicito che viene inoltrato ad ogni handler degli eventi che identifica unicamente la connessione di rete o di finestra che riceve il messaggio.

Parametri impliciti

Ricezione dei parametri eventi

Ogni volta che un handler degli eventi viene informato di un evento, questo riceve due informazioni importanti:

L'handle può essere un altro handle della finestra o un handle di rete, a seconda di come viene dichiarato l'handler degli eventi.

Informazioni specifiche dell'evento

Oltre a $Handle e $Event, un handler degli eventi può ricevere informazioni aggiuntive relative ad un evento specifico.

Ad esempio, un evento $MsgSize viene accompagnato da due dati aggiuntivi:

E' sempre possibile accedere a queste informazioni aggiuntive attraverso l'evento $EventParm. $EventParm considera due argomenti:

Tuttavia, un'espressione come $EventParm(1,Integer) consente all'utente di ottenere la larghezza di una nuova finestra durante l'elaborazione di un evento $MsgSize

Le funzioni di scelta rapida sono presenti per molti dei parametri dei messaggi definiti dal sistema. Altri parametri impliciti sono presenti per i moduli

Dati di istanza

Quando si gestiscono gli handler degli eventi, è possibile gestire anche i dati di istanza. Questi sono dati che vengono associati ad una particolare finestra o connessione di rete. Come mostrato nell'applicazione di esempio alla fine di questo capitolo, i dati di istanza sono generalmente un record. La finestra possiede i dati di istanza che esistono per il lasso di tempo in cui la finestra viene aperta.

Il contenuto dei dati di istanza può essere inizializzato nella chiamata per la creazione della finestra, WinCreate. Ad esempio:

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

Handler degli eventi e dati di istanza

Quando elabora un'istruzione come quella riportata nell'ultima sezione il TSD Script considera la dichiarazione per l'handler degli eventi indicato, MainEvent. Esso rileva che MainEvent prende un record di tipo ContextRecord come proprio argomento formale. Questo indica a TSD Script di conservare abbastanza spazio per un ContextRecord nei dati di istanza della nuova finestra.

TSD Script considera quindi la parte destra del nome dell'handler degli eventi nell'istruzione WinCreate. A quel punto, considera un modulo di inizializzazione - {contesto}. Questo modulo di inizializzazione consente di copiare il contenuto della variabile del record del contesto nei dati di istanza della finestra.

Nota: Le variabili che appaiono in questo modulo devono essere dello stesso tipo dell'argomento formale per l'handler degli eventi.

Ogni volta che si richiama un handler degli eventi, questo riceve un riscontro dei dati di istanza della finestra. In questo modo, l'handler degli eventi può controllare il contenuto corrente dei dati di istanza e apportarvi delle modifiche. Un processo di inizializzazione analogo può essere adottato con altri oggetti di interfaccia non windows che utilizzano gli handler degli eventi (ad esempio, le connessioni di rete).

La combinazione dei dati di istanza della finestra e l'handler degli eventi consente alle connessioni di rete e connessioni windows TSD Script di operare come oggetti incapsulati. Le conseguenze pratiche sono le seguenti:

Nota: Evitare l'utilizzo delle variabili globali in un programma TSD Script. Utilizzare invece l'inoltro dei messaggi e dei dati di istanza della finestra per diffondere le informazioni all'interno del programma.

Conservazione delle voci correnti

Si supponga di voler conservare una voce corrente. Esistono almeno tre modi per raggiungere questo scopo:

SendMessage(mainWindow,QUERY_CURRENT_ID,current_ID); 

QUERY_CURRENT_ID dovrebbe essere una costante globale come ad esempio:

CONSTANTS 
  QUERY_CURRENT_ID IS $MsgUser+1;

e la finestra principale dovrebbe essere in grado di gestire questo messaggio come di seguito riportato:

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 *); 

In questo esempio, MainEvent è stato potenziato per aggiungere una verifica per l'evento QUERY_CURRENT_ID. Quando rileva un evento di questo tipo, MainEvent copia il valore del campo ID_corrente dai dati dell'istanza della finestra principale nella variabile della stringa immessa come terzo argomento in SendMessage da un chiamante ovvero il primo parametro dell'evento. Dopo che il chiamante ha terminato il comando SendMessage, il terzo argomento contiene il valore ad esso assegnato da MainEvent.


Manuale per la programmazione Tivoli Service Desk 6.0 Developer's Toolkit Script

Ritorna all'Indice analitico

Copyright