Executive Summary
In high-growth retail, operational success relies on a clear division of labor: SAP ECC orchestrates the complex back-office logistics of warehouse dispatch, while Shopify serves as the customer-facing engagement layer. The friction typically begins post-dispatch; when tracking numbers and carrier updates remain siloed within SAP, the “visibility gap” leads to a surge in support tickets and stale “unfulfilled” statuses on the storefront.
Transitioning from logic to execution, this breakdown provides a comprehensive look at APPSeCONNECT’s SAP-to-Shopify workflow. We prioritize technical transparency, highlighting the specific function modules and data structures that eliminate redundant processing. This content serves as a blueprint for technical teams, offering a granular view of the design decisions required to automate tracking and carrier updates with absolute precision.
Introduction
Business Challenge
Retail organizations often maintain a divided digital landscape where SAP ECC orchestrates back-office shipping and logistics records, while Shopify handles front-end confirmation and customer messaging. Post-purchase, the customer’s primary requirement is transparency, specifically involving tracking updates and a clear order progress interface.
If teams rely on manual intervention to bridge these systems in Shopify, they lose significant time and frequently generate mistakes, including incorrect carrier selection and missed updates across various orders.
When fulfillment statuses fall out of sync, support teams struggle because the ERP indicates a dispatched item while the storefront shows a pending status. This disconnect leads to increased support volume and prevents the organization from maintaining a single source of truth across the order-to-cash lifecycle while teams waste resources verifying statuses.
To avoid this, the tracking and shipment data in SAP must flow automatically to Shopify.
Solution Overview
APPSeCONNECT acts as the integration layer between SAP ECC and Shopify.
When the warehouse dispatch process creates shipment records in SAP ECC, APPSeCONNECT automatically:
- Detects new tracking records using a date and time boundary.
- Extracts tracking number, carrier details, and Shopify order references.
- Sends that information to Shopify through Shopify REST APIs.
- Updates the sync control mechanism so the same record is not processed again.
Shopify marks the order as fulfilled, stores the tracking number, triggers shipping notifications, and stays aligned with SAP ECC.
System Architecture
Component Overview
The integration has three main parts.
SAP ECC (Source System)
SAP ECC is the system of record for shipping operations. Shipment tracking details are stored in custom tables. These tables are usually populated by warehouse programs or shipping execution processes.
A custom function module exposes tracking data to external systems. APPSeCONNECT calls this function module remotely. SAP also maintains a control table that stores the last successful sync timestamp. This timestamp controls incremental extraction.
APPSeCONNECT (Integration Middleware)
APPSeCONNECT runs the integration workflow and bridges SAP’s on-premise environment with Shopify’s cloud environment.
In practice, APPSeCONNECT:
- Runs scheduled jobs on a defined interval.
- Calls SAP function modules using RFC connectivity.
- Retrieves the incremental tracking dataset.
- Transforms the data into Shopify’s API structure.
- Sends fulfillment updates to Shopify using REST calls.
- Logs execution results and supports retries where needed.
Shopify (Destination System)
Shopify receives tracking data through its fulfillment APIs.
Once Shopify accepts the update, it:
- Marks the order as fulfilled (or updates the fulfillment object).
- Associates tracking numbers with specific line items or shipments and triggers automated customer notification emails containing tracking links.
- Updates the merchant admin view and the customer order tracking page.
This keeps Shopify’s order view consistent with what SAP ECC already knows.
SAP ECC Data Model
Core Database Objects
The solution relies on custom SAP Z-tables built to store and expose shipment tracking information.
ZVTR_TRACKING: Shipment Tracking Repository
This table stores the core shipment tracking details. Each row represents a shipment record.
| Field Name | What It Stores | Type |
|---|---|---|
| REF1 | Shopify Order Web ID (unique identifier) | String |
| REF2 | Shopify Order Name (customer-facing order number) | String |
| TRAKCN | Carrier tracking number | String |
| Carrier Code | Carrier identifier, such as UPS or FedEx | String |
| ERDAT | Shipment creation date | Date |
| Time | Shipment creation time used for incremental sync | Time |
A key behavior to understand is how tracking numbers are created in real operations. Warehouses often create shipments in batches. A group of packages may be processed at the same moment. This can result in multiple records sharing the same ERDAT and Time value.
This matters because the integration uses time as the selection boundary. If many records share a timestamp, they must be handled carefully in one run.
ZAPSE_TRCK_SYNC: Synchronization Control
This table serves as the persistent repository for the specific date and time of the most recent successful integration cycle, effectively establishing the authoritative “lower boundary” for all subsequent data retrieval efforts.
For instance, should the recorded timestamp be 10:30:00, the logic dictates that the following run captures exclusively those records generated after that precise moment. Once the system successfully completes the data extraction phase, the timestamp is immediately refreshed to reflect the new execution time, thereby shifting the synchronization window forward to ensure no data is omitted or duplicated in future cycles.
Function Module Logic
ZAPPS_TRACKING_NUMBER_UPDATE
SAP exposes shipment tracking data through a custom ABAP function module. The module is called ZAPPS_TRACKING_NUMBER_UPDATE.
This function module is where SAP prepares the dataset that APPSeCONNECT will consume.
The main steps are:
- Read the last sync timestamp from ZAPSE_TRCK_SYNC.
- Run a SELECT query on ZVTR_TRACKING.
- The filter uses ERDAT and Time.
- Only records newer than the stored boundary are selected.
- Build a structured dataset.
- The dataset includes Shopify order references.
- It includes carrier and tracking information.
- Return the dataset to the caller.
- APPSeCONNECT receives this dataset over RFC.
- Update the timestamp in ZAPSE_TRCK_SYNC.
- The timestamp reflects the current execution time.
This function module can be viewed and tested in SAP ECC using transaction code SE37.
One important detail is the timing of the timestamp update. The timestamp updates after extraction, not after Shopify confirms that each record was accepted. This choice is intentional. It improves performance and keeps logic simple, but it also affects how errors must be handled.
Integration Workflow
End-to-End Process Flow
This section describes what happens from the moment a shipment is created in SAP until Shopify shows the tracking number.
Step 1: Shipment Creation in SAP ECC
When goods are dispatched, SAP shipping execution programs create shipment records.
These programs populate ZVTR_TRACKING with:
- Tracking number returned by the carrier process.
- Carrier code.
- Shopify order references (REF1 and REF2).
- Creation date (ERDAT) and time.
Depending on the warehouse setup, this may happen in real time or in scheduled batches.
Step 2: APPSeCONNECT Job Execution
APPSeCONNECT runs a scheduled job. Many deployments run it every 15 to 30 minutes. The exact timing can be changed.
Each job run triggers an RFC call to ZAPPS_TRACKING_NUMBER_UPDATE in SAP.
Step 3: Incremental Data Retrieval
The SAP function module reads the last boundary from ZAPSE_TRCK_SYNC.
It then selects all tracking records created after that boundary.
This “delta” approach keeps the data set small and focused. SAP does not need to scan old records repeatedly. APPSeCONNECT does not need to process the same shipment twice.
Step 4: Data Transformation and Mapping
APPSeCONNECT receives the SAP dataset. Before sending to Shopify, the data usually needs formatting.
Common transformations include:
- Mapping SAP carrier codes to Shopify-recognized carrier values.
- Building a tracking URL when the carrier supports a standard URL pattern.
- Formatting the payload in Shopify’s JSON structure.
This is also where APPSeCONNECT matches the shipment to the correct Shopify order. It uses REF1 (Shopify Order Web ID) as the lookup key.
Step 5: Shopify API Transmission
APPSeCONNECT sends the transformed payload to Shopify through REST API calls.
It manages:
- Authentication.
- Request creation.
- Response handling.
- Error capture.
If Shopify accepts the update, it records the tracking number and updates fulfillment status.
Step 6: Timestamp Update
After SAP extracts the dataset, the function module updates the timestamp in ZAPSE_TRCK_SYNC.
This update happens after the retrieval step, not after Shopify confirms each shipment update.
This choice makes the extraction process fast and consistent. It also means failed transmissions must be handled by monitoring and retry logic. Otherwise, a record could be missed in future runs if the timestamp moves past it.
Critical Design Considerations
Timestamp-Based Synchronization Model
This integration uses a timestamp-driven incremental model. It does not use record IDs. It does not use a processed flag on each row.
This approach has clear benefits.
Scalability: The system can handle high shipment volumes because each run reads only new records.
Simplicity: No extra flags are stored on individual tracking rows, since the control table provides a single boundary.
Database efficiency: Timestamp comparisons are lightweight and easy to index and optimize.
But there is also a trade-off. If the timestamp boundary advances and some records fail during Shopify transmission, those records may not be selected again in future runs. This is why monitoring and exception handling is critical.
Batch Creation and Timestamp Collisions
Warehouses often create many shipments at the same moment.
That means multiple rows in ZVTR_TRACKING can share the same ERDAT and Time.
This can cause “timestamp collisions.”
The integration design accounts for this pattern:
- All rows sharing the same timestamp are pulled in the same run.
- Records are processed in a predictable order.
- Shopify receives each tracking update in sequence.
Most SAP systems store time with second-level granularity. For most warehouses, this is enough. Very high-volume environments may require extra control if thousands of shipments are created within the same second.
Order-to-Shipment Cardinality
A single Shopify order can map to many shipments in SAP.
This happens in normal operations.
- A large order may be split into multiple packages.
- Items may ship from different warehouses.
- Items may ship on different days.
- Different carriers may be used for different items.
Shopify supports multiple shipments through multiple fulfillment objects under one order. The integration sends each tracking record to Shopify, one by one. Shopify groups them under the same order. Customers can then see all tracking numbers tied to their order.
Data Consistency Assumptions
The integration assumes that SAP shipping data is clean at the source.
Key assumptions include:
- Tracking rows are complete when created.
- REF1 and REF2 map to real Shopify orders.
- Carrier codes match expected values and can be mapped.
- Tracking numbers are valid.
If any of these assumptions fail, Shopify can reject the update. APPSeCONNECT must then log the failure and support correction.
This is why upstream data quality checks are important. If the SAP shipping process produces incomplete values, the integration will surface errors downstream.
Operational Characteristics
Execution Timing and Frequency
The sync job frequency depends on business needs. Some businesses want near real-time shipment visibility and may run the job every 10 to 15 minutes. Others run it every 30 to 60 minutes for standard operations. Some setups use event-driven triggers, where warehouse milestones trigger the sync.
The timing choice should consider:
- Customer experience expectations.
- SAP and middleware resource usage.
- Shopify API rate limits.
- Typical daily shipment volume.
Performance and Scalability
- The incremental model keeps performance stable.
- Even if the tracking table has millions of historical rows, the query focuses only on new rows since the last boundary.
- Indexes on ERDAT and Time help keep retrieval fast.
- Network usage also stays low because only delta data is transmitted. This matters more as shipment volume grows.
Conclusion
Shipment and tracking synchronization between SAP ECC and Shopify solves a clear operational gap. SAP holds the truth about what shipped. Shopify needs that truth so customers and support teams see accurate status.
This integration uses APPSeCONNECT as a middleware layer. It pulls incremental tracking data from SAP using a timestamp boundary. It transforms that data into Shopify’s fulfillment structure. It sends tracking updates through Shopify REST APIs.
The design is built for efficiency and scale. It keeps queries small. It avoids per-record flags. It supports one order with many shipments.
The same design also requires careful monitoring. Because the timestamp boundary advances after extraction, errors during transmission must be detected and resolved. When monitoring is in place, the model provides a stable and efficient way to keep fulfillment status aligned.
Teams implementing this integration benefit most when they understand the basics:
- How SAP tables store tracking details.
- How the function module selects records.
- How timestamp boundaries control the delta.
- How Shopify represents multiple shipments.
With that understanding, teams can configure job frequency, set alerting, and troubleshoot issues with clarity.
About APPSeCONNECT
As a comprehensive iPaaS solution, APPSeCONNECT serves as the central nervous system for business technology, linking enterprise software, databases, and various cloud services into a unified ecosystem. The platform’s primary strength lies in its pre-configured integration suites for major ERPs like SAP, alongside extensive native support for Shopify, CRMs, and specialized business applications. By deploying an intelligent workflow engine, the platform orchestrates the automated transit of critical data, which significantly reduces the administrative burden of manual input and guarantees that all connected systems remain in total synchronization to support a single source of truth.