Apr 9, 2009

Εμφανίζοντας παραμετρικά μηνύματα λαθών με Groovy στο ADF

Κατά την γνώμη μου, μια από τις σημαντικότερες καινοτομίες του ADF 11g είναι η εισαγωγή της Groovy σε διάφορα σημεία, όπως της αρχικοποίησης τιμών ή των κανόνων επικύρωσης (validations) Ανάμεσα στις δυνατότητες αυτής της ενσωμάτωσης που περιγράφονται στο http://www.oracle.com/technology/products/jdev/11/how-tos/groovy/introduction_to_groovy.pdf κάτι που προς το παρόν δεν υποστηρίζεται είναι η εμφάνιση παραμετρικών μηνυμάτων λαθών μέσω της adf.raise() ή της adf.warn(), που λαμβάνουν ως μοναδικό όρισμα το κλειδί κειμένου στο resource bundle μας. Έτσι, δεν μπορούμε να εμφανίσουμε μέσω της Groovy μηνύματα του τύπου:

INVALID_LENGTH=Text of attribute {0} should be more than {1} characters.

Μπορούμε όμως να κατασκευάσουμε μια δική μας έκδοση των παραπάνω συναρτήσεων στο entity της επιλογής μας (ή ακόμα καλύτερα σε ένα generic entity από όπου κληρονομούν όλα τα υπόλοιπα) που θα παίρνει επιπλέον έναν πίνακα παραμέτρων στο μήνυμα που θέλουμε να εμφανίσουμε:
public void raiseError(String msgKey, Object[] params) {
throw new JboException(getResourceBundleDef(), msgKey, params);
}
Έτσι, μπορούμε να την χρησιμοποιήσουμε από ένα Groovy script κατάλληλα όπως σε έναν κανόνα validation:

if (newValue.size() <>
{
def myparams = new Object[2]
myparams[0]= adf.object.hints.LastName.label
myparams[1] = 5
source.raiseError("MIN_LENGTH_TEXT", myparams)
return false
}
return true


Κατά τη διάρκεια της εκτέλεσης, το μήνυμα μας θα εμφανιστεί κανονικά.

Κάτι τέλος που πρέπει να τονιστεί είναι πως η μορφή των παραμέτρων στο message bundle είναι της μορφής {0},{1} και όχι λεκτικής, όπως {attrName} γιατί έτσι λειτουργεί ο constructor του JboException.

No comments: