Order update
StoreOrdersNormal also updates existing orders — send the order’s
positive Id instead of a negative one. For creating new orders (and
the shared TEoOrderMx/TEoGoodMx/TEoTaskMx field reference), see
Order intake.
When to use
Section titled “When to use”| Situation | Command |
|---|---|
| Change an existing order | StoreOrdersNormal with the order’s positive Id — but only after retrieving it |
| Just read an order, no changes | RequestOrdersNormal instead |
| Create a brand-new order | See Order intake instead |
Updating an existing order
Section titled “Updating an existing order”The update workflow is always:
- Retrieve the order with
RequestOrdersNormal, filtered to itsId. - Take the returned XML for that one order and change only the fields you want to change — do not remove any XML nodes unless you want that field cleared.
- Resend the full edited order in a new
StoreOrdersNormalcall, keeping the same positiveId.
This is what makes an update different from a create: it’s never a
standalone payload you build from scratch. It’s always an order that
comes back to you — one you (or a colleague) already stored earlier —
now with a change request against it. Below, order 48213 is the same
order created in the order intake example
(Reference PO-2026-00042, one good on two tasks): the client now calls
to say the pickup has to move two hours later.
Retrieving order 48213 returns (abridged — a real response also
includes the read-only fields listed under Key order
fields):
<EoOrderMx Type="TEoOrderMx"> <OrderId Type="TEoKeyIntInfraMx"><Id>48213</Id></OrderId> <ClientNumber>1001</ClientNumber> <Reference>PO-2026-00042</Reference> <Contact>Jan de Vries</Contact> <Goods Type="TEoGoodMxList"> <_TEoListBase_Items> <EoGoodMx Type="TEoGoodMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>55031</Id></GoodId> <Comments>2 pallets general cargo</Comments> <Parts>2.0</Parts> <Weight>480.0</Weight> </EoGoodMx> </_TEoListBase_Items> </Goods> <Tasks Type="TEoTaskMxList"> <_TEoListBase_Items> <EoTaskMx Type="TEoTaskMx"> <TaskId Type="TEoKeyIntInfraMx"><Id>91011</Id></TaskId> <TaskTypeIdEx>1</TaskTypeIdEx> <Address Type="TEoAddress"> <Name>Acme Warehouse</Name> <Street>Havenweg</Street> <Number>12</Number> <PostalCode>3011 XA</PostalCode> <Place>Rotterdam</Place> <CountryCode>NL</CountryCode> </Address> <ContactName>Jan de Vries</ContactName> <Requested Type="TEoDateTimeWindow"> <DateTimeBegin>2026-07-22T08:00:00</DateTimeBegin> <DateTimeEnd>2026-07-22T12:00:00</DateTimeEnd> </Requested> <Instructions>Call on arrival</Instructions> <ReferenceYour>PICKUP-42</ReferenceYour> </EoTaskMx> <EoTaskMx Type="TEoTaskMx"> <TaskId Type="TEoKeyIntInfraMx"><Id>91012</Id></TaskId> <TaskTypeIdEx>2</TaskTypeIdEx> <Address Type="TEoAddress"> <Name>Beta Distribution</Name> <Street>Industrieweg</Street> <Number>88</Number> <PostalCode>5651 GH</PostalCode> <Place>Eindhoven</Place> <CountryCode>NL</CountryCode> </Address> <Requested Type="TEoDateTimeWindow"> <DateTimeBegin>2026-07-22T14:00:00</DateTimeBegin> <DateTimeEnd>2026-07-22T17:00:00</DateTimeEnd> </Requested> <ReferenceYour>DELIVERY-42</ReferenceYour> </EoTaskMx> </_TEoListBase_Items> </Tasks> <GoodsToTasks Type="TEoGoodToTaskMxList"> <_TEoListBase_Items> <EoGoodToTaskMx Type="TEoGoodToTaskMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>55031</Id></GoodId> <TaskId Type="TEoKeyIntInfraMx"><Id>91011</Id></TaskId> </EoGoodToTaskMx> <EoGoodToTaskMx Type="TEoGoodToTaskMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>55031</Id></GoodId> <TaskId Type="TEoKeyIntInfraMx"><Id>91012</Id></TaskId> </EoGoodToTaskMx> </_TEoListBase_Items> </GoodsToTasks></EoOrderMx>To push back the pickup window by two hours, change only the pickup
task’s Requested and resend the whole order — both tasks, the
good, and GoodsToTasks — with all existing positive Ids intact:
<?xml version="1.0" encoding="windows-1252"?><EoCustomLinkStoreOrdersNormal Type="TEoCustomLinkStoreOrdersNormal"> <Data Type="TEoOrderMxList"> <_TEoListBase_Items> <EoOrderMx Type="TEoOrderMx"> <OrderId Type="TEoKeyIntInfraMx"><Id>48213</Id></OrderId> <ClientNumber>1001</ClientNumber> <Reference>PO-2026-00042</Reference> <Contact>Jan de Vries</Contact> <Goods Type="TEoGoodMxList"> <_TEoListBase_Items> <EoGoodMx Type="TEoGoodMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>55031</Id></GoodId> <Comments>2 pallets general cargo</Comments> <Parts>2.0</Parts> <Weight>480.0</Weight> </EoGoodMx> </_TEoListBase_Items> </Goods> <Tasks Type="TEoTaskMxList"> <_TEoListBase_Items> <EoTaskMx Type="TEoTaskMx"> <TaskId Type="TEoKeyIntInfraMx"><Id>91011</Id></TaskId> <TaskTypeIdEx>1</TaskTypeIdEx> <Address Type="TEoAddress"> <Name>Acme Warehouse</Name> <Street>Havenweg</Street> <Number>12</Number> <PostalCode>3011 XA</PostalCode> <Place>Rotterdam</Place> <CountryCode>NL</CountryCode> </Address> <ContactName>Jan de Vries</ContactName> <!-- The change: pickup window pushed back by two hours --> <Requested Type="TEoDateTimeWindow"> <DateTimeBegin>2026-07-22T10:00:00</DateTimeBegin> <DateTimeEnd>2026-07-22T14:00:00</DateTimeEnd> </Requested> <Instructions>Call on arrival</Instructions> <ReferenceYour>PICKUP-42</ReferenceYour> </EoTaskMx> <EoTaskMx Type="TEoTaskMx"> <TaskId Type="TEoKeyIntInfraMx"><Id>91012</Id></TaskId> <TaskTypeIdEx>2</TaskTypeIdEx> <Address Type="TEoAddress"> <Name>Beta Distribution</Name> <Street>Industrieweg</Street> <Number>88</Number> <PostalCode>5651 GH</PostalCode> <Place>Eindhoven</Place> <CountryCode>NL</CountryCode> </Address> <Requested Type="TEoDateTimeWindow"> <DateTimeBegin>2026-07-22T14:00:00</DateTimeBegin> <DateTimeEnd>2026-07-22T17:00:00</DateTimeEnd> </Requested> <ReferenceYour>DELIVERY-42</ReferenceYour> </EoTaskMx> </_TEoListBase_Items> </Tasks> <GoodsToTasks Type="TEoGoodToTaskMxList"> <_TEoListBase_Items> <EoGoodToTaskMx Type="TEoGoodToTaskMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>55031</Id></GoodId> <TaskId Type="TEoKeyIntInfraMx"><Id>91011</Id></TaskId> </EoGoodToTaskMx> <EoGoodToTaskMx Type="TEoGoodToTaskMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>55031</Id></GoodId> <TaskId Type="TEoKeyIntInfraMx"><Id>91012</Id></TaskId> </EoGoodToTaskMx> </_TEoListBase_Items> </GoodsToTasks> </EoOrderMx> </_TEoListBase_Items> </Data></EoCustomLinkStoreOrdersNormal>If you’d omitted Instructions on the pickup task above, it would be
cleared — not left as “Call on arrival” — because the store replaces the
whole task. The same is true one level up: if you’d omitted Goods or
GoodsToTasks entirely, the store would clear the order’s cargo and its
task links, not leave them untouched — a full-record replace applies to
every nested list, not just scalar fields. This is why the delivery task
and the good are resent unchanged above even though neither one is part
of this particular change.
The response is the same EoStoreResultList shape used for creation — see
The store response
on the Order intake page.
Adding a new task or a new good line
Section titled “Adding a new task or a new good line”Extending an existing order works exactly like adding items to a brand-new
one: the negative-Id-means-insert / positive-Id-means-update rule from
creating a new order applies
per item, not per call — it doesn’t matter that the order itself is
being updated (positive OrderId). Existing tasks/goods keep their real
positive Ids; a task or good you’re adding gets an invented negative Id,
in the same resend.
Say the client on order 48213 calls back again, this time to add one more
pallet with its own delivery address, alongside the delivery already going
to Beta Distribution. Resend the full order as usual, with the new good and
task added to their lists and linked via two extra GoodsToTasks entries —
one pairing the new good with the existing pickup task, one pairing it
with the new delivery task:
<EoOrderMx Type="TEoOrderMx"> <OrderId Type="TEoKeyIntInfraMx"><Id>48213</Id></OrderId> <ClientNumber>1001</ClientNumber> <Reference>PO-2026-00042</Reference> <Contact>Jan de Vries</Contact> <Goods Type="TEoGoodMxList"> <_TEoListBase_Items> <!-- existing good, resent unchanged --> <EoGoodMx Type="TEoGoodMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>55031</Id></GoodId> <Comments>2 pallets general cargo</Comments> <Parts>2.0</Parts> <Weight>480.0</Weight> </EoGoodMx> <!-- new good: negative Id --> <EoGoodMx Type="TEoGoodMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>-1</Id></GoodId> <Comments>1 extra pallet</Comments> <Parts>1.0</Parts> <Weight>240.0</Weight> </EoGoodMx> </_TEoListBase_Items> </Goods> <Tasks Type="TEoTaskMxList"> <_TEoListBase_Items> <!-- existing pickup and delivery tasks, resent unchanged --> <EoTaskMx Type="TEoTaskMx"> <TaskId Type="TEoKeyIntInfraMx"><Id>91011</Id></TaskId> <TaskTypeIdEx>1</TaskTypeIdEx> <Address Type="TEoAddress"> <Name>Acme Warehouse</Name> <Street>Havenweg</Street> <Number>12</Number> <PostalCode>3011 XA</PostalCode> <Place>Rotterdam</Place> <CountryCode>NL</CountryCode> </Address> <ContactName>Jan de Vries</ContactName> <Requested Type="TEoDateTimeWindow"> <DateTimeBegin>2026-07-22T08:00:00</DateTimeBegin> <DateTimeEnd>2026-07-22T12:00:00</DateTimeEnd> </Requested> <Instructions>Call on arrival</Instructions> <ReferenceYour>PICKUP-42</ReferenceYour> </EoTaskMx> <EoTaskMx Type="TEoTaskMx"> <TaskId Type="TEoKeyIntInfraMx"><Id>91012</Id></TaskId> <TaskTypeIdEx>2</TaskTypeIdEx> <Address Type="TEoAddress"> <Name>Beta Distribution</Name> <Street>Industrieweg</Street> <Number>88</Number> <PostalCode>5651 GH</PostalCode> <Place>Eindhoven</Place> <CountryCode>NL</CountryCode> </Address> <Requested Type="TEoDateTimeWindow"> <DateTimeBegin>2026-07-22T14:00:00</DateTimeBegin> <DateTimeEnd>2026-07-22T17:00:00</DateTimeEnd> </Requested> <ReferenceYour>DELIVERY-42</ReferenceYour> </EoTaskMx> <!-- new delivery task: negative Id --> <EoTaskMx Type="TEoTaskMx"> <TaskId Type="TEoKeyIntInfraMx"><Id>-300</Id></TaskId> <TaskTypeIdEx>2</TaskTypeIdEx> <Address Type="TEoAddress"> <Name>Gamma Retail</Name> <Street>Kerkstraat</Street> <Number>5</Number> <PostalCode>2011 AB</PostalCode> <Place>Haarlem</Place> <CountryCode>NL</CountryCode> </Address> <Requested Type="TEoDateTimeWindow"> <DateTimeBegin>2026-07-22T15:00:00</DateTimeBegin> <DateTimeEnd>2026-07-22T18:00:00</DateTimeEnd> </Requested> <ReferenceYour>DELIVERY-42B</ReferenceYour> </EoTaskMx> </_TEoListBase_Items> </Tasks> <GoodsToTasks Type="TEoGoodToTaskMxList"> <_TEoListBase_Items> <!-- existing links, resent unchanged --> <EoGoodToTaskMx Type="TEoGoodToTaskMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>55031</Id></GoodId> <TaskId Type="TEoKeyIntInfraMx"><Id>91011</Id></TaskId> </EoGoodToTaskMx> <EoGoodToTaskMx Type="TEoGoodToTaskMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>55031</Id></GoodId> <TaskId Type="TEoKeyIntInfraMx"><Id>91012</Id></TaskId> </EoGoodToTaskMx> <!-- new links: the new good, picked up at the EXISTING pickup task and delivered at the NEW task — mixing a positive and a negative Id in the same link is fine --> <EoGoodToTaskMx Type="TEoGoodToTaskMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>-1</Id></GoodId> <TaskId Type="TEoKeyIntInfraMx"><Id>91011</Id></TaskId> </EoGoodToTaskMx> <EoGoodToTaskMx Type="TEoGoodToTaskMx"> <GoodId Type="TEoKeyIntInfraMx"><Id>-1</Id></GoodId> <TaskId Type="TEoKeyIntInfraMx"><Id>-300</Id></TaskId> </EoGoodToTaskMx> </_TEoListBase_Items> </GoodsToTasks></EoOrderMx>The response’s EoStoreResultList contains one EoStoreResult per item
across every list. The pre-existing good and tasks come back with
StoreResult=srUpdated and IdOld equal to the positive Id you sent for
them; the new good and task come back srInserted, with the newly assigned
positive Id paired to the negative IdOld you invented for them — the
same IdOld-matching
used for a plain create.
Changing invoiced orders
Section titled “Changing invoiced orders”An order at InvoiceStatusId=20 (locked-on-invoice) can still be fully
modified through StoreOrdersNormal, except its articles — MendriX
silently discards any ArticlesSell changes you send and keeps the
article set already on the order, no error returned. Orders merely at
InvoiceStatusId=10 (on-invoice, not yet locked) can still have their
articles changed normally — the lock applies only at status 20.
InvoiceStatus itself can be changed, but has no visible effect until
the invoice is deleted or cancelled.
Scenarios
Section titled “Scenarios”Scenario: an update is rejected because the order wasn’t retrieved
first. You construct a StoreOrdersNormal payload for order 48213
purely from data you already had locally, without calling
RequestOrdersNormal first. The response returns StoreResult=srError
with a StoreDescription indicating the order was not requested before
being stored. Fix: always retrieve, then store — see
Custom Link: rules of engagement.
Gotchas
Section titled “Gotchas”- Missing fields get cleared, not ignored. This is a full-record replace, not a merge-patch. Always resend fields you don’t want to change, using the values you just retrieved.
- Order not found and not previously requested raises a rejection distinct from “order not found at all” — if you see an error about the order not having been requested, retrieve it first, don’t retry blindly.
Related commands
Section titled “Related commands”- Order intake — creating new orders; also hosts
the shared
TEoOrderMx/TEoGoodMx/TEoTaskMxfield reference and the store response shape. RequestOrdersNormal/RequestOrdersNormalIds— retrieval, required before any update.GdxEoStructures.xsd— full field definitions forTEoOrderMxand related types.- Order intake example — a complete envelope-wrapped request/response pair (creation flow).