Skip to content

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.

SituationCommand
Change an existing orderStoreOrdersNormal with the order’s positive Id — but only after retrieving it
Just read an order, no changesRequestOrdersNormal instead
Create a brand-new orderSee Order intake instead

The update workflow is always:

  1. Retrieve the order with RequestOrdersNormal, filtered to its Id.
  2. 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.
  3. Resend the full edited order in a new StoreOrdersNormal call, keeping the same positive Id.

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.

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.

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.

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.

  • 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.