Mapping παραγγελίας από JSON σε XML με maps και profiles στο Boomi
Από παραγγελία e-shop σε JSON σε παραγγελία ERP σε XML: profiles από δείγματα, Map με functions για ημερομηνία, συνένωση και lookup, και έλεγχος βήμα βήμα στο Boomi.
Το e-shop στέλνει τις νέες παραγγελίες σε JSON. Το ERP δέχεται παραγγελίες σε XML. Ανάμεσά τους υπάρχει ένα mapping, και από την ποιότητά του εξαρτάται αν οι παραγγελίες μπαίνουν σωστά στο ERP ή αν κάποιος τις ξαναπληκτρολογεί κάθε πρωί. Σε αυτό το άρθρο εξηγούμε πώς προσεγγίζεται ένα τέτοιο mapping σε οποιοδήποτε εργαλείο, και μετά το φτιάχνουμε στο Boomi.
Γιατί το «απλώς αντιγράφω τα πεδία» αποτυγχάνει
Στο χαρτί τα δύο έγγραφα μοιάζουν: και τα δύο έχουν πελάτη, ημερομηνία, γραμμές και σύνολο. Στην πράξη διαφέρουν με τρόπους που φαίνονται μόνο με πραγματικά δεδομένα:
- Δομή. Το e-shop έχει εμφωλευμένο
customer.billing.city, το ERP θέλει επίπεδο<BillCity>. - Μορφές. Το e-shop στέλνει
2026-10-23T14:05:00Z, το ERP θέλει23/10/2026. - Κωδικοί. Το e-shop λέει
"payment": "card", το ERP περιμένει τρόπο πληρωμής07. - Σύνθετα πεδία. Το ERP έχει ένα πεδίο
<CustomerName>, το e-shop έχειfirstNameκαιlastName. - Επαναλαμβανόμενα δεδομένα. Κάθε παραγγελία έχει μεταβλητό αριθμό γραμμών που πρέπει να γίνουν επαναλαμβανόμενα XML στοιχεία.
Η αντιγραφή πεδίο προς πεδίο δεν καλύπτει τίποτα από αυτά. Η προσέγγιση που δουλεύει είναι πρώτα να περιγράψετε με ακρίβεια και τις δύο μορφές (με schemas ή profiles από δείγματα), να γράψετε έναν κανόνα για κάθε πεδίο προορισμού, και μετά να υλοποιήσετε και να ελέγξετε τους κανόνες με πραγματικά δείγματα.
Το παράδειγμα
Η παραγγελία από το e-shop:
{
"id": "WEB-58211",
"createdAt": "2026-10-23T14:05:00Z",
"payment": "card",
"customer": {
"id": "C-1042",
"firstName": "Ελένη",
"lastName": "Παπαδοπούλου",
"billing": { "street": "Ερμού 12", "city": "Αθήνα", "zip": "10563" }
},
"lines": [
{ "sku": "TSH-001-M", "qty": 2, "price": 19.90 },
{ "sku": "MUG-014", "qty": 1, "price": 8.50 }
]
}
Η παραγγελία που περιμένει το ERP:
<SalesOrder>
<ExternalRef>WEB-58211</ExternalRef>
<OrderDate>23/10/2026</OrderDate>
<CustomerCode>C-1042</CustomerCode>
<CustomerName>Ελένη Παπαδοπούλου</CustomerName>
<BillCity>Αθήνα</BillCity>
<PaymentMethod>07</PaymentMethod>
<Lines>
<Line><ItemCode>TSH-001-M</ItemCode><Qty>2</Qty><UnitPrice>19.90</UnitPrice></Line>
<Line><ItemCode>MUG-014</ItemCode><Qty>1</Qty><UnitPrice>8.50</UnitPrice></Line>
</Lines>
</SalesOrder>
Πριν φτιάξετε οτιδήποτε, γράψτε τους κανόνες σε έναν μικρό πίνακα: πεδίο προορισμού, πεδίο πηγής, κανόνας. Για
παράδειγμα OrderDate ← createdAt, μετατροπή σε τοπική ημερομηνία dd/MM/yyyy· PaymentMethod ← payment, lookup.
Αυτός ο πίνακας είναι η προδιαγραφή του mapping και το σημείο αναφοράς για το testing.
Υλοποίηση στο Boomi
Στο Boomi, η δομή κάθε εγγράφου περιγράφεται από ένα profile, και ο μετασχηματισμός ανάμεσα σε δύο profiles είναι ένα Map component, που μπαίνει σε ένα process μέσω του shape Map.
Βήμα 1: Profiles από δείγματα
- Δημιουργήστε ένα νέο Profile component τύπου JSON. Χρησιμοποιήστε την επιλογή import και διαλέξτε ένα αρχείο με
την παραπάνω παραγγελία. Το Boomi φτιάχνει το δέντρο των στοιχείων, με το
linesως επαναλαμβανόμενο array. - Ελέγξτε τα στοιχεία που δημιουργήθηκαν. Ορίστε τύπο δεδομένων όπου μετράει:
qtyκαιpriceως αριθμούς,createdAtως date/time με τη μάσκα που αντιστοιχεί στη μορφή του e-shop. Αφήστε ταidκαιskuως χαρακτήρες, ώστε να μη χαθούν αρχικά μηδενικά σε κωδικούς. - Δημιουργήστε ένα Profile component τύπου XML και κάντε import το XSD του ERP αν το έχετε, αλλιώς ένα δείγμα XML παραγγελίας. Το XSD είναι καλύτερο: φέρνει υποχρεωτικά πεδία, μήκη και τύπους.
- Βεβαιωθείτε ότι το
<Line>είναι επαναλαμβανόμενο (max occurs μεγαλύτερο από ένα). Αν το import έγινε από δείγμα με μία μόνο γραμμή, ίσως χρειαστεί να το διορθώσετε χειροκίνητα.
Χρησιμοποιήστε δείγμα με πραγματικούς ελληνικούς χαρακτήρες. Είναι ο φθηνότερος τρόπος να βρείτε νωρίς προβλήματα κωδικοποίησης.
Βήμα 2: Το Map
Δημιουργήστε ένα νέο Map component και ορίστε το JSON profile ως πηγή και το XML profile ως προορισμό. Μετά συνδέστε τα πεδία:
- Απευθείας συνδέσεις. Σύρετε το
idστοExternalRef, τοcustomer/idστοCustomerCode, τοcustomer/billing/cityστοBillCity. - Γραμμές. Συνδέστε
lines/skuμεLine/ItemCode,qtyμεQty,priceμεUnitPrice. Επειδή και οι δύο πλευρές είναι επαναλαμβανόμενες, το Boomi δημιουργεί ένα<Line>για κάθε στοιχείο του array.
Βήμα 3: Map functions
Οι map functions μπαίνουν ανάμεσα σε πεδία πηγής και προορισμού και μετασχηματίζουν τις τιμές στη διαδρομή. Τις προσθέτετε από την περιοχή functions του map.
Μορφή ημερομηνίας. Προσθέστε μια function Date Format (στην κατηγορία ημερομηνιών). Ορίστε τη μάσκα εισόδου
ώστε να ταιριάζει στο createdAt και τη μάσκα εξόδου dd/MM/yyyy. Εναλλακτικά, αν και τα δύο στοιχεία των profiles
είναι τύπου date/time με τις δικές τους μάσκες, το Boomi μετατρέπει αυτόματα από τη μία μάσκα στην άλλη όταν τα
συνδέσετε απευθείας. Διαλέξτε μία προσέγγιση και κρατήστε τη σταθερά.
Εδώ υπάρχει μια παγίδα: το createdAt είναι σε UTC. Μια παραγγελία στη 01:30 ώρα Αθήνας είναι ακόμη την προηγούμενη
μέρα σε UTC. Αν η ημερομηνία παραγγελίας στο ERP πρέπει να είναι η τοπική, μετατρέψτε τη ζώνη ώρας πριν από τη
μορφοποίηση. Ανάλογα με την έκδοση, αυτό γίνεται με μάσκες ημερομηνίας που περιλαμβάνουν offset ή με μια μικρή
scripting function· ελέγξτε το με παραγγελία λίγο μετά τα μεσάνυχτα.
Συνένωση. Προσθέστε μια function String Concat (στην κατηγορία strings), συνδέστε firstName και lastName ως
εισόδους, ορίστε κενό ως διαχωριστικό και συνδέστε την έξοδο στο CustomerName.
Lookup. Για τους τρόπους πληρωμής, η πιο γρήγορη επιλογή είναι μια function Simple Lookup: ένας μικρός πίνακας
δύο στηλών μέσα στο map, για παράδειγμα card → 07, cod → 03, bank → 06. Συνδέστε το payment στην είσοδό
της και την έξοδο στο PaymentMethod.
Το Simple Lookup αρκεί για ένα πρωτότυπο. Για κωδικούς που αλλάζουν ή διαφέρουν ανά περιβάλλον, χρησιμοποιήστε Cross Reference Table· το δείχνουμε στο Μετάφραση κωδικών ανάμεσα σε συστήματα με τα Cross Reference Tables του Boomi.
Προεπιλογές. Για πεδία προορισμού με σταθερή τιμή, όπως ο κωδικός εταιρείας, χρησιμοποιήστε default value στο στοιχείο προορισμού αντί για function.
Βήμα 4: Το map μέσα σε process
Φτιάξτε ένα process για δοκιμές: ένα shape Start χωρίς δεδομένα, ένα shape Message με το δείγμα JSON, μετά το shape Map με το map σας, και ένα shape Stop. Στην παραγωγή, το Message θα αντικατασταθεί από τον connector ή τον listener του e-shop, αλλά όσο φτιάχνετε το map θέλετε σταθερή, επαναλήψιμη είσοδο.
Μια πρακτική σημείωση για το shape Message: αντιμετωπίζει τις αγκύλες { } ως placeholders μεταβλητών, οπότε το JSON
πρέπει να μπει μέσα σε μονά εισαγωγικά για να διαβαστεί αυτούσιο. Κάθε απόστροφος μέσα στο JSON πρέπει τότε να
διπλασιαστεί.
Βήμα 5: Testing
- Πατήστε Test, διαλέξτε test runtime (ένα Atom ή ένα test cloud διαθέσιμο στον λογαριασμό σας) και τρέξτε.
- Όταν τελειώσει η εκτέλεση, επιλέξτε το shape Map και ανοίξτε το έγγραφο που βγήκε από αυτό. Συγκρίνετε το XML με την αναμενόμενη παραγγελία παραπάνω.
- Ελέγξτε όσα συνήθως πάνε στραβά: ελληνικοί χαρακτήρες ανέπαφοι, δύο στοιχεία
<Line>, τιμές με τελεία ως υποδιαστολή,OrderDateστη σωστή μορφή και μέρα. - Αλλάξτε το δείγμα και ξανατρέξτε: άγνωστος τρόπος πληρωμής, χωρίς
lastName, παραγγελία στις 23:50 UTC. Σημειώστε τι κάνει το map σε κάθε περίπτωση και αποφασίστε αν αυτό θέλετε.
Τα ακριβή ονόματα των panels στο Test mode μπορεί να αλλάζουν από έκδοση σε έκδοση, αλλά η ιδέα μένει ίδια: κάθε shape κρατά τα έγγραφα που πέρασαν από αυτό, ώστε να βλέπετε πού χάλασε μια τιμή. Περισσότερα στο Testing των Boomi processes κατά την ανάπτυξη.
Πριν βγείτε σε παραγωγή
- Αποφασίστε τι γίνεται με άγνωστους κωδικούς. Ένα lookup χωρίς αντιστοίχιση επιστρέφει κενή τιμή. Συνήθως θέλετε η παραγγελία να αποτύχει καθαρά, για παράδειγμα με ένα shape Decision ή Business Rules μετά το map.
- Ελέγξτε τα μήκη απέναντι στο ERP. Αν το
CustomerNameέχει όριο 50 χαρακτήρων, αποφασίστε αν θα κόβετε ή θα απορρίπτετε, και κάντε το συνειδητά. - Κρατήστε τα δείγματα. Αποθηκεύστε τα δείγματα μαζί με την τεκμηρίωση του process. Είναι τα regression tests σας όταν αλλάξει το e-shop ή το ERP.
- Κρατήστε την προδιαγραφή συγχρονισμένη. Όταν αλλάζετε το map, ενημερώνετε τον πίνακα, και αντίστροφα.
Συνοψίζοντας
Ένα καλό mapping ξεκινά με ακριβή περιγραφή και των δύο μορφών και έναν κανόνα για κάθε πεδίο. Στο Boomi, τα profiles κρατούν τις περιγραφές, το Map κρατά τους κανόνες, οι map functions χειρίζονται μορφές, συνενώσεις και lookups, και το Test mode σάς αφήνει να ελέγχετε κάθε αλλαγή με πραγματικά δείγματα. Για τη συνολική εικόνα των μορφών και των παγίδων, δείτε τον οδηγό για data mapping και μορφές δεδομένων.