Skip to content

[Shopify] API 2026-01 uptake#6244

Merged
onbuyuka merged 7 commits into
mainfrom
features/617321-ShpfyUptake202601
Jan 29, 2026
Merged

[Shopify] API 2026-01 uptake#6244
onbuyuka merged 7 commits into
mainfrom
features/617321-ShpfyUptake202601

Conversation

@onbuyuka
Copy link
Copy Markdown
Contributor

@onbuyuka onbuyuka commented Jan 21, 2026

Shopify API 2026-01 Upgrade

Summary

This PR upgrades the Shopify Connector to API version 2026-01, addressing deprecations, new features, and breaking changes announced in the Shopify changelog.

Changes

Inventory Sync (Breaking Change)

  • Mutation upgrade: Replaced deprecated inventorySetOnHandQuantities with inventorySetQuantities using name: "on_hand" and reason: "correction"
  • Idempotency support: Added @idempotent(key: "...") directive to inventory mutations for safe retries
  • Concurrency handling: Added changeFromQuantity: null to opt-out of compare-and-swap (BC is the authoritative source)
  • Retry logic: Auto-retry once on IDEMPOTENCY_CONCURRENT_REQUEST or CHANGE_FROM_QUANTITY_STALE errors, then log to skipped records

50,000 Inventory Quantities Limit

  • Added batching logic in AddProductVariants to respect the new limit of 50,000 inventory quantities per mutation
  • GetMaxVariantsPerBatch() calculates max variants based on 50000 div LocationCount
  • Made GetDefaultLocationCount() and GetMaxVariantsPerBatch() internal for testability

Bulk Operations

  • Removed deprecated currentBulkOperation query (now uses GetBulkRequest by ID)
  • Deleted ShpfyGQLBulkOperations.Codeunit.al and removed GetCurrentBulkOperation enum value

Return Reasons

  • Replaced deprecated returnReason enum with returnReasonDefinition { name handle }
  • Added Return Reason Name and Return Reason Handle fields to Shpfy Return Line table
  • Marked old Return Reason enum field as obsolete

Payouts

  • Added externalTraceId field to payout queries and Shpfy Payout table
  • Made ImportPayout() internal for testability

Product Variants

  • Removed deprecated taxCode field from variant queries and mutations
  • Marked Tax Code field as obsolete on Shpfy Variant table and page

Metafields

  • Added article_reference metafield type with ShpfyMtfldTypeArticleRef.Codeunit.al

Test Changes

  • New: ShpfyInventoryExportTest.Codeunit.al - Tests for idempotency, retry logic, and skipped record logging
  • New: ShpfyInventorySubscriber.Codeunit.al - Mock subscriber with configurable retry scenarios
  • New: ShpfyInventoryRetryScenario.Enum.al - Enum for test scenarios (Success, FailOnceThenSucceed, AlwaysFail)
  • New: ShpfyVariantBatchingTest.Codeunit.al - Tests for 50K limit batch calculations
  • Updated: ShpfyOrderRefundsHelper.Codeunit.al - Uses new return reason fields
  • Updated: ShpfyPaymentsTest.Codeunit.al - Added externalTraceId test
  • Updated: ShpfyBulkOpSubscriber.Codeunit.al - Removed obsolete currentBulkOperation handler
  • Deleted: CurrentBulkOperationCompletedResult.txt, CurrentBulkOperationRunningResult.txt

Breaking Changes

  • inventorySetOnHandQuantities mutation replaced - no action required for users
  • returnReason field deprecated - users should reference Return Reason Name instead
  • taxCode field deprecated - users relying on this field should migrate away

References

Fixes AB#617321

@onbuyuka onbuyuka changed the title Shopify API 2026-01 uptake [WIP][Shopify] API 2026-01 uptake Jan 21, 2026
@github-actions github-actions Bot added the AL: Apps (W1) Add-on apps for W1 label Jan 21, 2026
@github-actions github-actions Bot added this to the Version 28.0 milestone Jan 21, 2026
@onbuyuka onbuyuka marked this pull request as ready for review January 26, 2026 10:33
@onbuyuka onbuyuka requested review from a team as code owners January 26, 2026 10:33
@onbuyuka onbuyuka changed the title [WIP][Shopify] API 2026-01 uptake [Shopify] API 2026-01 uptake Jan 26, 2026
@onbuyuka onbuyuka enabled auto-merge (squash) January 26, 2026 15:20
@onbuyuka onbuyuka merged commit 4036d23 into main Jan 29, 2026
52 checks passed
@onbuyuka onbuyuka deleted the features/617321-ShpfyUptake202601 branch January 29, 2026 13:53
onbuyuka added a commit that referenced this pull request May 27, 2026
On main, the backfill test added by PR #7633 reuses the 2-arg GetRandomPayout(Id, ExternalTraceId) helper introduced by the API 2026-01 uptake (PR #6244), passing a throwaway value for the externalTraceId. On releases/27.x #7633 was backported before the uptake, so the cherry-pick produced two overloaded GetRandomPayout procedures, each with a local 'PayoutGidTxt' Label. AL's translation ID derivation collapses overloads, triggering AL0570.

Mirror main: drop the 1-arg overload and have UnitTestImportPayoutBackfillsShopCode call the 2-arg helper.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AL: Apps (W1) Add-on apps for W1

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants