บทช่วยสอนหน้าจอย่อย ABAP: เรียกหน้าจอย่อยเข้า SAP

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

ABAP Subscreens คือการฝังหน้าจอหนึ่งไว้ภายในพื้นที่ของอีกหน้าจอหนึ่งในระหว่างการทำงาน พร้อมด้วยตรรกะการไหลของข้อมูล หน้านี้จะอธิบายเกี่ยวกับพื้นที่ของ Subscreen คำสั่ง CALL SUBSCREEN ใน PBO และ PAI การถ่ายโอนข้อมูล และข้อจำกัดที่ทำให้เกิดข้อผิดพลาดในระหว่างการทำงาน

  • 🪟 คำจำกัดความหลัก: หน้าจอย่อยคือหน้าจออิสระที่แสดงอยู่ภายในพื้นที่ที่กำหนดไว้ของหน้าจอหลัก และหน้าจอย่อยหลายหน้าจออาจใช้หน้าจอหลักเดียวกันได้
  • 🧩 ควรใส่การเปรียบเทียบด้วย: ตรรกะการทำงานของหน้าจอฝังตัวจะถูกแทรกเข้าไปในตรรกะการทำงานของหน้าจอหลัก เหมือนกับการแทรกไฟล์ include เข้าไปในโปรแกรม
  • 🪜 สามขั้นตอน: กำหนดพื้นที่ของหน้าจอย่อย กำหนดหน้าจอย่อย จากนั้นรวมหน้าจอย่อยนั้นไว้ในพื้นที่ดังกล่าว
  • ⌨️ การประชุม PBO: โทรสมัครรับข้อมูล รวมทั้ง กำหนดหมายเลขหน้าจอสี่หลักให้กับพื้นที่และเรียกใช้ตรรกะ PBO ของพื้นที่นั้น
  • ⌨️ การโทรติดต่อ PAI: โทรสมัครรับข้อมูล ใน PAI จะทำการประมวลผลตรรกะของ PAI สำหรับหน้าจอฝังตัว และส่งต่อข้อมูลของฟิลด์ที่มีชื่อเดียวกัน
  • ???? ข้อ จำกัด : หน้าจอย่อยไม่สามารถใช้คำสั่ง SET PF-STATUS, SET TITLEBAR, SET SCREEN, LEAVE SCREEN, OK_CODE ของตัวเอง หรือ AT EXIT-COMMAND ได้
  • 🌐 สาขาทั่วโลก: ฟิลด์ที่ใช้โดยซับสกรีนเป็นฟิลด์ส่วนกลางที่ประกาศไว้ในไฟล์ include หลักของโปรแกรม

หน้าจอย่อย ABAP

Subscreen คืออะไรใน SAP เอบัพ?

ก่อนที่คุณจะอ่านบทแนะนำนี้ โปรดตรวจสอบให้แน่ใจว่าคุณเข้าใจความหมายของคำว่า "ก่อน" โปรแกรมสนทนา เป็น

  • หน้าจอย่อยคือหน้าจออิสระที่แสดงในพื้นที่ของหน้าจออื่น (“หน้าจอหลัก”)
  • หน้าจอย่อยช่วยให้คุณสามารถฝังหน้าจอหนึ่งไว้ภายในอีกหน้าจอหนึ่งขณะรันไทม์ได้ คุณสามารถรวมหลายหน้าจอย่อยบนหน้าจอหลักได้
  • คำว่าหน้าจอย่อยใช้กับทั้งหน้าจอที่คุณฝัง และพื้นที่บนหน้าจอหลักที่คุณวางไว้ บทช่วยสอนนี้เกี่ยวกับพื้นที่หน้าจอย่อย หน้าจอจริงที่สร้างขึ้นผ่านธุรกรรม SE51 เรียกว่าหน้าจอย่อยหากกำหนดไว้ในคุณลักษณะหน้าจอ
  • เมื่อคุณใช้หน้าจอย่อย ลอจิกโฟลว์ของหน้าจอที่ฝังจะถูกฝังอยู่ในโฟลว์ลอจิกของหน้าจอหลักด้วย ดังนั้น การใช้หน้าจอย่อยบนหน้าจอก็เหมือนกับการใช้การรวมใน โปรแกรม ABAP.

หากต้องการใช้หน้าจอย่อย คุณต้องปฏิบัติตามสามขั้นตอนง่ายๆ

  1. กำหนดพื้นที่หน้าจอย่อยบนหน้าจอ
  2. กำหนดหน้าจอย่อยที่เหมาะสม
  3. รวมหน้าจอย่อยไว้ในพื้นที่หน้าจอย่อย

นอกจากนี้ คุณต้องปรับกรอบของหน้าจอย่อยและหน้าจอหลักด้วย คุณต้องตั้งชื่อในช่องชื่อฟิลด์

นอกจากนี้ คุณยังต้องปรับฟิลด์ภายในหน้าจอย่อยเพื่อให้ปรากฏในหน้าจอหลักด้วย ในกรณีที่กำหนดหน้าจอย่อยให้ใหญ่กว่าพื้นที่ที่มีอยู่ในหน้าจอหลัก จะมองเห็นเฉพาะส่วนของหน้าจอย่อยที่เหมาะกับพื้นที่ที่มีอยู่เท่านั้น พื้นที่จะวัดจากมุมซ้ายบนของหน้าจอเสมอ ดังนั้นคุณควรดูแลอย่างเหมาะสมในขณะกำหนดพื้นที่หน้าจอย่อยและสร้างหน้าจอย่อย

โทรหน้าจอย่อย

ตัวอย่าง

ตัวอย่างเช่น เราได้กำหนดพื้นที่หน้าจอย่อยสองหน้าจอบนหน้าจอหลัก และได้แนบหน้าจอย่อยสองหน้าจอที่แตกต่างกันเข้ากับพื้นที่ที่เกี่ยวข้อง เมื่อใดก็ตามที่มีการเรียกหน้าจอหลัก PBO ของหน้าจอหลักจะถูกเรียก แต่ก่อนการแสดงผล จะเรียก PBO ของแต่ละหน้าจอที่แนบมากับพื้นที่หน้าจอย่อยบนหน้าจอหลักด้วย

โทรหน้าจอย่อยใน SAP

ภาพหน้าจอแสดงหน้าจอหลักที่มีพื้นที่หน้าจอย่อยสองส่วน ซึ่งแต่ละส่วนถูกเติมเต็มด้วยหน้าจอย่อยสองหน้าแยกกัน

คุณสามารถรวมหน้าจอย่อยได้โดยใช้คำสั่ง CALL SUBSCREEN ในโฟลว์ลอจิกของหน้าจอหลัก

การเรียกใช้งานซับสกรีนใน PBO

หากต้องการรวมหน้าจอย่อยในพื้นที่หน้าจอย่อยของหน้าจอหลักและเรียกใช้ตรรกะการไหล PBO ให้ใช้คำสั่งต่อไปนี้ในเหตุการณ์ PBO ของหน้าจอหลัก:

PROCESS BEFORE OUTPUT.

CALL SUBSCREEN <area> INCLUDING [<prog>] <dynp>.

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

ชื่อ ของพื้นที่หน้าจอย่อยต้องป้อนโดยตรงโดยไม่มีลูกน้ำกลับหัว คุณสามารถระบุชื่อได้ และ ไม่ว่าจะเป็นตัวอักษรหรือตัวแปร หากคุณใช้ตัวแปร คุณต้องประกาศและเติมตัวแปรที่มีชื่อเหมือนกันในโปรแกรม ABAP หมายเลขหน้าจอ ต้องมีความยาว 4 ตัวอักษร หากคุณไม่ได้กำหนดหน้าจอย่อยให้กับพื้นที่ หน้าจอนั้นจะยังคงว่างเปล่า

การเรียกหน้าจอย่อยใน PAI

ในการเรียกตรรกะการไหลของ PAI ของหน้าจอย่อย ให้ใช้คำสั่งต่อไปนี้ในตรรกะการไหลของ PAI ของหน้าจอหลัก:

PROCESS AFTER INPUT.

CALL SUBSCREEN <area>.

คำสั่งนี้รวมถึงตรรกะการไหลของ PAI ของหน้าจอย่อยที่รวมอยู่ในพื้นที่หน้าจอย่อย ในงาน ป.ป.ช. ซึ่งสามารถเรียกโมดูล PAI ของโปรแกรม ABAP ที่กำหนดหน้าจอย่อยได้ ข้อมูลจะถูกส่งระหว่างฟิลด์ที่มีชื่อเหมือนกันในหน้าจอย่อยและโปรแกรม ABAP เมื่อมีการทริกเกอร์เหตุการณ์ PAI หรือที่คำสั่ง FIELD ที่สอดคล้องกันในลอจิกโฟลว์ PAI ของหน้าจอย่อย

วิธีการสร้างและฝังหน้าจอย่อย

ขั้นตอนทั้งสามที่กล่าวไว้ข้างต้นนั้นดำเนินการในหน้าจอ Painter และในตรรกะการทำงานของหน้าจอหลัก ลำดับด้านล่างนี้จะสร้างหน้าจอหลักหนึ่งหน้าจอที่มีพื้นที่หน้าจอย่อยหนึ่งพื้นที่

  1. สร้างพื้นที่หน้าจอย่อย: เปิดหน้าจอหลัก เช่น หน้าจอ 100 ในเมนูหน้าจอ Painter (SE51) เลือก หน้าจอย่อย เลือกองค์ประกอบจากแถบองค์ประกอบ วาดลงบนเลย์เอาต์ และป้อนชื่อ เช่น SUB_AREA ในช่องชื่อ ชื่อนี้จะถูกนำไปใช้ในคำสั่ง CALL SUBSCREEN ในภายหลัง
  2. สร้างหน้าจอย่อย: สร้างหน้าจอที่สอง เช่น หน้าจอ 110 และตั้งค่าประเภทหน้าจอเป็น หน้าจอย่อย ในส่วนของแอตทริบิวต์ หน้าจอย่อยไม่มีช่องรหัส OK และไม่มีสถานะ GUI ของตัวเอง
  3. ระบุตำแหน่งช่องข้อมูล: วาดช่องป้อนข้อมูลบนหน้าจอ 110 จัดวางเลย์เอาต์ให้อยู่ภายในขนาดของพื้นที่ย่อยหน้าจอ เนื่องจากจะแสดงเฉพาะส่วนที่พอดีเท่านั้น โดยวัดจากมุมบนซ้าย
  4. ประกาศข้อมูลทั่วโลก: วางฟิลด์เหล่านั้นไว้ในส่วน include ด้านบนของ module pool เพื่อให้ทั้งหน้าจอหลักและหน้าจอย่อยอ่านค่าตัวแปรส่วนกลางเดียวกัน
  5. เรียกใช้งานหน้าจอย่อย: เพิ่มคำสั่ง CALL SUBSCREEN ลงใน PBO และ PAI ของหน้าจอหลัก ดังแสดงด้านล่าง
  6. เปิดใช้งานและทดสอบ: เปิดใช้งานหน้าจอและโปรแกรม จากนั้นเริ่มการทำธุรกรรม พื้นที่หน้าจอย่อยจะถูกเติมเต็มด้วยหน้าจอ 110 และโมดูลต่างๆ จะทำงานภายในตรรกะการทำงานของหน้าจอ 100
* Flow logic of the main screen 100
PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  CALL SUBSCREEN sub_area INCLUDING 'SAPMZDEMO' '0110'.

PROCESS AFTER INPUT.
  CALL SUBSCREEN sub_area.
  MODULE user_command_0100.

💡 เคล็ดลับ: เมื่อพื้นที่นั้นต้องแสดงหน้าจอย่อยที่แตกต่างกันไปตามข้อมูลที่ผู้ใช้ป้อน ให้เก็บหมายเลขหน้าจอไว้ในตัวแปรส่วนกลางแทนที่จะเก็บไว้ในค่าคงที่ ตัวแปรนั้นต้องมีชื่อเดียวกันทั้งในโปรแกรมและในคำสั่ง CALL SUBSCREEN

สิ่งที่น่าจดจำ

  • ชื่อขององค์ประกอบของหน้าจอย่อยภายในหน้าจอไม่ควรซ้ำกัน
  • คุณไม่ควรแนบ OK_CODE หรือ FCODE เข้ากับหน้าจอย่อย OK_CODE ของหน้าจอหลักคือ OK_CODE ของหน้าจอย่อย
  • หน้าจอย่อยไม่สามารถมีโมดูลกล่องโต้ตอบใด ๆ ที่มี SET TITLEBAR, SET PF-STATUS, SET SCREEN, LEAVE SCREEN หรือ LEAVE TO SCREEN ซึ่งจะทำให้เกิดข้อผิดพลาดรันไทม์
  • คุณต้องเรียกมันในโฟลว์ลอจิก (ทั้ง PBO และ PAI) ของหน้าจอหลัก
  • ไม่อนุญาตให้ใช้ CALL SUBSCREEN ในคำสั่ง CHAIN..ENDCHAIN ​​และ LOOP ENDLOOP
  • ไม่สามารถมีโมดูล AT EXIT-COMMAND
  • ฟิลด์ที่คุณใช้คือฟิลด์ส่วนกลาง จะต้องประกาศไว้ด้านบนสุด ได้แก่
  • หากใช้หน้าจอย่อยจากที่อื่น โปรแกรมโต้ตอบ การถ่ายโอนข้อมูลจะไม่เกิดขึ้นเว้นแต่คุณจะเพิ่มรหัสเฉพาะ

⚠️คำเตือน: การวางคำสั่ง CALL SUBSCREEN ไว้ภายใน CHAIN ​​… ENDCHAIN ​​หรือภายในลูปของหน้าจอ จะทำให้เกิดข้อผิดพลาดทางไวยากรณ์ และการเรียกหมายเลขหน้าจอที่ไม่มีอยู่จริงจะทำให้เกิดข้อผิดพลาดขณะรันไทม์ในการแสดงผลครั้งแรก

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

แถบแท็บ (Tabstrip) คือคอนเทนเนอร์ที่หน้าแท็บแต่ละหน้าเป็นพื้นที่ย่อยบนหน้าจอ พื้นที่ย่อยบนหน้าจอคือเนื้อหาหลัก และแถบแท็บทำหน้าที่เพียงแค่กำหนดว่าพื้นที่ย่อยบนหน้าจอใดที่ผู้ใช้สามารถมองเห็นได้ในขณะนั้น

หน้าจอหลักอาจมีพื้นที่หน้าจอย่อยหลายส่วน และแต่ละส่วนจะแสดงหน้าจอย่อยทีละส่วน หน้าจอย่อยแต่ละส่วนสามารถซ้อนหน้าจอย่อยเพิ่มเติมได้อีก ดังนั้นการซ้อนกันจึงถูกจำกัดด้วยขนาดหน้าจอและความสามารถในการอ่านเท่านั้น

ข้อมูลจะถูกส่งผ่านเฉพาะระหว่างฟิลด์บนหน้าจอและฟิลด์ในโปรแกรมที่มีชื่อเดียวกันและถูกประกาศไว้ในระดับสากลเท่านั้น ซับสกรีนที่นำมาจากโปรแกรมอื่นจะไม่ส่งข้อมูลใดๆ เว้นแต่ว่าค่าเหล่านั้นจะถูกส่งผ่านอย่างชัดเจนโดยโค้ด

ใช่แล้ว ผู้ช่วย AI จะอ่านข้อมูลข้อผิดพลาดแบบย่อและตรรกะการทำงาน จากนั้นจะชี้ไปยังสาเหตุทั่วไป เช่น หมายเลขหน้าจอหายไป การใช้คำสั่ง SET PF-STATUS ที่ไม่ได้รับอนุญาตภายในหน้าจอย่อย หรือการใช้คำสั่ง CALL SUBSCREEN ที่วางอยู่ภายในคำสั่ง CHAIN

เครื่องมือวิเคราะห์ AI จะสแกนกลุ่มโมดูล ตรวจจับหน้าจอที่มีเค้าโครงซ้ำกัน และเสนอซับสกรีนเดียวที่สามารถนำกลับมาใช้ใหม่ได้ โดยใช้คำสั่ง CALL SUBSCREEN เพื่อแทนที่หน้าจอเหล่านั้น ข้อเสนอนี้จะได้รับการตรวจสอบก่อนที่จะลบหน้าจอเหล่านั้น

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