| Item | Description |
|---|---|
| API Chinese Name | Work Order Create (Manufacturing Order Create) |
| API English Name | Work Order Create |
| API Code | wo.create |
| Case Number | 0189142 |
| REST Endpoint | POST /ESB/API/upModetail |
| Call Direction | ERP → MES |
| Trigger Timing | When ERP creates a new work order, sync to MES |
| Main Business Scenario | After ERP creates a manufacturing order, push work order information to MES, MES creates corresponding order, lot and process records |
| Request Format | JSON (Content-Type: application/json) |
| Sync/Async | Synchronous call |
| Transaction Control | Required (setAutoCommit(false) + transactionCommit()) |
WoCreate.java (SFT_ERPIntegrate)RegularESB.upModetail() (SFT_dataImport)ESBapi.java:975-1007 (KMI_Restful)dataMantain.initOpRealRun_SftBommf()Content-Type: application/json
| Field | Type | Required | Description |
|---|---|---|---|
| CompanyID | string | Y | Company code |
| OperationType | int | Y | Operation type (1=Create) |
| content | array | Y | Work order data array |
| Field | Type | Length | Required | Description | MES Field |
|---|---|---|---|---|---|
| wo_no | string | 40 | Y | Work order number (type-number) | CMOID |
| item_no | string | 40 | Y | Item number | ITEMID |
| unit_no | string | 10 | Y | Unit code | UNIT |
| plan_date_s | string | 19 | Y | Planned start date (yyyy-MM-dd HH:mm:ss) | PLANPROCESSST |
| plan_date_e | string | 19 | Y | Planned end date (yyyy-MM-dd HH:mm:ss) | DUEDATETIME |
| wo_qty | decimal | - | Y | Planned quantity | QTY / PLANRELEASEQTY |
| so_no | string | 40 | N | Sales order number | DOID |
| so_seq | string | 10 | N | Sales order line | SEQUENCE |
| factory_no | string | 10 | Y | Factory code | FACTORYID |
| warehouse_no | string | 10 | N | Warehouse code | WAREHOUSEID |
| remark | string | 500 | N | Remarks | DESCRIPTION |
| priority | string | 1 | N | Priority (1=Urgent, 0=No) | MO032 |
| Field | Type | Description |
|---|---|---|
| code | string | 200=Success, 500=Failure |
| msg | string | Processing result message (returns order number on success) |
| query | array | Query result (usually empty array) |
| # | Validation Item | Rule | Error Code |
|---|---|---|---|
| 1 | Order number duplicate | CMOID cannot exist in MODETAIL | JS_0126_00061 |
| 2 | Item exists | ITEMID must exist in ITEM table | JS_0096_00058 |
| 3 | Unit exists | unit_no must exist in UnitBasis | JS_0016_00134 |
| 4 | Factory exists | factory_no must exist in FACTORY | JS_0016_00115 |
| 5 | Warehouse exists | warehouse_no (if provided) must exist in WAREHOUSE | JS_0135_00036 |
| 6 | Quantity validation | wo_qty must be greater than 0 | - |
| Code | Message | Description |
|---|---|---|
| JS_0126_00061 | Work order number already exists, cannot create | CMOID duplicate |
| JS_0096_00058 | Item number does not exist | Item not found in ITEM table |
| JS_0016_00134 | Unit does not exist, please confirm | Unit not found in UnitBasis |
| JS_0016_00115 | Factory code does not exist | Factory not found in FACTORY |
| JS_0135_00036 | Warehouse code does not exist | Warehouse not found in WAREHOUSE |
| remind_001 | Data already exists | Duplicate create |
{
"CompanyID": "COMP01",
"OperationType": 1,
"content": [{
"wo_no": "5101-20260319001",
"item_no": "FG-A001-001",
"unit_no": "PCS",
"plan_date_s": "2026-03-19 08:00:00",
"plan_date_e": "2026-03-20 17:00:00",
"wo_qty": 1000,
"so_no": "SO20260301001",
"so_seq": "001",
"factory_no": "P001",
"warehouse_no": "FG01",
"remark": "Urgent order",
"priority": "1"
}]
}
{
"code": "200",
"msg": "[\"5101-20260319001\"]",
"query": []
}
{
"code": "500",
"msg": "JS_0126_00061",
"query": []
}
| Field | Type | Description |
|---|---|---|
| CMOID | NVARCHAR(40) | PK: Work order number (type-number) |
| MO004 | NVARCHAR(10) | Order type |
| MO005 | NVARCHAR(20) | Order number |
| ITEMID | NVARCHAR(40) | Item number |
| QTY | FLOAT | Planned quantity |
| PLANRELEASEQTY | FLOAT | Planned release quantity |
| RELEASEDQTY | FLOAT | Released quantity |
| STATUS | INT | Status (1=Not started 2=In progress 99=Closed 100=Cancelled) |
| PLANPROCESSST | DATETIME | Planned start date |
| DUEDATETIME | DATETIME | Planned end date |
| FLAG | INT | Version number |
| Field | Type | Description |
|---|---|---|
| ID | NVARCHAR(40) | PK: Lot number (usually=CMOID) |
| MOID | NVARCHAR(40) | FK: Work order number |
| TYPE | INT | Lot type (1=Planned lot) |
| LOTSIZE | FLOAT | Lot quantity (pending release quantity) |
| STATUS | INT | Status (0=Pending release 1=Released) |
| LOCATION | NVARCHAR(20) | Location (usually='release') |
-- Check before create, throw JS_0126_00061 if exists SELECT COUNT(1) FROM MODETAIL WHERE CMOID = N'{wo_no}'
INSERT INTO MODETAIL ( CMOID, MO004, MO005, ITEMID, MO021, MO022, UNIT, PLANPROCESSST, DUEDATETIME, QTY, STATUS, DOID, SEQUENCE, FACTORYID, WAREHOUSEID, DESCRIPTION, MO008, MO012, MO016, MO032, PLANRELEASEQTY, FLAG, LASTMAINTAINUSER, LASTMAINTAINDATETIME ) VALUES ( :CMOID, -- Work order number (type-number) :MO004, -- Order type :MO005, -- Order number :ITEMID, -- Item number :MO021, -- Item name :MO022, -- Specification :UNIT, -- Unit :PLANPROCESSST, -- Planned start date :DUEDATETIME, -- Planned end date :QTY, -- Planned quantity 1, -- STATUS = 1 (Not started) :DOID, -- Sales order number :SEQUENCE, -- Sales order line :FACTORYID, -- Factory code :WAREHOUSEID, -- Warehouse code :DESCRIPTION, -- Remarks 1, -- MO008 = 1 :MO012, -- Order date 0, -- MO016 = 0 :MO032, -- Priority (1=Urgent) :QTY, -- Planned release qty = Planned qty 1, -- FLAG version number :userid, N'{current_time}' )
INSERT INTO LOT ( ID, TYPE, MOID, ITEMID, LOTSIZE, STATUS, UNIT, QTYPER, LOCATION, ERP_OPSEQ, ERP_OPID, ERP_WSID, LOT004, PKQTY, PKQTYPER, LOT007, LOT011, LASTMAINTAINUSER, LASTMAINTAINDATETIME ) VALUES ( :CMOID, -- Lot number = Work order number 1, -- TYPE = 1 (Planned lot) :CMOID, -- MOID = Work order number :ITEMID, -- Item number :QTY, -- LOTSIZE = Planned quantity 0, -- STATUS = 0 (Pending release) :UNIT, -- Unit 1, -- QTYPER = 1 'release', -- LOCATION = 'release' '', '', '', -- ERP process fields (empty) 1, 0, 0, -- LOT004, PKQTY, PKQTYPER '0', 'N', -- LOT007, LOT011 :userid, N'{current_time}' )
-- Check if item has standard routing SELECT ME007 FROM SFT_BOMME, MODETAIL, ITEM WHERE ITEM.ID = MODETAIL.ITEMID AND CMOID = N'{wo_no}' AND RTRIM(ME001) = ITEM.STDROUTEITEMID AND RTRIM(ME002) = ITEM.STDROUTEID -- If has routing, delete then insert DELETE SFT_OP_REALRUN WHERE ID = N'{wo_no}' -- Copy process data from SFT_BOMMF INSERT INTO SFT_OP_REALRUN ( ID, SEQUENCE, OPID, OPDESCRIPTION, ARRIVEQTY, OUTQTY, REWORKQTY, DEFECTQTY, ERP_OPSEQ, PERLOTWORKTIME, STANDARDEQWORKTIME, STANDARDMANWORKTIME, ERP_OPID, ERP_WSID, ERP_FIXEDLEADTIME, ERP_TRANSQTY, ... ) SELECT CMOID, -- ID = Work order number 0, -- SEQUENCE = 0 RTRIM(MF004)+'---'+RTRIM(MF006), -- OPID = Process+Workstation MF008, -- OPDESCRIPTION = Process description 0, 0, 0, 0, -- Quantity fields init to 0 RTRIM(MF003), -- ERP_OPSEQ = Process sequence MF019, -- PERLOTWORKTIME = Per lot work time ... FROM SFT_BOMMF, MODETAIL, ITEM WHERE ITEM.ID = MODETAIL.ITEMID AND CMOID = N'{wo_no}' AND RTRIM(MF001) = ITEM.STDROUTEITEMID AND RTRIM(MF002) = ITEM.STDROUTEID
| Table | Operation | Description |
|---|---|---|
| MODETAIL | INSERT | Work order master |
| LOT | INSERT | Lot record |
| SFT_OP_REALRUN | DELETE + INSERT | Process execution (copy from SFT_BOMMF) |
| SFT_OP_BACK_RUN | DELETE + INSERT | Process routing relationships (network routing) |
ESBapi.java:1007-1046dataMantain.initOpRealRun_SftBommf()UpdateData.InsertOpBackRun()