SAP ABAP - คู่มือฉบับย่อ

ABAP ย่อมาจาก Advanced Business Application Programming ซึ่งเป็นภาษา 4GL (รุ่นที่ 4) ขณะนี้อยู่ในตำแหน่งพร้อมกับ Java เป็นภาษาหลักสำหรับการเขียนโปรแกรมเซิร์ฟเวอร์แอปพลิเคชัน SAP

เริ่มต้นด้วยสถาปัตยกรรมระดับสูงของระบบ SAP สถาปัตยกรรมไคลเอนต์ / เซิร์ฟเวอร์ 3 ชั้นของระบบ SAP ทั่วไปมีดังต่อไปนี้

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

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

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

ดังนั้นไม่เหมือนกับ C ++ และ Java โปรแกรม ABAP จะไม่ถูกเก็บไว้ในไฟล์ภายนอกที่แยกจากกัน ภายในฐานข้อมูลรหัส ABAP มีอยู่สองรูปแบบ -

  • Source รหัสที่สามารถดูและแก้ไขได้ด้วยเครื่องมือปรับแต่ง ABAP

  • Generated codeซึ่งเป็นการแสดงไบนารี หากคุณคุ้นเคยกับ Java โค้ดที่สร้างขึ้นนี้ค่อนข้างเทียบได้กับโค้ด Java byte

ระบบรันไทม์ถือได้ว่าเป็นเครื่องเสมือนเช่นเดียวกับเครื่องเสมือน Java ส่วนประกอบสำคัญของระบบรันไทม์ ABAP คืออินเทอร์เฟซฐานข้อมูลที่เปลี่ยนคำสั่งอิสระของฐานข้อมูล (Open SQL) เป็นคำสั่งที่ฐานข้อมูลพื้นฐานเข้าใจ (Native SQL) SAP สามารถทำงานกับฐานข้อมูลที่หลากหลายและโปรแกรม ABAP เดียวกันสามารถทำงานบนฐานข้อมูลทั้งหมดได้

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

สวัสดี ABAP

เริ่มต้นด้วยตัวอย่าง "Hello World" ทั่วไป

คำสั่ง ABAP แต่ละคำสั่งเริ่มต้นด้วยคีย์เวิร์ด ABAP และลงท้ายด้วยจุด คำหลักต้องคั่นด้วยช่องว่างอย่างน้อยหนึ่งช่อง ไม่สำคัญว่าคุณจะใช้หนึ่งหรือหลายบรรทัดสำหรับคำสั่ง ABAP

คุณต้องป้อนรหัสของคุณโดยใช้ ABAP Editor ซึ่งเป็นส่วนหนึ่งของ ABAP Tools ที่ส่งมาพร้อมกับ SAP NetWeaver Application Server ABAP (หรือที่เรียกว่า 'AS ABAP')

'AS ABAP' เป็นแอปพลิเคชันเซิร์ฟเวอร์ที่มีฐานข้อมูลสภาพแวดล้อมรันไทม์ ABAP และเครื่องมือพัฒนา ABAP เช่น ABAP Editor AS ABAP นำเสนอแพลตฟอร์มการพัฒนาที่ไม่ขึ้นกับฮาร์ดแวร์ระบบปฏิบัติการและฐานข้อมูล

การใช้ ABAP Editor

Step 1- เริ่มทำรายการ SE38 เพื่อไปที่ ABAP Editor (จะกล่าวถึงในบทถัดไป) เริ่มสร้างรายงานที่เป็นหนึ่งในวัตถุ ABAP จำนวนมาก

Step 2- ในหน้าจอเริ่มต้นของตัวแก้ไขให้ระบุชื่อรายงานของคุณในช่องป้อนข้อมูลโปรแกรม คุณสามารถระบุชื่อเป็น ZHELLO1 Z ที่นำหน้ามีความสำคัญสำหรับชื่อ Z ทำให้มั่นใจได้ว่ารายงานของคุณอยู่ในเนมสเปซของลูกค้า

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

Step 3- คุณสามารถพิมพ์ชื่อรายงานเป็นตัวอักษรตัวพิมพ์เล็ก แต่ตัวแก้ไขจะเปลี่ยนเป็นตัวพิมพ์ใหญ่ ดังนั้นชื่อของออบเจ็กต์ ABAP จึงคำนึงถึงตัวพิมพ์เล็กและใหญ่ 'ไม่'

Step 4- หลังจากระบุชื่อรายงานแล้วให้คลิกปุ่มสร้าง หน้าต่างป๊อปอัพ ABAP: PROGRAM ATTRIBUTES จะปรากฏขึ้นและคุณจะให้ข้อมูลเพิ่มเติมเกี่ยวกับรายงานของคุณ

Step 5- เลือก "โปรแกรมปฏิบัติการ" เป็นประเภทรายงานป้อนชื่อ "รายงาน ABAP แรกของฉัน" จากนั้นเลือกบันทึกเพื่อดำเนินการต่อ หน้าต่าง CREATE OBJECT DIRECTORY ENTRY จะปรากฏขึ้นถัดไป เลือกปุ่ม LOCAL OBJECT จากนั้นป๊อปอัปจะปิดลง

คุณสามารถทำรายงานแรกของคุณให้เสร็จสมบูรณ์ได้โดยป้อนคำสั่ง WRITE ด้านล่างคำสั่งรายงานเพื่อให้รายงานฉบับสมบูรณ์มีเพียงสองบรรทัดดังนี้ -

REPORT ZHELLO1. 
WRITE 'Hello World'.

เริ่มต้นรายงาน

เราสามารถใช้แป้นพิมพ์ (Ctrl + S) หรือไอคอนบันทึก (ด้านขวามือข้างช่องคำสั่ง) เพื่อบันทึกรายงาน การพัฒนา ABAP เกิดขึ้นใน AS ABAP

การเริ่มต้นรายงานทำได้ง่ายเพียงแค่บันทึก คลิกปุ่ม ACTIVATION (ด้านซ้ายมือถัดจากไอคอนเริ่มต้น) และเริ่มรายงานโดยใช้ไอคอน DIRECT PROCESSING หรือปุ่มฟังก์ชัน F8 ชื่อ "My First ABAP Report" พร้อมกับเอาต์พุต "Hello World" จะปรากฏขึ้นด้วย นี่คือผลลัพธ์ -

My First ABAP Report 
Hello World

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

การดูรหัสที่มีอยู่

หากคุณดูที่ฟิลด์ Program และดับเบิลคลิกที่ค่า ZHELLO1 ตัวแก้ไข ABAP จะแสดงรหัสสำหรับรายงานของคุณ สิ่งนี้เรียกว่าการนำทางไปข้างหน้า การดับเบิลคลิกที่ชื่อของวัตถุจะเปิดวัตถุนั้นในเครื่องมือที่เหมาะสม

ในการทำความเข้าใจ SAP ABAP คุณต้องมีความรู้พื้นฐานเกี่ยวกับหน้าจอเช่นการเข้าสู่ระบบตัวแก้ไข ABAP การออกจากระบบและอื่น ๆ บทนี้มุ่งเน้นไปที่การนำทางหน้าจอและการทำงานของแถบเครื่องมือมาตรฐาน

หน้าจอเข้าสู่ระบบ

หลังจากที่คุณล็อกออนเข้าสู่เซิร์ฟเวอร์ SAP หน้าจอล็อกอิน SAP จะแจ้งให้ป้อน ID ผู้ใช้และรหัสผ่าน คุณต้องระบุ ID ผู้ใช้และรหัสผ่านที่ถูกต้องแล้วกด Enter (ID ผู้ใช้และรหัสผ่านได้รับจากผู้ดูแลระบบ) ต่อไปนี้เป็นหน้าจอเข้าสู่ระบบ

ไอคอนแถบเครื่องมือ

ต่อไปนี้คือแถบเครื่องมือหน้าจอ SAP

Menu Bar - แถบเมนูคือบรรทัดบนสุดของหน้าต่างโต้ตอบ

Standard Toolbar - ฟังก์ชั่นมาตรฐานส่วนใหญ่เช่นด้านบนของหน้า, ท้ายหน้า, เลื่อนหน้าขึ้น, เลื่อนหน้าลงและบันทึกมีอยู่ในแถบเครื่องมือนี้

Title Bar - Title Bar แสดงชื่อของแอปพลิเคชัน / กระบวนการทางธุรกิจที่คุณกำลังใช้งานอยู่

Application Toolbar - ตัวเลือกเมนูเฉพาะแอปพลิเคชันมีอยู่ที่นี่

Command Field- เราสามารถเริ่มแอปพลิเคชันได้โดยไม่ต้องไปที่เมนูธุรกรรมและรหัสตรรกะบางส่วนจะถูกกำหนดให้กับกระบวนการทางธุรกิจ รหัสธุรกรรมถูกป้อนในช่องคำสั่งเพื่อเริ่มต้นแอปพลิเคชันโดยตรง

บรรณาธิการ ABAP

คุณสามารถเริ่มต้นธุรกรรม SE38 (ป้อน SE38 ในฟิลด์คำสั่ง) เพื่อไปที่ ABAP Editor

คีย์มาตรฐานและไอคอน

Exit keysใช้เพื่อออกจากโปรแกรม / โมดูลหรือออกจากระบบ นอกจากนี้ยังใช้เพื่อกลับไปที่หน้าจอที่เข้าใช้ล่าสุด

ต่อไปนี้เป็นคีย์ออกมาตรฐานที่ใช้ใน SAP ดังที่แสดงในภาพ

ต่อไปนี้เป็นตัวเลือกในการตรวจสอบเปิดใช้งานและประมวลผลรายงาน

ออกจากระบบ

การออกจากโปรแกรมแก้ไข ABAP หรือ / และออกจากระบบ SAP เป็นแนวทางปฏิบัติที่ดีเสมอหลังจากเสร็จสิ้นการทำงาน

งบ

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

บรรทัดแรกที่ไม่แสดงความคิดเห็นในโปรแกรมเริ่มต้นด้วยคำว่า REPORT รายงานจะเป็นบรรทัดแรกของโปรแกรมปฏิบัติการที่สร้างขึ้น คำสั่งตามด้วยชื่อโปรแกรมที่สร้างขึ้นก่อนหน้านี้ จากนั้นสายจะสิ้นสุดลงด้วยการหยุดเต็มรูปแบบ

ไวยากรณ์คือ -

REPORT [Program_Name]. 
 
[Statements…].

สิ่งนี้ช่วยให้คำสั่งใช้เวลาหลายบรรทัดในตัวแก้ไขตามที่ต้องการ ตัวอย่างเช่น REPORT อาจมีลักษณะดังนี้ -

REPORT Z_Test123_01.

คำสั่งประกอบด้วยคำสั่งและตัวแปรและตัวเลือกใด ๆ ที่ลงท้ายด้วยจุด ตราบเท่าที่ระยะเวลาปรากฏในตอนท้ายของคำสั่งจะไม่มีปัญหาเกิดขึ้น เป็นช่วงเวลาที่ทำเครื่องหมายว่าคำสั่งสิ้นสุดลง

มาเขียนโค้ดกัน

ในบรรทัดด้านล่างคำสั่ง REPORT ให้พิมพ์คำสั่งนี้: เขียน 'ABAP Tutorial'

REPORT Z_Test123_01.

Write 'This is ABAP Tutorial'.

Four things to consider while writing statements -

  • คำสั่ง write เขียนสิ่งที่อยู่ในเครื่องหมายคำพูดลงในหน้าต่างผลลัพธ์

  • โปรแกรมแก้ไข ABAP จะแปลงข้อความทั้งหมดเป็นตัวพิมพ์ใหญ่ยกเว้นสตริงข้อความซึ่งล้อมรอบด้วยเครื่องหมายอัญประกาศเดี่ยว

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

  • ABAP ไม่มีข้อ จำกัด ในรูปแบบของงบ กล่าวคือสามารถวางคำสั่งหลายรายการในบรรทัดเดียวหรือคำสั่งเดียวอาจขยายไปหลายบรรทัด

สัญกรณ์ลำไส้ใหญ่

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

ต่อไปนี้เป็นตัวอย่างของโปรแกรมที่สามารถบันทึกการกดปุ่ม -

WRITE 'Hello'. 
WRITE 'ABAP'. 
WRITE 'World'.

โดยใช้สัญกรณ์โคลอนสามารถเขียนใหม่ได้ด้วยวิธีนี้ -

WRITE: 'Hello', 
       'ABAP', 
       'World'.

เช่นเดียวกับคำสั่ง ABAP อื่น ๆ เค้าโครงไม่สำคัญ นี่เป็นคำสั่งที่ถูกต้องเท่าเทียมกัน -

WRITE: 'Hello', 'ABAP', 'World'.

ความคิดเห็น

ความคิดเห็นแบบอินไลน์อาจถูกประกาศที่ใดก็ได้ในโปรแกรมโดยหนึ่งในสองวิธี -

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

* This is the comment line
  • ความคิดเห็นของบรรทัดบางส่วนจะระบุโดยการใส่เครื่องหมายอัญประกาศคู่ (") หลังคำสั่งระบบจะพิจารณาข้อความทั้งหมดตามเครื่องหมายอัญประกาศคู่ว่าเป็นความคิดเห็นคุณไม่จำเป็นต้องยุติความคิดเห็นในบรรทัดบางส่วนตามช่วงเวลาเนื่องจากอาจไม่ขยายไปมากกว่านี้ มากกว่าหนึ่งบรรทัด -

WRITE 'Hello'. "Here is the partial comment

Note - โค้ดแสดงความคิดเห็นไม่ได้เป็นตัวพิมพ์ใหญ่โดยตัวแก้ไข ABAP

การระงับช่องว่าง

คำสั่ง NO-ZERO เป็นไปตามคำสั่ง DATA มันระงับศูนย์นำหน้าทั้งหมดของฟิลด์ตัวเลขที่มีช่องว่าง ผลลัพธ์มักจะง่ายกว่าสำหรับผู้ใช้ในการอ่าน

ตัวอย่าง

REPORT Z_Test123_01. 

DATA: W_NUR(10) TYPE N.
      MOVE 50 TO W_NUR.
      WRITE W_NUR NO-ZERO.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

50

Note - หากไม่มีคำสั่ง NO-ZERO เอาต์พุตคือ 0000000050

เส้นว่าง

คำสั่ง SKIP ช่วยในการแทรกบรรทัดว่างบนเพจ

ตัวอย่าง

คำสั่งข้อความมีดังนี้ -

WRITE 'This is the 1st line'. 
SKIP. 
WRITE 'This is the 2nd line'.

คำสั่งข้อความด้านบนสร้างผลลัพธ์ต่อไปนี้ -

This is the 1st line 
This is the 2nd line

เราอาจใช้คำสั่ง SKIP เพื่อแทรกบรรทัดว่างหลาย ๆ บรรทัด

SKIP number_of_lines.

ผลลัพธ์จะเป็นบรรทัดว่างหลายบรรทัดที่กำหนดโดยจำนวนบรรทัด คำสั่ง SKIP ยังสามารถวางตำแหน่งเคอร์เซอร์บนบรรทัดที่ต้องการบนเพจ

SKIP TO LINE line_number.

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

การแทรกเส้น

คำสั่ง ULINE จะแทรกเส้นแนวนอนข้ามเอาต์พุตโดยอัตโนมัติ นอกจากนี้ยังสามารถควบคุมตำแหน่งและความยาวของเส้นได้ ไวยากรณ์ค่อนข้างง่าย -

ULINE.

ตัวอย่าง

คำสั่งข้อความมีดังนี้ -

WRITE 'This is Underlined'.
ULINE.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

This is Underlined (and a horizontal line below this).

ข้อความ

คำสั่ง MESSAGE แสดงข้อความที่กำหนดโดย ID ข้อความที่ระบุในคำสั่ง REPORT ที่จุดเริ่มต้นของโปรแกรม รหัสข้อความเป็นรหัสอักขระ 2 ตัวที่กำหนดชุดข้อความ 1,000 ข้อความที่โปรแกรมจะเข้าถึงเมื่อใช้คำสั่ง MESSAGE

ข้อความจะมีหมายเลขตั้งแต่ 000 ถึง 999 การเชื่อมโยงกับแต่ละหมายเลขเป็นข้อความที่มีความยาวไม่เกิน 80 อักขระ เมื่อมีการเรียกหมายเลขข้อความข้อความที่เกี่ยวข้องจะปรากฏขึ้น

ต่อไปนี้เป็นอักขระสำหรับใช้กับคำสั่ง Message -

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

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

ตัวอย่าง

เมื่อเราสร้างข้อความสำหรับข้อความ ID AB คำสั่ง MESSAGE - MESSAGE E011 จะให้ผลลัพธ์ต่อไปนี้ -

EAB011 This report does not support sub-number summarization.

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

ประเภทข้อมูลพื้นฐาน

ABAP เสนอโปรแกรมเมอร์ประเภทความยาวคงที่และความยาวตัวแปรหลากหลายประเภท ตารางต่อไปนี้แสดงประเภทข้อมูลพื้นฐานของ ABAP -

ประเภท คำสำคัญ
ฟิลด์ไบต์ X
ช่องข้อความ
จำนวนเต็ม ผม
จุดลอยตัว
หมายเลขบรรจุ
สตริงข้อความ STRING

ฟิลด์และตัวเลขบางส่วนสามารถแก้ไขได้โดยใช้ชื่ออย่างน้อยหนึ่งชื่อดังต่อไปนี้ -

  • byte
  • numeric
  • character-like

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

ประเภท ความยาวโดยทั่วไป ช่วงทั่วไป
X 1 ไบต์ ค่าไบต์ใด ๆ (00 ถึง FF)
1 อักขระ 1 ถึง 65535
N (ยื่นข้อความตัวเลข) 1 อักขระ 1 ถึง 65535
D (วันที่เหมือนอักขระ) 8 ตัวอักษร 8 ตัวอักษร
T (เวลาเหมือนอักขระ) 6 ตัวอักษร 6 ตัวอักษร
ผม 4 ไบต์ -2147483648 ถึง 2147483647
8 ไบต์ 2.2250738585072014E-308 ถึง 1.7976931348623157E + 308 บวกหรือลบ
8 ไบต์ [-10 ^ (2len -1) +1] ถึง [+ 10 ^ (2len -1) 1] (โดยที่ len = ความยาวคงที่)
STRING ตัวแปร อักขระที่เป็นตัวอักษรและตัวเลขคละกัน
XSTRING (ไบต์สตริง) ตัวแปร ค่าไบต์ใด ๆ (00 ถึง FF)

ตัวอย่าง

REPORT YR_SEP_12. 
DATA text_line TYPE C LENGTH 40. 
text_line = 'A Chapter on Data Types'. 
Write text_line. 

DATA text_string TYPE STRING. 
text_string = 'A Program in ABAP'. 
Write / text_string. 

DATA d_date TYPE D. 
d_date = SY-DATUM. 
Write / d_date.

ในตัวอย่างนี้เรามีสตริงอักขระประเภท C ที่มีความยาวที่กำหนดไว้ล่วงหน้า 40 STRING เป็นประเภทข้อมูลที่สามารถใช้สำหรับสตริงอักขระที่มีความยาวตัวแปร (สตริงข้อความ) โดยทั่วไปควรใช้ออบเจ็กต์ข้อมูลประเภท STRING สำหรับเนื้อหาที่มีลักษณะเป็นอักขระโดยที่ความยาวคงที่ไม่สำคัญ

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

A Chapter on Data Types 
A Program in ABAP 
12092015

ประเภท DATE ใช้สำหรับจัดเก็บข้อมูลวันที่และสามารถจัดเก็บตัวเลขแปดหลักดังที่แสดงด้านบน

ประเภทที่ซับซ้อนและการอ้างอิง

ประเภทที่ซับซ้อนแบ่งออกเป็น Structure types และ Table types. ในประเภทโครงสร้างประเภทพื้นฐานและโครงสร้าง (เช่นโครงสร้างที่ฝังอยู่ในโครงสร้าง) จะถูกจัดกลุ่มเข้าด้วยกัน คุณอาจพิจารณาเฉพาะการจัดกลุ่มประเภทประถมศึกษา แต่คุณต้องตระหนักถึงความพร้อมในการทำรังของโครงสร้าง

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

ส. พารามิเตอร์และคำอธิบาย
1

Line or row type

แถวของตารางภายในอาจเป็นประเภทพื้นฐานซับซ้อนหรืออ้างอิง

2

Key

ระบุเขตข้อมูลหรือกลุ่มของเขตข้อมูลเป็นคีย์ของตารางภายในที่ระบุแถวของตาราง คีย์ประกอบด้วยฟิลด์ประเภทพื้นฐาน

3

Access method

อธิบายว่าโปรแกรม ABAP เข้าถึงรายการตารางแต่ละรายการได้อย่างไร

ชนิดการอ้างอิงใช้เพื่ออ้างถึงอินสแตนซ์ของคลาสอินเทอร์เฟซและรายการข้อมูลรันไทม์ บริการประเภทรันไทม์ ABAP OOP (RTTS) เปิดใช้งานการประกาศรายการข้อมูล ณ รันไทม์

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

คุณต้องประกาศตัวแปรทั้งหมดก่อนจึงจะใช้ได้ รูปแบบพื้นฐานของการประกาศตัวแปรคือ -

DATA <f> TYPE <type> VALUE <val>.

ที่นี่ <f> ระบุชื่อของตัวแปร ชื่อของตัวแปรมีความยาวได้สูงสุด 30 อักขระ <type> ระบุประเภทของตัวแปร ประเภทข้อมูลใด ๆ ที่มีแอตทริบิวต์ทางเทคนิคที่ระบุอย่างครบถ้วนเรียกว่า <type> <val> ระบุค่าเริ่มต้นของตัวแปร <f> ในกรณีที่คุณกำหนดตัวแปรความยาวคงที่พื้นฐานคำสั่ง DATA จะเติมค่าของตัวแปรโดยอัตโนมัติด้วยค่าเริ่มต้นเฉพาะประเภท ค่าอื่น ๆ ที่เป็นไปได้สำหรับ <val> อาจเป็นตัวอักษรค่าคงที่หรือประโยคที่ชัดเจนเช่น Is INITIAL

ต่อไปนี้เป็นตัวอย่างที่ถูกต้องของการประกาศตัวแปร

DATA d1(2) TYPE C.  
DATA d2 LIKE d1.  
DATA minimum_value TYPE I VALUE 10.

ในข้อมูลโค้ดด้านบน d1 เป็นตัวแปรประเภท C, d2 เป็นตัวแปรประเภท d1 และค่าต่ำสุดเป็นตัวแปรของจำนวนเต็ม ABAP ประเภท I

บทนี้จะอธิบายประเภทตัวแปรต่างๆที่มีอยู่ใน ABAP มีตัวแปรสามชนิดใน ABAP -

  • ตัวแปรคงที่
  • ตัวแปรอ้างอิง
  • ตัวแปรของระบบ

ตัวแปรคงที่

  • ตัวแปรคงถูกประกาศในรูทีนย่อยโมดูลฟังก์ชันและวิธีการแบบคงที่

  • อายุการใช้งานเชื่อมโยงกับบริบทของการประกาศ

  • ด้วยคำสั่ง 'CLASS-DATA' คุณสามารถประกาศตัวแปรภายในคลาสได้

  • คำสั่ง 'PARAMETERS' สามารถใช้เพื่อประกาศอ็อบเจ็กต์ข้อมูลพื้นฐานที่เชื่อมโยงกับฟิลด์อินพุตบนหน้าจอการเลือก

  • คุณยังสามารถประกาศตารางภายในที่เชื่อมโยงกับช่องป้อนข้อมูลบนหน้าจอการเลือกได้โดยใช้คำสั่ง 'SELECT-OPTIONS'

ต่อไปนี้เป็นหลักการที่ใช้ในการตั้งชื่อตัวแปร -

  • คุณไม่สามารถใช้อักขระพิเศษเช่น "t" และ "," เพื่อตั้งชื่อตัวแปร

  • ไม่สามารถเปลี่ยนชื่อของออบเจ็กต์ข้อมูลที่กำหนดไว้ล่วงหน้าได้

  • ชื่อของตัวแปรต้องไม่เหมือนกับคีย์เวิร์ดหรืออนุประโยค ABAP ใด ๆ

  • ชื่อของตัวแปรต้องสื่อความหมายของตัวแปรโดยไม่จำเป็นต้องแสดงความคิดเห็นเพิ่มเติม

  • ยัติภังค์สงวนไว้เพื่อแสดงส่วนประกอบของโครงสร้าง ดังนั้นคุณควรหลีกเลี่ยงยัติภังค์ในชื่อตัวแปร

  • อักขระขีดล่างสามารถใช้เพื่อแยกคำประสม

โปรแกรมนี้แสดงวิธีการประกาศตัวแปรโดยใช้คำสั่ง PARAMETERS -

REPORT ZTest123_01. 
PARAMETERS: NAME(10) TYPE C, 
CLASS TYPE I, 
SCORE TYPE P DECIMALS 2, 
CONNECT TYPE MARA-MATNR.

ในที่นี้ NAME แสดงถึงพารามิเตอร์ 10 อักขระ CLASS ระบุพารามิเตอร์ของประเภทจำนวนเต็มโดยมีขนาดเริ่มต้นเป็นไบต์ SCORE แสดงถึงพารามิเตอร์ประเภทแพ็กเกจที่มีค่าสูงสุดสองตำแหน่งทศนิยมและ CONNECT หมายถึงประเภท MARA-MATNF ของ ABAP Dictionary .

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

ตัวแปรอ้างอิง

ไวยากรณ์สำหรับการประกาศตัวแปรอ้างอิงคือ -

DATA <ref> TYPE REF TO <type> VALUE IS INITIAL.
  • REF TO นอกจากนี้ยังประกาศตัวแปรอ้างอิงอ้างอิง

  • ข้อกำหนดหลัง REF TO ระบุประเภทคงที่ของตัวแปรอ้างอิง

  • ประเภทคงที่ จำกัด ชุดของวัตถุที่ <ref> สามารถอ้างถึงได้

  • ตัวแปรอ้างอิงชนิดไดนามิกคือประเภทข้อมูลหรือคลาสที่อ้างอิงอยู่ในปัจจุบัน

  • ประเภทคงที่มักจะเป็นแบบทั่วไปมากกว่าหรือเหมือนกับประเภทไดนามิกเสมอ

  • การเพิ่ม TYPE ใช้เพื่อสร้างประเภทการอ้างอิงที่ถูกผูกไว้และเป็นค่าเริ่มต้นและสามารถระบุได้เฉพาะ IS INITIAL หลังจากการเพิ่ม VALUE

ตัวอย่าง

CLASS C1 DEFINITION. 
PUBLIC SECTION. 
DATA Bl TYPE I VALUE 1. 
ENDCLASS. DATA: Oref TYPE REF TO C1 , 
Dref1 LIKE REF TO Oref, 
Dref2 TYPE REF TO I . 
CREATE OBJECT Oref. 
GET REFERENCE OF Oref INTO Dref1. 
CREATE DATA Dref2. 
Dref2→* = Dref1→*→Bl.
  • ในข้อมูลโค้ดด้านบนจะมีการประกาศ Oref อ้างอิงออบเจ็กต์และตัวแปรอ้างอิงข้อมูลสองตัวแปร Dref1 และ Dref2

  • ตัวแปรอ้างอิงข้อมูลทั้งสองถูกพิมพ์อย่างสมบูรณ์และสามารถยกเลิกการอ้างอิงได้โดยใช้ตัวดำเนินการ dereferencing → * ที่ตำแหน่งตัวถูกดำเนินการ

ตัวแปรของระบบ

  • ตัวแปรระบบ ABAP สามารถเข้าถึงได้จากโปรแกรม ABAP ทั้งหมด

  • ฟิลด์เหล่านี้ถูกเติมเต็มโดยสภาพแวดล้อมรันไทม์

  • ค่าในฟิลด์เหล่านี้ระบุสถานะของระบบ ณ ช่วงเวลาใดเวลาหนึ่ง

  • คุณสามารถค้นหารายการตัวแปรระบบทั้งหมดได้ในตาราง SYST ใน SAP

  • แต่ละช่องของโครงสร้าง SYST สามารถเข้าถึงได้โดยใช้“ SYST-” หรือ“ SY-”

ตัวอย่าง

REPORT Z_Test123_01. 

WRITE:/'SY-ABCDE', SY-ABCDE,       
      /'SY-DATUM', SY-DATUM, 
      /'SY-DBSYS', SY-DBSYS, 
      /'SY-HOST ', SY-HOST, 
      /'SY-LANGU', SY-LANGU,
      /'SY-MANDT', SY-MANDT,
      /'SY-OPSYS', SY-OPSYS,
      /'SY-SAPRL', SY-SAPRL,
      /'SY-SYSID', SY-SYSID,
      /'SY-TCODE', SY-TCODE,
      /'SY-UNAME', SY-UNAME,
      /'SY-UZEIT', SY-UZEIT.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

SY-ABCDE ABCDEFGHIJKLMNOPQRSTUVWXYZ  
SY-DATUM 12.09.2015 
SY-DBSYS ORACLE                   
SY-HOST sapserver 
SY-LANGU EN 
SY-MANDT 800 
SY-OPSYS Windows NT 
SY-SAPRL 700 
SY-SYSID DMO 
SY-TCODE SE38 
SY-UNAME SAPUSER 
SY-UZEIT 14:25:48

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

ตัวอักษรตัวเลข

ตัวอักษรตัวเลขคือลำดับของตัวเลขซึ่งสามารถมีเครื่องหมายนำหน้าได้ ในลิเทอรัลตัวเลขไม่มีตัวคั่นทศนิยมและไม่มีสัญกรณ์ที่มีแมนทิสซาและเลขชี้กำลัง

ต่อไปนี้เป็นตัวอย่างบางส่วนของตัวอักษรตัวเลข -

183. 
-97. 
+326.

ตัวอักษร

ตัวอักษรคือลำดับของอักขระที่เป็นตัวเลขและตัวอักษรในซอร์สโค้ดของโปรแกรม ABAP ที่อยู่ในเครื่องหมายคำพูดเดี่ยว อักษรตัวอักษรที่อยู่ในเครื่องหมายอัญประกาศมี ABAP type C ที่กำหนดไว้ล่วงหน้าและอธิบายเป็นตัวอักษรฟิลด์ข้อความ ตัวอักษรที่อยู่ใน“ เครื่องหมายคำพูดย้อนกลับ” มีประเภท ABAP STRING และอธิบายเป็นตัวอักษรสตริง ความยาวของฟิลด์ถูกกำหนดโดยจำนวนอักขระ

Note - ในลิเทอรัลฟิลด์ข้อความช่องว่างต่อท้ายจะถูกละเว้น แต่ในตัวอักษรสตริงจะถูกนำมาพิจารณา

ต่อไปนี้เป็นตัวอย่างตัวอักษรบางส่วน

ตัวอักษรฟิลด์ข้อความ

REPORT YR_SEP_12. 
Write 'Tutorials Point'. 
Write / 'ABAP Tutorial'.

ตัวอักษรฟิลด์สตริง

REPORT YR_SEP_12. 
Write `Tutorials Point `. 
Write / `ABAP Tutorial `.

ผลลัพธ์จะเหมือนกันในทั้งสองกรณีข้างต้น -

Tutorials Point  
ABAP Tutorial

Note- เมื่อเราพยายามเปลี่ยนค่าของค่าคงที่อาจเกิดข้อผิดพลาดทางไวยากรณ์หรือรันไทม์ ค่าคงที่ที่คุณประกาศในส่วนการประกาศของคลาสหรือส่วนต่อประสานเป็นของแอตทริบิวต์แบบคงที่ของคลาสหรือส่วนต่อประสานนั้น

คำชี้แจงต่อเนื่อง

เราสามารถประกาศอ็อบเจ็กต์ข้อมูลที่ตั้งชื่อโดยใช้คำสั่ง CONSTANTS

ต่อไปนี้เป็นไวยากรณ์ -

CONSTANTS <f> TYPE <type> VALUE <val>.

คำสั่ง CONSTANTS คล้ายกับคำสั่ง DATA

<f> ระบุชื่อสำหรับค่าคงที่ TYPE <type> แทนค่าคงที่ชื่อ <f> ซึ่งสืบทอดคุณสมบัติทางเทคนิคเดียวกันกับชนิดข้อมูลที่มีอยู่ <type> VALUE <val> กำหนดค่าเริ่มต้นให้กับชื่อค่าคงที่ที่ประกาศ <f>

Note- เราควรใช้คำสั่ง VALUE ในคำสั่ง CONSTANTS อนุประโยค 'VALUE' ใช้เพื่อกำหนดค่าเริ่มต้นให้กับค่าคงที่ระหว่างการประกาศ

เรามีค่าคงที่ 3 ประเภทเช่นค่าคงที่ระดับประถมศึกษาเชิงซ้อนและค่าคงที่อ้างอิง คำสั่งต่อไปนี้แสดงวิธีกำหนดค่าคงที่โดยใช้คำสั่ง CONSTANTS -

REPORT YR_SEP_12. 
CONSTANTS PQR TYPE P DECIMALS 4 VALUE '1.2356'. 
Write: / 'The value of PQR is:', PQR.

ผลลัพธ์คือ -

The value of PQR is: 1.2356

ในที่นี้หมายถึงชนิดข้อมูลพื้นฐานและเรียกว่าค่าคงที่พื้นฐาน

ต่อไปนี้เป็นตัวอย่างสำหรับค่าคงที่ที่ซับซ้อน -

BEGIN OF EMPLOYEE,  
Name(25) TYPE C VALUE 'Management Team',  
Organization(40) TYPE C VALUE 'Tutorials Point Ltd',  
Place(10) TYPE C VALUE 'India',  
END OF EMPLOYEE.

ในข้อมูลโค้ดด้านบน EMPLOYEE เป็นค่าคงที่เชิงซ้อนที่ประกอบด้วยฟิลด์ชื่อองค์กรและสถานที่

ข้อความต่อไปนี้ประกาศการอ้างอิงคงที่ -

CONSTANTS null_pointer TYPE REF TO object VALUE IS INITIAL.

เราสามารถใช้การอ้างอิงค่าคงที่ในการเปรียบเทียบหรืออาจส่งต่อไปยังขั้นตอนต่างๆ

ABAP จัดเตรียมชุดตัวดำเนินการที่หลากหลายเพื่อจัดการกับตัวแปร ตัวดำเนินการ ABAP ทั้งหมดแบ่งออกเป็นสี่ประเภท -

  • ตัวดำเนินการเลขคณิต
  • ตัวดำเนินการเปรียบเทียบ
  • ตัวดำเนินการ Bitwise
  • ตัวดำเนินการสตริงอักขระ

ตัวดำเนินการเลขคณิต

ตัวดำเนินการทางคณิตศาสตร์ใช้ในนิพจน์ทางคณิตศาสตร์แบบเดียวกับที่ใช้ในพีชคณิต รายการต่อไปนี้อธิบายตัวดำเนินการทางคณิตศาสตร์ สมมติตัวแปรจำนวนเต็ม A ถือ 20 และตัวแปร B ถือ 40

ส. ตัวดำเนินการทางคณิตศาสตร์และคำอธิบาย
1

+ (Addition)

เพิ่มค่าที่ด้านใดด้านหนึ่งของตัวดำเนินการ ตัวอย่าง: A + B จะให้ 60

2

− (Subtraction)

ลบตัวถูกดำเนินการทางขวามือออกจากตัวถูกดำเนินการด้านซ้าย ตัวอย่าง: A - B จะให้ -20

3

* (Multiplication)

คูณค่าที่ด้านใดด้านหนึ่งของตัวดำเนินการ ตัวอย่าง: A * B จะให้ 800

4

/ (Division)

แบ่งตัวถูกดำเนินการทางซ้ายด้วยตัวถูกดำเนินการทางขวามือ ตัวอย่าง: B / A จะให้ 2

5

MOD (Modulus)

หารตัวถูกดำเนินการทางซ้ายด้วยตัวถูกดำเนินการทางขวามือและส่งกลับส่วนที่เหลือ ตัวอย่าง: B MOD A จะให้ 0

ตัวอย่าง

REPORT YS_SEP_08. 
DATA: A TYPE I VALUE 150, 
B TYPE I VALUE 50, 
Result TYPE I. 
Result =  A / B. 
WRITE / Result.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

3

ตัวดำเนินการเปรียบเทียบ

เรามาดูตัวดำเนินการเปรียบเทียบประเภทต่างๆสำหรับตัวถูกดำเนินการที่แตกต่างกัน

ส. ตัวดำเนินการเปรียบเทียบและคำอธิบาย
1

= (equality test). Alternate form is EQ.

ตรวจสอบว่าค่าของตัวถูกดำเนินการสองค่าเท่ากันหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง ตัวอย่าง (A = B) ไม่เป็นความจริง

2

<> (Inequality test). Alternate form is NE.

ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ หากค่าไม่เท่ากันเงื่อนไขจะกลายเป็นจริง ตัวอย่าง (A <> B) เป็นจริง

3

> (Greater than test). Alternate form is GT.

ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายมากกว่าค่าของตัวถูกดำเนินการด้านขวาหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง ตัวอย่าง (A> B) ไม่เป็นความจริง

4

< (Less than test). Alternate form is LT.

ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายน้อยกว่าค่าของตัวถูกดำเนินการด้านขวาหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง ตัวอย่าง (A <B) เป็นจริง

5

>= (Greater than or equals) Alternate form is GE.

ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายมากกว่าหรือเท่ากับค่าของโอเปอแรนด์ด้านขวาหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง ตัวอย่าง (A> = B) ไม่เป็นความจริง

6

<= (Less than or equals test). Alternate form is LE.

ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายน้อยกว่าหรือเท่ากับค่าของตัวถูกดำเนินการด้านขวาหรือไม่ ถ้าใช่เงื่อนไขจะกลายเป็นจริง ตัวอย่าง (A <= B) เป็นจริง

7

a1 BETWEEN a2 AND a3 (Interval test)

ตรวจสอบว่า a1 อยู่ระหว่าง a2 และ a3 (รวม) หรือไม่ ถ้าใช่เงื่อนไขนั้นจะกลายเป็นจริง ตัวอย่าง (ระหว่าง B และ C) เป็นจริง

8

IS INITIAL

เงื่อนไขจะกลายเป็นจริงหากเนื้อหาของตัวแปรไม่มีการเปลี่ยนแปลงและได้รับการกำหนดค่าเริ่มต้นโดยอัตโนมัติ ตัวอย่าง (A IS INITIAL) ไม่เป็นความจริง

9

IS NOT INITIAL

เงื่อนไขจะกลายเป็นจริงหากเนื้อหาของตัวแปรมีการเปลี่ยนแปลง ตัวอย่าง (A IS NOT INITIAL) เป็นจริง

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

ต่อไปนี้เป็นลำดับความชอบ -

  • หากฟิลด์หนึ่งเป็นประเภท I อีกฟิลด์หนึ่งจะถูกแปลงเป็นประเภท I

  • ถ้าเขตข้อมูลหนึ่งเป็นประเภท P อีกช่องหนึ่งจะถูกแปลงเป็นประเภท P

  • ถ้าฟิลด์หนึ่งเป็นประเภท D อีกฟิลด์หนึ่งจะถูกแปลงเป็นประเภท D แต่ประเภท C และ N จะไม่ถูกแปลงและจะถูกเปรียบเทียบโดยตรง ที่คล้ายกันคือกรณีที่มีประเภท T.

  • ถ้าฟิลด์หนึ่งเป็นประเภท N และอีกฟิลด์เป็นประเภท C หรือ X ฟิลด์ทั้งสองจะถูกแปลงเป็นประเภท P

  • ถ้าฟิลด์หนึ่งเป็นประเภท C และอีกฟิลด์เป็นประเภท X ประเภท X จะถูกแปลงเป็นประเภท C

ตัวอย่าง 1

REPORT YS_SEP_08. 

DATA: A TYPE I VALUE 115,
      B TYPE I VALUE 119.
      IF A LT B.
      WRITE: / 'A is less than B'.
      ENDIF

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

A is less than B

ตัวอย่าง 2

REPORT YS_SEP_08. 

DATA: A TYPE I.
      IF A IS INITIAL.
      WRITE: / 'A is assigned'.
      ENDIF.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

A is assigned.

ตัวดำเนินการ Bitwise

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

ส. ตัวดำเนินการ Bitwise และคำอธิบาย
1

BIT-NOT

ตัวดำเนินการยูนารีที่พลิกบิตทั้งหมดในเลขฐานสิบหกเป็นค่าตรงข้าม ตัวอย่างเช่นการใช้ตัวดำเนินการนี้กับเลขฐานสิบหกที่มีค่าระดับบิต 10101010 (เช่น 'AA') จะให้ 01010101

2

BIT-AND

ตัวดำเนินการไบนารีนี้เปรียบเทียบแต่ละฟิลด์ทีละบิตโดยใช้ตัวดำเนินการบูลีน AND

3

BIT-XOR

ตัวดำเนินการไบนารีที่เปรียบเทียบแต่ละฟิลด์ทีละบิตโดยใช้ตัวดำเนินการ Boolean XOR (เอกสิทธิ์เฉพาะหรือ)

4

BIT-OR

ตัวดำเนินการไบนารีที่เปรียบเทียบแต่ละฟิลด์ทีละบิตโดยใช้ตัวดำเนินการบูลีน OR

ตัวอย่างเช่นต่อไปนี้เป็นตารางความจริงที่แสดงค่าที่สร้างขึ้นเมื่อใช้ตัวดำเนินการบูลีน AND, OR หรือ XOR กับค่าบิตสองค่าที่มีอยู่ในฟิลด์ A และฟิลด์ B

ฟิลด์ก ฟิลด์ B และ หรือ XOR
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

ตัวดำเนินการสตริงอักขระ

ต่อไปนี้เป็นรายการตัวดำเนินการสตริงอักขระ -

ส. ตัวดำเนินการสตริงอักขระและคำอธิบาย
1

CO (Contains Only)

ตรวจสอบว่า A ประกอบด้วยอักขระใน B หรือไม่

2

CN (Not Contains ONLY)

ตรวจสอบว่า A มีอักขระที่ไม่อยู่ใน B หรือไม่

3

CA (Contains ANY)

ตรวจสอบว่า A มีอักขระ B อย่างน้อยหนึ่งตัวหรือไม่

4

NA (NOT Contains Any)

ตรวจสอบว่า A ไม่มีอักขระของ B หรือไม่

5

CS (Contains a String)

ตรวจสอบว่า A มีสตริงอักขระ B หรือไม่

6

NS (NOT Contains a String)

ตรวจสอบว่า A ไม่มีสตริงอักขระ B หรือไม่

7

CP (Contains a Pattern)

ตรวจสอบว่า A มีรูปแบบใน B หรือไม่

8

NP (NOT Contains a Pattern)

ตรวจสอบว่า A ไม่มีรูปแบบใน B หรือไม่

ตัวอย่าง

REPORT YS_SEP_08. 
DATA: P(10) TYPE C VALUE 'APPLE',
      Q(10) TYPE C VALUE 'CHAIR'.
      IF P CA Q.
	
      WRITE: / 'P contains at least one character of Q'.
      ENDIF.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

P contains at least one character of Q.

อาจมีสถานการณ์ที่คุณต้องเรียกใช้บล็อกโค้ดหลาย ๆ ครั้ง โดยทั่วไปคำสั่งจะดำเนินการตามลำดับ: คำสั่งแรกในฟังก์ชันจะถูกเรียกใช้งานก่อนตามด้วยคำสั่งที่สองและอื่น ๆ

ภาษาโปรแกรมจัดเตรียมโครงสร้างการควบคุมต่างๆที่ช่วยให้เส้นทางการดำเนินการซับซ้อนมากขึ้น กloop statement ช่วยให้เราสามารถดำเนินการคำสั่งหรือกลุ่มของคำสั่งได้หลายครั้งและต่อไปนี้เป็นรูปแบบทั่วไปของคำสั่งวนซ้ำในภาษาโปรแกรมส่วนใหญ่

ภาษาโปรแกรม ABAP จัดเตรียมลูปประเภทต่อไปนี้เพื่อจัดการกับข้อกำหนดการวนซ้ำ

ส. ประเภทห่วงและคำอธิบาย
1 ในขณะที่วนซ้ำ

ทำซ้ำคำสั่งหรือกลุ่มของคำสั่งเมื่อเงื่อนไขที่กำหนดเป็นจริง จะทดสอบเงื่อนไขก่อนที่จะดำเนินการร่างกายลูป

2 ทำวนซ้ำ

คำสั่ง DO มีประโยชน์สำหรับการทำซ้ำงานเฉพาะตามจำนวนครั้งที่ระบุ

3 ห่วงที่ซ้อนกัน

คุณอาจใช้ลูปอย่างน้อยหนึ่งลูปในอีกวงในขณะที่หรือทำ

คำสั่งควบคุมลูป

คำสั่งควบคุมแบบวนซ้ำเปลี่ยนการดำเนินการจากลำดับปกติ ABAP รวมถึงข้อความควบคุมที่อนุญาตให้การวนซ้ำสิ้นสุดลงก่อนเวลาอันควร สนับสนุนคำสั่งควบคุมต่อไปนี้

ส. คำชี้แจงและคำอธิบายการควบคุม
1 ดำเนินการต่อ

ทำให้ลูปข้ามส่วนที่เหลือของร่างกายและเริ่มการวนรอบถัดไป

2 ตรวจสอบ

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

3 ออก

ยุติการวนซ้ำทั้งหมดและโอนการดำเนินการไปยังคำสั่งทันทีตามลูป

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

ต่อไปนี้เป็นรูปแบบทั่วไปของโครงสร้างการตัดสินใจทั่วไปที่พบในภาษาโปรแกรมส่วนใหญ่ -

ภาษาการเขียนโปรแกรม ABAP มีข้อความประกอบการตัดสินใจประเภทต่อไปนี้

ส. คำชี้แจงและคำอธิบาย
1 คำสั่ง IF

คำสั่ง IF ประกอบด้วยนิพจน์เชิงตรรกะตามด้วยหนึ่งคำสั่งหรือมากกว่า

2 IF .. คำชี้แจงอื่น

คำสั่ง IF สามารถตามด้วยคำสั่ง ELSE ที่เป็นทางเลือกซึ่งดำเนินการเมื่อนิพจน์เป็นเท็จ

3 คำสั่ง IF ซ้อนกัน

คุณสามารถใช้คำสั่ง IF หรือ ELSEIF หนึ่งคำสั่งภายในคำสั่ง IF หรือ ELSEIF อื่น

4 คำชี้แจงการควบคุมกรณี

คำสั่ง CASE ใช้เมื่อเราต้องการเปรียบเทียบฟิลด์หรือตัวแปรตั้งแต่สองฟิลด์ขึ้นไป

Stringsซึ่งใช้กันอย่างแพร่หลายในการเขียนโปรแกรม ABAP เป็นลำดับของอักขระ

เราใช้ตัวแปรชนิดข้อมูล C เพื่อเก็บอักขระที่เป็นตัวเลขและตัวอักษรโดยมีอักขระขั้นต่ำ 1 ตัวและสูงสุด 65,535 อักขระ โดยค่าเริ่มต้นสิ่งเหล่านี้จะจัดชิดซ้าย

การสร้างสตริง

การประกาศและการเริ่มต้นต่อไปนี้จะสร้างสตริงที่ประกอบด้วยคำว่า 'สวัสดี' ขนาดของสตริงเท่ากับจำนวนอักขระในคำว่า "สวัสดี"

Data my_Char(5) VALUE 'Hello'.

โปรแกรมต่อไปนี้เป็นตัวอย่างของการสร้างสตริง

REPORT YT_SEP_15. 
DATA my_Char(5) VALUE 'Hello'. 
Write my_Char.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Hello

ความยาวสตริง

ในการหาความยาวของสตริงอักขระเราสามารถใช้ STRLEN statement. ฟังก์ชัน STRLEN () ส่งคืนจำนวนอักขระที่มีอยู่ในสตริง

ตัวอย่าง

REPORT YT_SEP_15. 
DATA: title_1(10) VALUE 'Tutorials',
      length_1 TYPE I. 
	
length_1 = STRLEN( title_1 ). 
Write: / 'The Length of the Title is:', length_1.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

The Length of the Title is: 9

ABAP รองรับคำสั่งที่หลากหลายซึ่งจัดการกับสตริง

ส. คำชี้แจงและวัตถุประสงค์
1

CONCATENATE

สองสตริงถูกรวมเข้าด้วยกันเพื่อสร้างสตริงที่สาม

2

CONDENSE

คำสั่งนี้จะลบอักขระเว้นวรรค

3

STRLEN

ใช้เพื่อหาความยาวของฟิลด์

4

REPLACE

ใช้เพื่อแทนที่อักขระ

5

SEARCH

เพื่อเรียกใช้การค้นหาในสตริงอักขระ

6

SHIFT

ใช้เพื่อย้ายเนื้อหาของสตริงไปทางซ้ายหรือขวา

7

SPLIT

ใช้เพื่อแบ่งเนื้อหาของเขตข้อมูลออกเป็นสองเขตข้อมูลขึ้นไป

ตัวอย่างต่อไปนี้ใช้ประโยชน์จากข้อความที่กล่าวถึงข้างต้น -

ตัวอย่าง

REPORT YT_SEP_15. 
DATA: title_1(10) VALUE 'Tutorials', 
      title_2(10) VALUE 'Point',
      spaced_title(30) VALUE 'Tutorials  Point  Limited',
      sep,
      dest1(30),
      dest2(30).
	
CONCATENATE title_1 title_2 INTO dest1. 
Write: / 'Concatenation:', dest1. 

CONCATENATE title_1 title_2 INTO dest2 SEPARATED BY sep. 
Write: / 'Concatenation with Space:', dest2. 

CONDENSE spaced_title.
Write: / 'Condense with Gaps:', spaced_title. 

CONDENSE spaced_title NO-GAPS. 
Write: / 'Condense with No Gaps:', spaced_title.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Concatenation: TutorialsPoint 
Concatenation with Space: Tutorials Point 
Condense with Gaps: Tutorials Point Limited 
Condense with No Gaps: TutorialsPointLimited

Note -

  • ในกรณีของการเรียงต่อกัน 'sep' จะแทรกช่องว่างระหว่างฟิลด์

  • คำสั่ง CONDENSE จะลบช่องว่างระหว่างฟิลด์ แต่เหลือช่องว่างเพียง 1 อักขระ

  • 'NO-GAPS' เป็นตัวเลือกเพิ่มเติมของคำสั่ง CONDENSE ที่ลบช่องว่างทั้งหมด

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

ABAP มีสองประเภทในตัวเพื่อทำงานกับวันที่และเวลา -

  • ชนิดข้อมูล D
  • ประเภทข้อมูล T

ต่อไปนี้เป็นรูปแบบพื้นฐาน -

DATA: date TYPE D, 
      time TYPE T.  
	
DATA: year TYPE I, 
month TYPE I,  
day TYPE I, 
hour TYPE I,  
minute TYPE I, 
second TYPE I.

ทั้งสองประเภทนี้เป็นประเภทอักขระที่มีความยาวคงที่ซึ่งมีรูปแบบ YYYYMMDD และ HHMMSS ตามลำดับ

การประทับเวลา

นอกเหนือจากประเภทในตัวเหล่านี้แล้วอีกสองประเภท TIMESTAMP และ TIMESTAMPLกำลังใช้ในตารางแอปพลิเคชันมาตรฐานจำนวนมากเพื่อจัดเก็บการประทับเวลาในรูปแบบ UTC ตารางต่อไปนี้แสดงประเภทวันที่และเวลาพื้นฐานที่มีใน ABAP

ส. ประเภทข้อมูลและคำอธิบาย
1

D

ประเภทวันที่ที่มีความยาวคงที่ในตัวของแบบฟอร์ม YYYYMMDD ตัวอย่างเช่นค่า 20100913 แทนวันที่ 13 กันยายน 2010

2

T

ประเภทเวลาที่มีความยาวคงที่ในตัวของแบบฟอร์ม HHMMSS ตัวอย่างเช่นค่า 102305 แทนเวลา 10:23:05 น.

3

TIMESTAMP (แบบ P - ความยาว 8 ไม่มีทศนิยม)

ประเภทนี้ใช้เพื่อแสดงการประทับเวลาสั้น ๆ ในรูปแบบ YYYYMMDDhhmmss ตัวอย่างเช่นค่า 20100913102305 แสดงวันที่ 13 กันยายน 2553 เวลา 10:23:05 น.

4

TIMESTAMPL (แบบ P - ความยาว 11 ทศนิยม 7)

TIMESTAMPL แสดงถึงการประทับเวลาแบบยาวในรูปแบบ YYYYMMDDhhmmss แบบ mmmuuun ที่นี่ตัวเลขเพิ่มเติม 'mmmuun' แทนเศษส่วนของวินาที

วันที่และเวลาปัจจุบัน

ข้อมูลโค้ดต่อไปนี้ดึงข้อมูลวันที่และเวลาของระบบปัจจุบัน

REPORT YR_SEP_15. 
DATA: date_1 TYPE D. 

date_1 = SY-DATUM. 
Write: / 'Present Date is:', date_1 DD/MM/YYYY. 

date_1 = date_1 + 06. 
Write: / 'Date after 6 Days is:', date_1 DD/MM/YYYY.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Present Date is: 21.09.2015 
Date after 6 Days is: 27.09.2015

ตัวแปร date_1 ถูกกำหนดค่าของวันที่ระบบปัจจุบัน SY-DATUM ต่อไปเราจะเพิ่มค่าวันที่เป็น 6 ในแง่ของการคำนวณวันที่ใน ABAP หมายความว่าเรากำลังเพิ่มองค์ประกอบวันของออบเจ็กต์วันที่ 6 วัน สภาพแวดล้อมรันไทม์ ABAP ฉลาดพอที่จะหมุนเวียนค่าวันที่เมื่อถึงสิ้นเดือน

การคำนวณเวลาทำงานคล้ายกับการคำนวณวันที่ รหัสต่อไปนี้จะเพิ่มเวลาของระบบปัจจุบัน 75 วินาทีโดยใช้การคำนวณเวลาพื้นฐาน

REPORT YR_SEP_15. 
DATA: time_1 TYPE T. 
      time_1 = SY-UZEIT. 

Write /(60) time_1 USING EDIT MASK 
'Now the Time is: __:__:__'. 
time_1 = time_1 + 75. 

Write /(60) time_1 USING EDIT MASK 
'A Minute and a Quarter from Now, it is: __:__:__'.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Now the Time is 11:45:05 
A Minute and a Quarter from Now, it is: 11:46:20

การทำงานกับการประทับเวลา

คุณสามารถดึงเวลาของระบบปัจจุบันและเก็บไว้ในตัวแปรการประทับเวลาโดยใช้ GET TIME STAMPดังแสดงในรหัสต่อไปนี้ คำสั่ง GET TIME STAMP เก็บการประทับเวลาในรูปแบบเข็มยาวหรือแบบเข็มสั้นตามชนิดของออบเจ็กต์ข้อมูลการประทับเวลาที่ใช้ ค่าเวลาประทับถูกเข้ารหัสโดยใช้มาตรฐาน UTC

REPORT YR_SEP_12. 
DATA: stamp_1 TYPE TIMESTAMP,
 
stamp_2 TYPE TIMESTAMPL. 
GET TIME STAMP FIELD stamp_1. 
Write: / 'The short time stamp is:', stamp_1 

TIME ZONE SY-ZONLO. 
GET TIME STAMP FIELD stamp_2. 
Write: / 'The long time stamp is:', stamp_2 
TIME ZONE SY-ZONLO.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

The short time stamp is: 18.09.2015 11:19:40 
The long time stamp is: 18.09.2015 11:19:40,9370000

ในตัวอย่างข้างต้นเรากำลังแสดงการประทับเวลาโดยใช้การเพิ่ม TIME ZONE ของคำสั่ง WRITE การเพิ่มนี้จัดรูปแบบเอาต์พุตของการประทับเวลาตามกฎสำหรับเขตเวลาที่ระบุ ฟิลด์ระบบ SY-ZONLO ใช้เพื่อแสดงเขตเวลาท้องถิ่นที่กำหนดค่าไว้ในค่ากำหนดของผู้ใช้

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

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

WRITE <format> <f> <options>.

ในไวยากรณ์นี้ <format> แสดงถึงข้อกำหนดรูปแบบผลลัพธ์ซึ่งอาจเป็นเครื่องหมายทับ (/) ที่ระบุการแสดงผลของผลลัพธ์ที่เริ่มต้นจากบรรทัดใหม่ นอกเหนือจากเครื่องหมายทับแล้วข้อกำหนดรูปแบบยังรวมถึงหมายเลขคอลัมน์และความยาวของคอลัมน์ด้วย ตัวอย่างเช่นคำสั่ง WRITE / 04 (6) แสดงว่าบรรทัดใหม่เริ่มต้นด้วยคอลัมน์ 4 และความยาวของคอลัมน์คือ 6 ในขณะที่คำสั่ง WRITE 20 จะแสดงบรรทัดปัจจุบันที่มีคอลัมน์ 20 พารามิเตอร์ <f> แสดงถึงตัวแปรข้อมูลหรือ ข้อความที่มีหมายเลข

ตารางต่อไปนี้อธิบายประโยคต่างๆที่ใช้ในการจัดรูปแบบ -

ส. ข้อและคำอธิบาย
1

LEFT-JUSTIFIED

ระบุว่าเอาต์พุตถูกจัดชิดซ้าย

2

CENTERED

หมายถึงว่าเอาต์พุตอยู่กึ่งกลาง

3

RIGHT-JUSTIFIED

ระบุว่าเอาต์พุตถูกต้อง

4

UNDER <g>

เอาต์พุตเริ่มต้นโดยตรงภายใต้ฟิลด์ <g>

5

NO-GAP

ระบุว่าช่องว่างหลัง <f> ถูกปฏิเสธ

6

USING EDIT MASK <m>

หมายถึงข้อกำหนดของเทมเพลตรูปแบบ <m> การใช้ No EDIT Mask: เป็นการระบุว่าเทมเพลตรูปแบบที่ระบุในพจนานุกรม ABAP ถูกปิดใช้งาน

7

NO-ZERO

หากเขตข้อมูลมีเพียงศูนย์ดังนั้นจะถูกแทนที่ด้วยช่องว่าง

ต่อไปนี้เป็นตัวเลือกการจัดรูปแบบสำหรับฟิลด์ประเภทตัวเลข -

ส. ข้อและคำอธิบาย
1

NO-SIGN

ระบุว่าไม่มีเครื่องหมายนำหน้าปรากฏบนหน้าจอ

2

EXPONENT <e>

ระบุว่าในประเภท F (เขตข้อมูลจุดลอยตัว) เลขชี้กำลังถูกกำหนดใน <e>

3

ROUND <r>

ฟิลด์ประเภท P (ประเภทข้อมูลตัวเลขที่อัดแน่น) จะถูกคูณด้วย 10 ** (- r) ก่อนแล้วจึงปัดเศษเป็นค่าจำนวนเต็ม

4

CURRENCY <c>

แสดงว่าการจัดรูปแบบเสร็จสิ้นตามค่า <c> สกุลเงินที่เก็บไว้ในตารางฐานข้อมูล TCURX

5

UNIT <u>

ระบุว่าจำนวนตำแหน่งทศนิยมได้รับการแก้ไขตาม <u> หน่วยตามที่ระบุในตารางฐานข้อมูล T006 สำหรับประเภท P

6

DECIMALS <d>

ระบุว่าต้องแสดงจำนวนหลัก <d> หลังจุดทศนิยม

ตัวอย่างเช่นตารางต่อไปนี้แสดงตัวเลือกการจัดรูปแบบต่างๆสำหรับฟิลด์วันที่ -

ตัวเลือกการจัดรูปแบบ ตัวอย่าง
วว / ดด / ปปป 13/01/58
ดด / วว / ปปป 13 ม.ค. 15
วว / ดด / ปปปป 13/01/2558
ดด / วว / ปปปป 13/01/2558
DDMMYY 130115
MMDDYY 011315
YYMMDD 150113

ในที่นี้ DD ย่อมาจากวันที่ในสองตัวเลข MM ย่อมาจากเดือนในสองตัวเลข YY หมายถึงปีในสองตัวเลขและ YYYY หมายถึงปีในสี่ตัวเลข

มาดูตัวอย่างโค้ด ABAP ที่ใช้ตัวเลือกการจัดรูปแบบข้างต้น -

REPORT ZTest123_01.
 
DATA: n(9) TYPE C VALUE 'Tutorials', 
m(5) TYPE C VALUE 'Point'. 

WRITE: n, m. 
WRITE: / n, 
/ m UNDER n. 

WRITE: / n NO-GAP, m. 
DATA time TYPE T VALUE '112538'. 

WRITE: / time, 
/(8) time Using EDIT MASK '__:__:__'.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Tutorials Point 
Tutorials  
Point 
TutorialsPoint 
112538 
11:25:38

อัน exceptionเป็นปัญหาที่เกิดขึ้นระหว่างการทำงานของโปรแกรม เมื่อมีข้อยกเว้นเกิดขึ้นโฟลว์ปกติของโปรแกรมจะหยุดชะงักและแอปพลิเคชันโปรแกรมหยุดทำงานอย่างผิดปกติซึ่งไม่แนะนำดังนั้นจึงต้องจัดการข้อยกเว้นเหล่านี้

ข้อยกเว้นเป็นวิธีการถ่ายโอนการควบคุมจากส่วนหนึ่งของโปรแกรมไปยังอีกส่วนหนึ่ง การจัดการข้อยกเว้น ABAP สร้างขึ้นจากคำหลักสามคำ - RAISE, TRY, CATCH และ CLEANUP สมมติว่าบล็อกจะทำให้เกิดข้อยกเว้นเมธอดจะจับข้อยกเว้นโดยใช้คีย์เวิร์ด TRY และ CATCH ร่วมกัน TRY - CATCH block วางอยู่รอบ ๆ โค้ดที่อาจสร้างข้อยกเว้น ต่อไปนี้เป็นไวยากรณ์สำหรับการใช้ TRY - CATCH -

TRY.      
Try Block <Code that raises an exception> 
  
CATCH  
Catch Block <exception handler M>  
. . . 
. . . 
. . . 
CATCH  
Catch Block <exception handler R>
   
CLEANUP. 
   Cleanup block <to restore consistent state>
 
ENDTRY.

RAISE- มีการยกข้อยกเว้นเพื่อระบุว่ามีสถานการณ์พิเศษเกิดขึ้น โดยปกติแล้วตัวจัดการข้อยกเว้นจะพยายามแก้ไขข้อผิดพลาดหรือหาทางเลือกอื่น

TRY- บล็อก TRY ประกอบด้วยการเข้ารหัสแอปพลิเคชันที่ต้องจัดการข้อยกเว้น บล็อกคำสั่งนี้ถูกประมวลผลตามลำดับ สามารถมีโครงสร้างการควบคุมเพิ่มเติมและการเรียกขั้นตอนหรือโปรแกรม ABAP อื่น ๆ ตามด้วยบล็อกจับอย่างน้อยหนึ่งบล็อก

CATCH- โปรแกรมตรวจจับข้อยกเว้นด้วยตัวจัดการข้อยกเว้นที่ตำแหน่งในโปรแกรมที่คุณต้องการจัดการปัญหา คีย์เวิร์ด CATCH บ่งบอกถึงการจับข้อยกเว้น

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

การเพิ่มข้อยกเว้น

ข้อยกเว้นสามารถยกขึ้นได้ทุกเมื่อในเมธอดโมดูลฟังก์ชันรูทีนย่อยและอื่น ๆ มีสองวิธีในการเพิ่มข้อยกเว้น -

  • ข้อยกเว้นที่เพิ่มขึ้นโดยระบบรันไทม์ ABAP

    ตัวอย่างเช่น Y = 1/0 ซึ่งจะส่งผลให้เกิดข้อผิดพลาดรันไทม์ของประเภท CX_SY_ZERODIVIDE

  • ข้อยกเว้นที่เพิ่มขึ้นโดยโปรแกรมเมอร์

    เพิ่มและสร้างวัตถุข้อยกเว้นพร้อมกัน เพิ่มข้อยกเว้นด้วยอ็อบเจ็กต์ข้อยกเว้นที่มีอยู่แล้วในสถานการณ์แรก ไวยากรณ์คือ: RAISE EXCEPTION exep

การจับข้อยกเว้น

Handlers ใช้เพื่อจับข้อยกเว้น

มาดูข้อมูลโค้ด -

DATA: result TYPE P LENGTH 8 DECIMALS 2, 
exref TYPE REF TO CX_ROOT, 
msgtxt TYPE STRING. 
PARAMETERS: Num1 TYPE I, Num2 TYPE I. 
TRY. 
result = Num1 / Num2. 
CATCH CX_SY_ZERODIVIDE INTO exref. 
msgtxt = exref→GET_TEXT( ). 

CATCH CX_SY_CONVERSION_NO_NUMBER INTO exref. 
msgtxt = exref→GET_TEXT( ).

ในข้อมูลโค้ดด้านบนเรากำลังพยายามหาร Num1 ด้วย Num2 เพื่อให้ได้ผลลัพธ์ในตัวแปรประเภท float

สามารถสร้างข้อยกเว้นได้สองประเภท

  • ข้อผิดพลาดในการแปลงตัวเลข

  • หารด้วยข้อยกเว้นเป็นศูนย์ เครื่องจัดการพบข้อยกเว้น CX_SY_CONVERSION_NO_NUMBER และข้อยกเว้น CX_SY_ZERODIVIDE ที่นี่ใช้เมธอด GET_TEXT () ของคลาสข้อยกเว้นเพื่อรับคำอธิบายของข้อยกเว้น

คุณสมบัติของข้อยกเว้น

คุณลักษณะห้าประการและวิธีการยกเว้นมีดังนี้

ส. คุณสมบัติและคำอธิบาย
1

Textid

ใช้เพื่อกำหนดข้อความที่แตกต่างกันสำหรับข้อยกเว้นและยังส่งผลต่อผลลัพธ์ของเมธอด get_text

2

Previous

แอ็ตทริบิวต์นี้สามารถจัดเก็บข้อยกเว้นดั้งเดิมที่อนุญาตให้คุณสร้างห่วงโซ่ของข้อยกเว้น

3

get_text

สิ่งนี้ส่งคืนการแสดงข้อความเป็นสตริงตามภาษาระบบของข้อยกเว้น

4

get_longtext

สิ่งนี้จะส่งคืนตัวแปรแบบยาวของการแสดงข้อความของข้อยกเว้นเป็นสตริง

5

get_source_position

ระบุชื่อโปรแกรมและหมายเลขบรรทัดถึงจุดที่ยกข้อยกเว้น

ตัวอย่าง

REPORT ZExceptionsDemo. 
PARAMETERS Num_1 TYPE I. 

DATA res_1 TYPE P DECIMALS 2. 
DATA orf_1 TYPE REF TO CX_ROOT. 
DATA txt_1 TYPE STRING. 

start-of-selection. 
Write: / 'Square Root and Division with:', Num_1. 
write: /. 

TRY. 
IF ABS( Num_1 ) > 150. 
RAISE EXCEPTION TYPE CX_DEMO_ABS_TOO_LARGE. 
ENDIF.
  
TRY. 
res_1 = SQRT( Num_1 ). 
Write: / 'Result of square root:', res_1. 
res_1 = 1 / Num_1. 

Write: / 'Result of division:', res_1. 
CATCH CX_SY_ZERODIVIDE INTO orf_1. 
txt_1 = orf_1→GET_TEXT( ). 
CLEANUP. 
CLEAR res_1. 
ENDTRY. 

CATCH CX_SY_ARITHMETIC_ERROR INTO orf_1. 
txt_1 = orf_1→GET_TEXT( ).

CATCH CX_ROOT INTO orf_1. 
txt_1 = orf_1→GET_TEXT( ). 
ENDTRY. 
IF NOT txt_1 IS INITIAL. 
Write / txt_1. 
ENDIF. 
Write: / 'Final Result is:', res_1.

ในตัวอย่างนี้หากตัวเลขมากกว่า 150 ข้อยกเว้น CX_DEMO_ABS_TOO_LARGE จะเพิ่มขึ้น รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้สำหรับหมายเลข 160

Square Root and Division with: 160 
The absolute value of number is too high 
Final Result is:  0.00

ดังที่คุณทราบ SQL สามารถแบ่งออกเป็นสองส่วน -

  • DML (ภาษาการจัดการข้อมูล)
  • DDL (ภาษานิยามข้อมูล)

ส่วน DML ประกอบด้วยคำสั่งเคียวรีและอัพเดตเช่น SELECT, INSERT, UPDATE, DELETE เป็นต้นและโปรแกรม ABAP จัดการส่วน DML ของ SQL ส่วน DDL ประกอบด้วยคำสั่งเช่น CREATE TABLE, CREATE INDEX, DROP TABLE, ALTER TABLE เป็นต้นและ ABAP Dictionary จะจัดการกับส่วน DDL ของ SQL

พจนานุกรม ABAP สามารถดูเป็นข้อมูลเมตา (เช่นข้อมูลเกี่ยวกับข้อมูล) ที่อยู่ในฐานข้อมูล SAP พร้อมกับข้อมูลเมตาที่ดูแลโดยฐานข้อมูล พจนานุกรมใช้ในการสร้างและจัดการนิยามข้อมูลและสร้างตารางองค์ประกอบข้อมูลโดเมนมุมมองและประเภท

ประเภทพื้นฐานในพจนานุกรม ABAP

ประเภทพื้นฐานใน ABAP Dictionary มีดังนี้ -

  • Data elements อธิบายประเภทพื้นฐานโดยกำหนดประเภทข้อมูลความยาวและตำแหน่งทศนิยม

  • Structures ด้วยส่วนประกอบที่สามารถมีได้ทุกประเภท

  • Table types อธิบายโครงสร้างของตารางภายใน

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

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

งานพจนานุกรม

ABAP Dictionary มีดังต่อไปนี้ -

  • บังคับใช้ความสมบูรณ์ของข้อมูล
  • จัดการข้อกำหนดข้อมูลโดยไม่ซ้ำซ้อน
  • ผสานรวมกับเวิร์คเบนช์การพัฒนา ABAP ที่เหลืออย่างแน่นหนา

ตัวอย่าง

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

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

ออบเจ็กต์พื้นฐานสามอย่างสำหรับการกำหนดข้อมูลในพจนานุกรม ABAP ได้แก่ โดเมนองค์ประกอบข้อมูลและตาราง โดเมนใช้สำหรับคำจำกัดความทางเทคนิคของฟิลด์ตารางเช่นชนิดและความยาวของฟิลด์และองค์ประกอบข้อมูลจะใช้สำหรับนิยามเชิงความหมาย (คำอธิบายแบบสั้น) องค์ประกอบข้อมูลอธิบายความหมายของโดเมนในบริบททางธุรกิจบางอย่าง ประกอบด้วยความช่วยเหลือของฟิลด์และป้ายชื่อฟิลด์ในหน้าจอเป็นหลัก

โดเมนถูกกำหนดให้กับองค์ประกอบข้อมูลซึ่งจะถูกกำหนดให้กับฟิลด์ตารางหรือฟิลด์โครงสร้าง ตัวอย่างเช่นโดเมน MATNR (หมายเลขวัสดุ CHAR) ถูกกำหนดให้กับองค์ประกอบข้อมูลเช่น MATNR_N, MATNN และ MATNR_D และสิ่งเหล่านี้ถูกกำหนดให้กับฟิลด์ตารางและฟิลด์โครงสร้างจำนวนมาก

การสร้างโดเมน

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

Step 1 - ไปที่ธุรกรรม SE11

Step 2- เลือกปุ่มตัวเลือกสำหรับโดเมนในหน้าจอเริ่มต้นของพจนานุกรม ABAP และป้อนชื่อของโดเมนดังที่แสดงในภาพหน้าจอต่อไปนี้ คลิกปุ่มสร้าง คุณสามารถสร้างโดเมนภายใต้เนมสเปซของลูกค้าและชื่อของวัตถุจะขึ้นต้นด้วย 'Z' หรือ 'Y' เสมอ

Step 3- ป้อนคำอธิบายในช่องข้อความสั้น ๆ ของหน้าจอการบำรุงรักษาของโดเมน ในกรณีนี้คือ“ โดเมนของลูกค้า”Note - คุณไม่สามารถป้อนแอตทริบิวต์อื่น ๆ ได้จนกว่าคุณจะป้อนแอตทริบิวต์นี้

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

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

Step 6- บันทึกการเปลี่ยนแปลงของคุณ ป๊อปอัป Create Object Directory Entry จะปรากฏขึ้นและขอแพ็กเกจ คุณสามารถป้อนชื่อแพ็กเกจที่คุณใช้งานได้ หากคุณไม่มีแพ็คเกจใด ๆ คุณสามารถสร้างได้ใน Object Navigator หรือคุณสามารถบันทึกโดเมนของคุณโดยใช้ปุ่ม Local Object

Step 7- เปิดใช้งานโดเมนของคุณ คลิกที่ไอคอนเปิดใช้งาน (ไอคอนไม้ขีดไฟ) หรือกด CTRL + F3 เพื่อเปิดใช้งานโดเมน หน้าต่างป๊อปอัปปรากฏขึ้นโดยแสดงรายการวัตถุที่ไม่ได้ใช้งาน 2 รายการดังที่แสดงในภาพรวมต่อไปนี้ -

Step 8- ณ จุดนี้รายการด้านบนที่มีชื่อว่า 'DOMA' ที่มีชื่อ ZSEP_18 จะถูกเปิดใช้งาน ตามที่ไฮไลต์ไว้ให้คลิกปุ่มขีดสีเขียว หน้าต่างนี้จะหายไปและแถบสถานะจะแสดงข้อความ 'Object activated'

หากข้อความแสดงข้อผิดพลาดหรือคำเตือนเกิดขึ้นเมื่อคุณเปิดใช้งานโดเมนบันทึกการเปิดใช้งานจะแสดงโดยอัตโนมัติ บันทึกการเปิดใช้งานแสดงข้อมูลเกี่ยวกับขั้นตอนการเปิดใช้งาน คุณยังสามารถเรียกใช้บันทึกการเปิดใช้งานด้วย Utilities (M) → Activation log

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

การสร้างองค์ประกอบข้อมูล

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

ต่อไปนี้เป็นขั้นตอนในการสร้างองค์ประกอบข้อมูล -

Step 1 - ไปที่ธุรกรรม SE11

Step 2 - เลือกปุ่มตัวเลือกสำหรับประเภทข้อมูลในหน้าจอเริ่มต้นของพจนานุกรม ABAP และป้อนชื่อขององค์ประกอบข้อมูลดังที่แสดงด้านล่าง

Step 3- คลิกปุ่มสร้าง คุณสามารถสร้างองค์ประกอบข้อมูลภายใต้เนมสเปซของลูกค้าและชื่อของวัตถุจะขึ้นต้นด้วย 'Z' หรือ 'Y' เสมอ

Step 4 - ตรวจสอบปุ่มตัวเลือกองค์ประกอบข้อมูลบนป๊อปอัปสร้างประเภทที่ปรากฏขึ้นพร้อมปุ่มตัวเลือกสามปุ่ม

Step 5- คลิกไอคอนเครื่องหมายถูกสีเขียว คุณถูกนำไปที่หน้าจอการบำรุงรักษาขององค์ประกอบข้อมูล

Step 6- ป้อนคำอธิบายในช่องข้อความสั้น ๆ ของหน้าจอการบำรุงรักษาขององค์ประกอบข้อมูล ในกรณีนี้คือ“ องค์ประกอบข้อมูลลูกค้า”Note - คุณไม่สามารถป้อนแอตทริบิวต์อื่น ๆ ได้จนกว่าคุณจะป้อนแอตทริบิวต์นี้

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

Step 8- ป้อนฟิลด์สำหรับข้อความสั้นข้อความขนาดกลางข้อความยาวและส่วนหัวในแท็บป้ายชื่อฟิลด์ คุณสามารถกด Enter และความยาวจะถูกสร้างขึ้นโดยอัตโนมัติสำหรับป้ายกำกับเหล่านี้

Step 9- บันทึกการเปลี่ยนแปลงของคุณ ป๊อปอัป Create Object Directory Entry จะปรากฏขึ้นและขอแพ็กเกจ คุณสามารถป้อนชื่อแพ็กเกจที่คุณใช้งานได้ หากคุณไม่มีแพ็กเกจใด ๆ คุณสามารถสร้างได้ใน Object Navigator หรือคุณสามารถบันทึกองค์ประกอบข้อมูลของคุณโดยใช้ปุ่ม Local Object

Step 10- เปิดใช้งานองค์ประกอบข้อมูลของคุณ คลิกไอคอนเปิดใช้งาน (ไอคอนไม้ขีดไฟ) หรือกด CTRL + F3 เพื่อเปิดใช้งานองค์ประกอบข้อมูล หน้าต่างป๊อปอัปจะปรากฏขึ้นโดยแสดงรายการวัตถุที่ไม่ได้ใช้งาน 2 รายการดังที่แสดงในภาพหน้าจอต่อไปนี้

Step 11- ณ จุดนี้รายการด้านบนที่มีข้อความ 'DTEL' ที่มีชื่อ Z_CUST จะเปิดใช้งาน ตามที่ไฮไลต์ไว้ให้คลิกปุ่มขีดสีเขียว หน้าต่างนี้จะหายไปและแถบสถานะจะแสดงข้อความ 'Object activated'

หากข้อความแสดงข้อผิดพลาดหรือคำเตือนเกิดขึ้นเมื่อคุณเปิดใช้งานองค์ประกอบข้อมูลบันทึกการเปิดใช้งานจะแสดงโดยอัตโนมัติ บันทึกการเปิดใช้งานแสดงข้อมูลเกี่ยวกับขั้นตอนการเปิดใช้งาน คุณยังสามารถเรียกใช้บันทึกการเปิดใช้งานด้วย Utilities (M) → Activation log

ตารางสามารถกำหนดโดยไม่ขึ้นกับฐานข้อมูลใน ABAP Dictionary เมื่อเปิดใช้งานตารางใน ABAP Dictionary สำเนาของเขตข้อมูลที่คล้ายกันจะถูกสร้างขึ้นในฐานข้อมูลด้วย ตารางที่กำหนดไว้ใน ABAP Dictionary จะถูกแปลโดยอัตโนมัติเป็นรูปแบบที่เข้ากันได้กับฐานข้อมูลเนื่องจากความหมายของตารางขึ้นอยู่กับฐานข้อมูลที่ใช้โดยระบบ SAP

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

ประเภทของฟิลด์ตาราง

ตารางประกอบด้วยหลายเขตข้อมูลและแต่ละเขตข้อมูลประกอบด้วยองค์ประกอบมากมาย ตารางต่อไปนี้แสดงรายการองค์ประกอบต่างๆของช่องตาราง -

ส. องค์ประกอบและคำอธิบาย
1

Field name

นี่คือชื่อที่กำหนดให้กับฟิลด์ที่มีอักขระได้สูงสุด 16 ตัว ชื่อฟิลด์อาจประกอบด้วยตัวเลขตัวอักษรและขีดล่าง ต้องขึ้นต้นด้วยตัวอักษร

2

Key flag

กำหนดว่าเขตข้อมูลเป็นของคีย์ฟิลด์หรือไม่

3

Field type

กำหนดชนิดข้อมูลให้กับเขตข้อมูล

4

Field length

จำนวนอักขระที่สามารถป้อนในฟิลด์

5

Decimal places

กำหนดจำนวนหลักที่อนุญาตหลังจุดทศนิยม องค์ประกอบนี้ใช้สำหรับชนิดข้อมูลตัวเลขเท่านั้น

6

Short text

อธิบายความหมายของฟิลด์ที่เกี่ยวข้อง

การสร้างตารางใน ABAP Dictionary

Step 1- ไปที่ธุรกรรม SE11 เลือกปุ่มตัวเลือก 'ตารางฐานข้อมูล' และป้อนชื่อสำหรับตารางที่จะสร้าง ในกรณีของเราเราได้ป้อนชื่อ ZCUSTOMERS1 คลิกปุ่มสร้าง หน้าจอพจนานุกรม: ดูแลตารางจะปรากฏขึ้น ที่นี่แท็บ "การจัดส่งและการบำรุงรักษา" จะถูกเลือกโดยค่าเริ่มต้น

Step 2 - ป้อนข้อความสั้น ๆ อธิบายในช่องคำอธิบายแบบสั้น

Step 3- คลิกไอคอนค้นหาวิธีใช้ข้างฟิลด์ Delivery Class เลือกตัวเลือก "A [ตารางแอปพลิเคชัน (ข้อมูลหลักและข้อมูลธุรกรรม)]"

Step 4- เลือกตัวเลือก 'อนุญาตให้แสดง / บำรุงรักษา' จากเมนูแบบเลื่อนลง 'เบราว์เซอร์ข้อมูล / การบำรุงรักษามุมมองตาราง' หน้าจอ Dictionary: Maintenance Table จะปรากฏขึ้น

Step 5- เลือกแท็บ Fields หน้าจอที่มีตัวเลือกที่เกี่ยวข้องกับแท็บฟิลด์จะปรากฏขึ้น

Step 6- ป้อนชื่อของฟิลด์ตารางในคอลัมน์ฟิลด์ ชื่อฟิลด์อาจประกอบด้วยตัวอักษรตัวเลขและขีดล่าง แต่ต้องขึ้นต้นด้วยตัวอักษรเสมอและต้องมีความยาวไม่เกิน 16 อักขระ

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

Step 7- เลือกคอลัมน์คีย์หากคุณต้องการให้ฟิลด์เป็นส่วนหนึ่งของคีย์ตาราง มาสร้างช่องต่างๆเช่น CLIENT, CUSTOMER, NAME, TITLE และ DOB

Step 8- ฟิลด์แรกเป็นฟิลด์ที่สำคัญและระบุไคลเอนต์ที่เกี่ยวข้องกับเร็กคอร์ด ป้อน 'ไคลเอนต์' เป็นฟิลด์และ 'MANDT' เป็นองค์ประกอบข้อมูล ระบบจะกรอกข้อมูลประเภทข้อมูลความยาวทศนิยมและคำอธิบายแบบย่อโดยอัตโนมัติ ฟิลด์ 'ไคลเอนต์' ถูกสร้างเป็นฟิลด์คีย์โดยทำเครื่องหมายที่ช่อง 'คีย์'

Step 9- ฟิลด์ถัดไปคือ 'ลูกค้า' ทำเครื่องหมายในช่องเพื่อให้เป็นช่องคีย์และป้อนองค์ประกอบข้อมูลใหม่ 'ZCUSTNUM' คลิกปุ่มบันทึก

Step 10- เนื่องจากยังไม่มีองค์ประกอบข้อมูล "ZCUSTNUM" จึงต้องสร้างขึ้น ดับเบิลคลิกที่องค์ประกอบข้อมูลใหม่และหน้าต่าง 'สร้างองค์ประกอบข้อมูล' จะปรากฏขึ้น ตอบว่า "ใช่" ตามนี้และหน้าต่าง "ดูแลองค์ประกอบข้อมูล" จะปรากฏขึ้น

Step 11- ป้อน 'หมายเลขลูกค้า' ในส่วนคำอธิบายแบบย่อ ควรกำหนดประเภทข้อมูลพื้นฐานที่เรียกว่า 'โดเมน' สำหรับองค์ประกอบข้อมูลใหม่ ดังนั้นป้อน 'ZCUSTD1' ดับเบิลคลิกและตกลงที่จะบันทึกการเปลี่ยนแปลงที่ทำ เลือก "ใช่" เพื่อสร้างโดเมนและพิมพ์คำอธิบายของโดเมนลงในช่อง "คำอธิบายแบบย่อ"

แท็บ 'คำจำกัดความ' จะเปิดขึ้นโดยอัตโนมัติ ฟิลด์แรกคือ 'ประเภทข้อมูล'

Step 12- คลิกภายในช่องและเลือกประเภท 'NUMC' จากเมนูแบบเลื่อนลง ป้อนหมายเลข 8 ใน 'No. ของฟิลด์อักขระ (สูงสุด 8 อักขระ) และป้อน 0 ในพื้นที่ 'ตำแหน่งทศนิยม' ต้องเลือกความยาวเอาต์พุตเป็น 8 จากนั้นกด Enter คำอธิบายของช่อง "NUMC" จะต้องปรากฏขึ้นอีกครั้งเพื่อยืนยันว่านี่เป็นรายการที่ถูกต้อง

Step 13 - คลิกปุ่มบันทึกและเปิดใช้งานวัตถุ

Step 14- กด F3 เพื่อกลับไปที่หน้าจอ 'ดูแล / เปลี่ยนแปลงองค์ประกอบข้อมูล' สร้างป้ายชื่อเขตข้อมูลสี่ป้ายตามที่แสดงในภาพรวมต่อไปนี้ หลังจากนี้ให้บันทึกและเปิดใช้งานองค์ประกอบ

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

ในทำนองเดียวกันเราต้องสร้างช่องเพิ่มเติมสามช่องเช่น NAME, TITLE และ DOB

Step 16- เลือก 'การตั้งค่าทางเทคนิค' จากแถบเครื่องมือ เลือก APPL0 สำหรับ "คลาสข้อมูล" และประเภทขนาดแรก 0 สำหรับฟิลด์ "ขนาด" หมวดหมู่ ในกรณีของตัวเลือกการบัฟเฟอร์จะต้องเลือก 'ไม่อนุญาตให้บัฟเฟอร์'

Step 17- คลิกบันทึก กลับไปที่ตารางและเปิดใช้งาน หน้าจอต่อไปนี้จะปรากฏขึ้น

เปิดใช้งานตาราง 'ZCUSTOMERS1'

Structure คือออบเจ็กต์ข้อมูลที่ประกอบด้วยส่วนประกอบของประเภทข้อมูลใด ๆ ที่จัดเก็บไว้ในหน่วยความจำ

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

โครงสร้างอาจมีเพียงระเบียนเดียวในขณะทำงาน แต่ตารางสามารถมีหลายระเบียนได้

การสร้างโครงสร้าง

Step 1 - ไปที่รายการ SE11

Step 2- คลิกที่ตัวเลือก 'ประเภทข้อมูล' บนหน้าจอ ป้อนชื่อ 'ZSTR_CUSTOMER1' และคลิกที่ปุ่มสร้าง

Step 3- เลือกตัวเลือก 'โครงสร้าง' ในหน้าจอถัดไปแล้วกด Enter คุณสามารถดูวิซาร์ด 'รักษา / เปลี่ยนแปลงโครงสร้าง'

Step 4 - ป้อนคำอธิบายสั้น ๆ ตามที่แสดงในภาพรวมต่อไปนี้

Step 5 - ป้อนส่วนประกอบ (ชื่อฟิลด์) และประเภทส่วนประกอบ (องค์ประกอบข้อมูล)

Note: ที่นี่ชื่อส่วนประกอบเริ่มต้นด้วย Z ตามคำแนะนำของ SAP มาใช้องค์ประกอบข้อมูลที่เราสร้างไว้แล้วในตารางฐานข้อมูล

Step 6 - คุณต้องบันทึกตรวจสอบและเปิดใช้งานหลังจากให้ส่วนประกอบและประเภทส่วนประกอบทั้งหมดแล้ว

หน้าจอต่อไปนี้จะปรากฏขึ้น -

Step 7- เมื่อไฮไลต์ "ZSTR_CUSTOMER1" ให้คลิกปุ่มขีดสีเขียว หน้าต่างนี้จะหายไปและแถบสถานะจะแสดงข้อความ 'Active'

ขณะนี้โครงสร้างถูกเปิดใช้งานดังที่แสดงในภาพรวมต่อไปนี้ -

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

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

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

การสร้างมุมมอง

Step 1- เลือกปุ่มตัวเลือก View บนหน้าจอเริ่มต้นของ ABAP Dictionary ป้อนชื่อของมุมมองที่จะสร้างจากนั้นคลิกปุ่มสร้าง เราป้อนชื่อมุมมองเป็น ZVIEW_TEST

Step 2- เลือกปุ่มตัวเลือกมุมมองการฉายขณะเลือกประเภทมุมมองและคลิกปุ่มคัดลอก หน้าจอ 'พจนานุกรม: เปลี่ยนมุมมอง' จะปรากฏขึ้น

Step 3 - ป้อนคำอธิบายสั้น ๆ ในฟิลด์คำอธิบายแบบย่อและชื่อของตารางที่จะใช้ในฟิลด์ Basis Table ดังที่แสดงในภาพรวมต่อไปนี้

Step 4 - คลิกปุ่ม "ช่องตาราง" เพื่อรวมฟิลด์ของตาราง ZCUSTOMERS1 ในมุมมองการฉายภาพ

Step 5- หน้าจอการเลือกฟิลด์จากตาราง ZCUSTOMERS1 จะปรากฏขึ้น เลือกช่องที่คุณต้องการรวมไว้ในมุมมองการฉายภาพตามที่แสดงในภาพรวมต่อไปนี้

Step 6 - หลังจากคลิกปุ่มคัดลอกช่องที่เลือกทั้งหมดสำหรับมุมมองการฉายจะแสดงบนหน้าจอ 'พจนานุกรม: เปลี่ยนมุมมอง'

Step 7- เลือกแท็บสถานะการบำรุงรักษาเพื่อกำหนดวิธีการเข้าถึง เลือกปุ่มตัวเลือกแบบอ่านอย่างเดียวและตัวเลือก 'แสดง / บำรุงรักษาที่อนุญาตด้วยข้อ จำกัด ' จากเมนูแบบเลื่อนลงของ 'เบราว์เซอร์ข้อมูล / การบำรุงรักษามุมมองตาราง'

Step 8- บันทึกและเปิดใช้งาน ในหน้าจอ 'พจนานุกรม: เปลี่ยนมุมมอง' ให้เลือกยูทิลิตี้ (M)> เนื้อหาเพื่อแสดงหน้าจอการเลือกสำหรับ ZVIEW_TEST

Step 9- คลิกที่ไอคอน Execute ผลลัพธ์ของมุมมองการฉายจะปรากฏดังที่แสดงในภาพหน้าจอต่อไปนี้

ตาราง ZCUSTOMERS1 ประกอบด้วย 5 ฟิลด์ ฟิลด์ที่แสดงในที่นี้คือ 3 (ลูกค้าหมายเลขลูกค้าและชื่อ) โดยมี 4 รายการ หมายเลขลูกค้ามีตั้งแต่ 10,0001 ถึง 10,0004 พร้อมชื่อที่เหมาะสม

Search Help ซึ่งเป็นอ็อบเจ็กต์ที่เก็บอื่นของ ABAP Dictionary ใช้เพื่อแสดงค่าที่เป็นไปได้ทั้งหมดสำหรับฟิลด์ในรูปแบบของรายการ รายการนี้เรียกอีกอย่างว่าไฟล์hit list. คุณสามารถเลือกค่าที่จะป้อนในช่องจากรายการ Hit นี้แทนที่จะป้อนค่าด้วยตนเองซึ่งน่าเบื่อและเกิดข้อผิดพลาดได้ง่าย

การสร้างวิธีใช้การค้นหา

Step 1- ไปที่รายการ SE11 เลือกปุ่มตัวเลือกสำหรับวิธีใช้การค้นหา ป้อนชื่อของวิธีใช้การค้นหาที่จะสร้าง มาใส่ชื่อ ZSRCH1 คลิกที่ปุ่มสร้าง

Step 2- ระบบจะแจ้งให้สร้างประเภทวิธีใช้การค้นหา เลือกความช่วยเหลือในการค้นหาเบื้องต้นซึ่งเป็นค่าเริ่มต้น หน้าจอสำหรับสร้างวิธีใช้การค้นหาเบื้องต้นดังที่แสดงในภาพหน้าจอต่อไปนี้จะปรากฏขึ้น

Step 3- ในวิธีการเลือกเราจำเป็นต้องระบุว่าแหล่งข้อมูลของเราเป็นตารางหรือมุมมอง ในกรณีของเรามันเป็นตาราง ตารางคือ ZCUSTOMERS1 ถูกเลือกจากรายการตัวเลือก

Step 4- หลังจากป้อนวิธีการเลือกแล้วฟิลด์ถัดไปคือประเภทไดอะล็อก สิ่งนี้จะควบคุมลักษณะของกล่องโต้ตอบที่ จำกัด มีรายการแบบหล่นลงที่มีสามตัวเลือก มาเลือกตัวเลือก 'แสดงค่าทันที'

Step 5- ถัดไปคือพื้นที่พารามิเตอร์ สำหรับพารามิเตอร์หรือฟิลด์วิธีใช้การค้นหาแต่ละฟิลด์ต้องป้อนฟิลด์คอลัมน์เหล่านี้ตามข้อกำหนด

  • Search help parameter- นี่คือฟิลด์จากแหล่งข้อมูล เขตข้อมูลจากตารางแสดงอยู่ในรายการการเลือก ฟิลด์ที่เข้าร่วมในวิธีใช้การค้นหาจะถูกป้อนหนึ่งฟิลด์ในแต่ละแถว รวมสองช่อง CUSTOMER และ NAME วิธีการที่ทั้งสองฟิลด์นี้เข้าร่วมถูกระบุไว้ในส่วนที่เหลือของคอลัมน์

  • Import- ช่องนี้เป็นช่องทำเครื่องหมายสำหรับระบุว่าพารามิเตอร์วิธีใช้การค้นหาเป็นพารามิเตอร์นำเข้าหรือไม่ การส่งออกหรือนำเข้าอ้างอิงถึงวิธีใช้ในการค้นหา

  • Export- ช่องนี้เป็นช่องทำเครื่องหมายสำหรับระบุว่าพารามิเตอร์วิธีใช้การค้นหาเป็นพารามิเตอร์การส่งออกหรือไม่ การส่งออกจะเป็นการถ่ายโอนค่าฟิลด์จากรายการการเลือกไปยังฟิลด์หน้าจอ

  • LPos- ค่าจะควบคุมตำแหน่งทางกายภาพของพารามิเตอร์หรือฟิลด์วิธีใช้การค้นหาในรายการการเลือก หากคุณป้อนค่า 1 ฟิลด์จะปรากฏในตำแหน่งแรกในรายการการเลือกและอื่น ๆ

  • SPos- ควบคุมตำแหน่งทางกายภาพของพารามิเตอร์หรือฟิลด์วิธีใช้การค้นหาในกล่องโต้ตอบที่ จำกัด หากคุณป้อนค่าเป็น 1 ฟิลด์จะปรากฏในตำแหน่งแรกในกล่องโต้ตอบที่ จำกัด และอื่น ๆ

  • Data element- ทุกพารามิเตอร์หรือฟิลด์วิธีใช้การค้นหาตามค่าเริ่มต้นจะถูกกำหนดองค์ประกอบข้อมูลที่กำหนดให้ในแหล่งข้อมูล (ตารางหรือมุมมอง) ชื่อองค์ประกอบข้อมูลนี้ปรากฏในโหมดการแสดงผล

Step 6- ทำการตรวจสอบความสอดคล้องและเปิดใช้งานความช่วยเหลือในการค้นหา กด F8 เพื่อดำเนินการ หน้าจอ 'Test Search Help ZSRCH1' จะปรากฏดังที่แสดงในภาพหน้าจอต่อไปนี้

Step 7- ให้ป้อนหมายเลข 100004 ในฟิลด์หน้าจอ 'Ready for inp' ของลูกค้า กดปุ่มตกลง.

หมายเลขลูกค้า 100004 และชื่อ 'STEPHEN' จะปรากฏขึ้น

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

กลไกการล็อค

ต่อไปนี้เป็นสองฟังก์ชั่นหลักที่ทำได้ด้วยกลไกการล็อค -

  • โปรแกรมสามารถสื่อสารกับโปรแกรมอื่นเกี่ยวกับบันทึกข้อมูลที่เพิ่งอ่านหรือเปลี่ยนแปลง

  • โปรแกรมสามารถป้องกันตัวเองจากการอ่านข้อมูลที่เพิ่งถูกเปลี่ยนแปลงโดยโปรแกรมอื่น

lock requestถูกสร้างขึ้นครั้งแรกโดยโปรแกรม จากนั้นคำขอนี้จะไปที่เซิร์ฟเวอร์ Enqueue และล็อกจะถูกสร้างขึ้นในตารางล็อก เซิร์ฟเวอร์ Enqueue ตั้งค่าการล็อกและในที่สุดโปรแกรมก็พร้อมที่จะเข้าถึงข้อมูล

การสร้างวัตถุล็อค

Step 1- ไปที่รายการ SE11 หน้าจอต่อไปนี้จะเปิดขึ้น

Step 2- คลิกปุ่มตัวเลือก 'ล็อควัตถุ' ป้อนชื่อของวัตถุล็อคโดยเริ่มต้นด้วย E แล้วคลิกปุ่มสร้าง ที่นี่เราใช้ EZLOCK12

Step 3 - เข้าสู่ช่องคำอธิบายสั้น ๆ และคลิกที่แท็บตาราง

Step 4 - ป้อนชื่อตารางในฟิลด์ชื่อและเลือกโหมดล็อคเป็น Write Lock

Step 5 - คลิกที่แท็บพารามิเตอร์ล็อคหน้าจอต่อไปนี้จะปรากฏขึ้น

Step 6- บันทึกและเปิดใช้งาน โดยอัตโนมัติ 2 โมดูลฟังก์ชันจะสร้างขึ้น ในการตรวจสอบโมดูลฟังก์ชันเราสามารถใช้ไปที่→ล็อคโมดูล

Step 7 - คลิกล็อคโมดูลและหน้าจอต่อไปนี้จะเปิดขึ้น

สร้างวัตถุล็อกสำเร็จแล้ว

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

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

ในสภาพแวดล้อม SAP ABAP การแยกส่วนเกี่ยวข้องกับการจัดระเบียบโปรแกรมเป็นหน่วยโมดูลาร์หรือที่เรียกว่า logical blocks. ช่วยลดความซ้ำซ้อนและเพิ่มความสามารถในการอ่านโปรแกรมแม้ในขณะที่คุณกำลังสร้างและต่อมาในระหว่างรอบการบำรุงรักษา Modularization ยังช่วยให้สามารถใช้รหัสเดิมซ้ำได้อีก ABAP ทำให้นักพัฒนาจำเป็นต้องโมดูลาร์นั่นคือการจัดระเบียบโปรแกรมค่อนข้างมากกว่าในภาษาที่ใช้ OOPS ซึ่งมีคุณสมบัติโมดูลาร์ในตัวค่อนข้างมาก เมื่อโค้ดส่วนเล็ก ๆ ที่เป็นโมดูลาร์เสร็จสมบูรณ์ดีบั๊กและอื่น ๆ แล้วจะไม่ต้องส่งกลับไปในภายหลังจากนั้นนักพัฒนาสามารถดำเนินการต่อและมุ่งเน้นไปที่ปัญหาอื่น ๆ ได้

โปรแกรม ABAP ประกอบด้วยบล็อกการประมวลผลที่เรียกว่าบล็อกการประมวลผลแบบแยกส่วน พวกเขาคือ -

  • บล็อกการประมวลผลที่เรียกจากภายนอกโปรแกรมและจากสภาพแวดล้อมรันไทม์ ABAP (เช่นบล็อกเหตุการณ์และโมดูลโต้ตอบ)

  • บล็อกการประมวลผลที่เรียกจากโปรแกรม ABAP

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

Modularization ที่ระดับซอร์สโค้ด -

  • มาโครในเครื่อง
  • โปรแกรมรวมทั่วโลก

Modularization ผ่านบล็อกการประมวลผลที่เรียกจากโปรแกรม ABAP -

  • Subroutines
  • โมดูลฟังก์ชัน

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

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

เรามีโปรแกรม X ที่แตกต่างกัน 3 รายการ source code blocks. แต่ละบล็อกมีคำสั่ง ABAP เหมือนกัน โดยทั่วไปจะเป็นบล็อกรหัสเดียวกัน เพื่อให้การบำรุงรักษารหัสนี้ง่ายขึ้นเราสามารถห่อหุ้มโค้ดลงในรูทีนย่อย เราสามารถเรียกรูทีนย่อยนี้ในโปรแกรมของเรากี่ครั้งก็ได้ตามที่เราต้องการ รูทีนย่อยสามารถกำหนดได้โดยใช้คำสั่ง Form และ EndForm

ต่อไปนี้เป็นไวยากรณ์ทั่วไปของนิยามรูทีนย่อย

FORM <subroutine_name>.
  
<statements> 
  
ENDFORM.

เราสามารถเรียกรูทีนย่อยได้โดยใช้คำสั่ง PERFORM ตัวควบคุมจะข้ามไปยังคำสั่งที่เรียกใช้งานได้แรกในรูทีนย่อย <subroutine_name> เมื่อพบ ENDFORM คอนโทรลจะข้ามกลับไปที่คำสั่งตามคำสั่ง PERFORM

ตัวอย่าง

Step 1- ไปที่รายการ SE80 เปิดโปรแกรมที่มีอยู่แล้วคลิกขวาที่โปรแกรม ในกรณีนี้คือ 'ZSUBTEST'

Step 2- เลือกสร้างจากนั้นเลือก Subroutine เขียนชื่อรูทีนย่อยในฟิลด์จากนั้นคลิกปุ่มดำเนินการต่อ ชื่อรูทีนย่อยคือ 'Sub_Display' ดังที่แสดงในภาพหน้าจอต่อไปนี้

Step 3- เขียนโค้ดในบล็อกคำสั่ง FORM และ ENDFORM สร้างรูทีนย่อยสำเร็จแล้ว

เราจำเป็นต้องรวมคำสั่ง PERFORM เพื่อเรียกรูทีนย่อย ลองดูรหัส -

REPORT ZSUBTEST. 
PERFORM Sub_Display.

* Form Sub_Display 
* -->  p1 text 
* <--  p2 text 
 
FORM Sub_Display. 
Write: 'This is Subroutine'. 
Write: / 'Subroutine created successfully'. 
ENDFORM.                    " Sub_Display

Step 4- บันทึกเปิดใช้งานและดำเนินการโปรแกรม รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Subroutine Test:
   
This is Subroutine
  
Subroutine created successfully

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

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

มาโครได้รับการออกแบบโดยยึดตามตัวยึดตำแหน่ง ตัวยึดตำแหน่งทำงานเหมือนพอยน์เตอร์ในภาษาซี คุณสามารถกำหนดมาโครภายในคำสั่ง DEFINE ... END-OF-DEFINITION

ต่อไปนี้เป็นไวยากรณ์พื้นฐานของนิยามมาโคร -

DEFINE <macro_name>. <statements> 
END-OF-DEFINITION. 
   ...... 
  
   <macro_name> [<param1> <param2>....].

จำเป็นต้องกำหนดมาโครก่อนที่จะเรียกใช้ <param1> …. แทนที่ตัวยึดตำแหน่ง & 1 ... ในคำสั่ง ABAP ที่มีอยู่ในนิยามมาโคร

จำนวนตัวยึดตำแหน่งสูงสุดในนิยามมาโครคือเก้า นั่นคือเมื่อโปรแกรมถูกเรียกใช้งานระบบ SAP จะแทนที่มาโครด้วยคำสั่งที่เหมาะสมและตัวยึดตำแหน่ง & 1, & 2, …. & 9 จะถูกแทนที่ด้วยพารามิเตอร์ param1, param2, .... param9 เราอาจเรียกใช้มาโครภายในมาโครอื่น แต่ไม่ใช่มาโครเดียวกัน

ตัวอย่าง

ไปที่รายการ SE38 สร้างโปรแกรมใหม่ ZMACRO_TEST พร้อมกับคำอธิบายในช่องข้อความสั้น ๆ และยังมีคุณลักษณะที่เหมาะสมเช่นประเภทและสถานะดังที่แสดงในภาพหน้าจอต่อไปนี้ -

ต่อไปนี้เป็นรหัส -

REPORT ZMACRO_TEST. 
DEFINE mac_test. 
WRITE: 'This is Macro &1'. 
END-OF-DEFINITION. 

PARAMETERS: s1 type C as checkbox. 
PARAMETERS: s2 type C as checkbox. 
PARAMETERS: s3 type C as checkbox default 'X'. 

START-OF-SELECTION. 
IF s1 = 'X'. 
   mac_test 1. ENDIF. 
IF s2 = 'X'. 
   mac_test 2. 
ENDIF.
 
IF s3 = 'X'. 
   mac_test 3. 
ENDIF.

เรามีช่องทำเครื่องหมาย 3 ช่อง ขณะรันโปรแกรมให้เลือกช่องทำเครื่องหมาย S2

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

A Macro Program 
 
This is Macro 2

หากเลือกช่องทำเครื่องหมายทั้งหมดรหัสจะสร้างผลลัพธ์ต่อไปนี้ -

A Macro Program 
 
This is Macro 1 This is Macro 2 This is Macro 3

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

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

หากต้องการดูวิธีสร้างโมดูลฟังก์ชันต้องสำรวจตัวสร้างฟังก์ชัน คุณสามารถค้นหาตัวสร้างฟังก์ชันด้วยรหัสธุรกรรม SE37 เพียงพิมพ์ส่วนหนึ่งของชื่อโมดูลฟังก์ชันด้วยอักขระไวด์การ์ดเพื่อสาธิตวิธีค้นหาโมดูลฟังก์ชัน พิมพ์ * จำนวน * แล้วกดปุ่ม F4

ผลลัพธ์ของการค้นหาจะแสดงในหน้าต่างใหม่ โมดูลฟังก์ชันจะแสดงเป็นเส้นที่มีพื้นหลังสีน้ำเงินและกลุ่มฟังก์ชันเป็นเส้นสีชมพู คุณสามารถดูเพิ่มเติมที่กลุ่มฟังก์ชัน ISOC ได้โดยใช้หน้าจอ Object Navigator (Transaction SE80) คุณสามารถดูรายการโมดูลฟังก์ชันและวัตถุอื่น ๆ ที่อยู่ในกลุ่มฟังก์ชัน ลองพิจารณาโมดูลฟังก์ชัน SPELL_AMOUNT โมดูลฟังก์ชันนี้จะแปลงตัวเลขเป็นคำ

การสร้างโปรแกรมใหม่

Step 1 - ไปที่ธุรกรรม SE38 และสร้างโปรแกรมใหม่ชื่อ Z_SPELLAMOUNT

Step 2- ป้อนรหัสเพื่อให้สามารถตั้งค่าพารามิเตอร์ที่สามารถป้อนค่าและส่งต่อไปยังโมดูลฟังก์ชัน องค์ประกอบข้อความ text-001 ที่นี่อ่านว่า 'Enter a Value'

Step 3- ในการเขียนโค้ดสำหรับสิ่งนี้ให้ใช้ CTRL + F6 หลังจากนี้หน้าต่างจะปรากฏขึ้นโดยที่ 'CALL FUNCTION' เป็นตัวเลือกแรกในรายการ ป้อน 'spell_amount' ในกล่องข้อความแล้วคลิกปุ่มดำเนินการต่อ

Step 4- รหัสบางส่วนถูกสร้างขึ้นโดยอัตโนมัติ แต่เราจำเป็นต้องปรับปรุงคำสั่ง IF เพื่อรวมโค้ดเพื่อเขียนข้อความไปยังหน้าจอเพื่อบอกว่า "โมดูลฟังก์ชันส่งคืนค่า: sy-subrc" และเพิ่มคำสั่ง ELSE เพื่อให้เขียนผลลัพธ์ที่ถูกต้องออกมาเมื่อฟังก์ชัน โมดูลสำเร็จที่นี่ต้องตั้งค่าตัวแปรใหม่เพื่อเก็บค่าที่ส่งคืนจากโมดูลฟังก์ชันขอเรียกสิ่งนี้ว่า 'ผลลัพธ์'

ต่อไปนี้เป็นรหัส -

REPORT Z_SPELLAMOUNT. 
data result like SPELL. 

selection-screen begin of line. 
selection-screen comment 1(15) text-001. 

parameter num_1 Type I. 
selection-screen end of line. 
CALL FUNCTION 'SPELL_AMOUNT' 
EXPORTING 
AMOUNT = num_1 
IMPORTING 
IN_WORDS = result. 

IF SY-SUBRC <> 0. 
   Write: 'Value returned is:', SY-SUBRC. 
else. 
   Write: 'Amount in words is:', result-word. 
ENDIF.

Step 5- ตัวแปรที่โมดูลฟังก์ชันส่งกลับเรียกว่า IN_WORDS ตั้งค่าตัวแปรที่เกี่ยวข้องในโปรแกรมที่เรียกว่า 'ผลลัพธ์' กำหนด IN_WORDS โดยใช้คำสั่ง LIKE เพื่ออ้างถึงโครงสร้างที่เรียกว่า SPELL

Step 6- บันทึกเปิดใช้งานและดำเนินการโปรแกรม ป้อนค่าตามที่แสดงในภาพหน้าจอต่อไปนี้แล้วกด F8

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Spelling the Amount 
Amount in words is: 
FIVE THOUSAND SIX HUNDRED EIGHTY

โปรแกรมรวมเป็นอ็อบเจ็กต์ที่เก็บส่วนกลางที่ใช้ในการโมดูลาร์ซอร์สโค้ด อนุญาตให้คุณใช้ซอร์สโค้ดเดียวกันในโปรแกรมต่างๆ รวมโปรแกรมยังช่วยให้คุณจัดการโปรแกรมที่ซับซ้อนได้อย่างเป็นระเบียบ ในการใช้โปรแกรม include ในโปรแกรมอื่นเราใช้ไวยากรณ์ต่อไปนี้ -

INCLUDE <program_name>.

คำสั่ง INCLUDE มีผลเหมือนกับการคัดลอกซอร์สโค้ดของโปรแกรม include <program_name> ไปยังโปรแกรมอื่น เนื่องจากโปรแกรมรวมไม่สามารถทำงานได้อย่างอิสระจึงต้องสร้างไว้ในโปรแกรมอื่น คุณอาจรวมโปรแกรมไว้ด้วย

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

  • รวมโปรแกรมไม่สามารถเรียกตัวเองได้
  • รวมโปรแกรมต้องมีข้อความที่สมบูรณ์

ต่อไปนี้เป็นขั้นตอนในการสร้างและใช้โปรแกรมรวม -

Step 1- สร้างโปรแกรม (Z_TOBEINCLUDED) เพื่อรวมไว้ใน ABAP Editor รหัสที่จะรวมอยู่ใน ABAP Editor คือ -

PROGRAM Z_TOBEINCLUDED.  
Write: / 'This program is started by:', SY-UNAME,
       / 'The Date is:', SY-DATUM,
       / 'Time is', SY-UZEIT.

Step 2 - ตั้งค่า Type ของโปรแกรมเป็น INCLUDE program ดังแสดงในภาพหน้าจอต่อไปนี้

Step 3 - คลิกปุ่ม 'บันทึก' และบันทึกโปรแกรมในแพ็คเกจชื่อ ZINCL_PCKG

Step 4- สร้างโปรแกรมอื่นที่ต้องใช้โปรแกรม Z_TOBEINCLUDED ที่นี่เราได้สร้างโปรแกรมอื่นชื่อ Z_INCLUDINGTEST และกำหนดประเภทของโปรแกรมเป็นโปรแกรมปฏิบัติการ

Step 5 - การเข้ารหัสสำหรับโปรแกรม Z_INCLUDINGTEST ประกอบด้วยโปรแกรม Z_TOBEINCLUDED ด้วยความช่วยเหลือของคำสั่ง INCLUDE ดังที่แสดงในโค้ดต่อไปนี้

REPORT Z_INCLUDINGTEST.  
INCLUDE Z_TOBEINCLUDED.

Step 6 - บันทึกเปิดใช้งานและดำเนินการโปรแกรม

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

This program is started by: SAPUSER 
The Date is: 06.10.2015 
Time is 13:25:11

Open SQL ระบุชุดย่อยของคำสั่ง ABAP ที่เปิดใช้งานการเข้าถึงโดยตรงไปยังข้อมูลในฐานข้อมูลกลางของ AS ABAP ปัจจุบัน เปิดคำสั่ง SQL แมปฟังก์ชัน Data Manipulation Language ของ SQL ใน ABAP ที่รองรับโดยระบบฐานข้อมูลทั้งหมด

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

เมื่อใดก็ตามที่มีการใช้ข้อความเหล่านี้ในโปรแกรม ABAP สิ่งสำคัญคือต้องตรวจสอบว่าการดำเนินการสำเร็จหรือไม่ หากมีใครพยายามแทรกระเบียนลงในตารางฐานข้อมูลและไม่ได้ใส่ระเบียนอย่างถูกต้องจำเป็นอย่างยิ่งที่จะต้องทราบเพื่อให้สามารถดำเนินการที่เหมาะสมในโปรแกรมได้ ซึ่งสามารถทำได้โดยใช้ฟิลด์ระบบที่ถูกใช้ไปแล้วนั่นคือ SY-SUBRC เมื่อคำสั่งดำเนินการสำเร็จฟิลด์ SY-SUBRC จะมีค่าเป็น 0 ดังนั้นจึงสามารถตรวจสอบได้และสามารถดำเนินการต่อกับโปรแกรมได้หากปรากฏขึ้น

คำสั่ง DATA ใช้เพื่อประกาศพื้นที่ทำงาน ลองตั้งชื่อนี้ว่า 'wa_customers1' แทนที่จะประกาศประเภทข้อมูลเดียวสำหรับสิ่งนี้คุณสามารถประกาศเขตข้อมูลต่างๆที่ประกอบเป็นตารางได้ วิธีที่ง่ายที่สุดคือใช้คำสั่ง LIKE

คำสั่ง INSERT

พื้นที่ทำงาน wa_customers1 ถูกประกาศไว้ที่นี่เช่นเดียวกับตาราง ZCUSTOMERS1 โดยใช้โครงสร้างเดียวกันโดยไม่ต้องกลายเป็นตารางเอง พื้นที่ทำงานนี้สามารถจัดเก็บบันทึกได้เพียงรายการเดียว เมื่อได้รับการประกาศแล้วสามารถใช้คำสั่ง INSERT เพื่อแทรกพื้นที่ทำงานและบันทึกลงในตารางได้ โค้ดที่นี่จะอ่านว่า 'INSERT ZCUSTOMERS1 FROM wa_customers1'

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

ต่อไปนี้เป็นข้อมูลโค้ด -

DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100006'. 
wa_customers1-name = 'DAVE'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19931017'. 
INSERT ZCUSTOMERS1 FROM wa_customers1.

จากนั้นสามารถใช้คำสั่ง CHECK ได้ดังนี้ หมายความว่าหากใส่บันทึกถูกต้องระบบจะระบุสิ่งนี้ ถ้าไม่เช่นนั้นรหัส SY-SUBRC ที่ไม่เท่ากับศูนย์จะแสดงขึ้น ต่อไปนี้เป็นข้อมูลโค้ด -

IF SY-SUBRC = 0. 
   WRITE 'Record Inserted Successfully'.  
ELSE. 
   WRITE: 'The return code is ', SY-SUBRC. 
ENDIF.

ตรวจสอบโปรแกรมบันทึกเปิดใช้งานรหัสจากนั้นทดสอบ หน้าต่างผลลัพธ์ควรแสดงเป็น 'บันทึกแทรกสำเร็จ'

คำชี้แจงที่ชัดเจน

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

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

อัปเดตคำชี้แจง

หากคุณต้องการอัปเดตระเบียนที่มีอยู่ตั้งแต่หนึ่งรายการขึ้นไปในตารางในเวลาเดียวกันให้ใช้คำสั่ง UPDATE คล้ายกับคำสั่ง INSERT พื้นที่ทำงานจะถูกประกาศซึ่งเต็มไปด้วยข้อมูลใหม่ที่ใส่ลงในเรกคอร์ดเมื่อโปรแกรมทำงาน บันทึกที่สร้างไว้ก่อนหน้านี้ด้วยคำสั่ง INSERT จะได้รับการอัปเดตที่นี่ เพียงแก้ไขข้อความที่เก็บไว้ในช่อง NAME และ TITLE จากนั้นในบรรทัดใหม่จะใช้โครงสร้างเดียวกับคำสั่ง INSERT และคราวนี้ใช้คำสั่ง UPDATE ดังที่แสดงในข้อมูลโค้ดต่อไปนี้ -

DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100006'. 
wa_customers1-name = 'RICHARD'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19931017'. 
UPDATE ZCUSTOMERS1 FROM wa_customers1.

เมื่อมีการดำเนินการคำสั่ง UPDATE คุณสามารถดู Data Browser ใน ABAP Dictionary เพื่อดูว่ามีการอัปเดตระเบียนเรียบร้อยแล้ว

แก้ไขคำชี้แจง

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

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

ต่อไปนี้เป็นข้อมูลโค้ดสำหรับสร้างเรกคอร์ดใหม่ -

CLEAR wa_customers1.
 
DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100007'. 
wa_customers1-name = 'RALPH'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19910921'. 
MODIFY ZCUSTOMERS1 FROM wa_customers1.

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

เมื่อดำเนินการนี้และดูข้อมูลในเบราว์เซอร์ข้อมูลระบบจะสร้างเรกคอร์ดใหม่สำหรับลูกค้าหมายเลข 100007 (RALPH)

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ (เนื้อหาในตาราง) -

คำว่า 'Native SQL' หมายถึงคำสั่งทั้งหมดที่สามารถถ่ายโอนไปยังอินเทอร์เฟซ Native SQL ของอินเทอร์เฟซฐานข้อมูลแบบคงที่ คำสั่ง SQL ดั้งเดิมไม่อยู่ในขอบเขตภาษาของ ABAP และไม่เป็นไปตามไวยากรณ์ ABAP ABAP มีเพียงคำสั่งสำหรับแยกส่วนของโปรแกรมซึ่งสามารถแสดงรายการคำสั่ง Native SQL ได้

ใน SQL ดั้งเดิมส่วนใหญ่สามารถใช้คำสั่ง SQL เฉพาะฐานข้อมูลได้ สิ่งเหล่านี้ถูกถ่ายโอนโดยไม่เปลี่ยนแปลงจากอินเทอร์เฟซ SQL ดั้งเดิมไปยังระบบฐานข้อมูลและดำเนินการ สามารถใช้ขอบเขตภาษา SQL แบบเต็มของฐานข้อมูลที่เกี่ยวข้องได้และไม่จำเป็นต้องประกาศตารางฐานข้อมูลใน ABAP Dictionary นอกจากนี้ยังมีชุดคำสั่ง Native SQL เฉพาะของ SAP ชุดเล็ก ๆ ที่ได้รับการจัดการในลักษณะเฉพาะโดยอินเทอร์เฟซ SQL ดั้งเดิม

ในการใช้คำสั่ง Native SQL คุณต้องนำหน้าด้วยคำสั่ง EXEC SQL และลงท้ายด้วยคำสั่ง ENDEXEC

ต่อไปนี้เป็นไวยากรณ์ -

EXEC SQL PERFORMING <form>.  
   <Native SQL statement> 
ENDEXEC.

คำสั่งเหล่านี้กำหนดพื้นที่ในโปรแกรม ABAP ซึ่งสามารถแสดงรายการคำสั่ง Native SQL อย่างน้อยหนึ่งรายการ คำสั่งที่ป้อนจะถูกส่งไปยังอินเทอร์เฟซ Native SQL จากนั้นประมวลผลดังนี้ -

  • คำสั่ง SQL ทั้งหมดที่ถูกต้องสำหรับอินเทอร์เฟซโปรแกรมของระบบฐานข้อมูลแอดเดรสสามารถแสดงรายการระหว่าง EXEC และ ENDEXEC โดยเฉพาะคำสั่ง DDL (data definition language)

  • คำสั่ง SQL เหล่านี้ถูกส่งผ่านจากอินเทอร์เฟซ Native SQL ไปยังระบบฐานข้อมูลโดยส่วนใหญ่ไม่มีการเปลี่ยนแปลง กฎไวยากรณ์ถูกระบุโดยระบบฐานข้อมูลโดยเฉพาะกฎความไวของตัวพิมพ์สำหรับอ็อบเจ็กต์ฐานข้อมูล

  • หากไวยากรณ์อนุญาตให้ใช้ตัวคั่นระหว่างแต่ละคำสั่งคุณอาจรวมคำสั่ง Native SQL จำนวนมากระหว่าง EXEC และ ENDEXEC

  • องค์ประกอบภาษา Native SQL เฉพาะของ SAP สามารถระบุได้ระหว่าง EXEC และ ENDEXEC คำสั่งเหล่านี้ไม่ได้ถูกส่งโดยตรงจากอินเทอร์เฟซ Native SQL ไปยังฐานข้อมูล แต่จะถูกแปลงอย่างเหมาะสม

ตัวอย่าง

SPFLI เป็นตาราง SAP มาตรฐานที่ใช้ในการจัดเก็บข้อมูลตารางการบิน สิ่งนี้พร้อมใช้งานภายในระบบ SAP R / 3 ขึ้นอยู่กับเวอร์ชันและระดับรีลีส คุณสามารถดูข้อมูลนี้ได้เมื่อคุณป้อนชื่อตาราง SPFLI ลงในธุรกรรม SAP ที่เกี่ยวข้องเช่น SE11 หรือ SE80 คุณยังสามารถดูข้อมูลที่อยู่ในตารางฐานข้อมูลนี้ได้โดยใช้ธุรกรรมทั้งสองนี้

REPORT ZDEMONATIVE_SQL. 
DATA: BEGIN OF wa,  
      connid  TYPE SPFLI-connid,
      cityfrom TYPE SPFLI-cityfrom,
      cityto  TYPE SPFLI-cityto,  
      END OF wa. 
	
DATA c1 TYPE SPFLI-carrid VALUE 'LH'. 
EXEC SQL PERFORMING loop_output.
   SELECT connid, cityfrom, cityto  
   INTO :wa  
   FROM SPFLI  
   WHERE carrid = :c1 
ENDEXEC. 

FORM loop_output.  
   WRITE: / wa-connid, wa-cityfrom, wa-cityto. 
ENDFORM.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

0400  FRANKFURT  NEW YORK 
2402  FRANKFURT  BERLIN 
0402  FRANKFURT  NEW YORK

ตารางภายในเป็นตารางชั่วคราวซึ่งมีบันทึกของโปรแกรม ABAP ที่กำลังดำเนินการอยู่ ตารางภายในมีเฉพาะในช่วงรันไทม์ของโปรแกรม SAP ใช้เพื่อประมวลผลข้อมูลจำนวนมากโดยใช้ภาษา ABAP เราจำเป็นต้องประกาศตารางภายในในโปรแกรม ABAP เมื่อคุณต้องการดึงข้อมูลจากตารางฐานข้อมูล

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

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

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

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

ตารางภายในใช้เพื่อวัตถุประสงค์หลายประการ -

  • สามารถใช้เพื่อเก็บผลลัพธ์ของการคำนวณที่สามารถใช้ในโปรแกรมได้ในภายหลัง

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

  • มีความหลากหลายอย่างมาก สามารถกำหนดโดยใช้โครงสร้างที่กำหนดอื่น ๆ จำนวนเท่าใดก็ได้

ตัวอย่าง

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

คำสั่ง DATA ใช้เพื่อประกาศตารางภายใน โปรแกรมจะต้องบอกว่าตารางเริ่มต้นและสิ้นสุดที่ใด ดังนั้นใช้คำสั่ง BEGIN OF แล้วประกาศชื่อตาราง หลังจากนี้จะใช้การเพิ่ม OCCURS ตามด้วยตัวเลขที่นี่ 0 OCCURS บอก SAP ว่ามีการสร้างตารางภายในและ 0 ระบุว่าจะไม่มีระเบียนใด ๆ ในตอนแรก จากนั้นจะขยายเมื่อเต็มไปด้วยข้อมูล

ต่อไปนี้เป็นไวยากรณ์ -

DATA: BEGIN OF <internal_tab> Occurs 0,

มาสร้างฟิลด์ในบรรทัดใหม่ ตัวอย่างเช่นสร้าง 'ชื่อ' ซึ่งประกาศเป็นชื่อ LIKE ZCUSTOMERS1 สร้างฟิลด์อื่นชื่อ 'dob', LIKE ZCUSTOMERS1-dob ในขั้นต้นจะมีประโยชน์ในการตั้งชื่อฟิลด์ในตารางภายในให้เหมือนกับฟิลด์อื่น ๆ ที่ถูกสร้างขึ้นที่อื่น สุดท้ายประกาศจุดสิ้นสุดของตารางภายในด้วย“ END OF <internal_tab>” ดังแสดงในรหัสต่อไปนี้ -

DATA: BEGIN OF itab01 Occurs 0,
   name LIKE ZCUSTOMERS1-name,
   dob LIKE ZCUSTOMERS1-dob, 
END OF itab01.

ที่นี่ 'itab01' มักใช้ชวเลขเมื่อสร้างตารางชั่วคราวใน SAP คำสั่ง OCCURS ใช้เพื่อกำหนดเนื้อความของตารางภายในโดยการประกาศเขตข้อมูลสำหรับตาราง เมื่อใช้คำสั่ง OCCURS คุณสามารถระบุค่าคงที่ตัวเลข 'n' เพื่อกำหนดหน่วยความจำเริ่มต้นเพิ่มเติมได้หากต้องการ ขนาดเริ่มต้นของหน่วยความจำที่ใช้โดยอนุประโยค OCCUR 0 คือ 8 KB ขณะนี้โครงสร้างของตารางภายในถูกสร้างขึ้นแล้วและสามารถเขียนโค้ดเพื่อเติมเต็มด้วยระเบียนได้

ตารางภายในสามารถสร้างขึ้นโดยใช้หรือไม่ใช้บรรทัดส่วนหัว ในการสร้างตารางภายในด้วยบรรทัดส่วนหัวให้ใช้ BEGIN OF clause ก่อน OCCURS clause หรือ WITH HEADER LINE clause หลัง OCCURS clause ในนิยามของตารางภายใน ในการสร้างตารางภายในโดยไม่มีบรรทัดส่วนหัวให้ใช้คำสั่ง OCCURS โดยไม่มีคำสั่ง BEGIN OF

คุณยังสามารถสร้างตารางภายในเป็นชนิดข้อมูลภายในเครื่อง (ชนิดข้อมูลที่ใช้ในบริบทของโปรแกรมปัจจุบันเท่านั้น) โดยใช้คำสั่ง TYPES คำสั่งนี้ใช้คำสั่ง TYPE หรือ LIKE เพื่ออ้างถึงตารางที่มีอยู่

ไวยากรณ์ในการสร้างตารางภายในเป็นชนิดข้อมูลภายในคือ -

TYPES <internal_tab> TYPE|LIKE <internal_tab_type> OF 
   <line_type_itab> WITH <key> INITIAL SIZE <size_number>.

ที่นี่ <internal_tab_type> ระบุประเภทตารางสำหรับตารางภายใน <internal_tab> และ <line_type_itab> ระบุประเภทสำหรับบรรทัดของตารางภายใน ในคำสั่ง TYPES คุณสามารถใช้ส่วนคำสั่ง TYPE เพื่อระบุประเภทบรรทัดของตารางภายในเป็นชนิดข้อมูลและส่วนคำสั่ง LIKE เพื่อระบุประเภทบรรทัดเป็นออบเจ็กต์ข้อมูล การระบุคีย์สำหรับตารางภายในเป็นทางเลือกและหากผู้ใช้ไม่ระบุคีย์ระบบ SAP จะกำหนดประเภทตารางด้วยคีย์โดยพลการ

INITIAL SIZE <size_number> สร้างออบเจ็กต์ตารางภายในโดยการจัดสรรหน่วยความจำเริ่มต้นให้กับมัน ในไวยากรณ์ก่อนหน้านี้ประโยค INITIAL SIZE สงวนพื้นที่หน่วยความจำสำหรับบรรทัดตาราง size_number เมื่อใดก็ตามที่มีการประกาศออบเจ็กต์ตารางภายในขนาดของตารางจะไม่อยู่ในชนิดข้อมูลของตาราง

Note - ใช้หน่วยความจำน้อยลงมากเมื่อมีการเติมตารางภายในเป็นครั้งแรก

ตัวอย่าง

Step 1- เปิด ABAP Editor โดยเรียกใช้รหัสธุรกรรม SE38 หน้าจอเริ่มต้นของ ABAP Editor จะปรากฏขึ้น

Step 2 - ในหน้าจอเริ่มต้นป้อนชื่อของโปรแกรมเลือกปุ่มตัวเลือกซอร์สโค้ดแล้วคลิกปุ่มสร้างเพื่อสร้างโปรแกรมใหม่

Step 3- ในกล่องโต้ตอบ "ABAP: Program Attributes" ให้ป้อนคำอธิบายสั้น ๆ สำหรับโปรแกรมในช่อง Title เลือกตัวเลือก "โปรแกรมปฏิบัติการ" จากเมนูแบบเลื่อนลง Type ในกล่องกลุ่มแอตทริบิวต์ คลิกปุ่มบันทึก

Step 4 - เขียนรหัสต่อไปนี้ในโปรแกรมแก้ไข ABAP

REPORT ZINTERNAL_DEMO. 
TYPES: BEGIN OF CustomerLine, 
Cust_ID TYPE C, 
Cust_Name(20) TYPE C, 
END OF CustomerLine. 
 
TYPES mytable TYPE SORTED TABLE OF CustomerLine  
WITH UNIQUE KEY Cust_ID. 
WRITE:/'The mytable is an Internal Table'.

Step 5 - บันทึกเปิดใช้งานและดำเนินการโปรแกรมตามปกติ

ในตัวอย่างนี้ mytable เป็นตารางภายในและมีการกำหนดคีย์เฉพาะในฟิลด์ Cust_ID

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

The mytable is an Internal Table.

ในตารางภายในการเติมข้อมูลประกอบด้วยคุณลักษณะต่างๆเช่นการเลือกการแทรกและการผนวก บทนี้มุ่งเน้นไปที่คำสั่ง INSERT และ APPEND

คำสั่ง INSERT

คำสั่ง INSERT ใช้เพื่อแทรกบรรทัดเดียวหรือกลุ่มของบรรทัดลงในตารางภายใน

ต่อไปนี้เป็นไวยากรณ์เพื่อเพิ่มบรรทัดเดียวในตารางภายใน -

INSERT <work_area_itab> INTO <internal_tab> INDEX <index_num>.

ในไวยากรณ์นี้คำสั่ง INSERT จะแทรกบรรทัดใหม่ในตารางภายใน internal_tab สามารถแทรกบรรทัดใหม่ได้โดยใช้นิพจน์ work_area_itab INTO ก่อนพารามิเตอร์ internal_tab เมื่อใช้นิพจน์ work_area_itab INTO บรรทัดใหม่จะถูกนำมาจากพื้นที่ทำงาน work_area_itab และแทรกลงในตาราง internal_tab อย่างไรก็ตามเมื่อไม่ได้ใช้นิพจน์ work_area_itab INTO เพื่อแทรกบรรทัดบรรทัดจะถูกนำมาจากบรรทัดส่วนหัวของตาราง internal_tab

เมื่อแทรกบรรทัดใหม่ในตารางภายในโดยใช้อนุประโยค INDEX หมายเลขดัชนีของบรรทัดหลังบรรทัดที่แทรกจะเพิ่มขึ้นทีละ 1 หากตารางภายในมี <index_num> - 1 บรรทัดบรรทัดใหม่จะถูกเพิ่มที่ส่วน ท้ายตาราง เมื่อระบบ SAP เพิ่มบรรทัดลงในตารางภายในสำเร็จตัวแปร SY-SUBRC จะถูกตั้งค่าเป็น 0

ตัวอย่าง

ต่อไปนี้เป็นโปรแกรมตัวอย่างที่ใช้คำสั่งแทรก

REPORT  ZCUSLIST1. 
DATA: BEGIN OF itable1 OCCURS 4,
      F1 LIKE SY-INDEX,
      END OF itable1.
	
   DO 4 TIMES.
      itable1-F1 = sy-index.
      APPEND itable1.
   ENDDO.
	
itable1-F1 = -96.  
INSERT itable1 INDEX 2.  

LOOP AT itable1.
   Write / itable1-F1.  
ENDLOOP.  

LOOP AT itable1 Where F1 ≥ 3.
   itable1-F1 = -78.
   INSERT itable1.
ENDLOOP.

Skip.
LOOP AT itable1.
   Write / itable1-F1.
ENDLOOP.

รหัสข้างต้นก่อให้เกิดสิ่งต่อไปนี้ -

1 
96- 
		2 
		3 
 4  
		1 
96- 
		2 
78- 
 3 
78- 
 4

ในตัวอย่างข้างต้นลูป DO ต่อท้าย 4 แถวที่มีตัวเลข 1 ถึง 4 เข้าด้วยกัน ส่วนประกอบบรรทัดส่วนหัว itable1-F1 ได้รับการกำหนดค่าเป็น -96 คำสั่งแทรกแทรกบรรทัดส่วนหัวเป็นแถวใหม่ในเนื้อหาก่อนแถว 3 แถวที่ 3 ที่มีอยู่จะกลายเป็นแถวที่ 4 หลังจากการแทรก คำสั่ง LOOP AT ดึงแถวเหล่านั้นจากตารางภายในที่มีค่า F1 มากกว่าหรือเท่ากับ 3 ก่อนแต่ละแถวคำสั่ง Insert จะแทรกแถวใหม่จากบรรทัดส่วนหัวของมัน ก่อนที่จะมีการแทรกส่วนประกอบ F1 ถูกเปลี่ยนเป็น -78

หลังจากดำเนินการคำสั่งแทรกแต่ละครั้งระบบจะจัดทำดัชนีแถวทั้งหมดด้านล่างแถวที่แทรกอีกครั้ง สิ่งนี้แนะนำค่าใช้จ่ายเมื่อคุณแทรกแถวใกล้ด้านบนสุดของตารางภายในขนาดใหญ่ หากคุณต้องการแทรกบล็อกของแถวในตารางภายในขนาดใหญ่ให้เตรียมตารางอื่นที่มีแถวที่จะแทรกและใช้เส้นแทรกแทน

เมื่อแทรกแถวใหม่ภายใน itable1 ภายในลูปที่ itable1 จะไม่มีผลกับตารางภายในทันที มันจะมีผลในลูปรอบถัดไป ในขณะที่แทรกแถวหลังแถวปัจจุบันตารางจะถูกจัดทำดัชนีอีกครั้งที่ ENDLOOP sy-tabix จะเพิ่มขึ้นและลูปถัดไปจะประมวลผลแถวที่ sy-tabix ชี้ไป ตัวอย่างเช่นหากคุณอยู่ในลูปพาสรอบที่สองและคุณแทรกเรกคอร์ดก่อนแถว 3 เมื่อเอนด์ลูปถูกเรียกใช้แถวใหม่จะกลายเป็นแถว 3 และแถวเก่า 3 กลายเป็นแถวที่ 4 ไปเรื่อย ๆ Sy-tabix เพิ่มขึ้นทีละ 1 และวนรอบถัดไปจะประมวลผลบันทึกที่เพิ่งใส่เข้าไป

ผนวกคำชี้แจง

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

APPEND <record_for_itab> TO <internal_tab>.

ในไวยากรณ์นี้นิพจน์ <record_for_itab> สามารถแสดงโดยพื้นที่ทำงาน <work_area_itab> ซึ่งสามารถแปลงเป็นประเภทบรรทัดหรือโดยประโยค INITIAL LINE ถ้าผู้ใช้ใช้พื้นที่ทำงาน <work_area_itab> ระบบ SAP จะเพิ่มบรรทัดใหม่ให้กับตารางภายใน <internal_tab> และเติมข้อมูลด้วยเนื้อหาของพื้นที่ทำงาน ประโยค INITIAL LINE ต่อท้ายบรรทัดว่างที่มีค่าเริ่มต้นสำหรับแต่ละฟิลด์ของโครงสร้างตาราง หลังจากคำสั่งผนวกแต่ละคำสั่งตัวแปร SY-TABIX ประกอบด้วยหมายเลขดัชนีของบรรทัดต่อท้าย

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

ตัวอย่าง

REPORT  ZCUSLIST1. 
DATA: BEGIN OF linv Occurs 0,
      Name(20) TYPE C,
      ID_Number TYPE I,
END OF linv. 

DATA table1 LIKE TABLE OF linv. 
linv-Name = 'Melissa'. 
linv-ID_Number = 105467. 
APPEND linv TO table1. 
LOOP AT table1 INTO linv. 

Write: / linv-name, linv-ID_Number. 
ENDLOOP.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Melissa		105467

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

ในการคัดลอกระเบียนเราสามารถใช้คำสั่ง SELECT เพื่อเลือกระเบียนทั้งหมดจากตารางจากนั้นใช้คำสั่ง MOVE ที่จะย้ายระเบียนจากตารางเดิมไปยังตารางภายในใหม่ลงในช่องที่ชื่อสอดคล้องกัน

ต่อไปนี้เป็นไวยากรณ์สำหรับคำสั่ง MOVE -

MOVE <table_field> TO <internal_tab_field>.

ตัวอย่าง

REPORT  ZCUSLIST1. 
TABLES: ZCUSTOMERS1. 
DATA: BEGIN OF itab01 Occurs 0,
      name LIKE ZCUSTOMERS1-name,
      dob LIKE ZCUSTOMERS1-dob, 
END OF itab01. 

Select * FROM ZCUSTOMERS1. 
MOVE ZCUSTOMERS1-name TO itab01-name. 
MOVE ZCUSTOMERS1-dob TO itab01-dob. 
ENDSELECT.
 
Write: / itab01-name, itab01-dob.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

MARGARET  		02.11.1994

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

ต่อไปนี้เป็นไวยากรณ์สำหรับคำสั่ง MOVE-CORRESPONDING -

MOVE-CORRESPONDING <table_name> TO <internal_tab>.

มันบอกให้ระบบย้ายข้อมูลจากฟิลด์ของ ZCUSTOMERS1 ไปยังฟิลด์ที่เกี่ยวข้องใน itab01

ตัวอย่าง

REPORT  ZCUSTOMERLIST. 
TABLES: ZCUSTOMERS1. 
DATA: Begin of itab01 occurs 0,
      customer LIKE ZCUSTOMERS1-customer,
      name LIKE ZCUSTOMERS1-name,
      title LIKE ZCUSTOMERS1-title,
      dob LIKE ZCUSTOMERS1-dob, 
END OF itab01. 

SELECT * from ZCUSTOMERS1. 
MOVE-Corresponding ZCUSTOMERS1 TO itab01. 
APPEND itab01. 
ENDSELECT. 
LOOP AT itab01. 
Write: / itab01-name, itab01-dob. 
ENDLOOP.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

MARK           21.05.1981 
JAMES          14.08.1977 
AURIELE        19.06.1990 
STEPHEN        22.07.1985 
MARGARET       02.11.1994

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

เราสามารถอ่านบรรทัดของตารางโดยใช้ไวยากรณ์ต่อไปนี้ของคำสั่ง READ TABLE -

READ TABLE <internal_table> FROM <work_area_itab>.

ในไวยากรณ์นี้นิพจน์ <work_area_itab> แสดงถึงพื้นที่ทำงานที่เข้ากันได้กับชนิดบรรทัดของตาราง <internal_table> เราสามารถระบุคีย์การค้นหา แต่ไม่ใช่คีย์ตารางภายในคำสั่ง READ โดยใช้ส่วนคำสั่ง WITH KEY ดังแสดงในไวยากรณ์ต่อไปนี้ -

READ TABLE <internal_table> WITH KEY = <internal_tab_field>.

ที่นี่บรรทัดทั้งหมดของตารางภายในใช้เป็นไฟล์ search key. เนื้อหาของทั้งบรรทัดของตารางจะถูกเปรียบเทียบกับเนื้อหาของฟิลด์ <internal_tab_field> ถ้าค่าของเขตข้อมูล <internal_tab_field> เข้ากันไม่ได้กับประเภทเส้นของตารางค่าเหล่านี้จะถูกแปลงตามประเภทเส้นของตาราง แป้นค้นหาช่วยให้คุณค้นหารายการในตารางภายในที่ไม่มีประเภทเส้นที่มีโครงสร้างกล่าวคือโดยที่เส้นนั้นเป็นเขตข้อมูลเดียวหรือประเภทตารางภายใน

ไวยากรณ์ต่อไปนี้ของคำสั่ง READ ใช้เพื่อระบุพื้นที่ทำงานหรือสัญลักษณ์เขตข้อมูลโดยใช้ประโยคคำสั่ง COMPARING -

READ TABLE <internal_table> <key> INTO <work_area_itab>
   [COMPARING <F1> <F2>...<Fn>].

เมื่อใช้คำสั่ง COMPARING ฟิลด์ตารางที่ระบุ <F1>, <F2> .... <Fn> ของประเภทเส้นที่มีโครงสร้างจะถูกเปรียบเทียบกับฟิลด์ที่เกี่ยวข้องของพื้นที่ทำงานก่อนที่จะถูกส่ง หากระบุอนุประโยค ALL FIELDS ระบบ SAP จะเปรียบเทียบส่วนประกอบทั้งหมด เมื่อระบบ SAP พบรายการบนพื้นฐานของคีย์ค่าของตัวแปร SY-SUBRC จะถูกกำหนดเป็น 0 นอกจากนี้ค่าของตัวแปร SY-SUBRC จะถูกตั้งค่าเป็น 2 หรือ 4 หากเนื้อหาของการเปรียบเทียบ ฟิลด์ไม่เหมือนกันหรือหากระบบ SAP ไม่พบรายการ อย่างไรก็ตามระบบ SAP จะคัดลอกรายการไปยังพื้นที่ทำงานเป้าหมายเมื่อใดก็ตามที่พบรายการโดยไม่คำนึงถึงผลลัพธ์ของการเปรียบเทียบ

ตัวอย่าง

REPORT  ZREAD_DEMO. 
*/Creating an internal table 
DATA: BEGIN OF Record1, 
ColP TYPE I, 
ColQ TYPE I, 
END OF Record1. 

DATA mytable LIKE HASHED TABLE OF Record1 WITH UNIQUE KEY ColP. 
DO 6 Times.
Record1-ColP = SY-INDEX. 
Record1-ColQ = SY-INDEX + 5. 
INSERT Record1 INTO TABLE mytable. 
ENDDO. 

Record1-ColP = 4. 
Record1-ColQ = 12. 
READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ. 

WRITE: 'SY-SUBRC =', SY-SUBRC. 
SKIP. 
WRITE: / Record1-ColP, Record1-ColQ.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

SY-SUBRC =    2 

4         9

ในตัวอย่างข้างต้น mytable เป็นตารางภายในของประเภทตารางที่แฮชโดยมี Record1 เป็นพื้นที่ทำงานและ ColP เป็นคีย์เฉพาะ ในขั้นต้น mytable มีหกบรรทัดโดยที่ฟิลด์ ColP มีค่าของตัวแปร SY-INDEX และฟิลด์ ColQ ประกอบด้วยค่า (SY-INDEX + 5)

พื้นที่ทำงาน Record1 จะถูกเติมด้วย 4 และ 12 เป็นค่าสำหรับฟิลด์ ColP และ ColQ ตามลำดับ คำสั่ง READ อ่านบรรทัดของตารางหลังจากเปรียบเทียบค่าของฟิลด์คีย์ ColP กับค่าในพื้นที่ทำงาน Record1 โดยใช้คำสั่ง COMPARING จากนั้นคัดลอกเนื้อหาของบรรทัดการอ่านในพื้นที่ทำงาน ค่าของตัวแปร SY-SUBRC จะแสดงเป็น 2 เนื่องจากเมื่อค่าในฟิลด์ ColP เป็น 4 ค่าใน ColQ ไม่ใช่ 12 แต่เป็น 9

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

ต่อไปนี้เป็นไวยากรณ์ที่จะใช้คำสั่ง DELETE เพื่อลบระเบียนหรือบรรทัดจากตารางภายใน -

DELETE TABLE <internal_table> FROM <work_area_itab>.

ในไวยากรณ์ข้างต้นนิพจน์ <work_area_itab> คือพื้นที่ทำงานและควรเข้ากันได้กับชนิดของตารางภายใน <internal_table> การดำเนินการลบจะดำเนินการบนพื้นฐานของคีย์เริ่มต้นที่สามารถนำมาจากส่วนประกอบของพื้นที่ทำงาน

คุณยังสามารถระบุคีย์ตารางอย่างชัดเจนในคำสั่ง DELETE TABLE โดยใช้ไวยากรณ์ต่อไปนี้ -

DELETE TABLE <internal_table> WITH TABLE KEY <K1> = <F1>………… <Kn> = <Fn>.

ในไวยากรณ์นี้ <F1>, <F2> .... <Fn> คือฟิลด์ของตารางภายในและ <K1>, <K2> .... <Kn> คือฟิลด์หลักของตาราง คำสั่ง DELETE ใช้เพื่อลบระเบียนหรือบรรทัดของตาราง <internal_table> ตามนิพจน์ <K1> = <F1>, <K2> = <F2> ... <Kn> = <Fn>

Note - หากชนิดข้อมูลของฟิลด์ <F1>, <F2> .... <Fn> เข้ากันไม่ได้กับฟิลด์คีย์ <K1>, <K2> ... <Kn> ระบบ SAP จะแปลงเป็นฟิลด์โดยอัตโนมัติ รูปแบบที่เข้ากันได้

ตัวอย่าง

REPORT  ZDELETE_DEMO. 
DATA: BEGIN OF Line1, 
ColP TYPE I, 
ColQ TYPE I, 
END OF Line1. 
DATA mytable LIKE HASHED TABLE OF Line1  
WITH UNIQUE KEY ColP. 
DO 8 TIMES. 

Line1-ColP = SY-INDEX. 
Line1-ColQ = SY-INDEX + 4. 
INSERT Line1 INTO TABLE mytable. 
ENDDO. 

Line1-ColP = 1. 
DELETE TABLE mytable: FROM Line1, 
WITH TABLE KEY ColP = 3.
LOOP AT mytable INTO Line1. 

WRITE: / Line1-ColP, Line1-ColQ. 
ENDLOOP.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

2         6 
4         8 
5         9 
6         10 
7         11 
8         12

ในตัวอย่างนี้ mytable มีสองฟิลด์ ColP และ ColQ ในขั้นต้น mytable จะถูกเติมด้วยแปดบรรทัดโดยที่ ColP มีค่า 1, 2, 3, 4, 5, 6, 7 และ 8 ColQ ประกอบด้วยค่า 5, 6, 7, 8, 9, 10, 11 และ 12 เนื่องจากค่า ColP จะเพิ่มขึ้นด้วย 4 ทุกครั้ง

คำสั่ง DELETE ใช้เพื่อลบบรรทัดจาก mytable โดยที่ค่าของฟิลด์คีย์ ColP เป็น 1 หรือ 3 หลังจากการลบฟิลด์ ColP ของ mytable จะมีค่า 2, 4, 5, 6, 7 และ 8 ดังที่แสดง ในเอาต์พุต ฟิลด์ ColQ ประกอบด้วยค่า 6, 8, 9, 10, 11 และ 12

การวางแนววัตถุช่วยลดความยุ่งยากในการออกแบบซอฟต์แวร์เพื่อให้เข้าใจดูแลรักษาและนำกลับมาใช้ใหม่ได้ง่ายขึ้น Object Oriented Programming(OOP) แสดงถึงวิธีคิดที่แตกต่างออกไปในการเขียนซอฟต์แวร์ ความสวยงามของ OOP อยู่ที่ความเรียบง่าย การแสดงออกของ OOP ทำให้ง่ายต่อการส่งมอบส่วนประกอบซอฟต์แวร์ที่มีคุณภาพตรงเวลา

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

ลองเปรียบเทียบการเขียนโปรแกรมเชิงขั้นตอนและเชิงวัตถุ -

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

เริ่มแรก ABAP ได้รับการพัฒนาเป็นภาษาขั้นตอน (เช่นเดียวกับภาษาโปรแกรมขั้นตอนก่อนหน้าเช่น COBOL) แต่ปัจจุบัน ABAP ได้ปรับหลักการของกระบวนทัศน์เชิงวัตถุด้วยการนำ ABAP Objects มาใช้ แนวคิดเชิงวัตถุใน ABAP เช่นคลาสอ็อบเจ็กต์การสืบทอดและความหลากหลายโดยพื้นฐานแล้วจะเหมือนกับภาษาเชิงวัตถุสมัยใหม่อื่น ๆ เช่น Java หรือ C ++

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

คุณสมบัติที่สำคัญของการวางแนววัตถุคือ -

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

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

วัตถุคือรูปแบบหรืออินสแตนซ์ของคลาส มันแสดงถึงเอนทิตีในโลกแห่งความเป็นจริงเช่นบุคคลหรือเอนทิตีโปรแกรมเช่นตัวแปรและค่าคงที่ ตัวอย่างเช่นบัญชีและนักเรียนเป็นตัวอย่างของเอนทิตีในโลกแห่งความเป็นจริง แต่ส่วนประกอบฮาร์ดแวร์และซอฟต์แวร์ของคอมพิวเตอร์เป็นตัวอย่างของเอนทิตีการเขียนโปรแกรม

วัตถุมีคุณสมบัติหลักสามประการดังต่อไปนี้ -

  • มีสถานะ
  • มีเอกลักษณ์เฉพาะ.
  • อาจแสดงพฤติกรรมหรือไม่ก็ได้

สถานะของออบเจ็กต์สามารถอธิบายได้ว่าเป็นชุดของคุณลักษณะและค่าของวัตถุ ตัวอย่างเช่นบัญชีธนาคารมีชุดของแอตทริบิวต์เช่นหมายเลขบัญชีชื่อประเภทบัญชียอดดุลและค่าของแอตทริบิวต์เหล่านี้ทั้งหมด ลักษณะการทำงานของวัตถุหมายถึงการเปลี่ยนแปลงที่เกิดขึ้นในแอตทริบิวต์ในช่วงเวลาหนึ่ง

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

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

การสร้างวัตถุ

การสร้างวัตถุมักจะมีขั้นตอนต่อไปนี้ -

  • การสร้างตัวแปรอ้างอิงโดยอ้างอิงถึงคลาส ไวยากรณ์ที่เป็น -

DATA: <object_name> TYPE REF TO <class_name>.
  • การสร้างวัตถุจากตัวแปรอ้างอิง ไวยากรณ์ที่เป็น -

CREATE Object: <object_name>.

ตัวอย่าง

REPORT ZDEMO_OBJECT. 
CLASS Class1 Definition. 
Public Section. 
DATA: text1(45) VALUE 'ABAP Objects.'. 
METHODS: Display1. 
ENDCLASS. 

CLASS Class1 Implementation. 
METHOD Display1. 
Write:/ 'This is the Display method.'. 
ENDMETHOD. 
ENDCLASS. 

START-OF-SELECTION. 
DATA: Class1 TYPE REF TO Class1. 
CREATE Object: Class1. 
Write:/ Class1->text1. 
CALL METHOD: Class1->Display1.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

ABAP Objects. 
This is the Display method.

คลาสถูกใช้เพื่อระบุรูปแบบของอ็อบเจ็กต์และรวมการแทนข้อมูลและวิธีการจัดการข้อมูลนั้นเป็นแพ็กเกจเดียว มีการเรียกข้อมูลและฟังก์ชันภายในคลาสmembers of the class.

นิยามคลาสและการนำไปใช้

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

ไวยากรณ์ต่อไปนี้แสดงวิธีกำหนดคลาส -

CLASS <class_name> DEFINITION. 
.......... 
.......... 
ENDCLASS.

นิยามคลาสเริ่มต้นด้วยคีย์เวิร์ด CLASS ตามด้วยชื่อคลาส DEFINITION และคลาสเนื้อหา คำจำกัดความของคลาสสามารถมีส่วนประกอบต่างๆของคลาสเช่นแอ็ตทริบิวต์วิธีการและเหตุการณ์ เมื่อเราประกาศเมธอดในการประกาศคลาสการใช้เมธอดจะต้องรวมอยู่ในการใช้คลาส ไวยากรณ์ต่อไปนี้แสดงวิธีใช้คลาส -

CLASS <class_name> IMPLEMENTATION. 
........... 
.......... 
ENDCLASS.

Note- การใช้งานคลาสประกอบด้วยการนำวิธีการทั้งหมดไปใช้ ใน ABAP Objects โครงสร้างของคลาสประกอบด้วยองค์ประกอบต่างๆเช่นแอตทริบิวต์วิธีการเหตุการณ์ประเภทและค่าคงที่

คุณลักษณะ

แอตทริบิวต์คือช่องข้อมูลของคลาสที่สามารถมีประเภทข้อมูลเช่น C, I, F และ N ซึ่งจะประกาศในการประกาศคลาส แอตทริบิวต์เหล่านี้สามารถแบ่งออกเป็น 2 ประเภท ได้แก่ อินสแตนซ์และแอตทริบิวต์แบบคงที่ อันinstance attributeกำหนดสถานะเฉพาะอินสแตนซ์ของวัตถุ สถานะแตกต่างกันสำหรับวัตถุที่แตกต่างกัน แอตทริบิวต์อินสแตนซ์ถูกประกาศโดยใช้คำสั่ง DATA

Static attributesกำหนดสถานะทั่วไปของคลาสที่ใช้ร่วมกันโดยอินสแตนซ์ทั้งหมดของคลาส นั่นคือถ้าคุณเปลี่ยนแอตทริบิวต์แบบคงที่ในออบเจ็กต์หนึ่งของคลาสการเปลี่ยนแปลงจะมองเห็นได้สำหรับอ็อบเจ็กต์อื่น ๆ ทั้งหมดของคลาสเช่นกัน มีการประกาศแอตทริบิวต์แบบคงที่โดยใช้คำสั่ง CLASS-DATA

วิธีการ

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

METHOD <m_name>. 
.......... 
.......... 
ENDMETHOD.

ในไวยากรณ์นี้ <m_name> แสดงถึงชื่อของวิธีการ Note - คุณสามารถเรียกเมธอดได้โดยใช้คำสั่ง CALL METHOD

การเข้าถึงแอตทริบิวต์และวิธีการ

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

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

  • แอตทริบิวต์และวิธีการที่ประกาศในส่วนสาธารณะในคลาสสามารถเข้าถึงได้โดยคลาสนั้นและคลาสอื่น ๆ คลาสย่อยของโปรแกรม

  • เมื่อมีการประกาศแอตทริบิวต์และวิธีการในส่วนที่ได้รับการป้องกันในคลาสผู้ที่สามารถเข้าถึงได้โดยคลาสและคลาสย่อยนั้น (คลาสที่ได้รับ) เท่านั้น

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

ตัวอย่าง

Report ZAccess1. 
CLASS class1 Definition.
   PUBLIC Section.
      Data: text1 Type char25 Value 'Public Data'.
      Methods meth1.
		
   PROTECTED Section.
      Data: text2 Type char25 Value 'Protected Data'.
		
   PRIVATE Section.     
      Data: text3 Type char25 Value 'Private Data'. 
ENDCLASS.
 
CLASS class1 Implementation.   
   Method meth1.     
      Write: / 'Public Method:',   
             / text1,
             / text2,
             / text3.
      Skip.
   EndMethod.
ENDCLASS. 

Start-Of-Selection.   
   Data: Objectx Type Ref To class1.
   Create Object: Objectx.
   CALL Method: Objectx→meth1.
   Write: / Objectx→text1.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Public Method: 
Public Data 
Protected Data 
Private Data
  
Public Data

คุณสมบัติคงที่

มีการประกาศแอตทริบิวต์แบบคงที่ด้วยคำสั่ง CLASS-DATA วัตถุหรืออินสแตนซ์ทั้งหมดสามารถใช้แอตทริบิวต์แบบคงที่ของคลาสได้ แอตทริบิวต์แบบคงที่สามารถเข้าถึงได้โดยตรงด้วยความช่วยเหลือของชื่อคลาสเช่น class_name Somename_1 = 'Some Text'

ตัวอย่าง

ต่อไปนี้เป็นโปรแกรมที่เราต้องการพิมพ์ข้อความที่มีบรรทัดหมายเลข 4 ถึง 8 ครั้ง เรากำหนดคลาส class1 และในส่วนสาธารณะเราประกาศ CLASS-DATA (แอตทริบิวต์แบบคงที่) และวิธีการ หลังจากใช้คลาสและวิธีการแล้วเราจะเข้าถึงแอตทริบิวต์แบบคงที่ในเหตุการณ์เริ่มต้นของการเลือกโดยตรง จากนั้นเราก็สร้างอินสแตนซ์ของคลาสและเรียกใช้เมธอด

Report ZStatic1. 
CLASS class1 Definition.   
   PUBLIC Section.
      CLASS-DATA: name1 Type char45,
                  data1 Type I.
   Methods: meth1. 
ENDCLASS. 

CLASS class1 Implementation.   
   Method meth1.
      Do 4 Times.
         data1 = 1 + data1.
         Write: / data1, name1.
      EndDo.
      Skip.
   EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
   class1⇒name1 = 'ABAP Object Oriented Programming'.
   class1⇒data1 = 0.
   Data: Object1 Type Ref To class1,
         Object2 Type Ref To class1.
			
   Create Object: Object1, Object2.
   CALL Method: Object1→meth1, 
                Object2→meth1.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

ตัวสร้าง

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

ตัวอย่าง

Report ZConstructor1. 
CLASS class1 Definition.
   PUBLIC Section.
      Methods: method1, constructor.
ENDCLASS. 

CLASS class1 Implementation.
   Method method1.
      Write: / 'This is Method1'.
   EndMethod.
	
   Method constructor.
      Write: / 'Constructor Triggered'.
   EndMethod. 
ENDCLASS. 

Start-Of-Selection.
   Data Object1 Type Ref To class1.
   Create Object Object1.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Constructor Triggered

ME Operator ในวิธีการ

เมื่อคุณประกาศตัวแปรประเภทใดก็ได้ในส่วนสาธารณะของคลาสคุณสามารถใช้ตัวแปรนั้นในการนำไปใช้งานอื่น ๆ ได้ สามารถประกาศตัวแปรด้วยค่าเริ่มต้นในส่วนสาธารณะ เราอาจประกาศตัวแปรอีกครั้งภายในวิธีการที่มีค่าอื่น เมื่อเราเขียนตัวแปรภายในเมธอดระบบจะพิมพ์ค่าที่เปลี่ยนแปลง เพื่อแสดงค่าก่อนหน้าของตัวแปรเราต้องใช้ตัวดำเนินการ 'ME'

ในโปรแกรมนี้เราได้ประกาศตัวแปรสาธารณะ text1 และเริ่มต้นด้วยค่า เราได้ประกาศตัวแปรเดียวกันอีกครั้ง แต่สร้างอินสแตนซ์ด้วยค่าที่ต่างกัน ภายในเมธอดเรากำลังเขียนตัวแปรนั้นด้วยโอเปอเรเตอร์ 'ME' เพื่อรับค่าที่เริ่มต้นก่อนหน้านี้ เราได้รับค่าที่เปลี่ยนแปลงโดยการประกาศโดยตรง

ตัวอย่าง

Report ZMEOperator1. 
CLASS class1 Definition.
   PUBLIC Section. 
	
Data text1 Type char25 Value 'This is CLASS Attribute'.
   Methods method1. 
ENDCLASS. 

CLASS class1 Implementation.
   Method method1. 
	
Data text1 Type char25 Value 'This is METHOD Attribute'.
   Write: / ME→text1,
          / text1.
   ENDMethod.
ENDCLASS. 

Start-Of-Selection.
   Data objectx Type Ref To class1.
   Create Object objectx.
   CALL Method objectx→method1.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

This is CLASS Attribute 
This is METHOD Attribute

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

เมื่อสร้างคลาสแทนที่จะเขียนสมาชิกข้อมูลและเมธอดใหม่ทั้งหมดโปรแกรมเมอร์สามารถกำหนดได้ว่าคลาสใหม่ควรสืบทอดสมาชิกของคลาสที่มีอยู่ คลาสที่มีอยู่นี้เรียกว่าbase class หรือ super classและคลาสใหม่เรียกว่า derived class หรือ sub class.

  • ออบเจ็กต์ของคลาสหนึ่งสามารถรับคุณสมบัติของคลาสอื่นได้

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

  • ประโยชน์หลักของการถ่ายทอดทางพันธุกรรมคือการนำกลับมาใช้ใหม่ได้

ความสัมพันธ์ของการสืบทอดถูกระบุโดยใช้การเพิ่ม 'INHERITING FROM' ในคำสั่งนิยามคลาส

ต่อไปนี้เป็นไวยากรณ์ -

CLASS <subclass> DEFINITION INHERITING FROM <superclass>.

ตัวอย่าง

Report ZINHERITAN_1. 
CLASS Parent Definition. 
PUBLIC Section. 
Data: w_public(25) Value 'This is public data'. 
Methods: ParentM. 
ENDCLASS. 

CLASS Child Definition Inheriting From Parent. 
PUBLIC Section. 
Methods: ChildM. 
ENDCLASS. 

CLASS Parent Implementation. 
Method ParentM. 
Write /: w_public. 
EndMethod. ENDCLASS. 

CLASS Child Implementation. 
Method ChildM. 
Skip. 
Write /: 'Method in child class', w_public.
EndMethod. 
ENDCLASS. 

Start-of-selection. 
Data: Parent Type Ref To Parent, 
Child Type Ref To Child. 
Create Object: Parent, Child. 
Call Method: Parent→ParentM, 
child→ChildM.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

This is public data 
Method in child class 
This is public data

การควบคุมการเข้าถึงและการสืบทอด

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

เข้าไป สาธารณะ มีการป้องกัน เอกชน
calss เดียวกัน ใช่ ใช่ ใช่
คลาสที่ได้รับ ใช่ ใช่ ไม่
นอกชั้นเรียน ใช่ ไม่ ไม่

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

  • Public Inheritance- เมื่อได้รับคลาสจากคลาสซูเปอร์สาธารณะสมาชิกสาธารณะของคลาสซูเปอร์จะกลายเป็นสมาชิกสาธารณะของคลาสย่อยและสมาชิกที่ได้รับการคุ้มครองของคลาสซุปเปอร์จะกลายเป็นสมาชิกที่ได้รับการคุ้มครองของคลาสย่อย สมาชิกส่วนตัวของ Super class จะไม่สามารถเข้าถึงได้โดยตรงจากคลาสย่อย แต่สามารถเข้าถึงได้ผ่านการโทรไปยังสาธารณะและสมาชิกที่ได้รับการป้องกันของคลาสระดับสูง

  • Protected Inheritance - เมื่อได้รับมาจากคลาสซุปเปอร์ที่ได้รับการป้องกันสมาชิกสาธารณะและที่ได้รับการคุ้มครองของคลาสซุปเปอร์จะกลายเป็นสมาชิกที่ได้รับการคุ้มครองของคลาสย่อย

  • Private Inheritance - เมื่อได้มาจากซูเปอร์คลาสส่วนตัวสมาชิกสาธารณะและที่ได้รับการคุ้มครองของคลาสซุปเปอร์จะกลายเป็นสมาชิกส่วนตัวของคลาสย่อย

การกำหนดวิธีการใหม่ในคลาสย่อย

วิธีการของซุปเปอร์คลาสสามารถนำมาใช้ใหม่ในคลาสย่อยได้ กฎบางประการในการกำหนดวิธีการใหม่ -

  • คำสั่งนิยามใหม่สำหรับวิธีการสืบทอดต้องอยู่ในส่วนเดียวกันกับคำจำกัดความของวิธีการดั้งเดิม

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

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

  • ซูเปอร์อ้างอิงหลอกสามารถใช้ได้ในวิธีการที่กำหนดใหม่เท่านั้น

ตัวอย่าง

Report Zinheri_Redefine. 
CLASS super_class Definition. 
Public Section. 
Methods: Addition1 importing g_a TYPE I
                             g_b TYPE I
		   exporting g_c TYPE I.
ENDCLASS. 

CLASS super_class Implementation. 
Method Addition1. 
g_c = g_a + g_b. 
EndMethod. 
ENDCLASS. 

CLASS sub_class Definition Inheriting From super_class. 
Public Section. 
METHODS: Addition1 Redefinition. 
ENDCLASS. 

CLASS sub_class Implementation. 
Method Addition1. 
g_c = g_a + g_b + 10. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Parameters: P_a Type I, P_b TYPE I. 
Data: H_Addition1 TYPE I. 
Data: H_Sub TYPE I. 
Data: Ref1 TYPE Ref TO sub_class. 
Create Object Ref1. 
Call Method Ref1→Addition1 exporting g_a = P_a 
                                     g_b = P_b
		           Importing g_c = H_Addition1. 
Write:/ H_Addition1.

หลังจากดำเนินการ F8 หากเราป้อนค่า 9 และ 10 โค้ดด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -

Redefinition Demo 
29

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

โปรแกรมต่อไปนี้ประกอบด้วยคลาสนามธรรม 'class_prgm', คลาสย่อย 2 คลาส (class_procedural และ class_OO) และคลาสไดรเวอร์ทดสอบ 'class_type_approach' ในการใช้งานนี้เมธอดคลาส 'start' ช่วยให้เราสามารถแสดงประเภทของการเขียนโปรแกรมและแนวทางของมันได้ หากคุณดูลายเซ็นของวิธีการ 'start' อย่างละเอียดคุณจะสังเกตได้ว่าได้รับพารามิเตอร์การนำเข้าประเภท class_prgm อย่างไรก็ตามในเหตุการณ์เริ่มต้นของการเลือกเมธอดนี้ถูกเรียกในขณะรันไทม์ด้วยอ็อบเจ็กต์ประเภท class_procedural และ class_OO

ตัวอย่าง

Report ZPolymorphism1. 
CLASS class_prgm Definition Abstract. 
PUBLIC Section. 
Methods: prgm_type Abstract, 
approach1 Abstract. 
ENDCLASS. 

CLASS class_procedural Definition 
Inheriting From class_prgm. 
PUBLIC Section. 
Methods: prgm_type Redefinition, 
approach1 Redefinition. 
ENDCLASS. 

CLASS class_procedural Implementation. 
Method prgm_type. 
Write: 'Procedural programming'. 

EndMethod. Method approach1. 
Write: 'top-down approach'. 

EndMethod. ENDCLASS. 
CLASS class_OO Definition 
Inheriting From class_prgm. 
PUBLIC Section. 
Methods: prgm_type Redefinition, 
approach1 Redefinition. 
ENDCLASS. 

CLASS class_OO Implementation. 
Method prgm_type. 
Write: 'Object oriented programming'. 
EndMethod. 

Method approach1. 
Write: 'bottom-up approach'.
EndMethod. 
ENDCLASS. 

CLASS class_type_approach Definition. 
PUBLIC Section. 
CLASS-METHODS: 
start Importing class1_prgm 
Type Ref To class_prgm. 
ENDCLASS. 

CLASS class_type_approach IMPLEMENTATION. 
Method start. 
CALL Method class1_prgm→prgm_type. 
Write: 'follows'. 

CALL Method class1_prgm→approach1. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Data: class_1 Type Ref To class_procedural, 
class_2 Type Ref To class_OO. 

Create Object class_1. 
Create Object class_2. 
CALL Method class_type_approach⇒start 
Exporting 

class1_prgm = class_1. 
New-Line. 
CALL Method class_type_approach⇒start 
Exporting 
class1_prgm = class_2.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Procedural programming follows top-down approach  
Object oriented programming follows bottom-up approach

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

เมื่อใดก็ตามที่เมธอดถูกเรียกด้วยการใช้งานคลาสย่อยที่เป็นรูปธรรมเช่น class_procedural หรือ class_OO ประเภทไดนามิกของพารามิเตอร์อ้างอิง class1_prgm จะถูกผูกไว้กับหนึ่งในประเภทคอนกรีตเหล่านี้ ดังนั้นการเรียกใช้เมธอด 'prgm_type' และ 'approach1' จึงอ้างถึงการนำไปใช้งานที่ให้ไว้ในคลาสย่อย class_procedural หรือ class_OO แทนที่จะเป็นการนำไปใช้งานนามธรรมที่ไม่ได้กำหนดไว้ในคลาส 'class_prgm'

Encapsulation เป็นแนวคิด Object Oriented Programming (OOP) ที่รวมข้อมูลและฟังก์ชันที่จัดการข้อมูลเข้าด้วยกันและช่วยให้ทั้งสองปลอดภัยจากการรบกวนภายนอกและการใช้งานในทางที่ผิด การห่อหุ้มข้อมูลนำไปสู่แนวคิด OOP ที่สำคัญในการซ่อนข้อมูล การห่อหุ้มเป็นกลไกในการรวมข้อมูลและฟังก์ชันที่ใช้ข้อมูลเหล่านี้และสิ่งที่เป็นนามธรรมของข้อมูลเป็นกลไกในการเปิดเผยเฉพาะอินเทอร์เฟซและซ่อนรายละเอียดการใช้งานจากผู้ใช้

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

การห่อหุ้มด้วยส่วนต่อประสาน

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

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

ตัวอย่าง

โปรแกรมต่อไปนี้มีอินเตอร์เฟส inter_1 เราได้ประกาศแอตทริบิวต์และวิธีการ method1 เราได้กำหนดสองคลาสเช่น Class1 และ Class2 ดังนั้นเราต้องใช้วิธีการ 'method1' ในการใช้งานทั้งสองคลาส เราได้ใช้ method 'method1' ที่แตกต่างกันในคลาสต่างๆ ในการเริ่มต้นการเลือกเราสร้างวัตถุ 2 ชิ้น Object1 และ Object2 สำหรับสองคลาส จากนั้นเราเรียกวิธีการตามวัตถุที่แตกต่างกันเพื่อรับฟังก์ชั่นที่ประกาศในคลาสแยกกัน

Report ZEncap1. 
Interface inter_1.
   Data text1 Type char35.
   Methods method1.
EndInterface.

CLASS Class1 Definition.
   PUBLIC Section.
      Interfaces inter_1.
ENDCLASS. 

CLASS Class2 Definition.
   PUBLIC Section.
      Interfaces inter_1. 
ENDCLASS.

CLASS Class1 Implementation.
   Method inter_1~method1.
      inter_1~text1 = 'Class 1 Interface method'.
      Write / inter_1~text1.
   EndMethod. 
ENDCLASS.
 
CLASS Class2 Implementation.
   Method inter_1~method1.
      inter_1~text1 = 'Class 2 Interface method'.
      Write / inter_1~text1.
   EndMethod. 
ENDCLASS.
 
Start-Of-Selection.
   Data: Object1 Type Ref To Class1,
      Object2 Type Ref To Class2.
		
   Create Object: Object1, Object2.
   CALL Method: Object1→inter_1~method1,
                Object2→inter_1~method1.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Class 1 Interface method 
Class 2 Interface method

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

การออกแบบกลยุทธ์

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

เช่นเดียวกับคลาสใน ABAP อินเทอร์เฟซทำหน้าที่เป็นชนิดข้อมูลสำหรับอ็อบเจ็กต์ ส่วนประกอบของอินเตอร์เฟสเหมือนกับส่วนประกอบของคลาส ไม่เหมือนกับการประกาศคลาสการประกาศอินเทอร์เฟซไม่รวมถึงส่วนการมองเห็น เนื่องจากส่วนประกอบที่กำหนดไว้ในการประกาศอินเทอร์เฟซจะรวมอยู่ในส่วนการเปิดเผยสาธารณะของคลาสเสมอ

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

ต่อไปนี้เป็นรูปแบบทั่วไปในการสร้างอินเทอร์เฟซ -

INTERFACE <intf_name>. 
DATA..... 
CLASS-DATA..... 
METHODS..... 
CLASS-METHODS..... 
ENDINTERFACE.

ในไวยากรณ์นี้ <intf_name> แทนชื่อของอินเทอร์เฟซ คำสั่ง DATA และ CLASSDATA สามารถใช้เพื่อกำหนดอินสแตนซ์และแอตทริบิวต์แบบคงที่ของอินเทอร์เฟซตามลำดับ คำสั่ง METHODS และ CLASS-METHODS สามารถใช้เพื่อกำหนดอินสแตนซ์และวิธีการแบบคงที่ของอินเทอร์เฟซตามลำดับ เนื่องจากนิยามของอินเทอร์เฟซไม่รวมคลาสการนำไปใช้งานจึงไม่จำเป็นต้องเพิ่มส่วนคำสั่ง DEFINITION ในการประกาศอินเทอร์เฟซ

Note- วิธีการทั้งหมดของอินเทอร์เฟซเป็นนามธรรม มีการประกาศอย่างสมบูรณ์รวมถึงอินเทอร์เฟซพารามิเตอร์ แต่ไม่ได้ใช้ในอินเทอร์เฟซ คลาสทั้งหมดที่ต้องการใช้อินเทอร์เฟซต้องใช้วิธีการทั้งหมดของอินเทอร์เฟซ มิฉะนั้นชั้นเรียนจะกลายเป็นคลาสนามธรรม

เราใช้ไวยากรณ์ต่อไปนี้ในส่วนการนำไปใช้ของคลาส -

INTERFACE <intf_name>.

ในไวยากรณ์นี้ <intf_name> แทนชื่อของอินเทอร์เฟซ โปรดทราบว่าต้องใช้ไวยากรณ์นี้ในส่วนสาธารณะของคลาส

ไวยากรณ์ต่อไปนี้ใช้เพื่อใช้วิธีการของอินเทอร์เฟซภายในการใช้งานคลาส -

METHOD <intf_name~method_m>. 
<statements>. 
ENDMETHOD.

ในไวยากรณ์นี้ <intf_name ~ method_m> แสดงถึงชื่อที่ประกาศแบบเต็มของวิธีการของอินเทอร์เฟซ <intf_name>

ตัวอย่าง

Report ZINTERFACE1. 
INTERFACE my_interface1. 
Methods msg. 
ENDINTERFACE. 

CLASS num_counter Definition. 
PUBLIC Section. 
INTERFACES my_interface1. 
Methods add_number. 
PRIVATE Section. 
Data num Type I. 
ENDCLASS. 

CLASS num_counter Implementation. 
Method my_interface1~msg. 
Write: / 'The number is', num. 
EndMethod. 

Method add_number. 
ADD 7 TO num. 
EndMethod. 
ENDCLASS. 

CLASS drive1 Definition. 
PUBLIC Section. 
INTERFACES my_interface1. 
Methods speed1.
PRIVATE Section.
Data wheel1 Type I. 
ENDCLASS. 

CLASS drive1 Implementation.
Method my_interface1~msg.
Write: / 'Total number of wheels is', wheel1. 
EndMethod. 

Method speed1. 
Add 4 To wheel1. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Data object1 Type Ref To num_counter. 
Create Object object1. 

CALL Method object1→add_number.
CALL Method object1→my_interface1~msg.

Data object2 Type Ref To drive1. 
Create Object object2.
 
CALL Method object2→speed1. 
CALL Method object2→my_interface1~msg.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

The number is 7 
Total number of wheels is 4

ในตัวอย่างข้างต้น my_interface1 คือชื่อของอินเทอร์เฟซที่มีเมธอด 'msg' ถัดไปสองคลาส num_counter และ drive1 ถูกกำหนดและใช้งาน ทั้งสองคลาสนี้ใช้เมธอด 'msg' และเมธอดเฉพาะที่กำหนดลักษณะการทำงานของอินสแตนซ์ตามลำดับเช่นเมธอด add_number และ speed1

Note - วิธีการ add_number และ speed1 นั้นเฉพาะสำหรับคลาสที่เกี่ยวข้อง

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

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

เหตุการณ์ของคลาสสามารถทริกเกอร์เมธอดตัวจัดการเหตุการณ์ของคลาสเดียวกันโดยใช้คำสั่ง RAISE EVENT สำหรับเหตุการณ์วิธีการจัดการเหตุการณ์สามารถกำหนดในคลาสเดียวกันหรือต่างกันโดยใช้ประโยคสำหรับเหตุการณ์ดังที่แสดงในไวยากรณ์ต่อไปนี้ -

FOR EVENT <event_name> OF <class_name>.

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

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

ตัวอย่าง

REPORT ZEVENT1. 
CLASS CL_main DEFINITION. 
PUBLIC SECTION. 
DATA: num1 TYPE I. 
METHODS: PRO IMPORTING num2 TYPE I. 
EVENTS: CUTOFF. 
ENDCLASS. 

CLASS CL_eventhandler DEFINITION. 
PUBLIC SECTION. 
METHODS: handling_CUTOFF FOR EVENT CUTOFF OF CL_main. 
ENDCLASS. 

START-OF-SELECTION. 
DATA: main1 TYPE REF TO CL_main. 
DATA: eventhandler1 TYPE REF TO CL_eventhandler. 

CREATE OBJECT main1. 
CREATE OBJECT eventhandler1. 

SET HANDLER eventhandler1→handling_CUTOFF FOR main1. 
main1→PRO( 4 ).
CLASS CL_main IMPLEMENTATION.
METHOD PRO.
num1 = num2.
IF num2 ≥ 2. 
RAISE EVENT CUTOFF.
ENDIF. 
ENDMETHOD.
ENDCLASS.

CLASS CL_eventhandler IMPLEMENTATION.
METHOD handling_CUTOFF.
WRITE: 'Handling the CutOff'. 
WRITE: / 'Event has been processed'. 
ENDMETHOD. ENDCLASS.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

Handling the CutOff 
Event has been processed

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

รายงานแบบคลาสสิกถูกสร้างขึ้นโดยใช้ข้อมูลเอาต์พุตในคำสั่ง WRITE ภายในลูป ไม่มีรายงานย่อยใด ๆ SAP ยังมีรายงานมาตรฐานบางอย่างเช่น RSCLTCOP ที่ใช้ในการคัดลอกตารางข้ามไคลเอนต์และ RSPARAM ที่ใช้เพื่อแสดงพารามิเตอร์อินสแตนซ์

รายงานเหล่านี้ประกอบด้วยหน้าจอเดียวเป็นผลลัพธ์ เราสามารถใช้เหตุการณ์ต่างๆเช่น INITIALIZATON และ TOP-OF-PAGE เพื่อสร้างรายงานแบบคลาสสิกและแต่ละเหตุการณ์มีความสำคัญของตัวเองในระหว่างการสร้างรายงานแบบคลาสสิก แต่ละเหตุการณ์เหล่านี้เชื่อมโยงกับการกระทำของผู้ใช้ที่เฉพาะเจาะจงและจะถูกทริกเกอร์เมื่อผู้ใช้ดำเนินการนั้นเท่านั้น

ต่อไปนี้เป็นตารางอธิบายเหตุการณ์และคำอธิบาย -

ส. เหตุการณ์และคำอธิบาย
1

INITIALIZATON

ทริกเกอร์ก่อนที่จะแสดงหน้าจอการเลือก

2

AT SELECTION-SCREEN

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

3

START-OF-SELECTION

ทริกเกอร์หลังจากการประมวลผลของหน้าจอการเลือกสิ้นสุดลงเท่านั้น นั่นคือเมื่อผู้ใช้คลิกไอคอนดำเนินการบนหน้าจอการเลือก

4

END-OF-SELECTION

ทริกเกอร์หลังจากคำสั่งสุดท้ายในเหตุการณ์ START-OF-SELECTON ถูกเรียกใช้งาน

5

TOP-OF-PAGE

ทริกเกอร์โดยคำสั่ง WRITE แรกเพื่อแสดงข้อมูลบนเพจใหม่

6

END-OF-PAGE

ทริกเกอร์เพื่อแสดงข้อความที่ส่วนท้ายของหน้าในรายงาน โปรดทราบว่าเหตุการณ์นี้เป็นเหตุการณ์สุดท้ายในขณะที่สร้างรายงานและควรรวมกับประโยค LINE-COUNT ของคำสั่ง REPORT

ตัวอย่าง

มาสร้างรายงานแบบคลาสสิกกัน เราจะแสดงข้อมูลที่เก็บไว้ในฐานข้อมูลมาตรฐาน MARA (มีข้อมูลวัสดุทั่วไป) โดยใช้ลำดับของข้อความในโปรแกรมแก้ไข ABAP

REPORT ZREPORT2 
LINE-SIZE 75 
LINE-COUNT 30(3) 
NO STANDARD PAGE HEADING. 
Tables: MARA. 
TYPES: Begin of itab, 

MATNR TYPE MARA-MATNR, 
MBRSH TYPE MARA-MBRSH, 
MEINS TYPE MARA-MEINS, 
MTART TYPE MARA-MTART, 

End of itab. 

DATA: wa_ma TYPE itab,
      it_ma TYPE STANDARD TABLE OF itab.
		
SELECT-OPTIONS: MATS FOR MARA-MATNR OBLIGATORY. 
INITIALIZATION. 
MATS-LOW = '1'. 
MATS-HIGH = '500'. 

APPEND MATS. 
AT SELECTION-SCREEN. .
IF MATS-LOW = ' '. 
MESSAGE I000(ZKMESSAGE). 
ELSEIF MATS-HIGH = ' '. 
MESSAGE I001(ZKMESSAGE). 
ENDIF. 

TOP-OF-PAGE. 
WRITE:/ 'CLASSICAL REPORT CONTAINING GENERAL MATERIAL DATA  
FROM THE TABLE MARA' COLOR 7. 
ULINE. 
WRITE:/ 'MATERIAL' COLOR 1, 

24 'INDUSTRY' COLOR 2, 
38 'UNITS' COLOR 3, 
53 'MATERIAL TYPE' COLOR 4. 
ULINE. 
END-OF-PAGE. 

START-OF-SELECTION. 
SELECT MATNR MBRSH MEINS MTART FROM MARA  
INTO TABLE it_ma WHERE MATNR IN MATS. 
LOOP AT it_ma into wa_ma. 
WRITE:/  wa_ma-MATNR, 

25 wa_ma-MBRSH, 
40 wa_ma-MEINS, 
55 wa_ma-MTART. 
ENDLOOP. 
END-OF-SELECTION. 

ULINE. 
WRITE:/ 'CLASSICAL REPORT HAS BEEN CREATED' COLOR 7.
ULINE. 
SKIP.

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ที่มีข้อมูลวัสดุทั่วไปจากตารางมาตรฐาน MARA -

การเขียนโปรแกรมไดอะล็อกเกี่ยวข้องกับการพัฒนาวัตถุหลายชิ้น อ็อบเจ็กต์ทั้งหมดเหล่านี้เชื่อมโยงตามลำดับชั้นกับโปรแกรมหลักและดำเนินการตามลำดับ การพัฒนาโปรแกรมโต้ตอบใช้เครื่องมือในโต๊ะทำงาน ABAP เครื่องมือเหล่านี้เป็นเครื่องมือเดียวกับที่ใช้ในการพัฒนาแอปพลิเคชัน SAP มาตรฐาน

นี่คือส่วนประกอบหลักของโปรแกรมโต้ตอบ -

  • Screens
  • พูลโมดูล
  • Subroutines
  • Menus
  • Transactions

ชุดเครื่องมือ

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

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

การสร้างโปรแกรมโต้ตอบใหม่

Step 1 - ภายในธุรกรรม SE80 ให้เลือก 'โปรแกรม' จากเมนูแบบเลื่อนลงและป้อนชื่อ Z สำหรับโปรแกรม SAP ที่กำหนดเองของคุณเป็น 'ZSCREENEX'

Step 2 - กด Enter เลือก 'With TOP INCL' แล้วคลิกปุ่ม 'Yes'

Step 3 - ป้อนชื่อด้านบนของคุณรวมเป็น 'ZSCRTOP' แล้วคลิกเครื่องหมายถูกสีเขียว

Step 4 - ในหน้าจอแอตทริบิวต์เพียงแค่ป้อนชื่อและคลิกปุ่มบันทึก

การเพิ่มหน้าจอในโปรแกรมโต้ตอบ

Step 1 - ในการเพิ่มหน้าจอลงในโปรแกรมให้คลิกขวาที่ชื่อโปรแกรมแล้วเลือกตัวเลือกสร้าง→หน้าจอ

Step 2 - ป้อนหมายเลขหน้าจอเป็น "0211" แล้วคลิกเครื่องหมายถูกสีเขียว

Step 3 - ในหน้าจอถัดไปให้ป้อนชื่อเรื่องสั้น ๆ ตั้งค่าเป็นประเภทหน้าจอปกติแล้วคลิกปุ่มบันทึกบนแถบเครื่องมือแอปพลิเคชันด้านบน

เค้าโครงหน้าจอและการเพิ่มข้อความ 'Hello World'

Step 1 - คลิกปุ่มเค้าโครงภายในแถบเครื่องมือแอปพลิเคชันและหน้าต่าง Screen Painter จะปรากฏขึ้น

Step 2 - เพิ่มช่องข้อความและป้อนข้อความเช่น "Hello World"

Step 3 - บันทึกและเปิดใช้งานหน้าจอ

การสร้างธุรกรรม

Step 1 - ในการสร้างรหัสธุรกรรมสำหรับโปรแกรมของคุณเพียงคลิกขวาที่ชื่อโปรแกรมและเลือกตัวเลือกสร้าง→ธุรกรรมและป้อนรหัสธุรกรรมเป็น 'ZTRANEX'

Step 2 - ป้อนข้อความธุรกรรมโปรแกรมและหน้าจอที่คุณเพิ่งสร้างขึ้น (ZSCREENEX & 0211) และเลือกช่องทำเครื่องหมาย 'SAPGUI for Windows' ในส่วน 'การสนับสนุน GUI'

การดำเนินการโปรแกรม

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

สามารถใช้เครื่องมือ SAP Smart Forms เพื่อพิมพ์และส่งเอกสาร เครื่องมือนี้มีประโยชน์ในการพัฒนารูปแบบไฟล์ PDF อีเมลและเอกสารสำหรับอินเทอร์เน็ต เครื่องมือนี้มีอินเทอร์เฟซสำหรับสร้างและดูแลเค้าโครงและตรรกะของฟอร์ม SAP ยังมีรูปแบบที่เลือกสำหรับกระบวนการทางธุรกิจเช่นแบบฟอร์มที่ใช้ในการจัดการลูกค้าสัมพันธ์ (CRM) การขายและการจัดจำหน่าย (SD) การบัญชีการเงิน (FI) และทรัพยากรบุคคล (HR)

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

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

ตัวอย่างบางส่วนของ Smart Forms มาตรฐานที่มีอยู่ในระบบ SAP มีดังต่อไปนี้ -

  • SF_EXAMPLE_01 แสดงใบแจ้งหนี้ที่มีเอาต์พุตตารางสำหรับการจองเที่ยวบินสำหรับลูกค้า

  • SF_EXAMPLE_02 แสดงใบแจ้งหนี้ที่คล้ายกับ SF_EXAMPLE_01 แต่มียอดรวมย่อย

  • SF_EXAMPLE_03 ระบุใบแจ้งหนี้ที่คล้ายกับ SF_EXAMPLE_02 แต่สามารถเลือกลูกค้าได้หลายรายในโปรแกรมแอปพลิเคชัน

การสร้างแบบฟอร์ม

มาสร้างฟอร์มโดยใช้เครื่องมือ SAP Smart Forms คุณจะได้เรียนรู้วิธีการเพิ่มโหนดใน Smart Form และทดสอบแบบฟอร์มในบทช่วยสอนนี้ ที่นี่เราเริ่มต้นด้วยการสร้างสำเนาของแบบฟอร์ม SF_EXAMPLE_01 แบบฟอร์ม SF_EXAMPLE_01 คือ Smart Form มาตรฐานที่มีอยู่ในระบบ SAP

Step 1- Smart Form Builder เป็นอินเทอร์เฟซหลักที่ใช้ในการสร้างแบบฟอร์มอัจฉริยะ มีอยู่ในหน้าจอเริ่มต้นของ SAP Smart Forms เราจำเป็นต้องพิมพ์รหัสธุรกรรม 'SMARTFORMS' ในช่องคำสั่งเพื่อเปิดหน้าจอเริ่มต้นของ SAP Smart Forms ในหน้าจอนี้ให้ป้อนชื่อฟอร์ม SF_EXAMPLE_01 ในฟิลด์ฟอร์ม

Step 2 - เลือกแบบฟอร์มอัจฉริยะ→คัดลอกหรือคลิกไอคอนคัดลอกเพื่อเปิดกล่องโต้ตอบคัดลอกแบบฟอร์มหรือข้อความ

Step 3- ในฟิลด์วัตถุเป้าหมายป้อนชื่อสำหรับแบบฟอร์มใหม่ ชื่อต้องขึ้นต้นด้วยตัวอักษร Y หรือ Z ในกรณีนี้ชื่อของแบบฟอร์มคือ 'ZSMM1'

Step 4 - คลิกไอคอนดำเนินการต่อหรือกดปุ่ม ENTER ในกล่องโต้ตอบคัดลอกแบบฟอร์มหรือข้อความเพื่อให้สร้างแบบฟอร์ม ZSMM1 เป็นสำเนาของแบบฟอร์มที่กำหนดไว้ล่วงหน้า SF_EXAMPLE_01

Step 5- คลิกไอคอนบันทึก ชื่อของฟอร์มจะแสดงในฟิลด์ฟอร์มบนหน้าจอเริ่มต้นของ SAP Smart Forms

Step 6- คลิกปุ่มสร้างบนหน้าจอเริ่มต้นของ SAP Smart Forms แบบฟอร์ม ZSMM1 ปรากฏใน Form Builder

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

การสร้างโหนดข้อความในแบบฟอร์ม

Step 1 - เปิดแบบฟอร์มในโหมดการเปลี่ยนแปลงของหน้าจอ SAP Form Builder และคลิกขวาที่ตัวเลือกหน้าต่างหลักในโหนดหน้าแรกและเลือกสร้าง→ข้อความจากเมนูบริบท

Step 2- แก้ไขข้อความในช่อง Text เป็น "My_Text" และข้อความในช่องความหมายเป็น "Text_Demo" ป้อนข้อความ 'Hello TutorialsPoint ..... ' ในกล่องแก้ไขข้อความในกรอบกลางของ Form Builder ดังที่แสดงในภาพรวมต่อไปนี้ -

Step 3 - คลิกปุ่มบันทึกเพื่อบันทึกโหนด ..

Step 4- เปิดใช้งานและทดสอบโหนดโดยคลิกที่ไอคอนเปิดใช้งานและทดสอบตามลำดับ หน้าจอเริ่มต้นของ Function Builder จะปรากฏขึ้น

Step 5- เปิดใช้งานและทดสอบโมดูลฟังก์ชันโดยคลิกที่ไอคอนเปิดใช้งานและดำเนินการ พารามิเตอร์ของโมดูลฟังก์ชันจะแสดงในหน้าจอเริ่มต้นของ Function Builder

Step 6- เรียกใช้โมดูลฟังก์ชันโดยคลิกที่ไอคอน Execute กล่องโต้ตอบการพิมพ์จะปรากฏขึ้น

Step 7 - ระบุอุปกรณ์แสดงผลเป็น 'LP01' แล้วคลิกปุ่มตัวอย่างก่อนพิมพ์

ขั้นตอนข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -

เครื่องมือ SAPscript ของระบบ SAP สามารถใช้เพื่อสร้างและจัดการแบบฟอร์มทางธุรกิจเช่นใบแจ้งหนี้และใบสั่งซื้อ เครื่องมือ SAPscript มีเทมเพลตจำนวนมากที่ทำให้การออกแบบฟอร์มธุรกิจง่ายขึ้นในระดับที่ดี

ระบบ SAP มาพร้อมกับแบบฟอร์ม SAPscript มาตรฐานที่จัดส่งพร้อมกับไคลเอ็นต์มาตรฐาน SAP (โดยทั่วไปเป็นไคลเอนต์ 000) ต่อไปนี้เป็นตัวอย่างบางส่วนของแบบฟอร์ม SAPscript มาตรฐานที่ส่งมอบให้กับลูกค้า 000 -

ส. ชื่อแบบฟอร์มและคำอธิบาย
1

RVORDER01

แบบฟอร์มยืนยันใบสั่งขาย

2

RVDELNOTE

รายการบรรจุภัณฑ์

3

RVINVOICE01

ใบแจ้งหนี้

4

MEDRUCK

ใบสั่งซื้อ

5

F110_PRENUM_CHCK

ตรวจสอบเลขที่

โครงสร้างของฟอร์ม SAPscript ประกอบด้วย 2 องค์ประกอบหลัก -

Content - อาจเป็นข้อความ (ข้อมูลธุรกิจ) หรือกราฟิก (โลโก้ บริษัท )

Layout - สิ่งนี้กำหนดโดยชุดของหน้าต่างที่เนื้อหาแบบฟอร์มปรากฏขึ้น

SAPscript - เครื่องมือจิตรกรแบบฟอร์ม

เครื่องมือ Form Painter จัดเตรียมเค้าโครงกราฟิกของฟอร์ม SAPscript และฟังก์ชันต่างๆเพื่อจัดการกับฟอร์ม ในตัวอย่างต่อไปนี้เราจะสร้างแบบฟอร์มใบแจ้งหนี้หลังจากคัดลอกโครงสร้างเค้าโครงจาก SAPscript แบบมาตรฐาน RVINVOICE01 และแสดงเค้าโครงโดยการเข้าถึงเครื่องมือ Form Painter

Step 1- เปิด Form Painter คุณสามารถขอหน้าจอได้โดยไปที่เมนู SAP หรือใช้รหัสธุรกรรม SE71

Step 2- ในหน้าจอ Form Painter ให้ป้อนชื่อและภาษาสำหรับฟอร์ม SAPscript ในฟิลด์ Form and Language ตามลำดับ ให้ป้อน 'RVINVOICE01' และ 'EN' ตามลำดับในฟิลด์เหล่านี้

Step 3 - เลือกปุ่มตัวเลือกเค้าโครงหน้าในกล่องกลุ่มวัตถุย่อย

Step 4- เลือกยูทิลิตี้→คัดลอกจากไคลเอนต์เพื่อสร้างสำเนาของแบบฟอร์ม RVINVOICE01 หน้าจอ 'คัดลอกฟอร์มระหว่างไคลเอนต์' จะปรากฏขึ้น

Step 5- ในหน้าจอ 'คัดลอกฟอร์มระหว่างไคลเอนต์' ให้ป้อนชื่อเดิมของแบบฟอร์ม 'RVINVOICE01' ในฟิลด์ชื่อฟอร์มหมายเลขของไคลเอนต์ต้นทาง '000' ในฟิลด์ไคลเอนต์ต้นทางและชื่อของเป้าหมาย แบบฟอร์มเป็น 'ZINV_01' ในฟิลด์แบบฟอร์มเป้าหมาย ตรวจสอบให้แน่ใจว่าการตั้งค่าอื่น ๆ ยังคงไม่เปลี่ยนแปลง

Step 6- จากนั้นคลิกที่ไอคอน Execute ในหน้าจอ 'Copy Forms Between Clients' กล่องโต้ตอบ 'Create Object Directory Entry' จะปรากฏขึ้น คลิกไอคอนบันทึก

แบบฟอร์ม ZINV_01 ถูกคัดลอกมาจากแบบฟอร์ม RVINVOICE01 และแสดงในหน้าจอ 'คัดลอกฟอร์มระหว่างไคลเอนต์' ตามที่แสดงในภาพรวมต่อไปนี้ -

Step 7 - คลิกไอคอนย้อนกลับสองครั้งและกลับไปที่หน้าจอ Form Painter: Request ซึ่งมีชื่อของแบบฟอร์มที่คัดลอก ZINV_01

Step 8 - หลังจากคลิกปุ่ม Display หน้าต่าง 'Form ZINV_01: Layout of Page FIRST' และหน้าจอ 'Form: Change Page Layout: ZINV_01' จะปรากฏดังที่แสดงในภาพหน้าจอต่อไปนี้

Step 9- หน้าต่าง 'Form ZINV_01: Layout of Page FIRST' แสดงเค้าโครงเริ่มต้นของแบบฟอร์ม เค้าโครงของแบบฟอร์มประกอบด้วยห้าหน้าต่าง: HEADER, ADDRESS, INFO, INFO1 และ MAIN คำอธิบายของหน้าต่างเหล่านี้สามารถเข้าถึงได้ใน PC Editor

ตัวอย่างเช่นเพียงแค่เลือกหน้าต่าง MAIN และคลิกไอคอนข้อความในหน้าจอ 'ฟอร์ม: เปลี่ยนเค้าโครงหน้า: ZINV_01' คุณสามารถดูค่าระยะขอบทั้งหมดได้ดังที่แสดงในภาพหน้าจอต่อไปนี้ -

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

ลูกค้าออกสำหรับธุรกรรมมาตรฐาน

ต่อไปนี้เป็นขั้นตอนในการค้นหาการออกของลูกค้าเท่าที่เกี่ยวข้องกับธุรกรรมมาตรฐาน มาระบุการออกของลูกค้าที่มีอยู่ใน MM01 (Material Master Creation)

Step 1 - ไปที่ธุรกรรม MM01 และระบุชื่อโปรแกรมของ MM01 โดยไปที่แถบเมนู→ระบบ→สถานะตามที่แสดงในภาพด้านบน

Step 2- รับชื่อโปรแกรมจากหน้าจอป๊อปอัพ ชื่อโปรแกรมคือ 'SAPLMGMM'

Step 3 - ไปที่รายการ SE38 ป้อนชื่อโปรแกรมแล้วคลิกแสดง

Step 4 - ไปที่ไปที่→คุณสมบัติและค้นหาแพ็คเกจของชื่อโปรแกรมนี้

ชื่อแพ็คเกจคือ 'MGA'

Step 5- ไปที่รหัสธุรกรรม SMOD ที่มักใช้เพื่อระบุการออกของลูกค้า ไปที่ยูทิลิตี้→ค้นหา (หรือ) คุณสามารถกด Ctrl + F บนรหัสธุรกรรม SMOD ได้โดยตรง

Step 6 - หลังจากไปที่หน้าจอ 'Find Exits' ให้ป้อนชื่อแพ็กเกจที่เราได้รับก่อนหน้านี้และกดปุ่ม F8 (ดำเนินการ)

ขั้นตอนข้างต้นจะสร้างผลลัพธ์ต่อไปนี้พร้อมกับรายการทางออกที่มีอยู่ในการสร้างต้นแบบวัสดุ

การออกของผู้ใช้จะถูกใช้ในการแยกหากตัวแยก SAP มาตรฐานไม่ให้ข้อมูลที่คาดหวังหรือฟังก์ชันที่จำเป็นเช่นในการอนุญาตหรือการตรวจสอบเวลา การออกของผู้ใช้มักใช้ในโมดูลการขายและการกระจาย (SD) SAP มีทางออกมากมายในด้านการขายการขนส่งการจัดส่งและการเรียกเก็บเงิน ทางออกของผู้ใช้ออกแบบมาเพื่อทำการเปลี่ยนแปลงบางอย่างเมื่อ SAP มาตรฐานไม่สามารถปฏิบัติตามข้อกำหนดทั้งหมดได้

เพื่อให้สามารถเข้าถึงทางออกที่มีอยู่ในแต่ละพื้นที่การขายไปที่ IMG โดยใช้เส้นทางนี้: IMG →การขายและการกระจาย→การปรับเปลี่ยนระบบ→การออกจากผู้ใช้ เอกสารสำหรับแต่ละทางออกในส่วนของ SD จะอธิบายอย่างละเอียด

ตัวอย่างเช่นหากคุณต้องการค้นหาการออกของผู้ใช้ในการประมวลผลเอกสารการขาย (สัญญาใบเสนอราคาหรือใบสั่งขาย) ให้ทำตามเส้นทางที่กล่าวถึงข้างต้นและดำเนินการต่อเพื่อขยายโหนด User Exits ใน Sales → User Exits คลิกที่ไอคอนเอกสารเพื่อดูการออกของผู้ใช้ทั้งหมดที่มีอยู่ในการประมวลผลเอกสารการขาย

ส. การออกและคำอธิบายของผู้ใช้
1

USEREXIT_FIELD_MODIFICATION

ใช้เพื่อแก้ไขคุณลักษณะของหน้าจอ

2

USEREXIT_SAVE_DOCUMENT

ช่วยในการดำเนินการเมื่อผู้ใช้กดบันทึก

3

USEREXIT_SAVE_DOCUMENT_PREPARE

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

4

USEREXIT_MOVE_FIELD_TO_VBAK

ใช้เมื่อมีการย้ายการเปลี่ยนแปลงส่วนหัวของผู้ใช้ไปยังพื้นที่ทำงานส่วนหัว

5

USEREXIT_MOVE_FIELD_TO_VBAP

ใช้เมื่อการเปลี่ยนแปลงไอเท็มผู้ใช้ถูกย้ายไปยังพื้นที่ทำงานของไอเท็ม SAP

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

ตัวอย่าง

REPORT ZUSEREXIT1. 
TABLES:   
   TSTC, TSTCT,
   TADIR, TRDIR, TFDIR, ENLFDIR,
   MODSAPT, MODACT. 
	
DATA:   
   JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE,
   field1(30),
   v_devclass LIKE TADIR-devclass. 
	
PARAMETERS:
   P_TCODE LIKE TSTC-tcode OBLIGATORY. 
	
SELECT SINGLE *
   FROM TSTC
   WHERE tcode EQ P_TCODE. 
	
IF SY-SUBRC EQ 0.
   SELECT SINGLE *
   FROM TADIR
	
   WHERE pgmid = 'R3TR' AND 
         object = 'PROG' AND
         obj_name = TSTC-pgmna.
		
   MOVE TADIR-devclass TO v_devclass.
	
   IF SY-SUBRC NE 0.
   SELECT SINGLE * 
      FROM TRDIR
      WHERE name = TSTC-pgmna.
		
   IF TRDIR-subc EQ 'F'.
      SELECT SINGLE *
         FROM TFDIR
         WHERE pname = TSTC-pgmna.
			
      SELECT SINGLE *
         FROM ENLFDIR 
         WHERE funcname = TFDIR-funcname.
			
      SELECT SINGLE * 
         FROM TADIR
         WHERE pgmid = 'R3TR' AND
               object = 'FUGR' AND 
               obj_name EQ ENLFDIR-area.
         MOVE TADIR-devclass TO v_devclass.
      ENDIF.
   ENDIF.
	
   SELECT *
      FROM TADIR
      INTO TABLE JTAB
		
      WHERE pgmid = 'R3TR' AND
            object = 'SMOD' AND
            devclass = v_devclass.
			
   SELECT SINGLE *
      FROM TSTCT
      WHERE sprsl EQ SY-LANGU AND
            tcode EQ P_TCODE.
			
   FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
   WRITE:/(19) 'Transaction Code - ', 
      20(20) P_TCODE,
      45(50) TSTCT-ttext.
   SKIP.
	
   IF NOT JTAB[] IS INITIAL.
      WRITE:/(95) SY-ULINE.
      FORMAT COLOR COL_HEADING INTENSIFIED ON.
		
      WRITE:/1 SY-VLINE, 
            2 'Exit Name',
            21 SY-VLINE , 
            22 'Description',
            95 SY-VLINE.
			
      WRITE:/(95) SY-ULINE.
      LOOP AT JTAB.
         SELECT SINGLE * FROM MODSAPT
         WHERE sprsl = SY-LANGU AND
               name = JTAB-obj_name.
				
         FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
         WRITE:/1 SY-VLINE,
               2 JTAB-obj_name HOTSPOT ON,
               21 SY-VLINE ,
               22 MODSAPT-modtext,
               95 SY-VLINE.
      ENDLOOP.
		
      WRITE:/(95) SY-ULINE.
      DESCRIBE TABLE JTAB.
      SKIP.
      FORMAT COLOR COL_TOTAL INTENSIFIED ON.
      WRITE:/ 'No of Exits:' , SY-TFILL.
		
   ELSE.
      FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
      WRITE:/(95) 'User Exit doesn’t exist'.
   ENDIF. 
ELSE.

   FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
   WRITE:/(95) 'Transaction Code Does Not Exist'. 
ENDIF.
 
AT LINE-SELECTION.
   GET CURSOR FIELD field1.
   CHECK field1(4) EQ 'JTAB'.
   SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
   CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.

ขณะดำเนินการให้ป้อนรหัสธุรกรรม 'ME01' แล้วกดปุ่ม F8 (ดำเนินการ) รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

ในบางกรณีจำเป็นต้องกำหนดฟังก์ชันพิเศษไว้ล่วงหน้าในแอปพลิเคชันซอฟต์แวร์เพื่อเพิ่มประสิทธิภาพการทำงานของแอปพลิเคชันต่างๆ มีโปรแกรมเสริม Microsoft Excel จำนวนมากเพื่อปรับปรุงการทำงานของ MS Excel ในทำนองเดียวกัน SAP อำนวยความสะดวกบางฟังก์ชันที่กำหนดไว้ล่วงหน้าโดยการให้Business Add-Ins เรียกว่า BADI

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

เทคนิค BADI แตกต่างจากเทคนิคการเพิ่มประสิทธิภาพอื่น ๆ ในสองวิธี -

  • เทคนิคการเพิ่มประสิทธิภาพสามารถทำได้เพียงครั้งเดียว
  • เทคนิคการเพิ่มประสิทธิภาพนี้สามารถใช้ได้กับลูกค้าหลายคนพร้อมกัน

คุณยังสามารถสร้าง BADI ของตัวกรองซึ่งหมายความว่า BADI ถูกกำหนดบนพื้นฐานของข้อมูลที่กรองแล้วซึ่งเป็นไปไม่ได้ด้วยเทคนิคการเพิ่มประสิทธิภาพ แนวคิดของ BADI ได้รับการนิยามใหม่ใน SAP Release 7.0 โดยมีเป้าหมายดังนี้ -

  • การปรับปรุงแอปพลิเคชันมาตรฐานในระบบ SAP โดยการเพิ่มองค์ประกอบใหม่สองอย่างในภาษา ABAP นั่นคือ 'GET BADI' และ 'CALL BADI'

  • นำเสนอคุณสมบัติที่ยืดหยุ่นมากขึ้นเช่นบริบทและตัวกรองสำหรับการปรับปรุงแอปพลิเคชันมาตรฐานในระบบ SAP

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

ดังนั้น BADI จึงถือได้ว่าเป็นเทคนิคการเพิ่มประสิทธิภาพที่ใช้วัตถุ ABAP เพื่อสร้าง 'จุดที่กำหนดไว้ล่วงหน้า' ในส่วนประกอบ SAP จากนั้นจุดที่กำหนดไว้ล่วงหน้าเหล่านี้จะถูกนำไปใช้โดยโซลูชันอุตสาหกรรมแต่ละประเทศตัวแปรของประเทศคู่ค้าและลูกค้าเพื่อให้เหมาะกับความต้องการเฉพาะของตน SAP ได้แนะนำเทคนิคการเพิ่มประสิทธิภาพ BADI ด้วยรีลีส 4.6A และเทคนิคนี้ได้ถูกนำมาใช้ใหม่อีกครั้งในรีลีส 7.0

Web Dynpro (WD) สำหรับ ABAP คือเทคโนโลยีอินเทอร์เฟซผู้ใช้มาตรฐาน SAP ที่พัฒนาโดย SAP AG สามารถใช้ในการพัฒนาแอปพลิเคชันบนเว็บในสภาพแวดล้อม SAP ABAP ที่ใช้เครื่องมือและแนวคิดในการพัฒนา SAP มีส่วนติดต่อผู้ใช้เว็บส่วนหน้าเพื่อเชื่อมต่อโดยตรงกับระบบ SAP R / 3 แบ็กเอนด์เพื่อเข้าถึงข้อมูลและฟังก์ชันสำหรับการรายงาน

Web Dynpro สำหรับ ABAP ประกอบด้วยสภาพแวดล้อมรันไทม์และสภาพแวดล้อมการพัฒนากราฟิกพร้อมเครื่องมือการพัฒนาเฉพาะที่รวมอยู่ใน ABAP Workbench (ธุรกรรม: SE80)

สถาปัตยกรรมของ Web Dynpro

ภาพประกอบต่อไปนี้แสดงสถาปัตยกรรมโดยรวมของ Web Dynpro -

ต่อไปนี้เป็นบางประเด็นที่ควรทราบเกี่ยวกับ Web Dynpro -

  • Web Dynpro คือโมเดลการเขียนโปรแกรม SAP NetWeaver สำหรับอินเทอร์เฟซผู้ใช้

  • แอปพลิเคชัน Web Dynpro ทั้งหมดมีโครงสร้างตามโมเดลการเขียนโปรแกรม Model View Controller (MVC)

  • โมเดลกำหนดอินเทอร์เฟซให้กับระบบหลักและแอปพลิเคชัน Web Dynpro สามารถเข้าถึงข้อมูลระบบได้

  • มุมมองมีหน้าที่แสดงข้อมูลในเว็บเบราว์เซอร์

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

ข้อดี

Web Dynpro มีข้อดีดังต่อไปนี้สำหรับนักพัฒนาแอปพลิเคชัน -

  • การใช้เครื่องมือกราฟิกช่วยลดความพยายามในการนำไปใช้งานได้อย่างมาก

  • ใช้ซ้ำและบำรุงรักษาได้ดีขึ้นโดยใช้ส่วนประกอบ

  • เค้าโครงและการนำทางสามารถเปลี่ยนแปลงได้อย่างง่ายดายโดยใช้เครื่องมือ Web Dynpro

  • รองรับการเข้าถึงส่วนติดต่อผู้ใช้

  • บูรณาการอย่างสมบูรณ์ในสภาพแวดล้อมการพัฒนา ABAP

Web Dynpro Component และ Window

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

มีหน้าต่าง Web Dynpro อย่างน้อยหนึ่งหน้าต่างในแต่ละคอมโพเนนต์ Web Dynpro หน้าต่าง Web Dynpro ฝังมุมมองทั้งหมดที่แสดงภายในเว็บแอปพลิเคชันส่วนหน้า หน้าต่างถูกประมวลผลในตัวแก้ไขหน้าต่างของ ABAP Workbench

Note

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

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