Integration Field Handbook: Jushuitan to Kingdee Cloud Skylink Supply Chain Integration
What This Interface Solves
In retail enterprises that run both an e-commerce ERP and a finance ERP simultaneously, Jushuitan manages front-end stores, orders, and inventory flow, while Kingdee Cloud Skylink handles back-end materials, suppliers, procurement, and financial accounting. Without integration, you get duplicate item codes, mismatched inventory, lost purchase orders, and sales outbound data that never reaches finance. By aggregating experience across multiple customer deployments, we have distilled this bidirectional sync chain — master data (items/suppliers) → purchase orders/receipts/returns → sales outbound — into a single field handbook so you can master the key design patterns in one read.
Interface Capability Overview
Authentication: Jushuitan uses app_key + app_secret signature-based open-platform authentication; Kingdee Cloud Skylink uses OAuth2 / Bearer Token flows based on data center ID + application ID, with tenant ticket caching for refresh.
Request structure: Jushuitan Qimen/non-Qimen endpoints accept page_index / page_size / modified_begin / modified_end via form or JSON; Kingdee Cloud Skylink uses formId (e.g., BD_MATERIAL, PUR_PurchaseOrder, SAL_OUTSTOCK) plus business parameters and OrgId organizational filters.
Response structure: Both return paginated data (line item arrays + total count). Note that Kingdee wraps results in Result with ResponseStatus success flag, while Jushuitan nests items under data.items with has_next.
Pagination and incremental modes: Jushuitan increments primarily via modified_begin/modified_end, with optional pay_date filtering for sales outbound; Kingdee prefers approval date FApproveDate, supplemented by FModifyDate. Initial deployment must run a full backfill; subsequent runs use LAST_SYNC_TIME sliding windows.
Typical Field Mappings
| Domain | Source Field (example) | Target Field (example) | Type | Practical Notes |
|---|---|---|---|---|
| Item master | Kingdee FNumber | Jushuitan sku_id / i_id | DIRECT | FNumber also serves as style code; unit fixed to Pcs; incremental via FApproveDate; filter F_QKMS_JSTBM not empty |
| Item master | Kingdee FName / FSpecification | Jushuitan name / properties_value | DIRECT | Fall back to code when specification is missing |
| Supplier | Kingdee FNumber | Jushuitan supplier_id | DIRECT | Incremental via FModifyDate; split by org (Lujian/Aili) |
| Purchase order | Kingdee FBillNo | Jushuitan po_id | DIRECT | FEntryTaxRate needs round(/100,2) to decimal |
| Purchase order | FSupplierId_FNumber / FStockId_FNumber | supplier_id / wms_co_id | COLLECTION | Build code mapping tables before syncing business documents |
| Purchase receipt (linked) | Kingdee FSRCBillNo | Jushuitan po_id | COLLECTION | Look up PO mapping; is_confirm=0, excute_confirming=false to prevent auto-approval |
| Purchase receipt (unlinked) | Kingdee FBillNo | Jushuitan po_id | DIRECT | Fall back to own doc number when no source order exists |
| Purchase return | Kingdee FSRCBillNo | Jushuitan remark | TRANSFORM | Concatenate "Kingdee receipt no: xxx" for traceability |
| Other in/out | — | type | CONSTANT | Outbound fills out, inbound fills in |
| Inventory gain/loss | FGainQty / FLossQty | qty | DIRECT | Easy to confuse — verify per policy |
| Sales outbound | Jushuitan io_id | Kingdee FBillNo | DIRECT | FBillTypeID fixed to XSCKD01_SYS |
| Sales outbound | Jushuitan shop_id | Kingdee FCustomerID | COLLECTION | Shop-to-customer mapping required; split by store |
| Sales outbound | Jushuitan so_id / l_id / logistics_name | Kingdee FSALECHANNEL / custom fields | DIRECT | Custom field names start with F_QKMS_; model them in Kingdee first |
How to Configure on Qeasy
In the Qeasy Data Integration Platform, this solution is typically split into three layers: a Jushuitan connector, a Kingdee Cloud Skylink connector, and orchestration. The Jushuitan connector ships with built-in templates for jushuitan.saleout.list.query and similar endpoints — you can pick a template and adjust the shop_id filter; the Kingdee connector provides predefined schemas for BD_MATERIAL, PUR_PurchaseOrder, SAL_OUTSTOCK, and more, with OrgId bound as a connection attribute.
Code mappings (item / supplier / warehouse / shop-to-customer) are maintained in Qeasy's "Field Mapper," which supports manual table creation, SQL sync, and Excel import. The Field Mapper automatically validates source and target field types — for example, converting Kingdee's FEntryTaxRate (percentage) to Jushuitan's tax_rate (decimal) using the custom function round(x/100,2), no coding required.
For scheduling, Qeasy places query-type tasks in the master data group and chains business documents into a DAG based on dependencies. Failure queues and retry backoff policies are built in, so a single failed record never blocks subsequent batches.
Cross-Solution Practical Points
- Master data always comes first: Items, suppliers, and warehouses must be queried and synced ahead of business documents; otherwise
sku_id,supplier_id, andwms_co_idwill not land at the target. - Code mapping is the linchpin: Maintain item, warehouse, and shop-to-customer mapping tables early and support bidirectional lookup. Custom Kingdee fields like
F_QKMS_JSTBMmust be modeled in Kingdee before any Jushuitan-side filtering. - Multi-store requires splitting policies: Different Jushuitan
shop_idvalues map to different Kingdee customers/orgs. Every deployment we have seen creates one policy per store rather than cramming all stores into one rule — this simplifies troubleshooting and differential tax configuration. - Separate linked vs unlinked receipts: When a source PO exists, always look up the mapping table for
po_id; when none exists, fall back toFBillNoaspo_idto avoid target-side validation failures. - Pick the right incremental field: For Kingdee, prefer
FApproveDate(approval date) overFModifyDateto avoid pulling the same modified record repeatedly; for Jushuitan sales outbound, layerpay_dateas a secondary filter. - Do not auto-approve or auto-confirm:
is_confirm=0andexcute_confirming=falseon the Jushuitan side have become industry defaults — write first, then have humans review, which dramatically reduces operational risk.
Pitfall Recap
- Writing
FBillNointopo_idfor linked receipts: In linked scenarios, you must useFSRCBillNoto look up the PO; otherwise you will create orphan data where the receipt exists but no matching purchase order can be found. The safe pattern is to look up first, then fall back only when lookup fails. - Tax rate not divided by 100: Kingdee's
FEntryTaxRateis a percentage (e.g., 13), but Jushuitan expects a decimal (0.13). Passing it through directly doubles amounts — always applyround(x/100,2). - Confusing inventory gain/loss field names:
FGainQtyis gain quantity,FLossQtyis loss quantity. Although only one letter differs, they map to completely opposite inbound/outbound directions in Kingdee. Verify field-by-field per policy. - Missing shop-to-customer mappings: One project configured only 5 of 21 stores, causing the remaining stores' sales outbound to fail outright. Recommend building the table up front and running a coverage validation script.
- Kingdee custom fields not modeled first: Custom Kingdee fields such as
F_QKMS_XKDDH(tracking number) andF_QKMS_KDGS(carrier) are silently dropped if not modeled in Kingdee beforehand, wasting retry quota.
When to Use
This pattern fits medium-to-large retail or distribution enterprises that run both an e-commerce ERP and a finance ERP and need to bridge master data plus purchase/sales documents. If your inventory and financial accounting live in a single system, or master data originates from only one side, you do not need this bidirectional chain — a unidirectional sync suffices. The handbook also applies directly when spanning multiple organizations, stores, and tax entities.