Sep 22, 2011

Parallel branches σε array payload στο Oracle BPM

Δεν είναι σπάνιες οι περιπτώσεις στο Oracle BPM, που έχουμε στη διάθεσή μας ένα payload που περιλαμβάνει πολλές εγγραφές μιας δομής (πίνακα-array ή collection), που όμως διακρίνονται μοναδικά από ένα συγκεκριμένο πεδίο (πχ type), και για τις οποίες θέλουμε να κάνουμε μια παράλληλη επεξεργασία χρησιμοποιώντας ως κριτήριο το μοναδικό πεδίο. Για παράδειγμα, αντλούμε μια σειρά από παραγγελίες και θέλουμε ανάλογα με τον τύπο τους να καλέσουμε κάποια εξειδικευμένα BPEL processes.

Αρχικά λοιπόν, κάνουμε drag-and-drop ένα parallel gateway και για τις περιπτώσεις (cases) που μας ενδιαφέρουν, προσθέτουμε τον ανάλογο αριθμό από exclusive gateways. Αυτά θα παίξουν των κόμβων απόφασης, για το αν θα εκτελεστεί αυτό το κλαδί (branch) του parallel gateway ή όχι.

Έπειτα, σε κάθε exclusive gateway θα δημιουργήσουμε μια συνθήκη (condition) που θα περιγράφει για το αν θα εκτελεστεί μια διαδικασία (με βάση τα περιεχόμενα του payload) ή θα πάμε απευθείας στο τέλος (εφόσον δεν υπάρχει αντικείμενο ενδιαφέροντος στο αρχικό μήνυμα). Εδώ έχουμε τη βοήθεια του XPath που μας επιτρέπει να ορίσουμε συνθήκες για τα περιεχόμενα του payload. Στο παράδειγμα που ακολουθεί, από το array των εγγραφών, επιλέγω μόνο αυτήν που έχει την ιδιότητα emsFileTypeid στην τιμή 7 ώστε στο επόμενο βήμα να διαχειριστώ αυτόν τον τύπο.

Ένα πλήρες διάγραμμα, μπορεί να δείχνει όπως το παρακάτω: Οι συνθήκες βρίσκονται στα exclusive gateways που έχουν ως default διαδρομή το τέλος της παράλληλης διαδικασίας. Αν όμως ισχύει κάποια συνθήκη (ή πολλές ταυτόχρονα) τότε θα ακολουθήσει η επεξεργασία στα βήματα PrepareTypeX, InvokeTypeX, για όσους τύπους είναι παρόντες στο αρχικό μήνυμα, ταυτόχρονα.

No comments: