Argomento precedente: All'interno della business logicArgomento successivo: Registrazione


Flusso di eventi

Come descritto in precedenza, gli input per la business logic sono gli eventi del motore e gli eventi di dati non elaborati.

Gli eventi di dati non elaborati ricevuti dalla business logic vengono determinati dalla funzione di registrazione in cui il codice richiede un insieme specifico di eventi di dati non elaborati definiti in base agli identificatori Tipo di evento e Risorsa.

Nella business logic, la registrazione associa inoltre una subroutine definita dall'utente che viene eseguita per gestire l'evento di dati non elaborati una volta ricevuto. (Per impostazione predefinita, è necessario rinominare OnXXXEvent con un nome più significativo.)

Gli eventi del motore vengono generati dal motore in base alle definizioni di contratto e metrica associate. Una volta generato e ricevuto l'evento del motore, il motore esegue il gestore eventi pertinente. Ciascun evento del motore ha un gestore eventi implicito. Questi gestori di evento corrispondono a funzioni e procedure definite nella parte superiore del VBScript. Sono obbligatori il gestore eventi che gestisce la registrazione e la funzione Result per l'implementazione nel codice. Tutti gli altri gestori eventi sono facoltativi. Tuttavia, la business logic non elabora gli eventi del motore per cui non sono implementati i gestori eventi. Pertanto, è consigliabile mantenerli, anche se non vengono utilizzati, per consentire miglioramenti futuri.

Nota: durante la scrittura dello script di business logic è importante implementare tutti gli eventi del motore per comprendere tutte le possibilità finali. Ad esempio, anche se durante la prima fase di implementazione la definizione di un periodo di applicazione non era valida, ma lo sarà in futuro, tutte le formule richiederanno la rettifica. Si consiglia pertanto all'esperto di business logic di definire in anticipo il comportamento nel periodo di applicazione e fuori il periodo di applicazione, anche se inizialmente non è applicabile, in modo che quando il comportamento è introdotto, le necessarie modifiche al sistema sono banali.

Di seguito sono riportati diversi eventi del motore e i relativi gestori eventi:

Flusso di eventi

Di seguito sono riportati i passaggi del meccanismo di calcolo (servizio PslWriter) per l'elaborazione di una singola formula di business logic:

Durante ogni ciclo di calcolo, il motore valuta su cosa gli eventi del motore e gli eventi di dati non elaborati pertinenti si basano al momento del calcolo. Innanzitutto li ordina in base all'ora e in seguito li invia alle formule pertinenti per il calcolo. L'ora dell'evento di dati non elaborati corrisponde alla relativa data/ora, mentre l'ora dell'evento del motore corrisponde all'ora di attivazione. Entrambi i tipi di evento vengono quindi combinati in una sequenza temporale e inviati per il calcolo.

Gli intervalli degli eventi sono in base alla metrica locale associata, ma il parametro Time dei gestori eventi (es. OnPeriodStart (Time)) e la data/ora dell'evento di dati non elaborati è in base al valore di ora UTC. Il motore li confronta in base ai relativi valori di ora UTC, in modo da utilizzare un punto di riferimento costante.

Esempio:

Se la differenza di fuso orario di una metrica rispetto all'ora UTC è di due ore (ad esempio, GMT+2) e la data/ora in cui un evento ha aperto un incidente è alle ore 10:00, all'interno del motore l'ora utilizzata dal gestore eventi viene spostata di conseguenza e in realtà inizia alle ore 8:00 UTC. Supponendo che l'adapter è configurata per l'utilizzo di questo stesso fuso orario, quindi gli eventi di dati non elaborati verranno spostati indietro di 2 ore UTC anche nel database. Se gli eventi vengono trasferiti alla business logic, l'agente di calcolo responsabile del calcolo degli eventi per il periodo che inizia alle 10:00 utilizzerà effettivamente l'ora UTC per gli eventi, che diventa le 8:00 da quel momento in poi. Tuttavia, se si utilizza il messaggio out.log nel codice per stampare la data/ora, verrà mostrata la data/ora spostata all'ora UTC, quindi le 8:00, nonostante il periodo specificato (in base alla metrica) sia alle 10:00.

Nei requisiti di calcolo seguenti è importante convertire la data/ora dell'evento prima di utilizzarlo:

Se la metrica deve calcolare il numero di eventi chiusi nello stesso giorno in cui sono stati aperti, quindi è necessario confrontare l'ora di apertura e chiusura di ogni incidente. Se l'ora di apertura e di chiusura di un incidente sono comprese nello stesso giorno (e all'interno di un periodo di applicazione definito), l'incidente verrà contato.

Durante il processo di spostamento l'incidente all'ora UTC dall'ora locale originale, è possibile che il giorno cambi (ad esempio utilizzando GMT+2). Un incidente aperto alle ore 1:00, verrà spostato indietro alle ore 23:00 del giorno precedente in base all'ora UTC. Quindi, non verrà conteggiato anche se dovrebbe esserlo. Questa è una situazione in cui l'ora deve essere prima convertita in base all'ora locale della metrica e quindi confrontata. In questo caso, utilizzare il metodo GetLocaleTime(utcTime). Questo metodo converte una data ora specificata in un fuso orario UTC nel fuso orario della metrica locale.

Di seguito è riportato il codice del gestore eventi:
Sub OnIncidentEvent(eventDetails)
   If dateDiff("d",Tools.GetLocaleTime(eventDetails.time),_
     Tools.GetLocaleTime(eventDetails("ClosedAt)))=0 then
          CountIncidents=CountIncidents+1
   End If
End Sub