vai al contenuto principale

Class warning

Un Class warning è una regola di validazione basata su un'espressione booleana: al verificarsi della condizione definita dall'espressione, è possibile impedire l'azione dell'utente oppure mostrare un semplice avvertimento.

Un Class warning è composto da un nome univoco, una condizione (l’espressione booleana) e un messaggio che viene mostrato quando la condizione è soddisfatta. Nel caso in cui il Designer impedisca la creazione o la modifica di un oggetto di una classe si parla di Class warning bloccante.

Creare un Class warning #

Dall’Application Schema , fai click destro su una classe per aprire il suo Class menu e seleziona Set warnings... per aprire il Class warnings manager. Clicca su Add per aprire il Class warning editor.

In alternativa, clicca sull’icona nel footer della classe e clicca su Add per aprire il Class warning editor.

Creare un Class warning

Per rimuovere tutti i Class warning dichiarati (senza eliminarli singolarmente dall’editor) è sufficiente cliccare con il tasto destro sull’icona nel footer della classe e selezionare l’opzione Delete warnings.

Eliminare tutti i Class warning

Class warnings manager #

Il Class warnings manager è il gestore dei Class warning definiti per una determinata classe. Attraverso i pulsanti Add, Edit e Delete è possibile aggiungere, modificare o eliminare un Class warning. L’opzione Copy warnings to other applications consente di estendere tutti i warning presenti ad altre viste applicative, selezionabili tramite le rispettive checkbox dal pannello contestuale (Link to other applications).

I Class warning bloccanti sono evidenziati in arancione, mentre quelli non bloccanti sono evidenziati in verde.

Class warnings manager

Class warnings manager

Nell’esempio in figura è mostrato il Class warnings manager della classe Product_batch_component: sono stati aggiunti due Class warning, uno bloccante (insufficientQuantity) e uno non bloccante (endDateInPast).

Class warning editor #

Il Class warning editor

Class warning editor

Il campo Condition del Class warning editor contiene al suo interno un Expression editor, nel quale è possibile digitare un’espressione, la quale deve essere necessariamente una condizione booleana. Quando l’espressione è riconosciuta come valida, l’editor mostra il messaggio Validated as BOOLEAN.

A seconda della configurazione delle checkbox nella sezione Evaluated on, l’editor determina in quale momento valutare la condizione:

  • SaveNew: quando un nuovo oggetto è salvato per la prima volta;
  • SaveExisting: quando sono salvate delle modifiche a un oggetto preesistente;
  • Delete: quando un oggetto viene eliminato.

Infine, nella sezione Messageè possibile definire l’avvertimento che viene mostrato al verificarsi della condizione: Spuntando l’opzione Block action when message is displayed, si può decidere di bloccare l’azione dell’utente nel momento in cui viene mostrato il messaggio; questo può essere utile per impedire agli utenti di effettuare modifiche che introdurrebbero inconsistenze nell’applicazione.

Esempio #

Nel prossimo esempio la classe Employee è utilizzata per memorizzare i dati degli impiegati assunti da un’azienda. L’attributo date_joined rappresenta la data di assunzione, mentre /age è un derivato che calcola l’età dell’impiegato in base alla data di nascita (date_of_birth).

Esempio: la classe Employee priva di Class warning

La classe Employee, ancora priva di Class warning

Al momento vi sono due casi che potrebbero dare luogo a inconsistenze nei dati:

  • compilando il campo date_joined è possibile inserire una data qualunque, anche una data futura;
  • l’attributo /age può avere un valore inferiore a 20; un impiegato con meno di vent’anni è troppo giovane per poter essere assunto.

È chiaro che per evitare questi due scenari non possiamo procedere restringendo il dominio degli attributi a livello di Database schema, perché questo ci consentirebbe solo di definire staticamente valori minimi e massimi per date_joined e date_of_birth (/age è una math calcolata su un altro attributo, e dunque non è possibile imporre direttamente su di essa alcuna restrizione di dominio); saremmo così costretti ad aggiornare continuamente l’applicazione a livello database.

Il modo più appropriato di procedere è modellare queste restrizioni a livello applicativo, attraverso dei Class warning:

  • joinedInFuture verifica che la data di assunzione (date_joined) sia precedente alla data attuale (__System.date); l’espressione utilizzata è quindi date_joined > __System.date.
  • under20 appare quando l’attributo /age assume un valore inferiore a 20; la condizione è dunque age < 20.

Abbiamo reso entrambi i warning bloccanti, in modo da impedire l’inserimento di dati errati nell’applicazione al momento del salvataggio e della modifica degli oggetti della classe (spuntando le opzioni SaveNew e SaveExisting).

Class warnings manager

Un terzo Class warning è stato aggiunto per avvisare l’utente se il salario dell’impiegato (hourly_cost) è troppo basso, confrontando la cifra inserita con un riferimento adeguato agli anni di anzianità maturati in azienda. A tale scopo abbiamo inserito nel Class warning editor la seguente espressione: hourly_cost < (25 + dateDiff(__System.date, date_joined, field.year) * 10); il warning appare quando il salario è minore di 25 più gli anni trascorsi all’interno dell’azienda (calcolati sottraendo il campo year di date_joined all’anno della data corrente __System.date), il tutto moltiplicato per 10. In questo caso non abbiamo reso il warning bloccante, ma abbiamo aggiunto un semplice avvertimento, scrivendo nel box dedicato il messaggio “Hourly cost is too low with respect to the employee’s experience”, come mostrato in figura.

Il Class warning editor per lowCost