Message Maps and Control Numbers
Two partners sending the same message type will not send the same message. A map ties segments of a partner's messages to fields on your documents, per partner, message type and direction. Starter sets now give you working maps for the common flows in one click, and a preview shows what a map would send before anything goes out.
Where to find it
Admin Panel → ERP - Setup:
- EDI — the Maps tab, and Generate & send for previews
Architect Panel → ERP - Trading & Analytics:
- EDI Maps — the map rows as a datastore
- EDI Control Numbers — the sequence counters per partner
Starter sets
On the Maps tab, choose the partner and press Install a starter set. What you get depends on how the partner trades:
- A supplier: X12 850 (or EDIFACT ORDERS) out from a purchase order, and 810 (or INVOIC) in to a supplier invoice.
- A customer: 850 (or ORDERS) in to a sales order, and 855 (ORDRSP) order acknowledgement, 856 (DESADV) ship notice and 810 (INVOIC) invoice out.
Then adjust the rows to the partner's specification. Reinstalling a set that has gained rows since you installed it adds the new rows and re-sequences the set; a complete set is left alone.
What a map row holds
- Partner, Message type, Direction and Document type.
- Order: the segment order on the wire follows it.
- Segment path: where in the message, such as BEG[3] for the third element of BEG, N1[2]@N1[1]=ST for the name in the ship-to N1 segment, or TAG[n.c] for a component.
- Document slot: the field on your document, such as number, doc_date or a line's qty.
- Level: header or line. A wrong level is the usual cause of a header value repeated on every line.
- Transform: date, upper, lower, abs, negate, n2 (implied two decimals, 94.00 as 9400), and the unit-of-measure translations uom_x12 (X12 code list 355: DAY to DA, BOX to BX) and uom_unece (UN/ECE Recommendation 20: HR to HUR, KG to KGM).
- Constant: a fixed value, or a token such as {today}, {time}, {line_count}, {line_seq+1}, {our_id} or {their_id}.
- Required: the message is refused on your side, with a clear reason, if this value is missing.
An optional segment whose every value is empty is left out rather than sent half-filled: an order with no delivery date sends no date segment. Segments made only of fixed constants are always sent.
What the starter sets read
- Inbound supplier invoices: the invoice number goes into the bill's supplier invoice number (which the duplicate check reads), and the order it bills is used to raise the bill from that purchase order at the invoiced prices, so matching sees what was ordered and received. Lines the order does not have, such as freight, are added as charges. An invoice for an order you do not have, or in a different currency from the order, is raised on its own and the message says why.
- Inbound customer orders: the customer's price is recorded as their expectation. An item your price lists price keeps your price, and the message and the order's history say where theirs differs; an item no list prices takes theirs.
- Outbound purchase orders carry your item codes as the buyer's part number.
Previewing a map
On Generate & send, choose the partner, message and document and tick Preview only. You see exactly what the maps would send for that document now. No control number is used and nothing is stored or sent. This is how to check a map change against a real document; an interchange already sent is never changed by a map edit, and Resend repeats the same interchange.
Control numbers
Each partner has counters for interchange and message control numbers, which the partner uses to detect gaps and duplicates. Never reset them: a partner treats numbers it has already seen as duplicates and discards the documents silently. Reusing a control number is refused rather than answered with an older message.
What goes wrong
- Units rejected by the partner: the unit row still uses upper (maps installed before October). Change its transform to uom_x12 or uom_unece.
- Values repeated on every line, or line values collapsed into one: check the Level.
- A send fails with a required value missing: fill the field on the document, or correct the map.
Worked example
A customer partner whose maps were installed in August receives our 855 order acknowledgements with training days in the unit DAY, which their system rejects. The administrator opens Maps, changes the unit row's transform to uom_x12, then uses Generate & send with Preview only on yesterday's sales order: the preview now shows DA. The next 855 goes out correctly.
Recommendations
- Start from a starter set and adjust to the partner's specification.
- Preview before every map change goes live.
- Mark fields the partner requires as Required.
- Never reset a control number without agreeing it with the partner.