Authoritative Tutorial on the Jky Assembly/Disassembly Outbound Query Interface: Field Handbook for Yonyou NCC Integration
What Problem Does This Interface Solve
In a Jky-to-Yonyou NCC supply-chain integration, the assembly/disassembly business generates two parallel data streams: the Assembly/Disassembly Order and the Assembly/Disassembly Outbound Order. The latter is responsible for synchronizing the finished-goods vs. raw-material conversion, inventory movement, batch, and cost information into the Yonyou NCC Form-Conversion document in real time. This interface (erp.storage.goodsdocout.v2) is the dedicated incremental query channel for that purpose. It hard-codes the outbound type as inouttype=207 and pulls orders together with their line items based on a creation-time window.
Interface Capability Overview
- Authentication: Jky Open Platform AppKey/AppSecret signature, transmitted via HTTP header. On the Qeasy Data Integration Platform this is fully encapsulated by the Jky adapter, so no manual signing is needed.
- Request structure:
POSTwith a JSON body containingstartDate,endDate,inouttype=207,pageIndex,pageSize, and optional filters (goodsDocNo,warehouseCode,outBillNo,billNo). - Response structure: JSON. The top level carries
data.list(master array) anddata.hasMore. Each master record nests agoodsDocDetailListarray of detail rows. - Pagination & incremental pattern:
pageIndexstarts at 0;pageSizeis recommended at 50.startDatedefaults to the last sync time ({{LAST_SYNC_TIME}}) andendDateto the current time, giving a rolling incremental pull keyed on creation time. - Reference frequency: The scheduled task
1-59/3 6-23 * * *runs every 3 minutes between 06:00 and 23:00 every day.
Typical Field Mapping
| Field | Type | Meaning | Practical Notes |
|---|---|---|---|
| recId | string | Master table system ID | Globally unique. The Qeasy field mapper defaults it to outbound_order_id on the target side for idempotent deduplication. |
| goodsdocNo | string | Outbound business number | One of the reconciliation keys. The safe approach is to use this (not recId) as the cross-system reconciliation number. |
| billNo / sourceBillNo | string | Related order no. / source order no. | When mapping to the NCC form-conversion document, prefer billNo. |
| inouttype / inouttypeName | string | Outbound type code and name | Hard-coded to 207 in this strategy. In Qeasy, set the default in the request-parameter panel so you never accidentally pull 201/202 records. |
| gmtCreate | string | Creation time | Drives the incremental cursor. Time zone is UTC+8; convert to UTC before persisting. |
| warehouseCode / warehouseName | string | Warehouse code and name | Code flows into NCC; the name is display-only. |
| companyCode / companyName | string | Company code and name | Mapped against the NCC organization master; the Qeasy "Master-Data Lookup" node can attach a value set directly. |
| vendCustomerCode | string | Business-partner code | Assembly/disassembly typically involves internal orgs, so an empty value is normal. |
| currencyCode / currencyRate | string | Currency and exchange rate | In cross-currency scenarios, persist the rate as well, otherwise downstream cost will drift. |
| redStatus | string | Reverse-status (1/2/9) | Common pitfall: reverse documents must be filtered or handled by business rules. |
| financeBillStatus | string | Finance status (1/11/21/25/31) | Cost is only stable at 21/25. For form-conversion cost delivery, prefer those two. |
| goodsDocDetailList[].recId | string | Detail-line ID | Combine with the master recId to form a unique row key. |
| goodsNo / skuId / skuBarcode | string | Material code / SKU ID / barcode | Any one suffices; the barcode is the most stable. The Qeasy mapper supports priority fallback. |
| batchNo / batchNumber | string | Batch code / batch number | Mandatory for batch-strict industries (food, pharma); align with the NCC batch master. |
| quantity / unitName | string | Quantity and unit | When units differ, convert using cuValue first. |
| estPrice / estPriceNoTax / estCost / estCostNoTax / estTax | string | Estimated prices and cost / tax (with/without tax) | The "est" prefix means estimated. Real cost comes from transHasTaxAmount after financeBillStatus=21/25. |
| transHasTaxAmount / transNoTaxAmount / transTaxAmount | string | Transaction amounts (with/without tax) and tax | This is the authoritative basis for form-conversion cost delivery. |
| field1 | string | User-defined extension fields | Tick them in the Qeasy "Custom Fields" panel and they pass through transparently. |
How to Configure on Qeasy
- Adapter selection: Choose "Jky" as the data source and the action
erp.storage.goodsdocout.v2for outbound query. - Parameter hardening: In Qeasy's request-parameter panel, fix the default value of
inouttypeto207. BindstartDateandendDateto the built-in variables{{LAST_SYNC_TIME}}and{{CURRENT_TIME}}respectively. - Field mapping: Set the target side to "Write-NoOp" (this strategy is a pure query), but still map
recId,goodsdocNo, andgmtCreateinto an intermediate table so the downstream "Outbound → NCC Form-Conversion" write strategy can reuse them. - Pagination & rate limiting: The Qeasy Jky adapter has built-in
pageSize=50andhasMoreloop logic, so no manual pagination is required. For high-frequency runs, use every-3-minutes as the baseline schedule. - Error retry: On network jitter or throttling, Qeasy automatically retries with exponential backoff. Failed records are routed to a "Pending" queue for manual replay.
Cross-Strategy Practical Lessons
- Hard-code the outbound type: Only 207 records should flow through this channel; otherwise downstream form-conversion documents will receive dirty data such as sales or transfer outbounds.
- Use
goodsdocNoas the business key andrecIdas the technical key: A dual-key strategy is the most robust for cross-system reconciliation and idempotent writes. - The incremental cursor must be
gmtCreate, notinOutDate: Business dates can change on un-approval, while creation time is immutable once persisted. - Batch and expiry are critical for assembly/disassembly: The raw-material
batchNo, the finished-goodsproductionDate,expirationDate, andshelfLifemust all be propagated to NCC unchanged. - Read cost fields only when
financeBillStatusallows: Do not trusttransHasTaxAmountbefore status 21/25, otherwise costs will flap. - Build a unique index on detail lines: Use
master recId + detail recIdas a composite primary key to prevent row overwrites.
Pitfall Recap
- Pitfall 1: Passing
inouttypeas the Chinese string "207-组装拆卸出库". Jky requires the numeric code; passing Chinese returns an empty result set. - Pitfall 2: Ignoring
redStatus=9reverse documents. Without filtering, the downstream ends up with negative cost and phantom inventory reduction. The safe move in Qeasy is to addredStatus != 9in the filter. - Pitfall 3: Using the business date instead of creation time for
startDate. Un-approval then shifts the incremental window and a large batch of records is missed. - Pitfall 4: Setting
pageSizeabove 200. Jky's default ceiling is 50; anything larger returns HTTP 429. Qeasy's adapter defaults to 50, so do not enlarge it manually. - Pitfall 5: Writing both
estCostandtransHasTaxAmountto downstream. The two cost bases collide and reconciliation becomes painful. Always pick one based on the finance status.
When to Use This Interface
This interface is appropriate when assembly/disassembly outbounds from Jky need to be incrementally synchronized into Yonyou NCC form-conversion documents, or when batch, expiry, cost, and tax information must be propagated to a downstream ERP/MES. If you only need a GL summary or a dashboard view, prefer the on-hand inventory query instead — the line-level granularity here would be wasted overhead.