Jun 10, 2011

Refresh ενός ADF region όταν αλλάζουν οι παράμετροι εισόδου (input parameters)

Σύμφωνα με το documentation (http://download.oracle.com/docs/cd/E16162_01/web.1112/e16182/taskflows_regions.htm#CHDEIFBB) όταν χρησιμοποιούμε task flows σε regions, έχουμε διάφορες επιλογές με τις οποίες το task flow μας θα ξανα-εκτελεστεί (refreshed) Η πιο συνηθισμένη και πιο ασφαλής είναι να ορίσουμε στο binding layer την επιλογή Refresh με την τιμή ifNeeded: κατά αυτόν τον τρόπο, οποιαδήποτε αλλαγή των παραμέτρων εισόδου θα οδηγήσει στην εκκίνηση του task flow. Σε μια περίπτωση, χρειάστηκε να ξεκινήσω το task flow κάθε φορά, ανεξάρτητα από το αν έχουν αλλάξει οι παράμετροι εισόδου. Γι' αυτό το λόγο, χρειάστηκε ένα μικρό τρικ: αρχικά όρισα μια νέα παράμετρο στο taskflow, πχ με το όνομα inRefreshMe. Αυτή η παράμετρος είναι προαιρετική και θα συνοδεύει τις υπόλοιπες παραμέτρους του task flow.

Έπειτα σε ένα backing bean, ορισμένο σε request scope, ορίζουμε μια μέθοδο που επιστρέφει ένα random string που τελικά θα ανατεθεί στην input parameter του task flow που μόλις προσθέσαμε.

public String getRandomString() { return UUID.randomUUID().toString(); }

Τέλος, στο binding layer (page definition file) αναθέτουμε στην task flow παράμετρο την τιμή από το managed bean.

Έτσι, κάθε φορά που θα γίνεται κλήση στο region μας, θα εκκινεί το task flow μιας και μια από τις παραμέτρους εισόδου του θα έχει αλλάξει.

No comments: