บทช่วยสอนการเขียนโปรแกรมกล่องโต้ตอบ: พูลโมดูลเข้า SAP ABAP

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

การเขียนโปรแกรมแบบโต้ตอบใน SAP ABAP สร้างโปรแกรมโมดูลพูลที่โต้ตอบกับผู้ใช้ผ่านหน้าจอและเปลี่ยนแปลงเนื้อหาในฐานข้อมูล หน้านี้อธิบายรหัสธุรกรรม หน้าจอ สถานะ GUI ตรรกะการไหลของหน้าจอ ไดนามิกโพร และโครงสร้างโมดูลพูล

  • 💬 คำจำกัดความหลัก: โปรแกรมโต้ตอบจะจัดการการโต้ตอบของผู้ใช้ทุกรูปแบบ เช่น การป้อนข้อมูล การเลือกรายการในเมนู หรือการคลิกปุ่ม และยังสามารถอัปเดตฐานข้อมูลได้อีกด้วย
  • 🅼 ประเภทโปรแกรม: โปรแกรมโต้ตอบเป็นโมดูลพูลประเภท M ไม่สามารถทำงานได้ด้วยตัวเอง และต้องเชื่อมโยงกับรหัสธุรกรรมอย่างน้อยหนึ่งรหัสที่มีหน้าจอเริ่มต้น
  • 🧩 องค์ประกอบ รหัสธุรกรรม หน้าจอ สถานะ GUI กลุ่มโมดูล ABAP และตรรกะการไหลของกระบวนการ รวมกันเป็นแอปพลิเคชันแบบโต้ตอบเดียว
  • 🔄 ตรรกะการไหล: PBO จะทำงานก่อนที่หน้าจอจะปรากฏขึ้น, PAI จะทำงานหลังจากที่ผู้ใช้ดำเนินการบางอย่าง, POH จะตอบสนองต่อปุ่ม F1 และ POV จะตอบสนองต่อปุ่ม F4
  • 🖥️ ไดน์โปร: หน้าจอและตรรกะการไหลของหน้าจอเรียกว่าไดน์โปร (dynpro) และไดน์โปรแต่ละตัวจะควบคุมขั้นตอนหนึ่งของการสนทนาอย่างแม่นยำ
  • 📦 กลุ่มโมดูล: ไดนามิกโปรทั้งหมดที่เรียกใช้ภายในธุรกรรมเดียวกันจะอ้างอิงถึงกลุ่มโมดูลทั่วไปที่เก็บโมดูลบทสนทนาไว้
  • 🛠️ เส้นทางการสร้าง: SE80 สร้างกลุ่มโมดูล, SE51 ออกแบบหน้าจอ, SE41 สร้างสถานะ GUI และ SE93 เชื่อมโยงรหัสธุรกรรม

SAP การเขียนโปรแกรมไดอะล็อก ABAP

การเขียนโปรแกรมแบบโต้ตอบ (Dialog Programming) คืออะไร?

SAP-ABAP รองรับโปรแกรมสองประเภท – โปรแกรมรายงานและโปรแกรมบทสนทนา

หากโปรแกรม ABAP ของคุณต้องการอินพุตจากผู้ใช้ ระบบจะใช้การเขียนโปรแกรม Dialog

บทสนทนากับผู้ใช้ หมายถึง การโต้ตอบทุกรูปแบบระหว่างผู้ใช้กับโปรแกรม และอาจเป็นสิ่งต่อไปนี้

  • การป้อนข้อมูล
  • การเลือกรายการเมนู
  • คลิกที่ปุ่ม
  • การคลิกหรือดับเบิลคลิกรายการ

โปรแกรมโต้ตอบยังใช้เมื่อเราต้องการนำทางไปมาระหว่างหน้าจอ

โปรแกรมโต้ตอบถูกสร้างขึ้นด้วยประเภทเป็น 'M' - พูลโมดูล ไม่สามารถดำเนินการได้โดยอิสระและต้องแนบไปกับรหัสธุรกรรมอย่างน้อยหนึ่งรหัสที่คุณระบุหน้าจอเริ่มต้น

ความแตกต่างระหว่างโปรแกรมรายงานและกล่องโต้ตอบ

ความแตกต่างระหว่างโปรแกรมรายงานและกล่องโต้ตอบ

โปรแกรมรายงาน:

รายงานคือโปรแกรมที่โดยทั่วไปจะอ่านและวิเคราะห์ข้อมูลในตารางฐานข้อมูลโดยไม่ต้องเปลี่ยนแปลง ฐานข้อมูล.

โปรแกรมโต้ตอบ:

โปรแกรมโต้ตอบช่วยให้คุณทำงานแบบโต้ตอบกับระบบและเปลี่ยนแปลงเนื้อหาของตารางฐานข้อมูลได้ แต่ละโปรแกรมโต้ตอบจะมีลำดับหน้าจอที่แน่นอนซึ่งระบบจะประมวลผลทีละรายการ

หลักเกณฑ์ โปรแกรมรายงาน โปรแกรมสนทนา
ประเภทโปรแกรม ประเภท 1, ไฟล์ปฏิบัติการ ประเภท M, กลุ่มโมดูล
การเข้าถึงฐานข้อมูล อ่านและวิเคราะห์ข้อมูล อ่านและเปลี่ยนแปลงข้อมูล
การกระทำ ทำงานโดยอัตโนมัติ ใช้งานได้เฉพาะผ่านรหัสธุรกรรมเท่านั้น
Control เหตุการณ์ในรายงาน ตรรกะการไหลของหน้าจอของแต่ละไดน์โปร

ลำดับหน้าจอของการทำธุรกรรมแบบโต้ตอบจะเข้าใจง่ายขึ้นหากมีตัวอย่างประกอบ

ตัวอย่างการประมวลผลธุรกรรมในการเขียนโปรแกรมโต้ตอบ

การประมวลผลธุรกรรมตัวอย่าง

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

ส่วนประกอบของโปรแกรมโต้ตอบ

แตกต่าง รายงาน ซึ่งโดยทั่วไปเกี่ยวข้องกับการสร้างโปรแกรมอิสระหนึ่งโปรแกรมที่สามารถดำเนินการได้โดยอิสระจากวัตถุอื่น ๆ การพัฒนาโปรแกรมกล่องโต้ตอบเกี่ยวข้องกับการพัฒนาวัตถุหลาย ๆ ชิ้นซึ่งไม่มีวัตถุใด ๆ ที่สามารถดำเนินการได้ด้วยตัวเอง แทนที่จะเชื่อมโยงวัตถุทั้งหมดตามลำดับชั้นกับโปรแกรมหลักและดำเนินการตามลำดับที่กำหนดโดยโปรแกรมหลักของกล่องโต้ตอบ.

ส่วนประกอบของโปรแกรมโต้ตอบคือ:

รหัสธุรกรรม

  • รหัสธุรกรรมเริ่มลำดับหน้าจอ
  • คุณสร้างรหัสธุรกรรมใน Repository Browser ใน ABAP Workbench หรือใช้ Transaction SE93
  • รหัสธุรกรรมเชื่อมโยงกับโปรแกรม ABAP และหน้าจอเริ่มต้น
  • คุณสามารถเริ่มลำดับหน้าจอจากโปรแกรม ABAP ใดก็ได้โดยใช้คำสั่ง CALL SCREEN

หน้าจอ

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

สถานะ GUI

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

โปรแกรม ABAP

  • แต่ละสถานะหน้าจอและ GUI ในระบบ R/3 เป็นของโปรแกรม ABAP หนึ่งโปรแกรม
  • โปรแกรม ABAP ประกอบด้วยโมดูลกล่องโต้ตอบที่ถูกเรียกโดยลอจิกโฟลว์หน้าจอ และยังประมวลผลอินพุตของผู้ใช้จากสถานะ GUI
  • โปรแกรม ABAP ที่ใช้หน้าจอเรียกอีกอย่างว่าโปรแกรมโต้ตอบ
  • ในพูลโมดูล (โปรแกรมประเภท M); บล็อกการประมวลผลแรกที่ถูกเรียกจะเป็นโมดูลกล่องโต้ตอบเสมอ อย่างไรก็ตาม คุณยังสามารถใช้หน้าจอในโปรแกรม ABAP อื่นๆ ได้ เช่น โปรแกรมปฏิบัติการหรือโมดูลฟังก์ชัน บล็อกการประมวลผลแรกจะถูกเรียกแตกต่างกัน ตัวอย่างเช่น โดยสภาพแวดล้อมรันไทม์หรือการเรียกขั้นตอน จากนั้นลำดับหน้าจอจะเริ่มต้นโดยใช้คำสั่ง CALL SCREEN

ลอจิกการไหลของหน้าจอ

ตรรกะของ Screen Flow แบ่งออกเป็นสี่ส่วนประกอบหลักๆ

  • กระบวนการก่อนส่งออก (PBO) เหตุการณ์: ที่ถูกประมวลผลก่อนที่หน้าจอจะปรากฏ
  • กระบวนการหลังจากการป้อนข้อมูล (PAI) เหตุการณ์: ซึ่งจะถูกประมวลผลหลังจากการกระทำของผู้ใช้บนหน้าจอ
  • ดำเนินการตามคำขอความช่วยเหลือ (ศอ.บต): ซึ่งจะถูกประมวลผลเมื่อกด F1
  • ดำเนินการตามคำขอค่า (POV): ซึ่งจะถูกประมวลผลเมื่อกด F4

POH และ POV ได้รับการอธิบายอย่างละเอียดในหน้าเกี่ยวกับ ดำเนินการตามคำขอค่าและดำเนินการตามคำขอความช่วยเหลือ.

ไดนโปร

  • หน้าจอพร้อมกับตรรกะการไหลของหน้าจอเรียกว่า Dynpro ("โปรแกรมไดนามิก" เนื่องจากตรรกะการไหลของหน้าจอมีผลต่อการไหลของโปรแกรม)
  • dynpro แต่ละตัวจะควบคุมขั้นตอนเดียวของโปรแกรมโต้ตอบของคุณ
  • หน้าจอที่เป็นของโปรแกรมได้แก่ หมายเลขลำดับการแสดงผลหน้าจอสามารถเป็นได้ทั้งแบบเชิงเส้นหรือแบบวนซ้ำ จากภายในชุดหน้าจอหนึ่ง คุณยังสามารถเรียกชุดหน้าจออื่นได้ และหลังจากประมวลผลเสร็จแล้ว ก็สามารถกลับไปยังชุดหน้าจอเดิมได้ นอกจากนี้ คุณยังสามารถแทนที่หน้าจอถัดไปที่กำหนดไว้แบบคงที่จากภายในโมดูลไดอะล็อกของโปรแกรม ABAP ได้อีกด้วย

พูลโมดูล ABAP

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

โครงสร้างของโปรแกรมโต้ตอบ

โครงสร้างของโปรแกรมโต้ตอบ

แผนภาพโครงสร้างแสดงให้เห็นว่ารหัสธุรกรรม หน้าจอ สถานะ GUI และกลุ่มโมดูลเชื่อมโยงกับโปรแกรมหลักเดียวกันอย่างไร

ผังกระบวนการสำหรับโปรแกรมโต้ตอบ

ผังกระบวนการสำหรับโปรแกรมโต้ตอบ

แผนภาพกระบวนการทำงานแสดงการสลับระหว่างหน้าจอและโปรแกรม ABAP: PBO กรอกข้อมูลในช่องต่างๆ บนหน้าจอ ผู้ใช้ดำเนินการ และ PAI ประมวลผลข้อมูลที่ป้อนก่อนที่จะเรียกหน้าจอถัดไป

วิธีการสร้างโปรแกรมโมดูลพูล

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

  1. สร้างกลุ่มโมดูล: ใน SE80 หรือใน SE38 ให้สร้างโปรแกรมที่มีชื่อขึ้นต้นด้วย SAPMZ และตั้งค่าประเภทโปรแกรมเป็น M – กลุ่มโมดูลไม่สามารถเปลี่ยนประเภทในภายหลังได้โดยไม่ต้องลบวัตถุนั้นก่อน
  2. ประกาศข้อมูลทั่วโลก: ใส่คำสั่ง TABLES และตัวแปรส่วนกลางไว้ในไฟล์ include ด้านบนสุด ซึ่งโมดูลไดอะล็อกทุกตัวในกลุ่มโมดูลสามารถอ่านได้
  3. ออกแบบหน้าจอ: สร้างหน้าจอที่ 100 ด้วยหน้าจอ Painter (SE51) วางช่องป้อนข้อมูลบนเค้าโครง และป้อนหมายเลขหน้าจอถัดไปในคุณลักษณะของหน้าจอ
  4. เขียนตรรกะการไหลของโปรแกรม: ในแท็บตรรกะการไหล ให้เรียกใช้โมดูลหนึ่งสำหรับ PBO และอีกหนึ่งโมดูลสำหรับ PAI ดังแสดงด้านล่าง
  5. สถานะการสร้าง GUI: สร้างสถานะด้วยเมนู Painter (SE41) และตั้งค่าในโมดูล PBO ด้วยคำสั่ง SET PF-STATUS เพื่อให้ Save, Back และ Exit เข้าถึงโปรแกรมในฐานะรหัสฟังก์ชัน
  6. เชื่อมโยงรหัสธุรกรรม: ใน SE93 ให้สร้างธุรกรรมแบบโต้ตอบ ตั้งชื่อโมดูลพูล และป้อน 100 เป็นหน้าจอเริ่มต้น
* Screen 100, flow logic
PROCESS BEFORE OUTPUT.
  MODULE status_0100.

PROCESS AFTER INPUT.
  MODULE user_command_0100.

* Module pool SAPMZDEMO
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_100'.
  SET TITLEBAR 'TITLE_100'.
ENDMODULE.

MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'SAVE'.
      PERFORM save_data.
    WHEN 'BACK' OR 'EXIT'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.

💡 เคล็ดลับ: คำสั่ง LEAVE TO SCREEN 0 จะปิดหน้าจอปัจจุบันและกลับไปยังจุดที่เรียกใช้ ซึ่งเป็นวิธีมาตรฐานในการออกจากหน้าต่างโต้ตอบอย่างราบรื่น

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

คำสั่ง CALL SCREEN จะเปิดหน้าจอใหม่และเก็บหน้าจอที่เรียกไว้ในสแต็ก ดังนั้นการประมวลผลจึงกลับไปยังหน้าจอนั้น คำสั่ง LEAVE TO SCREEN จะแทนที่หน้าจอปัจจุบัน และจะไม่มีอะไรกลับไปยังหน้าจอที่เรียก

กลุ่มโมดูลชื่อ SAPMZDEMO แบ่งออกเป็น MZDEMOTOP สำหรับข้อมูลส่วนกลาง, MZDEMOO01 สำหรับโมดูล PBO, MZDEMOI01 สำหรับโมดูล PAI และ MZDEMOF01 สำหรับซับรูทีน โดยเวิร์กเบนช์จะสร้างไฟล์เหล่านี้โดยอัตโนมัติ

กำหนดประเภทฟังก์ชันปุ่มเป็น E ในสถานะ GUI และเรียกใช้โมดูลด้วยคำสั่ง MODULE exit AT EXIT-COMMAND จากนั้นโมดูลจะทำงานก่อนการตรวจสอบความถูกต้องของข้อมูล ทำให้ผู้ใช้สามารถออกจากหน้าจอได้แม้จะมีข้อมูลที่ไม่ถูกต้อง

ใช่แล้ว ผู้ช่วย AI ภายในเครื่องมือพัฒนา ABAP จะร่างโมดูล PBO และ PAI คำสั่ง CASE บน SY-UCOMM และการตรวจสอบความถูกต้องของฟิลด์จากคำอธิบายของหน้าจอ ส่วนเค้าโครงนั้นยังคงถูกวาดในหน้าจออยู่ Painter.

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

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