SAP ABAP BDC: การสื่อสารข้อมูลแบบกลุ่ม (Batch Data Communication) คืออะไร?

⚡ สรุปอย่างชาญฉลาด

SAP ABAP BDC (Batch Data Communication) ถ่ายโอนข้อมูลจากระบบเดิมไปยัง R/3 โดยการขับเคลื่อนธุรกรรมมาตรฐานโดยอัตโนมัติ หน้านี้จะอธิบายเกี่ยวกับเซสชันการป้อนข้อมูลแบบกลุ่ม วิธีธุรกรรมแบบคลาสสิกและแบบเรียกใช้ โครงสร้าง BDCDATA เวิร์กโฟลว์ BDC_OPEN_GROUP และตัวบันทึกการป้อนข้อมูลแบบกลุ่ม

  • 🔄 วัตถุประสงค์หลัก: BDC จะป้อนชุดข้อมูลเข้าสู่หน้าจอของธุรกรรมโดยอัตโนมัติ โดยจะดำเนินการทุกหน้าจอและตรวจสอบความถูกต้องทางธุรกิจเช่นเดียวกับที่ผู้ใช้ทำ
  • 🧾 เซสชันการป้อนข้อมูลแบบกลุ่ม: เซสชันจะจัดกลุ่มการเรียกใช้ธุรกรรมพร้อมข้อมูลอินพุต และจะถูกจัดเก็บไว้ในฐานข้อมูลจนกว่าจะมีการดำเนินการ
  • 🛠️ สองวิธี: การป้อนข้อมูลแบบกลุ่มแบบดั้งเดิมใช้ BDC_OPEN_GROUP, BDC_INSERT และ BDC_CLOSE_GROUP ในขณะที่วิธีการเรียกใช้ธุรกรรมจะใช้ CALL TRANSACTION USING
  • 🇧🇷 ทางเลือกวิธีการ: การรับข้อมูลแบบกลุ่มแบบดั้งเดิมจะทำงานแบบซิงโครนัสพร้อมกับการบันทึกข้อมูล ในขณะที่การเรียกใช้ธุรกรรมจะเร็วกว่า ทำงานแบบอะซิงโครนัส และจัดการธุรกรรมเดียว
  • 🗂️ โครงสร้างข้อมูล BDCDATA: ฟิลด์ PROGRAM, DYNPRO, DYNBEGIN, FNAM และ FVAL อธิบายถึงหน้าจอ ฟิลด์ และค่าสำหรับแต่ละขั้นตอน
  • ⏺️ บันทึก: เครื่องบันทึกการป้อนข้อมูลแบบกลุ่มจะบันทึกธุรกรรมด้วยตนเองและสร้างเซสชันหรือโปรแกรม BDC ที่พร้อมใช้งานซึ่งจะทำงานใน SM35 ในภายหลัง

SAP ABAP BDC (Batch Data Communication)

ข้อมูลเบื้องต้นเกี่ยวกับการป้อนข้อมูลแบบแบตช์

โดยทั่วไปอินพุตแบบแบตช์จะใช้เพื่อถ่ายโอนข้อมูลจากระบบที่ไม่ใช่ R/3 ไปยังระบบ R/3 หรือเพื่อถ่ายโอนข้อมูลระหว่างระบบ R/3

เป็นเทคนิคการถ่ายโอนข้อมูลที่ช่วยให้คุณสามารถถ่ายโอนชุดข้อมูลไปยังหน้าจอที่เป็นของธุรกรรมโดยอัตโนมัติและไปยัง SAP ระบบ. อินพุตแบบแบตช์ถูกควบคุมโดยเซสชันอินพุตแบบแบตช์

เซสชั่นการป้อนข้อมูลเป็นกลุ่ม

จัดกลุ่มชุดของการเรียกธุรกรรมพร้อมกับข้อมูลที่ป้อนและการกระทำของผู้ใช้ เซสชันอินพุตแบบแบตช์สามารถใช้เพื่อดำเนินการธุรกรรมแบบโต้ตอบในการอินพุตแบบแบตช์ โดยที่เซสชันจะประมวลผลหน้าจอบางส่วนหรือทั้งหมด เซสชันอินพุตแบบแบตช์จะถูกจัดเก็บไว้ในฐานข้อมูลเป็นตารางฐานข้อมูล และสามารถใช้ภายในโปรแกรมเป็นตารางภายในเมื่อเข้าถึงธุรกรรม

จุดที่ควรทราบ

  • BDI ทำงานโดยดำเนินการตามปกติ SAP ธุรกรรมเช่นเดียวกับที่ผู้ใช้ทำ แต่จะดำเนินการธุรกรรมโดยอัตโนมัติการตรวจสอบความถูกต้องของหน้าจอและการตรวจสอบตรรกะทางธุรกิจทั้งหมดจะดำเนินการในขณะที่ใช้การป้อนข้อมูลแบบแบตช์
  • เหมาะสำหรับการป้อนข้อมูลจำนวนมาก
  • ไม่จำเป็นต้องมีการโต้ตอบด้วยตนเอง

วิธีการป้อนข้อมูลแบบแบตช์

SAP จัดเตรียมวิธีการพื้นฐานสองวิธีสำหรับการถ่ายโอนข้อมูลเดิมไปยังระบบ R/3

  1. วิธีการป้อนข้อมูลแบบคลาสสิก
  2. วิธีการทำธุรกรรมทางโทรศัพท์

วิธีการป้อนข้อมูลแบบคลาสสิก

ในวิธีนี้โปรแกรม ABAP/4 จะอ่านข้อมูลภายนอกไปยัง SAP ระบบและการจัดเก็บในเซสชั่นการป้อนข้อมูลแบบแบตช์

หลังจากสร้างเซสชันแล้ว คุณสามารถเรียกใช้เซสชันเพื่อดำเนินการได้ SAP การทำธุรกรรมในนั้น

วิธีการนี้ใช้โมดูลฟังก์ชัน BDC_ OPEN, BDC_INSERT และ BDC_CLOSE

Batch Input Session สามารถดำเนินการได้ 3 วิธี

  1. อยู่เบื้องหน้า
  2. ในพื้นหลัง
  3. ระหว่างการประมวลผลพร้อมแสดงข้อผิดพลาด

คุณควรประมวลผลเซสชันอินพุตแบบแบตช์ในเบื้องหน้าหรือใช้การแสดงข้อผิดพลาดหากคุณต้องการทดสอบการถ่ายโอนข้อมูล

หากคุณต้องการดำเนินการถ่ายโอนข้อมูลหรือทดสอบประสิทธิภาพ คุณควรประมวลผลเซสชันในเบื้องหลัง

ข้อควรทราบเกี่ยวกับวิธีการป้อนข้อมูลแบบคลาสสิก

  • Syncการประมวลผลที่เที่ยงตรง
  • ถ่ายโอนข้อมูลสำหรับการทำธุรกรรมหลายรายการ
  • Syncการอัพเดตฐานข้อมูลแบบ Hronous
  • บันทึกกระบวนการอินพุตแบบแบตช์จะถูกสร้างขึ้นสำหรับแต่ละเซสชัน
  • ไม่สามารถสร้างเซสชันพร้อมกันได้

วิธีการทำธุรกรรมทางโทรศัพท์

ในวิธีนี้ ABAP/4 โปรแกรมใช้คำสั่ง CALL TRANSACTION USING เพื่อรันไฟล์ SAP การซื้อขาย

กระบวนการป้อนข้อมูลแบบกลุ่มทั้งหมดเกิดขึ้นทางออนไลน์ในโปรแกรม

วิธีการทำธุรกรรมการโทร

จุดที่ควรทราบ:

  • ประมวลผลข้อมูลได้เร็วขึ้น
  • การประมวลผลแบบอะซิงโครนัส
  • ถ่ายโอนข้อมูลสำหรับธุรกรรมเดียว
  • ไม่มีการสร้างบันทึกการประมวลผลอินพุตแบบแบตช์

เทียบกับการป้อนข้อมูลแบบกลุ่มคลาสสิกกับการเรียกใช้ธุรกรรม

ทั้งสองวิธีนี้เข้าถึงธุรกรรมเดียวกัน แต่แตกต่างกันในด้านความเร็ว การบันทึกข้อมูล และการจัดการข้อผิดพลาด ตารางด้านล่างแสดงให้เห็นว่าแต่ละวิธีเหมาะสมกับการใช้งานในสถานการณ์ใดบ้าง

หลักเกณฑ์ การป้อนข้อมูลแบบกลุ่มคลาสสิก การโทรทำรายการ
เทคนิค BDC_OPEN_GROUP, BDC_INSERT, BDC_CLOSE_GROUP การทำธุรกรรมการโทรโดยใช้
กระบวนการผลิต Synchronous รันในภายหลังจาก SM35 ใช้งานผ่านระบบออนไลน์ในโปรแกรม
การทำธุรกรรม มีการทำธุรกรรมจำนวนมากในเซสชั่นเดียว ธุรกรรมเดียวต่อการโทรหนึ่งครั้ง
เข้าสู่ระบบ ระบบจะสร้างบันทึกกระบวนการต่อเซสชันโดยอัตโนมัติ ไม่มีการบันทึกข้อมูล โปรแกรมจะรวบรวมข้อความต่างๆ เอง
ความเร็ว ช้ากว่า แต่ทนทานและสามารถเริ่มต้นใหม่ได้ ได้เร็วขึ้น
เหมาะสำหรับ ภาระงานเดิมขนาดใหญ่ที่เกิดขึ้นเพียงครั้งเดียวและต้องสามารถตรวจสอบได้ การถ่ายโอนเอกสารแบบโต้ตอบหรือความเร็วสูง

หลังจากเปรียบเทียบวิธีการแล้ว ในส่วนถัดไปจะอธิบายขั้นตอนโดยรวมของโครงการ

ขั้นตอนการป้อนข้อมูลแบบกลุ่ม

ขั้นตอนการป้อนข้อมูลแบบกลุ่ม

โดยทั่วไป คุณจะสังเกตลำดับขั้นตอนต่อไปนี้เพื่อพัฒนา Batch Input สำหรับองค์กรของคุณ

  1. การวิเคราะห์ข้อมูลเดิม กำหนดวิธีการแมปข้อมูลที่จะถ่ายโอนไปยัง SAP โครงสร้าง. จดบันทึกประเภทข้อมูลที่จำเป็นหรือการแปลงความยาวข้อมูลด้วย
  2. ผลิต SAP โครงสร้างข้อมูลเพื่อใช้ในโปรแกรมส่งออก
  3. ส่งออกข้อมูลเป็นไฟล์ต่อเนื่อง โปรดทราบว่าจำเป็นต้องมีรูปแบบอักขระตามที่กำหนดไว้ล่วงหน้า SAP โปรแกรมอินพุตแบบแบตช์
  4. ถ้า SAP ไม่ได้ใช้โปรแกรม BDC ที่ให้มา ให้เขียนโค้ดโปรแกรมอินพุตแบบแบตช์ของคุณเอง เลือกวิธีการป้อนข้อมูลแบบกลุ่มที่เหมาะสมตามสถานการณ์
  5. ประมวลผลข้อมูลและเพิ่มลงใน SAP System.
  6. วิเคราะห์บันทึกกระบวนการ สำหรับวิธี CALL TRANSACTION ที่ไม่มีการสร้างบันทึกที่เหมาะสม ให้ใช้ข้อความที่รวบรวมโดยโปรแกรมของคุณ
  7. จากผลการวิเคราะห์กระบวนการ แก้ไขและประมวลผลข้อมูลที่ผิดพลาดใหม่

การเขียนโปรแกรม BDC

คุณสามารถปฏิบัติตามขั้นตอนต่อไปนี้เพื่อเขียนโปรแกรม BDC ของคุณ

  1. วิเคราะห์ธุรกรรมเพื่อประมวลผลข้อมูลอินพุตแบบแบตช์
  2. ตัดสินใจเลือกวิธีการป้อนข้อมูลแบบกลุ่มที่จะใช้
  3. อ่านข้อมูลจากไฟล์ตามลำดับ
  4. ทำการแปลงข้อมูลหรือตรวจสอบข้อผิดพลาด
  5. การจัดเก็บข้อมูลในโครงสร้างอินพุตแบบแบตช์ BDCDATA
  6. สร้างเซสชันอินพุตแบบแบตช์สำหรับการอินพุตแบบแบตช์แบบคลาสสิก หรือประมวลผลข้อมูลโดยตรงด้วยคำสั่ง CALL TRANSACTION USING

โครงสร้างข้อมูลอินพุตแบบแบตช์

การประกาศโครงสร้างข้อมูลอินพุตแบบแบตช์

DATA : BEGIN OF < bdc table>

OCCURS <occurs parameters>.

INCLUDE STRUCTURE BDCDATA.

DATA:END OF <bdc table>.
ชื่อฟิลด์ ประเภท ความยาว Descriptไอออน
โปรแกรม ชาร์ 8 พูลโมดูล
ไดน์โปร NUMC 4 เบอร์ไดนโปร
ไดนเบกิ้น ชาร์ 1 การเริ่มต้น dynpro
เอฟนัม ชาร์ 35 ชื่อฟิลด์
ฟวาล ชาร์ 80 ค่าฟิลด์

ลำดับของฟิลด์ภายในข้อมูลสำหรับหน้าจอใดหน้าจอหนึ่งไม่มีนัยสำคัญใดๆ

คะแนนหมายเหตุ

  • ขณะกรอกข้อมูล BDC โปรดคำนึงถึงการตั้งค่าของผู้ใช้ด้วย โดยเฉพาะอย่างยิ่งในช่องข้อมูลที่มีตัวเลข (เช่น จำนวน มูลค่า) การตั้งค่าของผู้ใช้จะเป็นตัวกำหนดว่ากลุ่มข้อมูลนั้นเป็นอย่างไรping อักขระสำหรับตัวเลข เช่น ตัวเลขห้าหมื่น สามารถเขียนได้เป็น 50,000.00 หรือ 50.000,00 ขึ้นอยู่กับการตั้งค่าของผู้ใช้
  • ย่อฟิลด์ FVAL สำหรับฟิลด์จำนวนเงินและปริมาณเพื่อให้ชิดกัน
  • โปรดทราบว่าเขตข้อมูลทั้งหมดที่คุณเติมข้อมูลผ่าน BDC ควรถือเป็นเขตข้อมูลประเภทอักขระในขณะที่เติมข้อมูลในตารางข้อมูล BDC
  • ในบางหน้าจอ เมื่อคุณเติมค่าในตัวควบคุมตารางโดยใช้ BDC คุณจะต้องบันทึกจำนวนแถวที่ปรากฏบนขนาดเริ่มต้นของหน้าจอและโค้ดสำหรับแถวต่างๆ ถ้าคุณต้องเติมข้อมูลในแถวเพิ่มเติม คุณจะต้องเขียนโค้ดสำหรับฟังก์ชัน "เลื่อนหน้าลง" เหมือนกับที่คุณทำเมื่อคุณเติมข้อมูลในตัวควบคุมตารางด้วยตนเอง
  • จำนวนบรรทัดที่จะปรากฏในสถานการณ์ข้างต้นจะแตกต่างกันไปตามขนาดหน้าจอที่ผู้ใช้ใช้ ดังนั้นควรเขียนโค้ดสำหรับขนาดหน้าจอมาตรฐานเสมอ และทำให้ BDC ของคุณทำงานในขนาดหน้าจอมาตรฐานเสมอ ไม่ว่าผู้ใช้จะคงขนาดหน้าจอไว้เป็นเท่าใด

การสร้างเซสชันอินพุตแบบแบตช์

  1. เปิดเซสชันเซสชันอินพุตแบบแบตช์โดยใช้โมดูลฟังก์ชัน BDC_OPEN_GROUP
  2. สำหรับแต่ละธุรกรรมในเซสชั่น:
  3. กรอก BDCDATA ด้วยค่าสำหรับหน้าจอและฟิลด์ทั้งหมดที่ประมวลผลในธุรกรรม
  4. โอนธุรกรรมไปยังเซสชันด้วย BDC_INSERT
  5. ปิดเซสชันการป้อนข้อมูลแบบแบตช์ด้วย BDC_CLOSE_GROUP

ตัวอย่าง: BDC ใช้ Call Transaction

โปรแกรมด้านล่างแสดงวิธีการทำธุรกรรมการเรียกใช้ตั้งแต่ต้นจนจบ โดยจะสร้างตาราง BDCDATA สำหรับสองหน้าจอของการทำธุรกรรม และเรียกใช้ในโหมด N (ไม่แสดงผล) พร้อมตารางข้อผิดพลาดเพื่อให้สามารถรายงานความล้มเหลวได้

REPORT z_bdc_call_transaction.

DATA: lt_bdcdata TYPE STANDARD TABLE OF bdcdata,
      ls_bdcdata TYPE bdcdata,
      lt_messages TYPE STANDARD TABLE OF bdcmsgcoll.

* Helper that appends one BDCDATA line
FORM bdc_field USING p_fnam p_fval.
  CLEAR ls_bdcdata.
  ls_bdcdata-fnam = p_fnam.
  ls_bdcdata-fval = p_fval.
  APPEND ls_bdcdata TO lt_bdcdata.
ENDFORM.

* Screen 1: start the dynpro, then fill the fields
CLEAR ls_bdcdata.
ls_bdcdata-program  = 'SAPMV45A'.
ls_bdcdata-dynpro   = '0101'.
ls_bdcdata-dynbegin = 'X'.
APPEND ls_bdcdata TO lt_bdcdata.

PERFORM bdc_field USING 'VBAK-AUART' 'OR'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.

* Run the transaction: mode N = no display, update S = synchronous
CALL TRANSACTION 'VA01'
  USING         lt_bdcdata
  MODE          'N'
  UPDATE        'S'
  MESSAGES INTO lt_messages.

IF sy-subrc <> 0.
  * Read lt_messages to report the errors that occurred
ENDIF.

💡 เคล็ดลับ: พารามิเตอร์ MODE ควบคุมการแสดงผล: A แสดงทุกหน้าจอ, E หยุดเฉพาะเมื่อเกิดข้อผิดพลาด และ N ทำงานโดยเงียบๆ ควรใช้ E ในระหว่างการทดสอบ และ N สำหรับการใช้งานจริง

เครื่องบันทึกอินพุตแบบแบตช์

เครื่องบันทึกอินพุตแบบแบตช์ (ระบบ > บริการ > อินพุตแบบแบตช์ > เครื่องบันทึก) จะบันทึกธุรกรรมที่ป้อนด้วยตนเอง และสร้างเซสชันอินพุตแบบแบตช์ที่สามารถดำเนินการในภายหลังได้โดยใช้ SM35

เครื่องบันทึกอินพุตแบบแบตช์

  • เริ่มต้นเครื่องบันทึกอินพุตแบบแบตช์โดยเลือกปุ่มกดการบันทึกจากหน้าจอเริ่มต้นอินพุตแบบแบตช์
  • ชื่อการบันทึกเป็นชื่อที่ผู้ใช้กำหนดและสามารถจับคู่ชื่อเซสชันอินพุตแบบแบตช์ซึ่งสามารถสร้างได้จากการบันทึก
  • ป้อน SAP ธุรกรรมและเริ่มโพสต์ธุรกรรม
  • หลังจากที่คุณโพสต์เสร็จแล้ว SAP ธุรกรรมที่คุณเลือกรับธุรกรรมและบันทึกเพื่อสิ้นสุดการบันทึกหรือธุรกรรมถัดไปและโพสต์ธุรกรรมอื่น
  • เมื่อคุณบันทึกการบันทึกแล้ว คุณสามารถสร้างเซสชันอินพุตแบบแบตช์จากการบันทึกและ/หรือสร้างโปรแกรมอินพุตแบบแบตช์จากการบันทึกได้
  • ขณะนี้สามารถวิเคราะห์เซสชันอินพุตแบบแบตช์ที่คุณสร้างได้เช่นเดียวกับเซสชันอินพุตแบบแบตช์อื่นๆ
  • โปรแกรมที่สร้างขึ้นโดยฟังก์ชันของเครื่องบันทึกอินพุตแบบแบตช์เป็นเครื่องมืออันทรงพลังสำหรับโปรแกรมเมอร์อินเทอร์เฟซข้อมูล เป็นฐานที่มั่นคงซึ่งสามารถเปลี่ยนแปลงได้ตามความต้องการของลูกค้า

⚠️คำเตือน: การบันทึกจะจับภาพลำดับหน้าจออย่างแม่นยำตามที่เกิดขึ้น ดังนั้นหน้าจอที่ปรากฏเฉพาะเมื่อป้อนข้อมูลบางอย่าง เช่น ป๊อปอัพแจ้งเตือนการกรอกข้อมูลไม่สมบูรณ์ จะไม่ถูกบันทึก ควรทดสอบโปรแกรมที่สร้างขึ้นด้วยข้อมูลที่ทำให้หน้าจอเสริมทุกหน้าจอปรากฏขึ้นเสมอ

คำถามที่พบบ่อย

BDC_OKCODE เก็บโค้ดฟังก์ชันที่ผู้ใช้จะเรียกใช้งานด้วยปุ่มหรือแป้นพิมพ์ เช่น /00 สำหรับ Enter หรือ =SAVE สำหรับ Save โดยจะบอกหน้าจอว่าควรดำเนินการใดหลังจากกรอกข้อมูลในช่องต่างๆ เสร็จแล้ว

SM35 คือโปรแกรมตรวจสอบการป้อนข้อมูลแบบกลุ่ม (Batch Input Monitor) โดยจะแสดงรายการเซสชันที่สร้างขึ้นโดยการป้อนข้อมูลแบบกลุ่มแบบดั้งเดิม เรียกใช้เซสชันเหล่านั้นในโหมดพื้นหน้าหรือพื้นหลัง และแสดงบันทึกกระบวนการเพื่อให้สามารถวิเคราะห์และประมวลผลธุรกรรมที่ล้มเหลวใหม่ได้

BDC ยังคงถูกใช้งานในกรณีที่ไม่มี BAPI เนื่องจากเป็นการนำการตรวจสอบความถูกต้องของหน้าจอจากการทำธุรกรรมมาใช้ซ้ำ LSMW ผสานรวม BDC การบันทึก และ BAPI เข้าไว้ในเครื่องมือการย้ายข้อมูลเดียว และ... บาปิ วิธีนี้เหมาะสมกว่าหากมี API ที่เสถียรให้ใช้งาน

ใช่แล้ว ผู้ช่วย AI ในเครื่องมือพัฒนา ABAP จะนำการบันทึกหรือรายการหน้าจอมาสร้างเป็นข้อมูล BDCDATA, บล็อก CALL TRANSACTION และการจัดการข้อความ นักพัฒนาจะนำไฟล์ต้นฉบับมาแมปและทดสอบการโหลด

เครื่องมือ AI จะวิเคราะห์ไฟล์เก่า ตรวจสอบฟิลด์ที่จำเป็นที่ขาดหายไปและความไม่ตรงกันของรูปแบบก่อนการโหลด และสรุปบันทึกการป้อนข้อมูลแบบกลุ่มในภายหลัง เพื่อให้สามารถแก้ไขและประมวลผลข้อมูลที่ผิดพลาดได้เร็วขึ้น

สรุปโพสต์นี้ด้วย: