

Guida all'implementazione › Esempi di case study › Esempi di implementazione di business logic › Case study 12: utilizzo della logica di contatore per calcolare il numero di errori
Case study 12: utilizzo della logica di contatore per calcolare il numero di errori
L'esempio seguente calcola il numero di errori che si sono verificati in un dato periodo di calcolo. La formula e i metodi utilizzati per implementarlo possono essere considerati come esempio di una formula richiesta quando è necessario calcolare qualcosa.
Vengono utilizzati i seguenti presupposti di calcolo:
- Eventi di input:
- Evento di disponibilità, Stato (0/1)
- L'evento di disponibilità viene ricevuto a intervalli di qualche minuto. Non è possibile presupporre la frequenza dell'evento (l'evento può verificarsi ogni cinque minuti, oppure una volta ogni ora) e inoltre possono esservi eventi ridondanti (ad esempio: 0, 0, 0, 1, 1, 0, ecc.).
- Periodo di applicazione: ore lavorative; gli errori che si verificano al di fuori del periodo di applicazione non vengono considerati.
- Il risultato richiesto è il numero di errori che si sono verificati durante il periodo.
Per conteggiare gli errori che si sono verificati durante il periodo di calcolo, è necessario archiviare una variabile di contatore periodico e anche una variabile che archivia lo stato del sistema. Poiché si potrebbero ricevere informazioni su eventi ridondanti (ad esempio, un evento Attivo seguito da un altro evento Attivo), è necessario inoltre calcolare il numero di ubicazioni in cui si è verificata una modifica dello stato di sistema da Attivo a Non attivo senza calcolare ogni volta che viene ricevuto un evento Non attivo, in quanto potrebbe essere un evento ridondante che rappresenta un errore già considerato.
Nella figura seguente è rappresentato graficamente il conteggio di stati Attivo e Non attivo del sistema.

Punti importanti da tenere in considerazione:
- Costanti: è consigliato l'utilizzo di definizioni di costante, invece che di valori costanti all'interno del codice. In questo modo, se il valore necessita di modifiche, è possibile modificare il valore solo nella definizione di costante senza dover eseguire la ricerca nel codice intero. Inoltre, è semplice modificarlo con l'uso di un parametro, se necessario. Nell'esempio precedente, i valori che rappresentano lo stato del sistema ricevuto nell'evento sono definiti come costanti in modo da rendere il codice più comprensibile, nonché per distinguere quando il numero zero viene utilizzato come un numero ai fini del conteggio dai casi in cui rappresenta uno stato del sistema.
- Variabili globali:
- Considerazioni sul periodo di applicazione: per verificare se un errore interno avviene entro il periodo di applicazione, è possibile utilizzare il valore della proprietà context.IsWithinTimeSlot. Il contesto è un oggetto globale che può essere utilizzato da qualsiasi punto nel codice e, in questo caso, viene utilizzato per indicare quando viene ricevuto un errore e se si trova all'interno o all'esterno del periodo di applicazione. Se alla data/ora dell'evento il flag restituisce TRUE, quindi l'evento si è verificato all'interno di un periodo di applicazione, mentre se restituisce FALSE, indica che l'evento si è verificato al di fuori del periodo di applicazione. Secondo la logica richiesta, gli errori che si verificano al di fuori del periodo di applicazione vengono ignorati e pertanto non conteggiati.
- Variabili di inizializzazione:
- Variabile del contatore: contiene un valore periodico e viene pertanto inizializzata nel gestore OnPeriodstart per assicurarsi che ciascun periodo di calcolo conteggi gli errori separatamente. Ogni periodo inizia per zero e restituisce solo il numero di errori all'interno di questo periodo.
Nei casi in cui è richiesta per calcolare gli errori accumulati all'interno di ciascun periodo (vale a dire che il risultato di ogni periodo comprende tutti gli errori avvenuti fino al termine di tale periodo e compresi tutti i periodi precedenti), è necessaria per inizializzare il contatore solo nel gestore OnLoad e rimuoverla dal gestore OnPeriodStart. Pertanto, il contatore continua il conteggio e l'accumulo tra i periodi come indicato di seguito:
Sub OnLoad(time)
FingerprInted=0
End Sub
- Variabile dello stato di sistema: deve essere inizializzata una volta all'inizio del calcolo e aggiornata, da quel punto in poi, su ogni evento di stato. Questa variabile memorizza il relativo valore per l'intero calcolo e non è limitata a un certo periodo di calcolo. È inoltre necessario che mantenga il relativo valore tra i periodi di calcolo. Poiché lo stato del sistema è sconosciuto prima di ricevere l'evento iniziale, è necessario assumere un presupposto in merito allo stato del sistema. Il presupposto comune è che il sistema sia Attivo. È necessario concordare e controllare tale presupposto dal momento che può comportare i casi seguenti:
Se, una volta avviato il calcolo lo stato del sistema era effettivamente Non attivo e il primo evento ricevuto indica tale stato Non attivo, verrà considerato un errore in quanto lo stato presupposto era Attivo. Questo errore viene conteggiato per il primo periodo di calcolo, anche se non si verifica necessariamente durante tale periodo.
Option Explicit
'Definizioni di costanti
Const UP=1
Const DOWN=0
'Variabile globale per il conteggio di errori
Dim FingerprInted
Dim SystemStatus
Sub OnRegistration(dispatcher)
' I parametri del metodo sono: <procedure name>, <Event Type>
dispatcher.RegisterByContractPartyAndService "OnAvailabilityEvent","AvailabilityEvent"
End Sub
Sub OnLoad(time)
SystemStatus = UP 'presuppone il primo stato del sistema
End Sub
Sub OnPeriodStart(time)
FingerprInted = 0
End Sub
Sub OnAvailabilityEvent(eventDetails)
' In caso di un errore all'interno del periodo di applicazione, viene conteggiato
If context.IsWithinTimeSlot and SystemStatus=UP and _
eventDetails("Status")=DOWN Then
FingerprInted = FingerprInted + 1
End If
' aggiornare lo stato del sistema per il confronto successivo
SystemStatus = eventDetails("Status")
End Sub
Function Result
Result = FingerprInted
End Function
Copyright © 2013 CA.
Tutti i diritti riservati.
 
|
|