Functional documentation for the Aiden WMS item mapper (outbound).
This document describes what happens after the mapper is installed: how a SAP Business One (B1) item is turned into an Aiden WMS item master, which master data is required, and which field rules apply. It is intended for end-users and functional consultants.
1. Overview
|
|
|
|---|---|
|
Source |
SAP B1 Item (Service Layer item JSON on Kafka) |
|
Target |
Aiden WMS Item ( |
|
Purpose |
Keep WMS item master in sync with B1 (identity, flags, UoMs, barcodes, dimensions) |
After installation, when an item is published from B1, the mapper produces a WMS item document with:
-
Item code and name
-
Item group name (resolved from B1 group number)
-
Batch / serial / inventory / enabled flags
-
Base unit of measure
-
One or more units (UoM code, name, factor, barcodes, dimensions)
Fixed / technical defaults
|
Topic |
Behavior |
|---|---|
|
Correlation |
Kafka / integration message key → |
|
Publish target |
Header |
|
Consumer start |
Kafka consumer starts only after the first successful master-data load |
2. What the mapper uses as input
2.1 Main payload — B1 item
One Kafka message = one B1 item document, including for example:
-
Identity:
ItemCode,ItemName,ItemsGroupCode -
Flags:
InventoryItem,ManageBatchNumbers,ManageSerialNumbers,ManageSerialNumbersOnReleaseOnly,Frozen -
UoM:
InventoryUoMEntry,InventoryUOM,UoMGroupEntry,SalesUnit,SalesItemsPerUnit,PurchaseUnit,PurchaseItemsPerUnit -
Collections:
ItemUnitOfMeasurementCollection(weights/lengths/volumes per UoM),ItemBarCodeCollection
ItemCode is also used as the integration external application id for monitoring.
2.2 Master data loaded automatically (hourly)
Before items are processed, the integration loads from B1 and keeps in memory:
|
B1 endpoint |
Used for |
|---|---|
|
|
UoM code and name by |
|
|
Alternate/base quantities per UoM group ( |
|
|
Resolve |
|
|
Convert length/width/height/volume unit codes → mm / cc |
|
|
Convert weight unit codes → grams |
Consultant impact: UoM definitions, UoM groups, item groups, and measure units must be correct in B1. Wrong masters → wrong WMS unit codes, factors, or dimensions. After deploy/restart, wait until the first configuration cycle finishes (consumer starts only then).
2.3 Correlation id
Integration message key → correlation.correlationId for end-to-end tracing.
3. Business behavior
3.1 Item group name
WMS data.itemGroup is not the numeric B1 group code.
-
Lookup:
ItemsGroupCodeequals item groupNumber -
Result: corresponding
GroupName(e.g.100→Artikel)
3.2 Boolean flags
|
WMS field |
B1 source |
Rule |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
See below |
isSerial logic:
-
Evaluate
ManageSerialNumbersOnReleaseOnlyas boolean (tYES→true, else false). -
If true (serial only on release): use
ManageSerialNumbersmapped the same way (tYES→true, else false). -
If false: WMS
isSerialis forced tofalse.
So “serial on release only” without treating the item as a full serial item in the main flag can yield isSerial = false while serialOnOutbound = true when release-only is tYES.
Frozen items: Frozen = tYES → isEnabled = false in WMS (item not enabled for warehouse use).
3.3 Base UoM (baseUomCode)
Resolved primarily from the inventory UoM:
-
Prefer B1 UoM master
CodeforInventoryUoMEntrywhen a matchingUnitOfMeasurements.AbsEntryexists. -
Fallbacks involve
InventoryUOMtext, manual/-1UoM entry cases, and optionalm+ name style codes when the structured UoM path is incomplete.
Scenario example: inventory UoM entry 1 → base code "1" (Pak).
3.4 Units array — two regimes
A) UoM group path (preferred when group data is available)
When the item has a usable UoMGroupEntry and matching Unit of Measurement Group definitions:
|
WMS unit field |
Source / rule |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
All |
|
|
From |
B) Fallback simple units (limited / no UoM group path)
When the structured group path does not yield units (count/empty checks in the mapping), the mapper can synthesize units from header fields:
|
Synthesized unit |
Code (typical) |
Name |
|
|---|---|---|---|
|
Inventory |
derived from |
|
|
|
Sales |
from |
|
|
|
Purchase |
from |
|
|
Conditions avoid emitting duplicate/empty sales or purchase units when they match inventory or each other (not-equal / logical checks in MapForce).
For full multi-level packaging in WMS, maintain a proper UoM group and item UoM/barcode collections in B1. Relying only on sales/purchase unit strings is a fallback.
3.5 Dimensions (canonical WMS units)
Per unit, dimensions are normalized to:
|
WMS field |
Unit |
Conversion idea |
|---|---|---|
|
|
grams |
B1 weight × (measure’s mg factor) / 1000 (and related weight-measure lookup) |
|
|
millimetres |
B1 length × length-measure factor to mm |
|
|
millimetres |
same |
|
|
millimetres |
same |
|
|
cubic centimetres |
From length measures / volume fields with scale factors including |
Sources are the item’s ItemUnitOfMeasurementCollection (Weight1/Length1/Width1/Height1/Volume + their unit codes), joined to WeightMeasures / LengthMeasures by unit code.
Missing measures typically yield 0 (as in the scenario target for the base pack when no dimensions are maintained).
3.6 Barcodes
Barcodes are taken from ItemBarCodeCollection and attached to the unit whose UoM entry matches ItemBarCodeCollection.UoMEntry. Multiple barcodes per UoM are supported (array).
4. Field mapping tables
Legend columns: WMS output field | B1 / source input | What happens | Notes
4.1 Correlation
|
WMS output field |
B1 / source input |
What happens |
Notes |
|---|---|---|---|
|
|
Integration message key |
Direct |
Tracing |
4.2 Item header (data)
|
WMS output field |
B1 / source input |
What happens |
Notes |
|---|---|---|---|
|
|
|
Direct |
|
|
|
|
Direct |
|
|
|
|
Lookup group name |
Not the numeric code |
|
|
|
|
|
|
|
|
If-else — see §3.2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Inverted |
|
|
|
Resolve inventory UoM code |
Fallbacks for manual UoM |
|
|
UoM group + item UoM/barcodes or sales/purchase/inventory fallback |
See §3.4 |
|
4.3 Units (data.units[]) — UoM group path
|
WMS output field |
B1 / source input |
What happens |
Notes |
|---|---|---|---|
|
|
|
Via alternate UoM entry |
|
|
|
|
Via alternate UoM entry |
|
|
|
UoM group |
Divide alt ÷ base |
How many base units in this UoM |
|
|
|
Collect barcodes |
|
|
|
Item UoM weight + |
Convert to grams |
|
|
|
Item UoM volume/size + |
Convert to cc |
|
|
|
Item UoM length + |
Convert to mm |
Spelling |
|
|
Item UoM height + |
Convert to mm |
|
|
|
Item UoM width + |
Convert to mm |
|
4.4 Units — fallback path (no full UoM group expansion)
|
WMS output field |
B1 / source input |
What happens |
Notes |
|---|---|---|---|
|
Inventory unit code/name |
|
Emit unit with |
When group path empty |
|
Sales unit |
|
Optional extra unit |
Skipped if equal to inventory under mapping rules |
|
Purchase unit |
|
Optional extra unit |
Skipped if duplicate under mapping rules |
5. Value translations (reference)
|
B1 value |
WMS meaning (typical) |
|---|---|
|
|
|
|
|
|
|
Other / missing on yes-maps |
|
|
|
|
6. What is not mapped / caveats
|
Topic |
Behavior |
|---|---|
|
Prices, VAT, GL accounts, warehouses on item |
Not part of this WMS item contract |
|
Full B1 item UI fields beyond wired schema |
Ignored unless present in MFD |
|
Consumer before config load |
No item processing until masters loaded and route started |
|
Stale masters |
Masters refresh hourly; UoM/group changes may lag up to the timer period |
|
Scenario |
Empty sample targets; behavior follows fallback UoM path in MFD |
|
Dimension spelling |
WMS field is |
7. Example (scenario 1_Item_with_units_of_measure)
B1 input (excerpt)
|
Field |
Example |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UoM group + barcodes |
Multiple UoMs (Pak, 6Pack, Doos, Pallet, Klein Pak) with barcodes |
WMS output (excerpt from 99_target.json)
|
WMS field |
Example |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Unit |
|
|
Unit |
|
|
Unit |
|
|
Unit |
|
|
Unit |
|
8. End-to-end expectation
-
Integration starts and loads UoM, UoM groups, item groups, length/weight measures from B1.
-
Kafka item consumer starts.
-
B1 item change/publish arrives on
from.kafka. -
Mapper builds WMS item JSON (flags, group name, units, barcodes, dimensions).
-
Message is sent to
to.kafkafor WMSItems. -
Use
correlation.correlationIdandItemCodefor support.
9. Implementation checklist for consultants
-
Maintain Item Groups, UoMs, UoM groups, and length/weight measures in B1 before go-live.
-
For multi-level packaging, assign a proper UoM group and item UoM/barcode rows—not only free-text sales units.
-
Understand Frozen → WMS disabled (
isEnabled = false). -
Align serial expectations with
ManageSerialNumbersvsManageSerialNumbersOnReleaseOnly(§3.2). -
Fill item UoM dimensions in B1 if WMS needs weight/volume for logistics.
-
After restart, confirm configuration load completed before expecting item messages to flow.
-
Trace with
correlation.correlationIdanditemId(ItemCode).
10. Source artifacts
|
Artifact |
Role |
|---|---|
|
|
MapForce mapping (field logic) |
|
|
B1 item schema |
|
|
WMS item schema |
|
|
Master data contracts |
|
|
Kafka in/out, |
|
|
Hourly master data + start consumer |
|
|
Runs MapForce with item + masters + correlation |
|
|
Sample source/target |
Generated from the mapping definition and integration behavior in this project. If the MapForce mapping or master-data load changes, update this document.
Maintaining this document
For the original documentation intent, when to update, source-of-truth checklist, and a ready-made refresh prompt, see README.md and the repository AGENTS.md.