วิธีนำ Work Order จาก SAP เข้าระบบ Tulip (5 แนวทาง)
ภาพรวมสั้น ๆ
SAP API → Tulip Connector & Automation – อัตโนมัติที่สุด
Manual CSV Import – ง่าย เร็ว ไม่ต้องโค้ด
Tulip App Upload + Parser – มี UI ให้ Planner/Operator อัปโหลด
Microsoft Excel Connector – ดึงไฟล์จาก OneDrive/SharePoint อัตโนมัติ
SAP API → Ignition WebDev → Tulip – ใช้ Ignition เป็น Gateway ก่อน
ทั้ง 5 วิธีสุดท้ายจะสร้าง/อัปเดต Tulip Table “Work Order” ซึ่งถูกใช้ต่อโดย Tulip Scheduling App และระบบ OEE ใน Ignition
1) SAP API → Tulip Connector & Automation
หัวข้อ | รายละเอียด |
---|---|
Use case | IT เปิด OData/RFC API ใน SAP, ต้องการ Real-time syncing |
Component | Tulip HTTP Connector (Cloud หรือ Host) + Automation |
Flow | ① Tulip Connector ดึง Work Order (GET) → ② Automation On connector run ตรวจ/แมป field → ③ Upsert เข้า Tulip Table |
Pros | - Fully automated - Latency ต่ำ - ไม่ต้องจับไฟล์ใด ๆ |
Cons | - ต้องตั้งค่า CSRF token, Firewall, Service Account ใน SAP - ต้องมี Error-handling/Retry |
ขั้นตอนย่อ
ขอ Endpoint เช่น /sap/opu/odata/sap/ZPP_WORKORDER_SRV/Orders
สร้าง Connector Function แบบ GET
สร้าง Automation (Schedule ทุก 5 นาที หรือ Webhook Trigger)
ใช้ “Upsert by key (WO_ID)” เพื่อเลี่ยง duplicated records
2) Manual CSV Import (Planner CSV Upload)
หัวข้อ | รายละเอียด |
---|---|
Use case | Pilot / Low-volume; Planner export Excel จาก SAP เอง |
Component | Tulip Table UI (ปุ่ม ⋮ → Import CSV) |
Flow | ① Planner กด Export → ② แก้ไฟล์ถ้าจำเป็น → ③ Import เข้า Tulip Table |
Pros | - Zero code - เริ่มได้ทันที |
Cons | - Manual; เสี่ยง human error - ไม่เหมาะกับความถี่สูง |
Tip: เพิ่ม Tulip Automation “On record created” เพื่อตรวจ duplicated WO_ID แล้วแจ้งเตือนได้
3) Tulip App Upload + Parser
หัวข้อ | รายละเอียด |
---|---|
Use case | ต้องการ UI ให้อัปโหลดใน Shop-floor + Validation ในตัว |
Component | Tulip File Input Widget, Connector Host (Node.js / Python) |
Flow | ① Planner/Operator เลือกไฟล์ใน App → ② Trigger ดึง Signed URL → ③ Connector Function โหลดไฟล์, ใช้ xlsx library แปลงเป็น JSON → ④ Upsert Tulip Table |
Pros | - UX ดี; ทุกอย่างอยู่ใน Tulip App - ใส่ Validation/Logging ได้ละเอียด |
Cons | - ต้องเขียน Code Parsing - File size limit ~5 MB (เพิ่มได้ด้วย chunking) |
ตัวอย่างโค้ด (Node.js ใน Connector Host)
const XLSX = require('xlsx'); exports.run = async ({ fileUrl }) => { const buf = await fetch(fileUrl).then(r => r.arrayBuffer()); const wb = XLSX.read(buf, { type: 'buffer' }); const json = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]); // map fields & POST /tables/work_order/records };
4) Microsoft Excel Connector (Graph API)
หัวข้อ | รายละเอียด |
---|---|
Use case | ไฟล์ Work Order ถูกวางบน OneDrive หรือ SharePoint; ต้อง Sync อัตโนมัติ |
Component | Tulip Cloud Connector + Microsoft Graph API |
Flow | ① Connector GET /drive/items/{file-id}/workbook/worksheets('Sheet1')/usedRange → ② Automation ทุก X นาที ดึงค่าใหม่ → ③ Upsert Table |
Pros | - ไม่ต้องอัปโหลดมือ - เหมาะกับ Planner ทำงานใน Office 365 อยู่แล้ว |
Cons | - ต้องเซ็ต Azure App Registration (OAuth 2.0) - Graph API rate-limits (เลือก poll interval ดี ๆ) |
ตั้ง Scope: Files.Read, offline_access เพื่อ refresh token อัตโนมัติ
5) SAP API → Ignition WebDev API → Tulip / Dashboards
หัวข้อ | รายละเอียด |
---|---|
Use case | ทีม OT เชี่ยวชาญ Ignition, ต้องรวม WO กับ Machine data ใน Layer เดียว |
Component | SAP API → Ignition WebDev (REST) → PostgreSQL → (Option) Tulip Connector ดึงจาก DB |
Flow | ① SAP PUSH POST /api/wo (Ignition) → ② WebDev Script INSERT pgSQL wo_table → ③ Tulip Scheduling App ดึงผ่าน Named Query หรือ Tulip HTTP Connector |
Pros | - Control อยู่ฝั่ง OT - ใช้ Tag/Script เดิมใน Ignition ทำ OEE ได้เร็ว |
Cons | - Data อยู่ในสองที่ (Ignition & Tulip) → ต้องคิด Sync/Single Source of Truth - เพิ่มงานเขียน Query/REST ใน Ignition |
สรุปข้อแนะนำ (สำหรับ Junior Dev)
เริ่มต้นเร็ว (Pilot) → ใช้ Method 2 หรือ 3
ถ้าทีม IT เปิด APIได้ → ย้ายไป Method 1 เพื่อ Automation เต็มรูปแบบ
หาก WO ไฟล์เก็บใน Office 365 → Method 4 เป็นตัวเลือกดี
ถ้า OT อยากรวมทุกอย่างผ่าน Ignition → Method 5 แต่ต้องจัดการ Sync เพิ่ม
Checklist ก่อนลงมือ
ตกลง Schema ของ WorkOrder (Primary Key, Required Fields)
สร้าง Staging Table ถ้าทำ Validation หลายชั้น
ทำ Idempotent Upsert (WO_ID เป็น key)
เตรียม Error Log & Notification channel (Email / Tulip App)
เขียน Unit Test (File parser / API response)
ทำไม “ชุดข้อมูลจาก SAP” ต้องยืดหยุ่นตามวิธีที่ลูกค้าใช้งาน PP
(Thai explanation + English keywords)
Key idea – เราไม่ควรดึงข้อมูลจาก SAP แบบ one-size-fits-all แต่ต้อง “ปรับระดับความละเอียด (granularity)” ให้ตรงกับ business practice ของลูกค้า เพื่อไม่ให้ข้อมูลขาด / เกิน หรือสร้างภาระ mapping ที่ไม่จำเป็น
2 รูปแบบหลักที่พบในโรงงาน (SAP PP/MM)
รูปแบบ | สิ่งที่ SAP ใช้ | ลักษณะข้อมูล | ผลกระทบต่อ Tulip / Ignition |
---|---|---|---|
A. Macro Work Order(“Make X ชิ้นภายในเดือนนี้”) | - Production Order Header (AFKO, AUFK)- BOM reserve (RESB) ไม่เสมอไป | • Aggregate Qty• Period Start / Finish• ไม่สน Operation/Work Center รายละเอียด | • Tulip จะต้อง “explode” เป็น Production Runs เอง (ex. split by shift) • ใช้ตาราง WorkOrder + Run ภายใน Tulip |
B. Fine-scheduled Operations(แต่ละ Operation ผูกกับ Work Center) | - Order Header + Routing Operations (AFVC)- Work Center (CRHD)- Shift (KAPA, Calendar),- Component allocation (RESB) | • Operation-level Qty / Std Time• Scheduled Start/End ต่อ Work Center• มี Shift + Personnel demand | • เราดึง Scheduled Work Orders ตรงเข้าตาราง Scheduled_WO • Station App รู้เลยว่าจะทำ Ops#10, Ops#20 ที่ WorkCenter = “STAMP_01” |
รายการ Field ที่ “ต้องมี” และ “อาจต้องมี” ตามแต่ละรูปแบบ
กลุ่ม Field | Macro WO (A) | Fine-schedule (B) | SAP Table/Field |
---|---|---|---|
Header Key (AUFNR) | ✔ | ✔ | AUFK |
Plant / MRP Area | ✔ | ✔ | AUFK–WERKS / AFKO |
Material (MATNR) | ✔ | ✔ | AUFK–MATNR |
Order Qty (GAMNG) | ✔ | ✔ | AFKO |
Start / Finish Date (GSTRP, GLTRP) | ✔ | ✔ | AFKO |
Status (STAT) | ✔ | ✔ | JEST |
Routing No. (ROUTING) / AUFPL | - | ✔ | AFVC (header) |
Operation No. (VORN, APLZL) | - | ✔ | AFVC |
Work Center (ARBID → CRHD–ARBPL) | - | ✔ | AFVC/CRHD |
Std time / Base qty (VGW01, BMSCH) | - | ✔ | AFVC |
Shift / Capacity load | - | (✔) ถ้าใช้ | KAPA, KBED |
BOM Components (RESB) | (✔) option | (✔) | RESB |
Batch / Lot (CHARG) | (✔) | (✔) | AFKO / MCHB |
⚠️ อย่าลืมถาม ลูกค้าว่าใช้ PPDS หรือ external APS ไหม—ถ้าใช้ APS แล้ว Push Schedule กลับ SAP (/PLAF) เราอาจต้องดึงจาก Planned Order แทน Production Order
วิธี Mapping เข้าระบบ Tulip
ขั้นตอน | Macro WO (A) | Fine-schedule (B) |
---|---|---|
1. ETL Layer | SAP API → Tulip WorkOrder Table ตรง ๆ | SAP API → staging JSON → loop สร้าง Head + Operations |
2. สร้าง Runs / Schedule | Automation แยก WO_ID + Shiftเช่น ทุก 8 ชม. = 1 Run | ใช้ข้อมูล AFVC.Start/Finish เป็น Scheduled_WO record |
3. Station App | ผู้ปฏิบัติงาน “Pick WO + Step” จากใน Tulip เอง | App auto-filter WO ตาม WorkCenter + เวลา |
4. OEE / Andon | Map WO_ID ↔ Station โดยใช้ Run_ID ที่สร้าง | ใช้ Operation_ID เป็น Key; aggregation ง่ายกว่า |
5. Feedback to SAP (optional) | Report Qty_total / Scrap หลังจบเดือน | Post Confirmation (BAPI_PRODORDCONF_CREATE_TT) ต่อ Operation |
วิธีคุยกับลูกค้า / ทีม SAP
ถามระดับ Scheduling:
“Production Planning ใช้แค่ Order Header หรือใช้ Routing & Work Center ด้วย?”
“มี system อื่น (MES, APO, PPDS) ทำ detailed schedule ไหม?”
ขอดู Transaction ตัวอย่าง:
COOIS layout ของโรงงาน—หัวคอลัมน์ใดถูกใช้งานจริง
ถ้าใช้ CM25 / MF50 (capacity planning) → แนวโน้มเป็นรูปแบบ B
ปริมาณข้อมูล & Latency:
Macro: อัปเดตวันละครั้งพอ
Fine-schedule: ต้องการ near-real-time (เช่น ทุก 15 นาที)
Confirm Interface Direction:
One-way (SAP → Tulip) หรือ Two-way (ต้อง Confirm กลับ SAP)
สรุปสำหรับ Junior Dev
เวลาถาม requirement อย่าเก็บแต่ชื่อฟิลด์—ต้องถามวิธีการวางแผนจริง ใน SAP
เตรียม สอง data-model ภายใน Tulip:
WorkOrder_Header (AUFNR)
WorkOrder_Operation (AUFNR+VORN) – สร้างเมื่อเป็นรูปแบบ B
เขียน mapping function ที่เลือกสร้าง Operation record ก็ต่อเมื่อ API payload มี VORN / ARBID.
ทำ Config Flag (mode=HEADER_ONLY vs HEADER_OPS) ใน Connector เพื่อรองรับการเปลี่ยนอนาคตโดยไม่ต้องแก้โค้ดใหญ่