Skip to content

Changelog

All notable changes to the XmlExtractor macro are recorded in this file.

The format follows Keep a Changelog, and the versions are Semantic Versioning. The Linnworks Application Store numbers releases its own way; the store number for each release is given under its heading.

[1.1.0] - 2026-09-09

Application Store version 0.20.

Support for the Shopify GraphQL order XML that Linnworks is rolling out, plus robustness fixes found while building the test suite.

The macro stays backward compatible: on the same XML, a path that resolved in 1.0.0 resolves to the same value in 1.1.0, except for the two corrections listed under Fixed, each of which names the paths it affects. On the new Shopify XML, existing paths survive the PascalCase-to-camelCase change, and NoteAttribute. reads the new key/value pairs. Paths that name fields Linnworks renamed, moved into money objects, or no longer includes still need updating. See the Shopify GraphQL migration guide.

Added

  • >> direct-child separator in paths. Order>>id matches only an id directly under Order, and at the start of a path >>id picks the shallowest id in the document. The GraphQL XML nests copies of id, name, and lineItems under fulfillmentOrders before the order's own nodes, so id alone now finds a location id. A path that already contained >> by accident wrote nothing in 1.0.0 and may now resolve.
  • Case-insensitive fallback for path labels. Exact case wins when it exists; otherwise the first label that matches ignoring case is used. Rescues configurations broken only by the PascalCase-to-camelCase change.
  • Backtracking. When the rest of a path finds nothing under a match, or the value is empty, the next match is tried. Prefix lookups skip pairs whose value is empty the same way.
  • NoteAttribute.<key> falls back to a key/value pair when no name/value pair matches, so it reads Shopify GraphQL customAttributes without a configuration change.
  • The log line Order XML format: Shopify GraphQL for orders in the new format.
  • Test suite: raw order XML fixtures from Linnworks' notice and a converter that renders them into the tree the macro reads.

Fixed

  • A prefix lookup no longer throws on an empty label node such as <name />, which the GraphQL XML contains many of. In 1.0.0 the whole order was skipped.
  • A prefix in any level after the first, such as Order>WooMeta.x, logs not found instead of skipping the whole order.
  • The same path listed twice with different spacing is written once instead of skipping the whole order.
  • A failure fetching the order XML, a WebException without a readable response, or a parse error near the start of the XML is logged for that order and the batch continues. In 1.0.0 each of these ended the batch.
  • The parse-error snippet in the log now surrounds the error on multi-line XML. In 1.0.0 the column number was used as an offset into the string.
  • Note de-duplication no longer throws on an existing note with no text.
  • A prefix lookup only accepts a value label that sits next to the key label. In 1.0.0 a product whose name equalled the key could yield a value from a neighbouring subtree. Affects NoteAttribute.<key>, WooMeta.<key>, Metafield.<key>, and VariationSelectedOption.<key>. Every shape seen so far, WooCommerce, Shopify REST and GraphQL, and Etsy, renders the key and value as siblings.
  • A prefix with nothing after the dot, such as NoteAttribute., is not found. In 1.0.0 the empty key matched empty nodes.
  • Prefix detection and label comparison are culture-independent.
  • The Updating N ... log lines count the values written, not the paths requested.
  • The empty-entry warning and the 8-level error are logged once per run, before the first order, instead of once per order.

Changed

  • Label matching in plain paths is no longer strictly case-sensitive. See Added.
  • Internal: the eight duplicated depth cases are one recursive walk, the prefix lookups are table-driven, and the four note targets share one routine with their de-duplication rules unchanged. The 8-level limit is unchanged.

Verification: two Shopify orders in the old format were captured from a Linnworks development site on 2026-09-05 through Orders/GetOrderXmlJSTree and Orders/GetOrderXml. The test converter reproduces the real rendering byte for byte from the raw XML, and the suite runs the macro against those real renderings. The GraphQL cases run against Linnworks' raw XML samples and Shopify's documented responses through that same, now proven, converter. No GraphQL order has been captured from a live account yet; the development site's Shopify integration is still on the old format.

[1.0.0] - 2020

Application Store versions 0.2 through 0.17, published from 2020 until 9 September 2026. The oldest installation still active dates from 22 May 2020. This changelog calls the code as it stood at 0.17 version 1.0.0; the store's own release notes are listed at the end of this entry. The source was imported into this repository on 4 September 2026, unchanged.

Added

  • Extract values from the raw channel order XML using Parent>Child>Leaf paths, up to 8 levels deep.
  • Key/value lookups through the WooMeta., Metafield., VariationSelectedOption., and NoteAttribute. prefixes.
  • Five write targets: ExtendedProperty, InternalNote, ProcessingInternalNote, Note, and ProcessingNote.
  • Format parameter with {{value}} and {{key}} placeholders.
  • Troubleshoot flag that logs the full order XML in three parts.
  • Per-order error handling so one failing order doesn't stop the batch.

Application Store release notes, oldest first

  • Initial release.
  • 0.2: Fixed an error for properties with a leading or trailing space.
  • 0.3: Fixed properties with spaces before and after the comma and the child selector.
  • 0.4: Bug fix for an empty property.
  • 0.5: Saved empty properties as [Empty].
  • 0.6: Stopped saving empty values, on Linnworks' recommendation. A property without a value isn't added.
  • 0.7: Fixed a bug where a property wasn't found when the XML contained invalid characters.
  • 0.9: Extracted values can be written as internal notes, and the written text can be extended, the start of the Format template.
  • 0.10: Paths up to 5 levels.
  • 0.11: Troubleshoot parameter. When true, adds an internal note with the raw XML to send to support. False by default.
  • 0.12: Fixed an issue where some orders failed to extract their data. Troubleshoot now logs the XML for a developer instead of adding a note.
  • 0.13: Note target, a regular, non-internal note.
  • 0.14: No duplicates. An existing property is updated with the latest value; a note with the same text isn't added again.
  • 0.15: Provisional support for WooCommerce metadata, the WooMeta. prefix.
  • 0.16: ProcessingInternalNote and ProcessingNote targets.
  • 0.17: Provisional support for Etsy VariationSelectedOption (beta).