SAP ABAP - Hướng dẫn nhanh

ABAP là viết tắt của Advanced Business Application Programming, một ngôn ngữ 4GL (thế hệ thứ 4). Hiện tại, nó được định vị, cùng với Java, là ngôn ngữ chính để lập trình máy chủ ứng dụng SAP.

Hãy bắt đầu với kiến ​​trúc cấp cao của hệ thống SAP. Kiến trúc Máy khách / Máy chủ 3 tầng của hệ thống SAP điển hình được mô tả như sau.

Các Presentation layerbao gồm bất kỳ thiết bị đầu vào nào có thể được sử dụng để điều khiển hệ thống SAP. Đây có thể là trình duyệt web, thiết bị di động, v.v. Tất cả quá trình xử lý trung tâm diễn ra trongApplication server. Máy chủ ứng dụng không chỉ là một hệ thống mà nó có thể là nhiều phiên bản của hệ thống xử lý. Máy chủ giao tiếp vớiDatabase layerthường được giữ trên một máy chủ riêng biệt, chủ yếu vì lý do hiệu suất và cũng vì lý do bảo mật. Truyền thông xảy ra giữa mỗi lớp của hệ thống, từ lớp Trình bày đến Cơ sở dữ liệu và sau đó sao lưu chuỗi.

Note- Các chương trình ABAP chạy ở cấp máy chủ ứng dụng. Phân phối kỹ thuật của phần mềm độc lập với vị trí thực của nó. Nó có nghĩa là về cơ bản, tất cả ba cấp độ có thể được cài đặt chồng lên nhau trên một máy tính hoặc mỗi cấp độ có thể được cài đặt trên một máy tính hoặc một máy chủ khác nhau.

Các chương trình ABAP nằm bên trong cơ sở dữ liệu SAP. Chúng thực thi dưới sự kiểm soát của hệ thống thời gian chạy là một phần của nhân SAP. Hệ thống thời gian chạy xử lý tất cả các câu lệnh ABAP, kiểm soát logic luồng và phản hồi các sự kiện của người dùng.

Vì vậy, không giống như C ++ và Java, các chương trình ABAP không được lưu trữ trong các tệp bên ngoài riêng biệt. Bên trong cơ sở dữ liệu, mã ABAP tồn tại ở hai dạng:

  • Source mã có thể được xem và chỉnh sửa bằng các công cụ bàn làm việc ABAP.

  • Generated code, đó là một biểu diễn nhị phân. Nếu bạn đã quen thuộc với Java, mã được tạo ra này có thể so sánh được với mã byte Java.

Hệ thống thời gian chạy có thể được coi là một máy ảo, tương tự như máy ảo Java. Một thành phần quan trọng của hệ thống thời gian chạy ABAP là giao diện cơ sở dữ liệu biến các câu lệnh độc lập với cơ sở dữ liệu (Open SQL) thành các câu lệnh mà cơ sở dữ liệu bên dưới hiểu được (SQL gốc). SAP có thể hoạt động với nhiều loại cơ sở dữ liệu và cùng một chương trình ABAP có thể chạy trên tất cả những cơ sở đó.

Báo cáo là một điểm khởi đầu tốt để bạn làm quen với các nguyên tắc và công cụ ABAP chung. Các báo cáo ABAP được sử dụng trong nhiều lĩnh vực. Trong chương này, chúng ta sẽ thấy việc viết một Báo cáo ABAP đơn giản dễ dàng như thế nào.

Xin chào ABAP

Hãy bắt đầu với ví dụ phổ biến "Hello World".

Mỗi câu lệnh ABAP bắt đầu bằng từ khóa ABAP và kết thúc bằng dấu chấm. Các từ khóa phải được phân tách bằng ít nhất một dấu cách. Việc bạn sử dụng một hay một số dòng cho một câu lệnh ABAP không quan trọng.

Bạn cần nhập mã của mình bằng ABAP Editor, một phần của Công cụ ABAP được cung cấp với Máy chủ ứng dụng SAP NetWeaver ABAP (còn được gọi là 'AS ABAP').

'AS ABAP' là một máy chủ ứng dụng có cơ sở dữ liệu riêng, môi trường thời gian chạy ABAP và các công cụ phát triển ABAP như ABAP Editor. AS ABAP cung cấp một nền tảng phát triển độc lập với phần cứng, hệ điều hành và cơ sở dữ liệu.

Sử dụng ABAP Editor

Step 1- Bắt đầu giao dịch SE38 để điều hướng đến ABAP Editor (sẽ thảo luận trong chương tiếp theo). Hãy bắt đầu tạo báo cáo là một trong nhiều đối tượng ABAP.

Step 2- Trên màn hình ban đầu của trình soạn thảo, chỉ định tên báo cáo của bạn trong trường nhập CHƯƠNG TRÌNH. Bạn có thể chỉ định tên là ZHELLO1. Chữ Z đứng trước quan trọng đối với tên. Z đảm bảo rằng báo cáo của bạn nằm trong không gian tên khách hàng.

Không gian tên khách hàng bao gồm tất cả các đối tượng có tiền tố Y hoặc Z. Nó luôn được sử dụng khi khách hàng hoặc đối tác tạo các đối tượng (như một báo cáo) để phân biệt các đối tượng này với các đối tượng của SAP và để ngăn chặn xung đột tên với các đối tượng.

Step 3- Bạn có thể gõ tên báo cáo bằng chữ thường, nhưng trình soạn thảo sẽ đổi thành chữ hoa. Vì vậy, tên của các đối tượng ABAP không phân biệt chữ hoa chữ thường.

Step 4- Sau khi xác định tên báo cáo, bấm nút TẠO. Một cửa sổ bật lên ABAP: CÁC BẢN ĐĂNG KÝ CHƯƠNG TRÌNH sẽ bật lên và bạn sẽ cung cấp thêm thông tin về báo cáo của mình.

Step 5- Chọn "Chương trình thực thi" làm loại báo cáo, nhập tiêu đề "Báo cáo ABAP đầu tiên của tôi" rồi chọn LƯU để tiếp tục. Cửa sổ TẠO MỤC TIÊU NHẬP MỤC TIÊU sẽ bật lên tiếp theo. Chọn nút ĐỐI TƯỢNG ĐỊA PHƯƠNG và cửa sổ bật lên sẽ đóng lại.

Bạn có thể hoàn thành báo cáo đầu tiên của mình bằng cách nhập câu lệnh WRITE bên dưới câu lệnh REPORT, để báo cáo hoàn chỉnh chỉ chứa hai dòng như sau:

REPORT ZHELLO1. 
WRITE 'Hello World'.

Bắt đầu báo cáo

Chúng ta có thể sử dụng bàn phím (Ctrl + S) hoặc biểu tượng lưu (bên tay phải bên cạnh trường lệnh) để lưu báo cáo. Quá trình phát triển ABAP diễn ra trong AS ABAP.

Bắt đầu báo cáo cũng đơn giản như lưu nó. Nhấp vào nút KÍCH HOẠT (bên tay trái bên cạnh biểu tượng bắt đầu) và bắt đầu báo cáo bằng cách sử dụng biểu tượng XỬ LÝ TRỰC TIẾP hoặc phím chức năng F8. Tiêu đề "Báo cáo ABAP đầu tiên của tôi" cùng với kết quả "Hello World" cũng được hiển thị. Đây là kết quả -

My First ABAP Report 
Hello World

Miễn là bạn không kích hoạt báo cáo mới hoặc kích hoạt thay đổi đối với báo cáo hiện có, báo cáo đó không liên quan đến người dùng của họ. Điều này rất quan trọng trong môi trường phát triển trung tâm, nơi bạn có thể làm việc trên các đối tượng mà các nhà phát triển khác sử dụng trong các dự án của họ.

Xem mã hiện có

Nếu bạn nhìn vào trường Chương trình và nhấp đúp vào giá trị ZHELLO1, trình chỉnh sửa ABAP sẽ hiển thị mã cho báo cáo của bạn. Điều này được gọi là Điều hướng Chuyển tiếp. Nhấp đúp vào tên của đối tượng sẽ mở đối tượng đó trong công cụ thích hợp.

Để hiểu SAP ABAP, bạn cần có kiến ​​thức cơ bản về các màn hình như Đăng nhập, ABAP Editor, Đăng xuất, v.v. Chương này tập trung vào điều hướng màn hình và chức năng thanh công cụ tiêu chuẩn.

Màn hình đăng nhập

Sau khi bạn đăng nhập vào máy chủ SAP, màn hình đăng nhập SAP sẽ nhắc nhập ID người dùng và mật khẩu. Bạn cần cung cấp ID người dùng và Mật khẩu hợp lệ và nhấn Enter (ID người dùng và mật khẩu do quản trị viên hệ thống cung cấp). Sau đây là màn hình đăng nhập.

Biểu tượng Thanh công cụ

Sau đây là thanh công cụ màn hình SAP.

Menu Bar - Thanh menu là dòng trên cùng của cửa sổ hộp thoại.

Standard Toolbar - Hầu hết các chức năng tiêu chuẩn như Đầu trang, Cuối trang, Lên trang, Xuống trang và Lưu đều có sẵn trong thanh công cụ này.

Title Bar - Title Bar hiển thị tên của ứng dụng / quy trình kinh doanh mà bạn hiện đang tham gia.

Application Toolbar - Các tùy chọn menu cụ thể của ứng dụng có sẵn tại đây.

Command Field- Chúng tôi có thể bắt đầu một ứng dụng mà không cần điều hướng qua các giao dịch menu và một số mã logic được gán cho các quy trình kinh doanh. Mã giao dịch được nhập vào trường lệnh để trực tiếp khởi động ứng dụng.

ABAP Editor

Bạn chỉ có thể bắt đầu giao dịch SE38 (nhập SE38 trong Trường lệnh) để điều hướng đến Trình chỉnh sửa ABAP.

Phím và Biểu tượng Chuẩn

Exit keysđược sử dụng để thoát khỏi chương trình / mô-đun hoặc để đăng xuất. Chúng cũng được sử dụng để quay lại màn hình được truy cập lần cuối.

Sau đây là các phím thoát tiêu chuẩn được sử dụng trong SAP như trong hình.

Sau đây là các tùy chọn để kiểm tra, kích hoạt và xử lý báo cáo.

Đăng xuất

Luôn luôn là một phương pháp hay để Thoát khỏi Trình chỉnh sửa ABAP hoặc / và đăng xuất khỏi hệ thống SAP sau khi hoàn thành công việc của bạn.

Các câu lệnh

Chương trình nguồn ABAP bao gồm các chú thích và các câu lệnh ABAP. Mọi câu lệnh trong ABAP đều bắt đầu bằng từ khóa và kết thúc bằng dấu chấm, và ABAP phân biệt chữ hoa chữ thường.

Dòng không phải chú thích đầu tiên trong chương trình bắt đầu bằng từ BÁO CÁO. Báo cáo sẽ luôn là dòng đầu tiên của bất kỳ chương trình thực thi nào được tạo. Theo sau câu lệnh là tên chương trình đã được tạo trước đó. Dòng sau đó được kết thúc với một điểm dừng hoàn toàn.

Cú pháp là -

REPORT [Program_Name]. 
 
[Statements…].

Điều này cho phép câu lệnh chiếm bao nhiêu dòng trong trình chỉnh sửa nếu nó cần. Ví dụ: BÁO CÁO có thể trông như thế này -

REPORT Z_Test123_01.

Các câu lệnh bao gồm một lệnh và bất kỳ biến và tùy chọn nào, kết thúc bằng dấu chấm. Miễn là dấu chấm xuất hiện ở cuối báo cáo, sẽ không có vấn đề gì phát sinh. Đó là giai đoạn đánh dấu nơi kết thúc tuyên bố.

Hãy viết mã.

Ở dòng bên dưới câu lệnh BÁO CÁO, chỉ cần nhập câu lệnh này: Viết 'Hướng dẫn ABAP'.

REPORT Z_Test123_01.

Write 'This is ABAP Tutorial'.

Four things to consider while writing statements -

  • Câu lệnh write ghi bất cứ thứ gì trong dấu ngoặc kép vào cửa sổ xuất.

  • Trình chỉnh sửa ABAP chuyển đổi tất cả văn bản thành chữ hoa ngoại trừ chuỗi văn bản, được bao quanh bởi dấu ngoặc kép.

  • Không giống như một số ngôn ngữ lập trình cũ hơn, ABAP không quan tâm vị trí bắt đầu một câu lệnh trên một dòng. Bạn có thể tận dụng điều này và cải thiện khả năng đọc chương trình của mình bằng cách sử dụng thụt đầu dòng để chỉ ra các khối mã.

  • ABAP không có hạn chế về bố cục của các câu lệnh. Có nghĩa là, nhiều câu lệnh có thể được đặt trên một dòng hoặc một câu lệnh đơn lẻ có thể trải dài trên nhiều dòng.

Ký hiệu dấu hai chấm

Các câu lệnh liên tiếp có thể được xâu chuỗi với nhau nếu phần đầu của mỗi câu lệnh giống hệt nhau. Điều này được thực hiện với toán tử dấu hai chấm (:) và dấu phẩy, được sử dụng để kết thúc các câu lệnh riêng lẻ, giống như dấu chấm kết thúc các câu lệnh bình thường.

Sau đây là một ví dụ về một chương trình có thể lưu một số thao tác vuốt phím -

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

Sử dụng ký hiệu dấu hai chấm, nó có thể được viết lại theo cách này -

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

Giống như bất kỳ câu lệnh ABAP nào khác, bố cục không quan trọng. Đây là một tuyên bố đúng như nhau -

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

Bình luận

Nhận xét nội tuyến có thể được khai báo ở bất kỳ đâu trong chương trình bằng một trong hai phương pháp sau:

  • Nhận xét toàn dòng được biểu thị bằng cách đặt dấu hoa thị (*) ở vị trí đầu tiên của dòng, trong trường hợp này, toàn bộ dòng được hệ thống coi là nhận xét. Nhận xét không cần phải chấm dứt trước một khoảng thời gian vì chúng có thể không kéo dài trên nhiều dòng -

* This is the comment line
  • Nhận xét một phần dòng được biểu thị bằng cách nhập dấu ngoặc kép (") sau một câu lệnh. Tất cả văn bản theo sau dấu ngoặc kép được hệ thống coi là nhận xét. Bạn không cần chấm dứt nhận xét từng phần trước một dấu chấm vì chúng có thể không kéo dài thêm hơn một dòng -

WRITE 'Hello'. "Here is the partial comment

Note - Mã nhận xét không được viết hoa bởi trình soạn thảo ABAP.

Triệt tiêu khoảng trống

Lệnh NO-ZERO tuân theo câu lệnh DATA. Nó loại bỏ tất cả các số không đứng đầu của một trường số có chứa khoảng trống. Đầu ra thường dễ đọc hơn cho người dùng.

Thí dụ

REPORT Z_Test123_01. 

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

Đoạn mã trên tạo ra kết quả sau:

50

Note - Không có lệnh NO-ZERO, đầu ra là: 0000000050

Dòng trống

Lệnh SKIP giúp chèn các dòng trống trên trang.

Thí dụ

Lệnh thông báo như sau:

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

Lệnh thông báo trên tạo ra kết quả sau:

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

Chúng tôi có thể sử dụng lệnh SKIP để chèn nhiều dòng trống.

SKIP number_of_lines.

Đầu ra sẽ là một số dòng trống được xác định bởi số dòng. Lệnh SKIP cũng có thể định vị con trỏ trên một dòng mong muốn trên trang.

SKIP TO LINE line_number.

Lệnh này được sử dụng để di chuyển động con trỏ lên và xuống trang. Thông thường, một câu lệnh WRITE xảy ra sau lệnh này để đưa đầu ra trên dòng mong muốn đó.

Chèn dòng

Lệnh ULINE tự động chèn một đường ngang trên đầu ra. Cũng có thể kiểm soát vị trí và độ dài của dòng. Cú pháp khá đơn giản -

ULINE.

Thí dụ

Lệnh thông báo như sau:

WRITE 'This is Underlined'.
ULINE.

Đoạn mã trên tạo ra kết quả sau:

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

Tin nhắn

Lệnh MESSAGE hiển thị thông báo được xác định bởi ID thông báo được chỉ định trong câu lệnh REPORT ở đầu chương trình. ID tin nhắn là một mã gồm 2 ký tự xác định bộ 1.000 tin nhắn mà chương trình sẽ truy cập khi sử dụng lệnh MESSAGE.

Các tin nhắn được đánh số từ 000 đến 999. Đi kèm với mỗi số là một văn bản tin nhắn có tối đa 80 ký tự. Khi số tin nhắn được gọi, văn bản tương ứng sẽ được hiển thị.

Sau đây là các ký tự để sử dụng với lệnh Message:

Thông điệp Kiểu Kết quả
E lỗi Thông báo xuất hiện và ứng dụng tạm dừng tại thời điểm hiện tại. Nếu chương trình đang chạy ở chế độ nền, công việc sẽ bị hủy và thông báo được ghi lại trong nhật ký công việc.
W Cảnh báo Thông báo hiện ra và người dùng phải nhấn Enter để ứng dụng tiếp tục. Ở chế độ nền, thông báo được ghi lại trong nhật ký công việc.
Tôi Thông tin Một cửa sổ bật lên sẽ mở ra với nội dung tin nhắn và người dùng phải nhấn Enter để tiếp tục. Ở chế độ nền, thông báo được ghi lại trong nhật ký công việc.
A Abend Lớp thông báo này hủy giao dịch mà người dùng hiện đang sử dụng.
S Sự thành công Điều này cung cấp một thông báo thông tin ở cuối màn hình. Thông tin được hiển thị có bản chất tích cực và nó chỉ dành cho phản hồi của người dùng. Thông báo không cản trở chương trình theo bất kỳ cách nào.
X Huỷ bỏ Thông báo này hủy bỏ chương trình và tạo một kết xuất ngắn ABAP.

Thông báo lỗi thường được sử dụng để ngăn người dùng làm những việc mà họ không được phép làm. Thông báo cảnh báo thường được sử dụng để nhắc nhở người dùng về hậu quả của hành động của họ. Thông báo thông tin cung cấp cho người dùng thông tin hữu ích.

Thí dụ

Khi chúng tôi tạo thông báo cho thông báo ID AB, lệnh MESSAGE - MESSAGE E011 cho kết quả sau:

EAB011 This report does not support sub-number summarization.

Trong khi lập trình trong ABAP, chúng ta cần sử dụng nhiều biến để lưu trữ các thông tin khác nhau. Các biến không là gì ngoài các vị trí bộ nhớ dành riêng để lưu trữ các giá trị. Điều này có nghĩa là khi bạn tạo một biến, bạn dành một số không gian trong bộ nhớ. Bạn có thể muốn lưu trữ thông tin của nhiều kiểu dữ liệu khác nhau như ký tự, số nguyên, dấu phẩy động, v.v. Dựa trên kiểu dữ liệu của một biến, hệ điều hành sẽ phân bổ bộ nhớ và quyết định những gì có thể được lưu trong bộ nhớ dành riêng.

Các kiểu dữ liệu cơ bản

ABAP cung cấp cho lập trình viên nhiều loại dữ liệu có độ dài cố định cũng như các kiểu dữ liệu có độ dài thay đổi. Bảng sau liệt kê các kiểu dữ liệu cơ bản của ABAP:

Kiểu Từ khóa
Trường byte X
Trương Văn bản C
Số nguyên Tôi
Dấu chấm động F
Số đóng gói P
Chuỗi văn bản CHUỖI

Một số trường và số có thể được sửa đổi bằng cách sử dụng một hoặc nhiều tên như sau:

  • byte
  • numeric
  • character-like

Bảng sau đây cho thấy kiểu dữ liệu, cần bao nhiêu bộ nhớ để lưu giá trị trong bộ nhớ và giá trị tối thiểu và lớn nhất có thể được lưu trữ trong loại biến đó.

Kiểu Chiều dài điển hình Phạm vi điển hình
X 1 byte Bất kỳ giá trị byte nào (00 đến FF)
C 1 ký tự 1 đến 65535
N (văn bản số được gửi) 1 ký tự 1 đến 65535
D (ngày giống ký tự) 8 ký tự 8 ký tự
T (thời gian giống ký tự) 6 ký tự 6 ký tự
Tôi 4 byte -2147483648 đến 2147483647
F 8 byte 2.2250738585072014E-308 đến 1.7976931348623157E + 308 tích cực hoặc tiêu cực
P 8 byte [-10 ^ (2len -1) +1] đến [+ 10 ^ (2len -1) 1] (trong đó len = độ dài cố định)
CHUỖI Biến đổi Mọi ký tự chữ và số
XSTRING (chuỗi byte) Biến đổi Bất kỳ giá trị byte nào (00 đến FF)

Thí dụ

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.

Trong ví dụ này, chúng ta có một chuỗi ký tự kiểu C với độ dài xác định trước 40. STRING là kiểu dữ liệu có thể được sử dụng cho bất kỳ chuỗi ký tự nào có độ dài thay đổi (chuỗi văn bản). Đối tượng dữ liệu kiểu STRING thường được sử dụng cho nội dung dạng ký tự trong đó độ dài cố định không quan trọng.

Đoạn mã trên tạo ra kết quả sau:

A Chapter on Data Types 
A Program in ABAP 
12092015

Loại DATE được sử dụng để lưu trữ thông tin ngày tháng và có thể lưu trữ tám chữ số như hình trên.

Loại phức tạp và tham chiếu

Các loại phức tạp được phân loại thành Structure typesTable types. Trong các kiểu cấu trúc, các kiểu và cấu trúc sơ cấp (tức là cấu trúc nhúng trong một cấu trúc) được nhóm lại với nhau. Bạn có thể chỉ xem xét việc nhóm các loại cơ bản. Nhưng bạn phải biết về sự sẵn có của việc lồng các cấu trúc.

Khi các kiểu cơ bản được nhóm lại với nhau, mục dữ liệu có thể được truy cập dưới dạng mục dữ liệu được nhóm hoặc có thể truy cập các mục dữ liệu kiểu cơ bản riêng lẻ (trường cấu trúc). Các kiểu bảng hay được gọi là mảng trong các ngôn ngữ lập trình khác.Arrayscó thể là các mảng đơn giản hoặc cấu trúc. Trong ABAP, mảng được gọi là bảng bên trong và chúng có thể được khai báo và hoạt động theo nhiều cách khi so sánh với các ngôn ngữ lập trình khác. Bảng sau đây cho thấy các tham số theo đó các bảng bên trong được đặc trưng.

Không. Mô tả về Thông Số
1

Line or row type

Hàng của một bảng bên trong có thể thuộc loại sơ cấp, phức tạp hoặc tham chiếu.

2

Key

Chỉ định một trường hoặc một nhóm trường làm khóa của bảng nội bộ xác định các hàng của bảng. Một khóa chứa các trường của kiểu cơ bản.

3

Access method

Mô tả cách chương trình ABAP truy cập các mục nhập bảng riêng lẻ.

Các kiểu tham chiếu được sử dụng để chỉ các thể hiện của lớp, giao diện và các mục dữ liệu thời gian chạy. Các dịch vụ loại thời gian chạy ABAP OOP (RTTS) cho phép khai báo các mục dữ liệu tại thời điểm chạy.

Các biến là các đối tượng dữ liệu được đặt tên được sử dụng để lưu trữ các giá trị trong vùng bộ nhớ được phân bổ của một chương trình. Như tên cho thấy, người dùng có thể thay đổi nội dung của các biến với sự trợ giúp của các câu lệnh ABAP. Mỗi biến trong ABAP có một kiểu cụ thể, xác định kích thước và cách bố trí bộ nhớ của biến; phạm vi giá trị có thể được lưu trữ trong bộ nhớ đó; và tập hợp các thao tác có thể áp dụng cho biến.

Bạn phải khai báo tất cả các biến trước khi chúng có thể được sử dụng. Dạng cơ bản của khai báo biến là:

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

Ở đây <f> chỉ định tên của một biến. Tên của biến có thể dài tối đa 30 ký tự. <type> chỉ định kiểu của biến. Bất kỳ kiểu dữ liệu nào có các thuộc tính kỹ thuật được chỉ định đầy đủ được gọi là <type>. <val> chỉ định giá trị ban đầu của biến <f>. Trong trường hợp bạn xác định một biến có độ dài cố định cơ bản, câu lệnh DATA sẽ tự động điền giá trị của biến với giá trị ban đầu dành riêng cho kiểu. Các giá trị có thể có khác cho <val> có thể là một chữ, hằng số hoặc một mệnh đề rõ ràng, chẳng hạn như Is INITIAL.

Sau đây là các ví dụ hợp lệ về khai báo biến.

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

Trong đoạn mã trên, d1 là một biến kiểu C, d2 là một biến kiểu d1 và giá trị tối thiểu là một biến kiểu số nguyên ABAP I.

Chương này sẽ giải thích các loại biến khác nhau có sẵn trong ABAP. Có ba loại biến trong ABAP -

  • Biến tĩnh
  • Các biến tham chiếu
  • Biến hệ thống

Biến tĩnh

  • Biến static được khai báo trong chương trình con, mô-đun hàm và phương thức tĩnh.

  • Thời gian tồn tại được liên kết với ngữ cảnh của khai báo.

  • Với câu lệnh 'CLASS-DATA', bạn có thể khai báo các biến trong các lớp.

  • Câu lệnh 'PARAMETERS' có thể được sử dụng để khai báo các đối tượng dữ liệu cơ bản được liên kết với các trường đầu vào trên màn hình lựa chọn.

  • Bạn cũng có thể khai báo các bảng nội bộ được liên kết với các trường đầu vào trên màn hình lựa chọn bằng cách sử dụng câu lệnh 'CHỌN-OPTIONS'.

Sau đây là các quy ước được sử dụng khi đặt tên biến:

  • Bạn không thể sử dụng các ký tự đặc biệt như "t" và "," để đặt tên cho các biến.

  • Không thể thay đổi tên của các đối tượng dữ liệu được xác định trước.

  • Tên của biến không được giống với bất kỳ từ khóa hoặc mệnh đề ABAP nào.

  • Tên của các biến phải truyền tải được ý nghĩa của biến mà không cần chú thích thêm.

  • Dấu gạch nối được dành để thể hiện các thành phần của cấu trúc. Do đó, bạn phải tránh dấu gạch ngang trong tên biến.

  • Có thể dùng ký tự gạch dưới để phân cách các từ ghép.

Chương trình này chỉ ra cách khai báo một biến bằng câu lệnh PARAMETERS -

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

Ở đây, NAME đại diện cho một tham số gồm 10 ký tự, CLASS chỉ định một tham số kiểu số nguyên với kích thước mặc định tính bằng byte, SCORE đại diện cho một tham số kiểu đóng gói có giá trị lên đến hai chữ số thập phân và CONNECT tham chiếu đến kiểu MARA-MATNF của Từ điển ABAP .

Đoạn mã trên tạo ra kết quả sau:

Các biến tham chiếu

Cú pháp để khai báo các biến tham chiếu là:

DATA <ref> TYPE REF TO <type> VALUE IS INITIAL.
  • Bổ sung REF TO khai báo một biến tham chiếu ref.

  • Đặc tả sau REF TO chỉ định kiểu tĩnh của biến tham chiếu.

  • Kiểu tĩnh hạn chế tập hợp các đối tượng mà <ref> có thể tham chiếu đến.

  • Kiểu động của biến tham chiếu là kiểu dữ liệu hoặc lớp mà nó hiện đang tham chiếu đến.

  • Kiểu tĩnh luôn chung chung hơn hoặc giống kiểu động.

  • Phần bổ sung TYPE được sử dụng để tạo một loại tham chiếu bị ràng buộc và làm giá trị bắt đầu và chỉ LÀ BAN ĐẦU mới có thể được chỉ định sau khi bổ sung VALUE.

Thí dụ

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.
  • Trong đoạn mã trên, một tham chiếu đối tượng Oref và hai biến tham chiếu dữ liệu Dref1 và Dref2 được khai báo.

  • Cả hai biến tham chiếu dữ liệu đều được nhập đầy đủ và có thể được tham chiếu bằng toán tử tham chiếu → * tại các vị trí toán hạng.

Biến hệ thống

  • Các biến hệ thống ABAP có thể truy cập được từ tất cả các chương trình ABAP.

  • Các trường này thực sự được lấp đầy bởi môi trường thời gian chạy.

  • Các giá trị trong các trường này cho biết trạng thái của hệ thống tại bất kỳ thời điểm nhất định nào.

  • Bạn có thể tìm thấy danh sách đầy đủ các biến hệ thống trong bảng SYST trong SAP.

  • Các trường riêng lẻ của cấu trúc SYST có thể được truy cập bằng cách sử dụng “SYST-” hoặc “SY-”.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

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

Literal là các đối tượng dữ liệu chưa được đặt tên mà bạn tạo trong mã nguồn của một chương trình. Chúng được xác định đầy đủ bởi giá trị của chúng. Bạn không thể thay đổi giá trị của một chữ. Hằng số là các đối tượng dữ liệu được đặt tên được tạo tĩnh bằng cách sử dụng các câu lệnh khai báo. Một hằng được khai báo bằng cách gán một giá trị cho nó được lưu trong vùng nhớ của chương trình. Không thể thay đổi giá trị được gán cho một hằng số trong quá trình thực thi chương trình. Các giá trị cố định này cũng có thể được coi là các chữ. Có hai loại chữ - số và ký tự.

Chữ số

Chữ số là chuỗi các chữ số có thể có dấu trước. Trong các ký tự số, không có dấu phân cách thập phân và không có ký hiệu với phần định trị và số mũ.

Sau đây là một số ví dụ về các ký tự số -

183. 
-97. 
+326.

Ký tự chữ

Các ký tự ký tự là chuỗi ký tự chữ và số trong mã nguồn của chương trình ABAP được đặt trong dấu ngoặc kép. Các ký tự ký tự được đặt trong dấu ngoặc kép có loại ABAP được xác định trước là C và được mô tả như các ký tự trường văn bản. Các chữ viết trong “dấu ngoặc kép” có kiểu ABAP là STRING và được mô tả dưới dạng các chữ chuỗi. Độ dài trường được xác định bởi số ký tự.

Note - Trong các ký tự trường văn bản, các khoảng trống ở cuối bị bỏ qua, nhưng trong các ký tự chuỗi thì chúng được tính đến.

Sau đây là một số ví dụ về các ký tự.

Các ký tự trường văn bản

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

Các ký tự trường chuỗi

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

Đầu ra giống nhau trong cả hai trường hợp trên -

Tutorials Point  
ABAP Tutorial

Note- Khi chúng tôi cố gắng thay đổi giá trị của hằng số, có thể xảy ra lỗi cú pháp hoặc thời gian chạy. Các hằng số mà bạn khai báo trong phần khai báo của một lớp hoặc một giao diện thuộc về các thuộc tính tĩnh của lớp hoặc giao diện đó.

Tuyên bố CONSTANTS

Chúng ta có thể khai báo các đối tượng dữ liệu được đặt tên với sự trợ giúp của câu lệnh CONSTANTS.

Sau đây là cú pháp:

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

Câu lệnh CONSTANTS tương tự như câu lệnh DATA.

<f> chỉ định tên cho hằng số. TYPE <type> đại diện cho một hằng số có tên là <f>, kế thừa các thuộc tính kỹ thuật giống như kiểu dữ liệu hiện có <type>. VALUE <val> gán giá trị ban đầu cho tên hằng được khai báo <f>.

Note- Chúng ta nên sử dụng mệnh đề GIÁ TRỊ trong câu lệnh CONSTANTS. Mệnh đề 'VALUE' được sử dụng để gán giá trị ban đầu cho hằng số trong khi khai báo nó.

Chúng ta có 3 loại hằng số như hằng số cơ bản, hằng số phức và hằng số tham chiếu. Câu lệnh sau đây cho thấy cách xác định hằng số bằng cách sử dụng câu lệnh CONSTANTS:

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

Đầu ra là -

The value of PQR is: 1.2356

Ở đây nó đề cập đến kiểu dữ liệu cơ bản và được gọi là hằng số cơ bản.

Sau đây là một ví dụ cho các hằng số phức:

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.

Trong đoạn mã trên, EMPLOYEE là một hằng số phức hợp bao gồm các trường Tên, Tổ chức và Địa điểm.

Câu lệnh sau khai báo một tham chiếu không đổi:

CONSTANTS null_pointer TYPE REF TO object VALUE IS INITIAL.

Chúng ta có thể sử dụng tham chiếu không đổi để so sánh hoặc chúng ta có thể chuyển nó cho các thủ tục.

ABAP cung cấp một tập hợp các toán tử phong phú để thao tác với các biến. Tất cả các toán tử ABAP được phân thành bốn loại:

  • Toán tử số học
  • Toán tử so sánh
  • Toán tử Bitwise
  • Toán tử chuỗi ký tự

Toán tử số học

Các toán tử số học được sử dụng trong các biểu thức toán học giống như cách chúng được sử dụng trong đại số. Danh sách sau đây mô tả các toán tử số học. Giả sử biến số nguyên A giữ 20 và biến B giữ 40.

Không. Toán tử số học & Mô tả
1

+ (Addition)

Thêm giá trị vào hai bên của toán tử. Ví dụ: A + B sẽ cho 60.

2

− (Subtraction)

Trừ toán hạng bên phải khỏi toán hạng bên trái. Ví dụ: A - B sẽ cho -20.

3

* (Multiplication)

Nhân các giá trị ở hai bên của toán tử. Ví dụ: A * B sẽ cho 800.

4

/ (Division)

Chia toán hạng bên trái cho toán hạng bên phải. Ví dụ: B / A sẽ cho 2.

5

MOD (Modulus)

Chia toán hạng bên trái cho toán hạng bên phải và trả về phần còn lại. Ví dụ: B MOD A sẽ cho 0.

Thí dụ

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

Đoạn mã trên tạo ra kết quả sau:

3

Toán tử so sánh

Hãy thảo luận về các loại toán tử so sánh khác nhau cho các toán hạng khác nhau.

Không. Toán tử so sánh & Mô tả
1

= (equality test). Alternate form is EQ.

Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu có thì điều kiện trở thành true. Ví dụ (A = B) không đúng.

2

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

Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không. Nếu các giá trị không bằng nhau thì điều kiện trở thành true. Ví dụ (A <> B) là đúng.

3

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

Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn giá trị của toán hạng bên phải hay không. Nếu có thì điều kiện trở thành đúng. Ví dụ (A> B) không đúng.

4

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

Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn giá trị của toán hạng bên phải hay không. Nếu có, thì điều kiện trở thành true. Ví dụ (A <B) là đúng.

5

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

Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn hoặc bằng giá trị của toán hạng bên phải hay không. Nếu có, thì điều kiện trở thành true. Ví dụ (A> = B) là không đúng.

6

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

Kiểm tra nếu giá trị của toán hạng bên trái nhỏ hơn hoặc bằng giá trị của toán hạng bên phải. Nếu có, thì điều kiện trở thành true. Ví dụ (A <= B) là đúng.

7

a1 BETWEEN a2 AND a3 (Interval test)

Kiểm tra xem a1 có nằm trong khoảng giữa a2 và a3 (bao gồm cả). Nếu có, thì điều kiện trở thành true. Ví dụ (A GIỮA B VÀ C) là đúng.

số 8

IS INITIAL

Điều kiện trở thành true nếu nội dung của biến không thay đổi và nó đã được tự động gán giá trị ban đầu. Ví dụ (A IS INITIAL) không đúng

9

IS NOT INITIAL

Điều kiện trở thành true nếu nội dung của biến đã thay đổi. Ví dụ (A IS NOT INITIAL) là true.

Note- Nếu kiểu dữ liệu hoặc độ dài của các biến không khớp thì chuyển đổi tự động được thực hiện. Điều chỉnh kiểu tự động được thực hiện cho một hoặc cả hai giá trị trong khi so sánh hai giá trị của các kiểu dữ liệu khác nhau. Kiểu chuyển đổi được quyết định bởi kiểu dữ liệu và thứ tự ưu tiên của kiểu dữ liệu.

Sau đây là thứ tự ưu tiên -

  • Nếu một trường thuộc loại I, thì trường kia được chuyển đổi thành loại I.

  • Nếu một trường thuộc loại P, thì trường kia được chuyển đổi thành loại P.

  • Nếu một trường thuộc loại D, thì trường kia được chuyển đổi thành loại D. Nhưng loại C và N không được chuyển đổi và chúng được so sánh trực tiếp. Tương tự là trường hợp của loại T.

  • Nếu một trường thuộc loại N và trường kia thuộc loại C hoặc X, thì cả hai trường đều được chuyển đổi thành loại P.

  • Nếu một trường thuộc loại C và trường kia thuộc loại X, thì loại X được chuyển đổi thành loại C.

ví dụ 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

Đoạn mã trên tạo ra kết quả sau:

A is less than B

Ví dụ 2

REPORT YS_SEP_08. 

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

Đoạn mã trên tạo ra kết quả sau:

A is assigned.

Toán tử Bitwise

ABAP cũng cung cấp một loạt các toán tử logic bit có thể được sử dụng để xây dựng các biểu thức đại số Boolean. Các toán tử bitwise có thể được kết hợp trong các biểu thức phức tạp bằng cách sử dụng dấu ngoặc đơn, v.v.

Không. Toán tử Bitwise & Mô tả
1

BIT-NOT

Toán tử đơn phân lật tất cả các bit trong một số thập lục phân thành giá trị đối diện. Ví dụ: áp dụng toán tử này cho một số thập lục phân có giá trị mức bit 10101010 (ví dụ: 'AA') sẽ cho ra 01010101.

2

BIT-AND

Toán tử nhị phân này so sánh từng trường từng bit bằng cách sử dụng toán tử Boolean AND.

3

BIT-XOR

Toán tử nhị phân so sánh từng trường từng bit bằng toán tử Boolean XOR (OR độc quyền).

4

BIT-OR

Toán tử nhị phân so sánh từng trường từng bit bằng cách sử dụng toán tử Boolean OR.

Ví dụ, sau đây là bảng sự thật hiển thị các giá trị được tạo ra khi áp dụng toán tử Boolean AND, OR hoặc XOR đối với hai giá trị bit có trong trường A và trường B.

Trường A Trường B HOẶC LÀ XOR
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

Toán tử chuỗi ký tự

Sau đây là danh sách các toán tử chuỗi ký tự:

Không. Toán tử và mô tả chuỗi ký tự
1

CO (Contains Only)

Kiểm tra xem A có chỉ bao gồm các ký tự trong B.

2

CN (Not Contains ONLY)

Kiểm tra xem A có chứa các ký tự không có trong B.

3

CA (Contains ANY)

Kiểm tra xem A có chứa ít nhất một ký tự của B.

4

NA (NOT Contains Any)

Kiểm tra xem A không chứa ký tự nào của B.

5

CS (Contains a String)

Kiểm tra xem A có chứa chuỗi ký tự B hay không.

6

NS (NOT Contains a String)

Kiểm tra xem A không chứa chuỗi ký tự B.

7

CP (Contains a Pattern)

Nó kiểm tra xem A có chứa mẫu trong B. không.

số 8

NP (NOT Contains a Pattern)

Nó kiểm tra xem A không chứa mẫu trong B.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

P contains at least one character of Q.

Có thể có một tình huống khi bạn cần thực thi một khối mã nhiều lần. Nói chung, các câu lệnh được thực hiện tuần tự: Câu lệnh đầu tiên trong một hàm được thực hiện đầu tiên, tiếp theo là câu lệnh thứ hai, v.v.

Các ngôn ngữ lập trình cung cấp các cấu trúc điều khiển khác nhau cho phép các đường dẫn thực thi phức tạp hơn. Aloop statement cho phép chúng ta thực hiện một câu lệnh hoặc một nhóm câu lệnh nhiều lần và sau đây là dạng chung của câu lệnh lặp trong hầu hết các ngôn ngữ lập trình.

Ngôn ngữ lập trình ABAP cung cấp các loại vòng lặp sau để xử lý các yêu cầu về lặp.

Không. Loại vòng lặp & Mô tả
1 Trong khi lặp lại

Lặp lại một câu lệnh hoặc một nhóm câu lệnh khi một điều kiện đã cho là đúng. Nó kiểm tra điều kiện trước khi thực thi phần thân của vòng lặp.

2 Làm vòng lặp

Câu lệnh DO hữu ích để lặp lại một số lần cụ thể nhiệm vụ cụ thể.

3 Vòng lặp lồng nhau

Bạn có thể sử dụng một hoặc nhiều vòng lặp bên trong bất kỳ vòng lặp WHILE hoặc DO nào khác.

Tuyên bố kiểm soát vòng lặp

Các câu lệnh điều khiển vòng lặp thay đổi việc thực thi từ trình tự bình thường của nó. ABAP bao gồm các câu lệnh điều khiển cho phép các vòng lặp được kết thúc sớm. Nó hỗ trợ các câu lệnh điều khiển sau.

Không. Tuyên bố & Mô tả Kiểm soát
1 TIẾP TỤC

Làm cho vòng lặp bỏ qua phần còn lại của phần thân của nó và bắt đầu vượt qua vòng lặp tiếp theo.

2 KIỂM TRA

Nếu điều kiện là sai, thì các câu lệnh còn lại sau khi KIỂM TRA sẽ bị bỏ qua và hệ thống bắt đầu vượt qua vòng lặp tiếp theo.

3 LỐI RA

Kết thúc hoàn toàn vòng lặp và chuyển việc thực thi đến câu lệnh ngay sau vòng lặp.

Cấu trúc ra quyết định có một hoặc nhiều điều kiện để được đánh giá hoặc kiểm tra bởi chương trình, cùng với một câu lệnh hoặc các câu lệnh sẽ được thực hiện, nếu điều kiện được xác định là đúng và tùy chọn, các câu lệnh khác sẽ được thực hiện, nếu điều kiện được xác định là sai.

Sau đây là dạng chung của cấu trúc ra quyết định điển hình được tìm thấy trong hầu hết các ngôn ngữ lập trình:

Ngôn ngữ lập trình ABAP cung cấp các loại câu lệnh ra quyết định sau.

Không. Tuyên bố & Mô tả
1 Câu lệnh IF

Một câu lệnh IF bao gồm một biểu thức logic được theo sau bởi một hoặc nhiều câu lệnh.

2 IF .. Câu lệnh khác

Một câu lệnh IF có thể được theo sau bởi một câu lệnh ELSE tùy chọn thực thi khi biểu thức sai.

3 Câu lệnh IF lồng nhau

Bạn có thể sử dụng một câu lệnh IF hoặc ELSEIF bên trong một câu lệnh IF hoặc ELSEIF khác.

4 Tuyên bố kiểm soát CASE

Câu lệnh CASE được sử dụng khi chúng ta cần so sánh hai hoặc nhiều trường hoặc biến.

Strings, được sử dụng rộng rãi trong lập trình ABAP, là một chuỗi các ký tự.

Chúng tôi sử dụng các biến loại dữ liệu C để chứa các ký tự chữ và số, với tối thiểu 1 ký tự và tối đa là 65.535 ký tự. Theo mặc định, chúng được căn chỉnh ở bên trái.

Tạo chuỗi

Khai báo và khởi tạo sau đây tạo ra một chuỗi bao gồm từ 'Hello'. Kích thước của chuỗi chính xác là số ký tự trong từ 'Hello'.

Data my_Char(5) VALUE 'Hello'.

Chương trình sau đây là một ví dụ về tạo chuỗi.

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

Đoạn mã trên tạo ra kết quả sau:

Hello

Chiều dài chuỗi

Để tìm độ dài của chuỗi ký tự, chúng ta có thể sử dụng STRLEN statement. Hàm STRLEN () trả về số ký tự có trong chuỗi.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

The Length of the Title is: 9

ABAP hỗ trợ một loạt các câu lệnh thao tác với chuỗi.

Không. Tuyên bố & Mục đích
1

CONCATENATE

Hai chuỗi được nối với nhau để tạo thành chuỗi thứ ba.

2

CONDENSE

Câu lệnh này xóa các ký tự khoảng trắng.

3

STRLEN

Được sử dụng để tìm độ dài của một trường.

4

REPLACE

Dùng để thay thế các ký tự.

5

SEARCH

Để chạy tìm kiếm trong chuỗi ký tự.

6

SHIFT

Được sử dụng để di chuyển nội dung của một chuỗi sang trái hoặc phải.

7

SPLIT

Được sử dụng để chia nội dung của một trường thành hai hoặc nhiều trường.

Ví dụ sau sử dụng một số câu lệnh được đề cập ở trên:

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

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

Note -

  • Trong trường hợp Kết hợp, 'sep' sẽ chèn một khoảng trắng vào giữa các trường.

  • Câu lệnh CONDENSE loại bỏ khoảng trắng giữa các trường, nhưng chỉ để lại khoảng trắng của 1 ký tự.

  • 'NO-GAPS' là một bổ sung tùy chọn cho câu lệnh CONDENSE loại bỏ tất cả các khoảng trắng.

ABAP tham chiếu ngầm đến lịch Gregorian, có giá trị trên hầu hết thế giới. Chúng tôi có thể chuyển đổi đầu ra sang các lịch cụ thể của quốc gia. Ngày là thời gian được chỉ định cho một ngày, tuần hoặc tháng chính xác đối với lịch. Thời gian được chỉ định chính xác đến từng giây hoặc phút đối với một ngày. ABAP luôn tiết kiệm thời gian ở định dạng 24 giờ. Đầu ra có thể có định dạng quốc gia cụ thể. Ngày và giờ thường được hiểu là ngày địa phương có hiệu lực trong múi giờ hiện tại.

ABAP cung cấp hai kiểu tích hợp để làm việc với ngày và giờ -

  • Kiểu dữ liệu D
  • Kiểu dữ liệu T

Sau đây là định dạng cơ bản -

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.

Cả hai kiểu này đều là kiểu ký tự có độ dài cố định có dạng YYYYMMDD và HHMMSS, tương ứng.

Dấu thời gian

Ngoài các loại cài sẵn này, hai loại khác TIMESTAMPTIMESTAMPLđang được sử dụng trong nhiều bảng ứng dụng tiêu chuẩn để lưu trữ dấu thời gian ở định dạng UTC. Bảng sau hiển thị các loại ngày và giờ cơ bản có sẵn trong ABAP.

Không. Loại dữ liệu và mô tả
1

D

Loại ngày có độ dài cố định được tích hợp sẵn có dạng YYYYMMDD. Ví dụ: giá trị 20100913 đại diện cho ngày 13 tháng 9 năm 2010.

2

T

Một loại thời gian có độ dài cố định được tích hợp sẵn của biểu mẫu HHMMSS. Ví dụ: giá trị 102305 đại diện cho thời gian 10:23:05 sáng.

3

TIMESTAMP (Loại P - Chiều dài 8 Không có số thập phân)

Loại này được sử dụng để biểu thị dấu thời gian ngắn ở dạng YYYYMMDDhhmmss. Ví dụ: giá trị 20100913102305 đại diện cho ngày 13 tháng 9 năm 2010 lúc 10:23:05 sáng.

4

TIMESTAMPL (Loại P - Độ dài 11 Số thập phân 7)

TIMESTAMPL đại diện cho dấu thời gian dài ở dạng YYYYMMDDhhmmss, mmmuuun. Ở đây các chữ số bổ sung 'mmmuuun' đại diện cho các phần nhỏ của giây.

Ngày và giờ hiện tại

Các đoạn mã sau đây truy xuất ngày và giờ hệ thống hiện tại.

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.

Đoạn mã trên tạo ra kết quả sau:

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

Biến date_1 được gán giá trị của ngày hệ thống hiện tại SY-DATUM. Tiếp theo, chúng tôi tăng giá trị ngày lên 6. Về cách tính ngày trong ABAP, điều này ngụ ý rằng chúng tôi đang tăng thành phần ngày của đối tượng ngày thêm 6 ngày. Môi trường thời gian chạy ABAP đủ thông minh để cuộn qua giá trị ngày bất cứ khi nào nó đến cuối tháng.

Tính toán thời gian hoạt động tương tự như tính toán ngày. Đoạn mã sau đây tăng thời gian hiện tại của hệ thống lên 75 giây bằng cách sử dụng số học thời gian cơ bản.

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: __:__:__'.

Đoạn mã trên tạo ra kết quả sau:

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

Làm việc với Dấu thời gian

Bạn có thể truy xuất thời gian hệ thống hiện tại và lưu trữ nó trong một biến dấu thời gian bằng cách sử dụng GET TIME STAMPnhư thể hiện trong đoạn mã sau. Câu lệnh GET TIME STAMP lưu trữ dấu thời gian ở định dạng tay dài hoặc tay ngắn tùy theo loại đối tượng dữ liệu dấu thời gian được sử dụng. Giá trị dấu thời gian được mã hóa bằng tiêu chuẩn 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.

Đoạn mã trên tạo ra kết quả sau:

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

Trong ví dụ trên, chúng tôi đang hiển thị dấu thời gian bằng cách bổ sung TIME ZONE của câu lệnh WRITE. Việc bổ sung này định dạng đầu ra của dấu thời gian theo các quy tắc cho múi giờ được chỉ định. Trường hệ thống SY-ZONLO được sử dụng để hiển thị múi giờ địa phương được định cấu hình theo sở thích của người dùng.

ABAP cung cấp nhiều loại tùy chọn định dạng khác nhau để định dạng đầu ra của chương trình. Ví dụ: bạn có thể tạo một danh sách bao gồm các mục khác nhau với nhiều màu sắc hoặc kiểu định dạng khác nhau.

Câu lệnh WRITE là câu lệnh định dạng dùng để hiển thị dữ liệu trên màn hình. Có các tùy chọn định dạng khác nhau cho câu lệnh WRITE. Cú pháp của câu lệnh WRITE là -

WRITE <format> <f> <options>.

Trong cú pháp này, <format> đại diện cho đặc tả định dạng đầu ra, có thể là dấu gạch chéo (/) cho biết hiển thị đầu ra bắt đầu từ một dòng mới. Ngoài dấu gạch chéo lên, đặc tả định dạng bao gồm số cột và độ dài cột. Ví dụ: câu lệnh WRITE / 04 (6) cho thấy một dòng mới bắt đầu bằng cột 4 và độ dài cột là 6, trong khi câu lệnh WRITE 20 hiển thị dòng hiện tại với cột 20. Tham số <f> đại diện cho một biến dữ liệu hoặc văn bản được đánh số.

Bảng sau đây mô tả các mệnh đề khác nhau được sử dụng để định dạng:

Không. Mệnh đề & Mô tả
1

LEFT-JUSTIFIED

Chỉ định rằng đầu ra được căn trái.

2

CENTERED

Biểu thị rằng đầu ra được căn giữa.

3

RIGHT-JUSTIFIED

Chỉ định rằng đầu ra là căn phải.

4

UNDER <g>

Đầu ra bắt đầu ngay dưới trường <g>.

5

NO-GAP

Chỉ định rằng ô trống sau trường <f> bị từ chối.

6

USING EDIT MASK <m>

Biểu thị đặc điểm kỹ thuật của mẫu định dạng <m>. Sử dụng Không có Mặt nạ EDIT: Điều này chỉ định rằng mẫu định dạng được chỉ định trong Từ điển ABAP bị vô hiệu hóa.

7

NO-ZERO

Nếu một trường chỉ chứa các số 0, thì chúng được thay thế bằng các ô trống.

Sau đây là các tùy chọn định dạng cho các trường Kiểu số -

Không. Mệnh đề & Mô tả
1

NO-SIGN

Chỉ định rằng không có dấu hiệu nào được hiển thị trên màn hình.

2

EXPONENT <e>

Chỉ định rằng trong kiểu F (các trường dấu phẩy động), số mũ được định nghĩa trong <e>.

3

ROUND <r>

Các trường kiểu P (kiểu dữ liệu số được đóng gói) trước tiên được nhân với 10 ** (- r) và sau đó được làm tròn thành giá trị số nguyên.

4

CURRENCY <c>

Biểu thị rằng định dạng được thực hiện theo giá trị tiền tệ <c> được lưu trữ trong bảng cơ sở dữ liệu TCURX.

5

UNIT <u>

Chỉ định rằng số vị trí thập phân được cố định theo đơn vị <u> như được chỉ định trong bảng cơ sở dữ liệu T006 cho loại P.

6

DECIMALS <d>

Chỉ định rằng số chữ số <d> phải được hiển thị sau dấu thập phân.

Ví dụ: bảng sau đây hiển thị các tùy chọn định dạng khác nhau cho các trường ngày -

Tùy chọn định dạng Thí dụ
DD / MM / YY 13/01/15
MM / DD / YY 13/01/15
DD / MM / YYYY 13/01/2015
MM / DD / YYYY 13/01/2015
DDMMYY 130115
MMDDYY 011315
YYMMDD 150113

Ở đây, DD là viết tắt của ngày trong hai con số, MM là viết tắt của tháng trong hai con số, YY là viết tắt của năm trong hai con số và YYYY là năm trong bốn con số.

Hãy cùng xem một ví dụ về mã ABAP triển khai một số tùy chọn định dạng ở trên -

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 '__:__:__'.

Đoạn mã trên tạo ra kết quả sau:

Tutorials Point 
Tutorials  
Point 
TutorialsPoint 
112538 
11:25:38

An exceptionlà một vấn đề phát sinh trong quá trình thực hiện một chương trình. Khi một ngoại lệ xảy ra, quy trình bình thường của chương trình bị gián đoạn và ứng dụng chương trình kết thúc bất thường, điều này không được khuyến nghị, do đó những ngoại lệ này phải được xử lý.

Ngoại lệ cung cấp một cách để chuyển quyền kiểm soát từ một phần của chương trình sang phần khác. Xử lý ngoại lệ ABAP được xây dựng dựa trên ba từ khóa - RAISE, TRY, CATCH và CLEANUP. Giả sử một khối sẽ tạo ra một ngoại lệ, một phương pháp sẽ bắt một ngoại lệ bằng cách sử dụng kết hợp các từ khóa TRY và CATCH. Một khối TRY - CATCH được đặt xung quanh mã có thể tạo ra một ngoại lệ. Sau đây là cú pháp để sử dụng 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- Các trường hợp ngoại lệ được nêu ra để chỉ ra rằng một số tình huống ngoại lệ đã xảy ra. Thông thường, một trình xử lý ngoại lệ cố gắng sửa chữa lỗi hoặc tìm một giải pháp thay thế.

TRY- Khối TRY chứa mã hóa ứng dụng có các ngoại lệ sẽ được xử lý. Khối câu lệnh này được xử lý tuần tự. Nó có thể chứa thêm các cấu trúc điều khiển và các lệnh gọi của các thủ tục hoặc các chương trình ABAP khác. Theo sau nó là một hoặc nhiều khối bắt.

CATCH- Một chương trình bắt một ngoại lệ với một trình xử lý ngoại lệ tại vị trí trong chương trình mà bạn muốn xử lý vấn đề. Từ khóa CATCH chỉ ra việc bắt một ngoại lệ.

CLEANUP- Các câu lệnh của khối CLEANUP được thực thi bất cứ khi nào có ngoại lệ xảy ra trong khối TRY mà trình xử lý của cùng một cấu trúc TRY - ENDTRY không bắt được. Trong mệnh đề CLEANUP, hệ thống có thể khôi phục một đối tượng về trạng thái nhất quán hoặc giải phóng các tài nguyên bên ngoài. Nghĩa là, công việc dọn dẹp có thể được thực thi đối với ngữ cảnh của khối TRY.

Nâng cao ngoại lệ

Các ngoại lệ có thể được đưa ra tại bất kỳ thời điểm nào trong một phương thức, một mô-đun chức năng, một chương trình con, v.v. Có hai cách để đưa ra một ngoại lệ -

  • Các trường hợp ngoại lệ do hệ thống thời gian chạy ABAP đưa ra.

    Ví dụ Y = 1 / 0. Điều này sẽ dẫn đến lỗi thời gian chạy kiểu CX_SY_ZERODIVIDE.

  • Các ngoại lệ do lập trình viên nêu ra.

    Nâng và tạo một đối tượng ngoại lệ đồng thời. Tăng một ngoại lệ với một đối tượng ngoại lệ đã tồn tại trong kịch bản đầu tiên. Cú pháp là: RAISE EXCEPTION exep.

Bắt ngoại lệ

Các trình xử lý được sử dụng để bắt các trường hợp ngoại lệ.

Hãy xem một đoạn mã -

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( ).

Trong đoạn mã trên, chúng tôi đang cố gắng chia Num1 cho Num2 để nhận được kết quả trong một biến kiểu float.

Hai loại ngoại lệ có thể được tạo ra.

  • Lỗi chuyển đổi đầu số.

  • Chia cho không ngoại lệ. Trình xử lý bắt ngoại lệ CX_SY_CONVERSION_NO_NUMBER và cả ngoại lệ CX_SY_ZERODIVIDE. Ở đây phương thức GET_TEXT () của lớp ngoại lệ được sử dụng để lấy mô tả của ngoại lệ.

Thuộc tính của ngoại lệ

Dưới đây là năm thuộc tính và phương pháp của các ngoại lệ -

Không. Thuộc tính & Mô tả
1

Textid

Được sử dụng để xác định các văn bản khác nhau cho các ngoại lệ và cũng ảnh hưởng đến kết quả của phương thức get_text.

2

Previous

Thuộc tính này có thể lưu trữ ngoại lệ ban đầu cho phép bạn tạo một chuỗi ngoại lệ.

3

get_text

Điều này trả về biểu diễn văn bản dưới dạng một chuỗi theo ngôn ngữ hệ thống của ngoại lệ.

4

get_longtext

Điều này trả về biến thể dài của biểu diễn dạng văn bản của ngoại lệ dưới dạng một chuỗi.

5

get_source_position

Cung cấp tên chương trình và số dòng đạt đến nơi mà ngoại lệ được nêu ra.

Thí dụ

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.

Trong ví dụ này, nếu số lớn hơn 150, ngoại lệ CX_DEMO_ABS_TOO_LARGE sẽ được nâng lên. Đoạn mã trên tạo ra kết quả sau cho số 160.

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

Như bạn đã biết, SQL có thể được chia thành hai phần:

  • DML (Ngôn ngữ thao tác dữ liệu)
  • DDL (Ngôn ngữ định nghĩa dữ liệu)

Phần DML bao gồm các lệnh truy vấn và cập nhật như SELECT, INSERT, UPDATE, DELETE, v.v. và các chương trình ABAP xử lý phần DML của SQL. Phần DDL bao gồm các lệnh như CREATE TABLE, CREATE INDEX, DROP TABLE, ALTER TABLE, v.v. và ABAP Dictionary xử lý phần DDL của SQL.

Từ điển ABAP có thể được xem như là siêu dữ liệu (tức là dữ liệu về dữ liệu) nằm trong cơ sở dữ liệu SAP cùng với siêu dữ liệu được cơ sở dữ liệu duy trì. Từ điển được sử dụng để tạo và quản lý các định nghĩa dữ liệu cũng như tạo Bảng, Phần tử dữ liệu, Tên miền, Dạng xem và Loại.

Các kiểu cơ bản trong Từ điển ABAP

Các kiểu cơ bản trong Từ điển ABAP như sau:

  • Data elements mô tả một kiểu cơ bản bằng cách xác định kiểu dữ liệu, độ dài và có thể cả chữ số thập phân.

  • Structures với các thành phần có thể có bất kỳ loại nào.

  • Table types mô tả cấu trúc của một bảng bên trong.

Các đối tượng khác nhau trong môi trường Từ điển có thể được tham chiếu trong các chương trình ABAP. Từ điển được gọi là khu vực toàn cầu. Các đối tượng trong Từ điển là chung cho tất cả các chương trình ABAP và dữ liệu trong các chương trình ABAP có thể được khai báo bằng cách tham chiếu đến các đối tượng toàn cục của Từ điển này.

Từ điển hỗ trợ định nghĩa các kiểu do người dùng định nghĩa và các kiểu này được sử dụng trong các chương trình ABAP. Chúng cũng xác định cấu trúc của các đối tượng cơ sở dữ liệu như bảng, dạng xem và chỉ mục. Các đối tượng này được tạo tự động trong cơ sở dữ liệu bên dưới trong định nghĩa Từ điển của chúng khi các đối tượng được kích hoạt. Từ điển cũng cung cấp các công cụ chỉnh sửa như Trợ giúp Tìm kiếm và công cụ khóa như Khóa Đối tượng.

Nhiệm vụ từ điển

ABAP Dictionary đạt được những điều sau:

  • Tăng cường tính toàn vẹn của dữ liệu.
  • Quản lý các định nghĩa dữ liệu mà không có dư thừa.
  • Tích hợp chặt chẽ với phần còn lại của bàn làm việc phát triển ABAP.

Thí dụ

Bất kỳ kiểu phức tạp nào do người dùng định nghĩa đều có thể được xây dựng từ 3 kiểu cơ bản trong Từ điển. Dữ liệu khách hàng được lưu trữ trong cấu trúc 'Khách hàng' với các thành phần Tên, Địa chỉ và Điện thoại như được mô tả trong hình sau. Tên cũng là một cấu trúc với các thành phần, Tên và Họ. Cả hai thành phần này đều là cơ bản vì kiểu của chúng được xác định bởi một phần tử dữ liệu.

Loại thành phần Địa chỉ được xác định bởi một cấu trúc mà các thành phần cũng là cấu trúc, và thành phần Điện thoại được xác định bởi một loại bảng vì một khách hàng có thể có nhiều hơn một số điện thoại. Các kiểu được sử dụng trong các chương trình ABAP và cũng để xác định các kiểu tham số giao diện của các mô-đun chức năng.

Ba đối tượng cơ bản để xác định dữ liệu trong Từ điển ABAP là Miền, Phần tử dữ liệu và Bảng. Miền được sử dụng cho định nghĩa kỹ thuật của trường bảng chẳng hạn như loại trường và độ dài, và phần tử dữ liệu được sử dụng cho định nghĩa ngữ nghĩa (mô tả ngắn). Phần tử dữ liệu mô tả ý nghĩa của một miền trong bối cảnh kinh doanh nhất định. Nó chủ yếu chứa trợ giúp trường và các nhãn trường trong màn hình.

Miền được gán cho phần tử dữ liệu, đến lượt nó được gán cho các trường bảng hoặc trường cấu trúc. Ví dụ: miền MATNR (số vật liệu CHAR) được gán cho các phần tử dữ liệu như MATNR_N, MATNN và MATNR_D và các phần tử này được gán cho nhiều trường bảng và trường cấu trúc.

Tạo miền

Trước khi bạn tạo một miền mới, hãy kiểm tra xem có bất kỳ miền hiện có nào có cùng thông số kỹ thuật bắt buộc trong trường bảng của bạn hay không. Nếu vậy, chúng tôi phải sử dụng miền hiện có đó. Hãy thảo luận về thủ tục tạo miền.

Step 1 - Chuyển đến Giao dịch SE11.

Step 2- Chọn nút radio cho Tên miền trong màn hình ban đầu của Từ điển ABAP và nhập tên miền như được hiển thị trong ảnh chụp màn hình sau. Nhấp vào nút TẠO. Bạn có thể tạo tên miền trong không gian tên của khách hàng và tên của đối tượng luôn bắt đầu bằng 'Z' hoặc 'Y'.

Step 3- Nhập mô tả vào trường văn bản ngắn của màn hình bảo trì miền. Trong trường hợp này, đó là "Miền khách hàng".Note - Bạn không thể nhập bất kỳ thuộc tính nào khác cho đến khi bạn đã nhập thuộc tính này.

Step 4- Nhập Kiểu Dữ liệu, Số Ký tự và Vị trí Thập phân trong khối Định dạng của tab Định nghĩa. Nhấn phím trên Độ dài đầu ra và nó đề xuất và hiển thị độ dài đầu ra. Nếu bạn ghi đè độ dài đầu ra được đề xuất, bạn có thể thấy cảnh báo trong khi kích hoạt miền. Bạn có thể điền vào Convers. Các trường Quy trình, Dấu hiệu và Chữ thường nếu được yêu cầu. Nhưng đây luôn là các thuộc tính tùy chọn.

Step 5- Chọn tab Phạm vi giá trị. Nếu miền bị hạn chế chỉ có các giá trị cố định thì hãy nhập các giá trị hoặc khoảng cố định. Xác định bảng giá trị nếu hệ thống phải đề xuất bảng này làm bảng kiểm tra trong khi xác định khóa ngoại cho các trường tham chiếu đến miền này. Nhưng tất cả những điều này là thuộc tính tùy chọn.

Step 6- Lưu các thay đổi của bạn. Cửa sổ bật lên Tạo Mục nhập Thư mục Đối tượng xuất hiện và yêu cầu một gói. Bạn có thể nhập tên gói mà bạn đang làm việc. Nếu bạn không có bất kỳ gói nào thì bạn có thể tạo gói đó trong Bộ điều hướng đối tượng hoặc bạn có thể lưu miền của mình bằng nút Đối tượng cục bộ.

Step 7- Kích hoạt miền của bạn. Nhấp vào biểu tượng Kích hoạt (biểu tượng que diêm) hoặc nhấn CTRL + F3 để kích hoạt miền. Một cửa sổ bật lên xuất hiện, liệt kê 2 đối tượng hiện không hoạt động như được hiển thị trong ảnh chụp nhanh sau:

Step 8- Tại thời điểm này, mục trên cùng có nhãn 'DOMA' với tên ZSEP_18 sẽ được kích hoạt. Khi điều này được đánh dấu, hãy nhấp vào nút đánh dấu màu xanh lá cây. Cửa sổ này biến mất và thanh trạng thái sẽ hiển thị thông báo 'Đối tượng đã được kích hoạt'.

Nếu thông báo lỗi hoặc cảnh báo xảy ra khi bạn kích hoạt miền, nhật ký kích hoạt sẽ tự động hiển thị. Nhật ký kích hoạt hiển thị thông tin về quy trình kích hoạt. Bạn cũng có thể gọi nhật ký kích hoạt bằng Tiện ích (M) → Nhật ký kích hoạt.

Phần tử dữ liệu mô tả các trường riêng lẻ trong Từ điển dữ liệu ABAP. Chúng là đơn vị nhỏ nhất không thể phân chia của các kiểu phức hợp và chúng được sử dụng để xác định kiểu trường bảng, thành phần cấu trúc hoặc kiểu hàng của bảng. Thông tin về ý nghĩa của trường bảng và thông tin về chỉnh sửa trường màn hình tương ứng có thể được gán cho một phần tử dữ liệu. Thông tin này tự động có sẵn cho tất cả các trường màn hình tham chiếu đến phần tử dữ liệu. Phần tử dữ liệu mô tả kiểu cơ bản hoặc kiểu tham chiếu.

Tạo phần tử dữ liệu

Trước khi tạo phần tử dữ liệu mới, bạn cần kiểm tra xem có phần tử dữ liệu hiện có nào có cùng đặc điểm ngữ nghĩa cần thiết trong trường bảng của bạn hay không. Nếu vậy, bạn có thể sử dụng phần tử dữ liệu hiện có đó. Bạn có thể gán phần tử dữ liệu với kiểu, miền hoặc kiểu tham chiếu được xác định trước.

Sau đây là quy trình tạo phần tử dữ liệu:

Step 1 - Chuyển đến Giao dịch SE11.

Step 2 - Chọn nút radio cho Kiểu dữ liệu trong màn hình ban đầu của Từ điển ABAP và nhập tên của phần tử dữ liệu như hình dưới đây.

Step 3- Nhấp vào nút TẠO. Bạn có thể tạo các phần tử dữ liệu trong không gian tên khách hàng và tên của đối tượng luôn bắt đầu bằng 'Z' hoặc 'Y'.

Step 4 - Kiểm tra nút radio Phần tử dữ liệu trên cửa sổ bật lên CREATE TYPE xuất hiện với ba nút radio.

Step 5- Nhấp vào biểu tượng dấu kiểm màu xanh lá cây. Bạn được chuyển hướng đến màn hình bảo trì của phần tử dữ liệu.

Step 6- Nhập mô tả vào trường văn bản ngắn của màn hình bảo trì của phần tử dữ liệu. Trong trường hợp này, nó là "Yếu tố dữ liệu khách hàng".Note - Bạn không thể nhập bất kỳ thuộc tính nào khác cho đến khi bạn đã nhập thuộc tính này.

Step 7- Gán phần tử dữ liệu với kiểu. Bạn có thể tạo phần tử dữ liệu cơ bản bằng cách chọn kiểu cơ bản hoặc phần tử dữ liệu tham chiếu bằng cách chọn Kiểu tham chiếu. Bạn có thể gán một phần tử dữ liệu cho Miền hoặc Loại được xác định trước trong Loại cơ bản và với Tên của Loại tham chiếu hoặc Tham chiếu đến Loại được xác định trước trong Loại tham chiếu.

Step 8- Nhập các trường cho văn bản ngắn, văn bản vừa, văn bản dài và tiêu đề trong tab Nhãn Trường. Bạn có thể nhấn Enter và độ dài được tạo tự động cho các nhãn này.

Step 9- Lưu các thay đổi của bạn. Cửa sổ bật lên Tạo Mục nhập Thư mục Đối tượng xuất hiện và yêu cầu một gói. Bạn có thể nhập tên gói mà bạn đang làm việc. Nếu bạn không có bất kỳ gói nào thì bạn có thể tạo gói đó trong Bộ điều hướng đối tượng hoặc bạn có thể lưu phần tử dữ liệu của mình bằng nút Đối tượng cục bộ.

Step 10- Kích hoạt phần tử dữ liệu của bạn. Nhấp vào biểu tượng Kích hoạt (biểu tượng que diêm) hoặc nhấn CTRL + F3 để kích hoạt phần tử dữ liệu. Một cửa sổ bật lên xuất hiện, liệt kê 2 đối tượng hiện không hoạt động như trong ảnh chụp màn hình sau.

Step 11- Tại thời điểm này, mục trên cùng có nhãn 'DTEL' với tên Z_CUST sẽ được kích hoạt. Khi điều này được đánh dấu, hãy nhấp vào nút đánh dấu màu xanh lá cây. Cửa sổ này biến mất và thanh trạng thái sẽ hiển thị thông báo 'Đối tượng đã được kích hoạt'.

Nếu thông báo lỗi hoặc cảnh báo xảy ra khi bạn kích hoạt phần tử dữ liệu, nhật ký kích hoạt sẽ tự động hiển thị. Nhật ký kích hoạt hiển thị thông tin về quy trình kích hoạt. Bạn cũng có thể gọi nhật ký kích hoạt bằng Tiện ích (M) → Nhật ký kích hoạt.

Các bảng có thể được định nghĩa độc lập với cơ sở dữ liệu trong Từ điển ABAP. Khi một bảng được kích hoạt trong Từ điển ABAP, bản sao tương tự của các trường của bảng đó cũng được tạo trong cơ sở dữ liệu. Các bảng được định nghĩa trong Từ điển ABAP được dịch tự động sang định dạng tương thích với cơ sở dữ liệu vì định nghĩa của bảng phụ thuộc vào cơ sở dữ liệu được sử dụng bởi hệ thống SAP.

Một bảng có thể chứa một hoặc nhiều trường, mỗi trường được xác định với kiểu dữ liệu và độ dài của nó. Lượng lớn dữ liệu được lưu trữ trong bảng được phân phối giữa một số trường được xác định trong bảng.

Các loại trường bảng

Một bảng bao gồm nhiều trường và mỗi trường chứa nhiều phần tử. Bảng sau liệt kê các phần tử khác nhau của các trường trong bảng:

Không. Yếu tố & Mô tả
1

Field name

Đây là tên được đặt cho một trường có thể chứa tối đa 16 ký tự. Tên trường có thể bao gồm các chữ số, chữ cái và dấu gạch dưới. Nó phải bắt đầu bằng một chữ cái.

2

Key flag

Xác định xem một trường có thuộc về một trường khóa hay không.

3

Field type

Gán một kiểu dữ liệu cho một trường.

4

Field length

Số lượng ký tự có thể được nhập vào một trường.

5

Decimal places

Xác định số chữ số cho phép sau dấu thập phân. Phần tử này chỉ được sử dụng cho các kiểu dữ liệu số.

6

Short text

Mô tả ý nghĩa của trường tương ứng.

Tạo bảng trong từ điển ABAP

Step 1- Đến giao dịch SE11, chọn nút radio 'Bảng cơ sở dữ liệu', và nhập tên cho bảng sẽ tạo. Trong trường hợp của chúng tôi, chúng tôi đã nhập tên ZCUSTOMERS1. Nhấp vào nút Tạo. Màn hình Từ điển: Bảng duy trì xuất hiện. Ở đây, tab 'Giao hàng và Bảo trì' được chọn theo mặc định.

Step 2 - Nhập một văn bản ngắn giải thích vào trường Mô tả Ngắn gọn.

Step 3- Nhấp vào biểu tượng Trợ giúp Tìm kiếm bên cạnh trường Phân phối. Chọn tùy chọn 'A [Bảng ứng dụng (dữ liệu chính và giao dịch)]'.

Step 4- Chọn tùy chọn 'Cho phép Hiển thị / Bảo trì' từ trình đơn thả xuống 'Trình duyệt Dữ liệu / Bảo trì Chế độ xem bảng'. Màn hình Từ điển: Bảng bảo trì xuất hiện.

Step 5- Chọn tab Trường. Màn hình chứa các tùy chọn liên quan đến tab Trường sẽ xuất hiện.

Step 6- Nhập tên các trường của bảng vào cột Trường. Tên trường có thể chứa các chữ cái, chữ số và dấu gạch dưới, nhưng nó phải luôn bắt đầu bằng một chữ cái và không được dài hơn 16 ký tự.

Các trường sẽ được tạo cũng phải có các phần tử dữ liệu vì chúng lấy các thuộc tính, chẳng hạn như kiểu dữ liệu, độ dài, vị trí thập phân và văn bản ngắn, từ phần tử dữ liệu đã xác định.

Step 7- Chọn cột Khóa nếu bạn muốn trường là một phần của khóa bảng. Hãy tạo các trường như CLIENT, CUSTOMER, NAME, TITLE và DOB.

Step 8- Trường đầu tiên là một trường quan trọng và nó xác định khách hàng mà các bản ghi được liên kết với. Nhập 'Máy khách' làm Trường và 'MANDT' làm Phần tử dữ liệu. Hệ thống tự động điền vào Loại dữ liệu, Độ dài, Số thập phân và Mô tả ngắn gọn. Trường 'Khách hàng' được đặt làm trường khóa bằng cách chọn hộp 'Khóa'.

Step 9- Trường tiếp theo là 'Khách hàng'. Chọn hộp để đặt nó thành trường khóa và nhập Phần tử dữ liệu mới 'ZCUSTNUM'. Nhấp vào nút Lưu.

Step 10- Vì Phần tử Dữ liệu 'ZCUSTNUM' chưa tồn tại, nó phải được tạo. Nhấp đúp vào Phần tử dữ liệu mới và cửa sổ 'Tạo phần tử dữ liệu' xuất hiện. Trả lời 'Có' cho điều này và cửa sổ 'Duy trì phần tử dữ liệu' xuất hiện.

Step 11- Nhập 'Số khách hàng' vào vùng Mô tả ngắn gọn. Loại dữ liệu cơ bản được gọi là 'Miền' phải được xác định cho phần tử Dữ liệu mới. Vì vậy, hãy nhập 'ZCUSTD1', nhấp đúp vào nó và đồng ý lưu các thay đổi đã thực hiện. Chọn 'Có' để tạo miền và nhập vào hộp 'Mô tả ngắn gọn' mô tả về miền.

Tab 'Định nghĩa' sẽ tự động mở ra. Trường đầu tiên là 'Kiểu dữ liệu'.

Step 12- Nhấp vào bên trong hộp và chọn loại 'NUMC' từ trình đơn thả xuống. Nhập số 8 vào ô 'Không. trường ký tự (tối đa 8 ký tự) và nhập 0 vào vùng 'Vị trí thập phân'. Độ dài đầu ra là 8 phải được chọn và sau đó nhấn Enter. Mô tả của trường 'NUMC' phải xuất hiện lại, xác nhận rằng đây là mục nhập hợp lệ.

Step 13 - Nhấn nút Lưu và Kích hoạt đối tượng.

Step 14- Nhấn F3 để quay lại màn hình 'Duy trì / Thay đổi Phần tử Dữ liệu'. Tạo bốn nhãn Trường như thể hiện trong ảnh chụp nhanh sau. Sau đó, Lưu và Kích hoạt phần tử.

Step 15- Nhấn nút quay lại để quay lại màn hình bảo trì bàn. Cột Khách hàng có đúng Loại Dữ liệu, Độ dài, Số thập phân và Mô tả Ngắn gọn. Điều này cho biết việc tạo thành công phần tử Dữ liệu và cả Miền được sử dụng.

Tương tự, chúng ta cần tạo ba trường bổ sung như NAME, TITLE và DOB.

Step 16- Chọn 'Cài đặt kỹ thuật' từ thanh công cụ. Chọn ÁP DỤNG0 cho 'Loại dữ liệu' và loại kích thước đầu tiên 0 cho trường 'Kích thước' ''. Trong trường hợp có các tùy chọn đệm, phải chọn 'Không cho phép lưu vào bộ đệm'.

Step 17- Nhấp vào Lưu. Quay lại bảng và Kích hoạt nó. Màn hình sau xuất hiện.

Bảng 'ZCUSTOMERS1' được kích hoạt.

Structure là một đối tượng dữ liệu được tạo thành từ các thành phần của bất kỳ kiểu dữ liệu nào được lưu trữ lần lượt trong bộ nhớ.

Các cấu trúc hữu ích để vẽ các trường trên màn hình và để thao tác dữ liệu có định dạng nhất quán được xác định bởi một số trường rời rạc.

Một cấu trúc có thể chỉ có một bản ghi duy nhất tại thời điểm chạy, nhưng một bảng có thể có nhiều bản ghi.

Tạo cấu trúc

Step 1 - Đến giao dịch SE11.

Step 2- Nhấp vào tùy chọn 'Loại dữ liệu' trên màn hình. Nhập tên 'ZSTR_CUSTOMER1' và nhấp vào nút Tạo.

Step 3- Chọn tùy chọn 'Cấu trúc' trong màn hình tiếp theo và nhấn Enter. Bạn có thể xem trình hướng dẫn 'Duy trì / Thay đổi Cấu trúc'.

Step 4 - Nhập Mô tả ngắn gọn như được hiển thị trong ảnh chụp nhanh sau.

Step 5 - Nhập Thành phần (Tên trường) và Loại Thành phần (Phần tử dữ liệu).

Note: Ở đây tên thành phần bắt đầu bằng Z theo khuyến nghị của SAP. Hãy sử dụng các phần tử dữ liệu mà chúng ta đã tạo trong bảng cơ sở dữ liệu.

Step 6 - Bạn cần Lưu, Kiểm tra và Kích hoạt sau khi cung cấp tất cả các thành phần và loại thành phần.

Màn hình sau xuất hiện:

Step 7- Khi 'ZSTR_CUSTOMER1' này được đánh dấu, hãy nhấp vào nút đánh dấu màu xanh lục. Cửa sổ này biến mất và thanh trạng thái sẽ hiển thị thông báo 'Đang hoạt động'.

Cấu trúc hiện đã được kích hoạt như được hiển thị trong ảnh chụp nhanh sau:

Chế độ xem chỉ hoạt động giống như một bảng cơ sở dữ liệu. Nhưng nó sẽ không chiếm không gian lưu trữ. Một khung nhìn hoạt động tương tự như một bảng ảo - một bảng không tồn tại bất kỳ sự tồn tại vật chất nào. Dạng xem được tạo bằng cách kết hợp dữ liệu của một hoặc nhiều bảng chứa thông tin về một đối tượng ứng dụng. Sử dụng dạng xem, bạn có thể đại diện cho một tập hợp con của dữ liệu có trong một bảng hoặc bạn có thể nối nhiều bảng thành một bảng ảo.

Dữ liệu liên quan đến một đối tượng ứng dụng được phân phối giữa nhiều bảng bằng cách sử dụng các dạng xem cơ sở dữ liệu. Chúng sử dụng điều kiện nối bên trong để nối dữ liệu của các bảng khác nhau. Chế độ xem bảo trì được sử dụng để hiển thị và sửa đổi dữ liệu được lưu trữ trong một đối tượng ứng dụng. Mọi chế độ xem bảo trì đều có trạng thái bảo trì được liên kết với nó.

Chúng tôi sử dụng chế độ xem hình chiếu để che các trường không mong muốn và chỉ hiển thị các trường có liên quan trong bảng. Các chế độ xem chiếu phải được xác định trên một bảng trong suốt. Chế độ xem hình chiếu chứa chính xác một bảng. Chúng tôi không thể xác định điều kiện lựa chọn cho các chế độ xem hình chiếu.

Tạo chế độ xem

Step 1- Chọn nút radio View trên màn hình ban đầu của ABAP Dictionary. Nhập tên của dạng xem sẽ được tạo và sau đó nhấp vào nút Tạo. Chúng tôi đã nhập tên của chế độ xem là ZVIEW_TEST.

Step 2- Chọn nút radio xem hình chiếu trong khi chọn kiểu xem và nhấp vào nút Copy. Màn hình 'Từ điển: Thay đổi Chế độ xem' xuất hiện.

Step 3 - Nhập mô tả ngắn vào trường Mô tả ngắn và tên của bảng sẽ được sử dụng trong trường Bảng cơ sở như thể hiện trong ảnh chụp nhanh sau.

Step 4 - Nhấp vào nút 'Các trường bảng' để đưa các trường của bảng ZCUSTOMERS1 vào chế độ xem hình chiếu.

Step 5- Màn hình Lựa chọn Trường từ Bảng ZCUSTOMERS1 xuất hiện. Chọn các trường bạn muốn đưa vào chế độ xem hình chiếu như thể hiện trong ảnh chụp nhanh sau.

Step 6 - Sau khi nhấp vào nút Copy, tất cả các trường đã chọn cho chế độ xem hình chiếu được hiển thị trên màn hình 'Dictionary: Change View'.

Step 7- Chọn tab Trạng thái bảo trì để xác định phương thức truy cập. Chọn nút radio chỉ đọc và tùy chọn 'Hiển thị / Bảo trì Được phép với Hạn chế' từ menu thả xuống của 'Trình duyệt Dữ liệu / Bảo trì Chế độ xem Bảng'.

Step 8- Lưu và kích hoạt nó. Trong màn hình 'Từ điển: Thay đổi Chế độ xem', chọn Tiện ích (M)> Nội dung để hiển thị màn hình lựa chọn cho ZVIEW_TEST.

Step 9- Nhấp vào biểu tượng Execute. Đầu ra của chế độ xem hình chiếu xuất hiện như trong ảnh chụp màn hình sau.

Bảng ZCUSTOMERS1 bao gồm 5 trường. Ở đây các trường hiển thị là 3 (Khách hàng, Số khách hàng và Tên) với 4 mục nhập. Số khách hàng từ 100001 đến 100004 với tên thích hợp.

Trợ giúp Tìm kiếm, một đối tượng lưu trữ khác của Từ điển ABAP, được sử dụng để hiển thị tất cả các giá trị có thể có cho một trường dưới dạng danh sách. Danh sách này còn được gọi làhit list. Bạn có thể chọn các giá trị sẽ được nhập vào các trường từ danh sách lần truy cập này thay vì nhập giá trị theo cách thủ công, điều này tẻ nhạt và dễ xảy ra lỗi.

Tạo Trợ giúp Tìm kiếm

Step 1- Đến giao dịch SE11. Chọn nút radio để được trợ giúp Tìm kiếm. Nhập tên của trợ giúp tìm kiếm sẽ được tạo. Hãy nhập tên ZSRCH1. Bấm vào nút Tạo.

Step 2- Hệ thống sẽ nhắc tạo kiểu trợ giúp tìm kiếm. Chọn trợ giúp tìm kiếm Sơ cấp, là trợ giúp mặc định. Màn hình tạo trợ giúp tìm kiếm cơ bản như trong ảnh chụp màn hình sau sẽ xuất hiện.

Step 3- Trong phương pháp lựa chọn, chúng ta cần chỉ ra nguồn dữ liệu của chúng ta là một bảng hay một khung nhìn. Trong trường hợp của chúng tôi, nó tình cờ là một cái bàn. Bảng là ZCUSTOMERS1. Nó được chọn từ một danh sách lựa chọn.

Step 4- Sau khi phương thức lựa chọn được nhập, trường tiếp theo là Kiểu hộp thoại. Điều này kiểm soát sự xuất hiện của hộp thoại hạn chế. Có một danh sách thả xuống với ba tùy chọn. Hãy chọn tùy chọn 'Hiển thị giá trị ngay lập tức'.

Step 5- Tiếp theo là vùng tham số. Đối với mỗi trường hoặc thông số trợ giúp Tìm kiếm, các trường cột này phải được nhập theo yêu cầu.

  • Search help parameter- Đây là một trường từ nguồn dữ liệu. Các trường từ bảng được liệt kê trong danh sách lựa chọn. Các trường tham gia trợ giúp tìm kiếm sẽ được nhập, một trường trong mỗi hàng. Hãy bao gồm hai trường CUSTOMER và NAME. Cách hai trường này tham gia được chỉ ra trong phần còn lại của các cột.

  • Import- Trường này là hộp kiểm cho biết liệu tham số Trợ giúp tìm kiếm có phải là tham số nhập hay không. Việc xuất hoặc nhập có tham chiếu đến trợ giúp tìm kiếm.

  • Export- Trường này là hộp kiểm cho biết liệu tham số Trợ giúp tìm kiếm có phải là tham số xuất hay không. Việc xuất sẽ chuyển các giá trị trường từ danh sách lựa chọn sang các trường trên màn hình.

  • LPos- Giá trị của nó kiểm soát vị trí thực của tham số hoặc trường trợ giúp Tìm kiếm trong danh sách lựa chọn. Nếu bạn nhập giá trị 1, trường sẽ xuất hiện ở vị trí đầu tiên trong danh sách lựa chọn, v.v.

  • SPos- Nó kiểm soát vị trí thực của tham số Trợ giúp Tìm kiếm hoặc trường trong hộp thoại hạn chế. Nếu bạn nhập giá trị 1, trường sẽ xuất hiện ở vị trí đầu tiên trong hộp thoại hạn chế, v.v.

  • Data element- Theo mặc định, mọi trường hoặc tham số Trợ giúp Tìm kiếm được gán một phần tử dữ liệu đã được gán cho nó trong nguồn dữ liệu (Bảng hoặc Chế độ xem). Tên phần tử dữ liệu này xuất hiện trong chế độ hiển thị.

Step 6- Thực hiện kiểm tra tính nhất quán và kích hoạt trợ giúp tìm kiếm. Nhấn F8 để thực hiện. Màn hình 'Kiểm tra Trợ giúp Tìm kiếm ZSRCH1' xuất hiện như trong ảnh chụp màn hình sau.

Step 7- Hãy nhập số 100004 vào trường màn hình 'Sẵn sàng cho inp' của KHÁCH HÀNG. Bấm phím Enter.

Số khách hàng, 100004 và tên 'STEPHEN' được hiển thị.

Khóa đối tượng là một tính năng được ABAP Dictionary cung cấp, được sử dụng để đồng bộ hóa quyền truy cập vào cùng một dữ liệu của nhiều chương trình. Bản ghi dữ liệu được truy cập với sự trợ giúp của các chương trình cụ thể. Các đối tượng khóa được sử dụng trong SAP để tránh sự mâu thuẫn khi dữ liệu được đưa vào hoặc thay đổi trong cơ sở dữ liệu. Các bảng có bản ghi dữ liệu được khóa phải được xác định trong Đối tượng khóa, cùng với các trường khóa của chúng.

Cơ chế khóa

Sau đây là hai chức năng chính được thực hiện với cơ chế khóa:

  • Một chương trình có thể giao tiếp với các chương trình khác về các bản ghi dữ liệu mà nó chỉ đang đọc hoặc thay đổi.

  • Một chương trình có thể ngăn chính nó đọc dữ liệu vừa được thay đổi bởi một chương trình khác.

A lock requestđược tạo lần đầu tiên bởi chương trình. Sau đó, yêu cầu này đi đến máy chủ Enqueue và khóa được tạo trong bảng khóa. Máy chủ Enqueue đặt khóa và cuối cùng chương trình đã sẵn sàng để truy cập dữ liệu.

Tạo các đối tượng khóa

Step 1- Đến giao dịch SE11. Màn hình sau sẽ mở ra.

Step 2- Nhấp vào nút radio 'Khóa đối tượng'. Nhập tên của đối tượng khóa bắt đầu bằng E và nhấp vào nút Tạo. Ở đây chúng tôi sử dụng EZLOCK12.

Step 3 - Nhập trường mô tả ngắn và nhấp vào tab Bảng.

Step 4 - Nhập tên bảng vào trường Name và chọn chế độ khóa là Write Lock.

Step 5 - Bấm vào tab Khóa thông số, màn hình sau sẽ hiện ra.

Step 6- Lưu và kích hoạt. Tự động 2 mô-đun chức năng sẽ tạo ra. Để kiểm tra mô-đun chức năng, chúng ta có thể sử dụng Đi tới → Khóa mô-đun.

Step 7 - Nhấp vào Khóa mô-đun và màn hình sau sẽ mở ra.

Đối tượng khóa được tạo thành công.

Các trường khóa của bảng có trong Đối tượng Khóa được gọi là đối số khóa và chúng được sử dụng làm tham số đầu vào trong mô-đun chức năng. Các đối số này được sử dụng để đặt và loại bỏ các khóa được tạo bởi định nghĩa Đối tượng Khóa.

Đó là một thực tiễn tốt để giữ cho các chương trình của bạn khép kín và dễ đọc nhất có thể. Chỉ cần cố gắng chia các nhiệm vụ lớn và phức tạp thành các nhiệm vụ nhỏ hơn và đơn giản hơn bằng cách đặt từng nhiệm vụ vào mô-đun riêng lẻ của nó, trên đó nhà phát triển có thể tập trung vào mà không bị sao lãng.

Trong môi trường SAP ABAP, mô-đun hóa liên quan đến việc tổ chức các chương trình thành các đơn vị mô-đun, còn được gọi là logical blocks. Nó làm giảm sự dư thừa và tăng khả năng đọc chương trình ngay cả khi bạn đang tạo nó và sau đó trong chu kỳ bảo trì. Mô-đun hóa cũng cho phép tái sử dụng lại cùng một mã. ABAP đã làm cho các nhà phát triển cần thiết phải mô-đun hóa, tức là tổ chức các chương trình tương đối nhiều hơn so với các ngôn ngữ dựa trên OOPS có nhiều tính năng mô-đun tích hợp hơn. Sau khi một phần mã nhỏ, được mô-đun hóa hoàn thành, được gỡ lỗi, v.v., sau đó nó không phải được trả lại và các nhà phát triển sau đó có thể tiếp tục và tập trung vào các vấn đề khác.

Các chương trình ABAP được tạo thành từ các khối xử lý được gọi là khối xử lý modularizing. Họ là -

  • Các khối xử lý được gọi từ bên ngoài chương trình và từ môi trường thời gian chạy ABAP (tức là khối sự kiện và mô-đun hộp thoại).

  • Xử lý khối được gọi từ chương trình ABAP.

Ngoài mô-đun hóa với các khối xử lý, các mô-đun mã nguồn được sử dụng để mô-đun hóa mã nguồn của bạn thông qua macro và bao gồm các chương trình.

Mô-đun hóa ở cấp độ mã nguồn -

  • Macro cục bộ
  • Các chương trình bao gồm toàn cầu

Mô-đun hóa thông qua các khối xử lý được gọi từ các chương trình ABAP -

  • Subroutines
  • Mô-đun chức năng

Mô-đun hóa mã nguồn có nghĩa là đặt một chuỗi các câu lệnh ABAP trong một mô-đun. Mã nguồn được mô-đun hóa có thể được gọi trong một chương trình theo yêu cầu của người dùng. Các mô-đun mã nguồn nâng cao tính dễ đọc và dễ hiểu của các chương trình ABAP. Việc tạo các mô-đun mã nguồn riêng lẻ cũng ngăn không cho người ta phải viết đi viết lại các câu lệnh giống nhau, do đó làm cho mã dễ hiểu hơn đối với bất kỳ ai xem qua nó lần đầu tiên.

Chương trình con là một phần mã có thể sử dụng lại. Nó là một đơn vị mô-đun hóa trong chương trình, nơi một chức năng được đóng gói dưới dạng mã nguồn. Bạn trang ra một phần của chương trình thành chương trình con để có cái nhìn tổng quan hơn về chương trình chính và sử dụng chuỗi câu lệnh tương ứng nhiều lần như được mô tả trong sơ đồ sau.

Chúng tôi có chương trình X với 3 source code blocks. Mỗi khối có các câu lệnh ABAP giống nhau. Về cơ bản, chúng là các khối mã giống nhau. Để làm cho mã này dễ bảo trì hơn, chúng ta có thể đóng gói mã vào một chương trình con. Chúng ta có thể gọi chương trình con này trong các chương trình của mình bao nhiêu lần tùy thích. Một chương trình con có thể được định nghĩa bằng các câu lệnh Form và EndForm.

Sau đây là cú pháp chung của định nghĩa chương trình con.

FORM <subroutine_name>.
  
<statements> 
  
ENDFORM.

Chúng ta có thể gọi một chương trình con bằng cách sử dụng câu lệnh PERFORM. Điều khiển nhảy đến câu lệnh thực thi đầu tiên trong chương trình con <tên_mục_tục>. Khi gặp phải ENDFORM, điều khiển sẽ nhảy trở lại câu lệnh theo sau câu lệnh PERFORM.

Thí dụ

Step 1- Đến giao dịch SE80. Mở chương trình hiện có và sau đó nhấp chuột phải vào chương trình. Trong trường hợp này, nó là 'ZSUBTEST'.

Step 2- Chọn Tạo rồi chọn Chương trình con. Viết tên chương trình con vào trường và sau đó nhấp vào nút tiếp tục. Tên chương trình con là 'Sub_Display' như trong ảnh chụp màn hình sau.

Step 3- Viết mã trong khối câu lệnh FORM và ENDFORM. Chương trình con đã được tạo thành công.

Chúng ta cần đưa vào câu lệnh PERFORM để gọi chương trình con. Hãy xem mã -

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- Lưu, kích hoạt và thực thi chương trình. Đoạn mã trên tạo ra kết quả sau:

Subroutine Test:
   
This is Subroutine
  
Subroutine created successfully

Do đó, việc sử dụng các chương trình con làm cho chương trình của bạn hướng đến chức năng nhiều hơn. Nó chia nhiệm vụ của chương trình thành các chức năng con, để mỗi chương trình con đảm nhiệm một chức năng con. Chương trình của bạn trở nên dễ bảo trì hơn vì các thay đổi đối với các chức năng thường chỉ phải được thực hiện trong chương trình con.

Nếu chúng ta muốn sử dụng lại cùng một nhóm câu lệnh nhiều lần trong một chương trình, chúng ta cần đưa chúng vào một macro. Ví dụ, một macro có thể hữu ích cho các phép tính dài hoặc để viết các câu lệnh WRITE phức tạp. Chúng ta chỉ có thể sử dụng macro trong một chương trình mà nó được định nghĩa. Định nghĩa macro phải xảy ra trước khi macro được sử dụng trong chương trình.

Macro được thiết kế dựa trên trình giữ chỗ. Trình giữ chỗ hoạt động giống như con trỏ trong ngôn ngữ C. Bạn có thể xác định macro trong câu lệnh DEFINE ... END-OF-DEFINITION.

Sau đây là cú pháp cơ bản của định nghĩa macro:

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

Cần phải xác định một macro trước khi gọi nó. <param1>…. thay thế trình giữ chỗ & 1 ... trong các câu lệnh ABAP có trong định nghĩa macro.

Số lượng trình giữ chỗ tối đa trong định nghĩa macro là chín. Nghĩa là, khi một chương trình được thực thi, hệ thống SAP sẽ thay thế macro bằng các câu lệnh thích hợp và các trình giữ chỗ & 1, & 2,…. & 9 được thay thế bằng các tham số param1, param2, .... param9. Chúng tôi có thể gọi một macro trong một macro khác, nhưng không gọi cùng một macro.

Thí dụ

Chuyển đến giao dịch SE38. Tạo một chương trình mới ZMACRO_TEST cùng với mô tả trong trường văn bản ngắn và cũng với các thuộc tính thích hợp như Loại và Trạng thái như được hiển thị trong ảnh chụp màn hình sau:

Sau đây là mã -

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.

Chúng tôi có 3 hộp kiểm. Trong khi thực hiện chương trình, hãy chọn hộp kiểm S2.

Đoạn mã trên tạo ra kết quả sau:

A Macro Program 
 
This is Macro 2

Nếu tất cả các hộp kiểm được chọn, mã sẽ tạo ra kết quả sau:

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

Các mô-đun chức năng tạo nên một phần chính của hệ thống SAP, bởi vì trong nhiều năm SAP đã mô-đun hóa mã bằng cách sử dụng các mô-đun chức năng, cho phép sử dụng lại mã, cho chính họ, các nhà phát triển và cả khách hàng của họ.

Mô-đun chức năng là các chương trình con chứa một tập hợp các câu lệnh có thể sử dụng lại với các tham số nhập và xuất. Không giống như chương trình Bao gồm, các mô-đun chức năng có thể được thực thi độc lập. Hệ thống SAP chứa một số mô-đun chức năng được xác định trước có thể được gọi từ bất kỳ chương trình ABAP nào. Nhóm chức năng hoạt động như một loại thùng chứa cho một số mô-đun chức năng sẽ thuộc về nhau một cách hợp lý. Ví dụ, các mô-đun chức năng của một hệ thống tính lương nhân sự sẽ được tập hợp lại thành một nhóm chức năng.

Để xem cách tạo mô-đun chức năng, trình tạo chức năng phải được khám phá. Bạn có thể tìm thấy trình tạo chức năng với mã giao dịch SE37. Chỉ cần nhập một phần của tên mô-đun chức năng với ký tự thẻ đại diện để chứng minh cách mô-đun chức năng có thể được tìm kiếm. Nhập * số tiền * rồi nhấn phím F4.

Kết quả tìm kiếm sẽ được hiển thị trong một cửa sổ mới. Các mô-đun chức năng được hiển thị trong các dòng có nền màu xanh lam và các nhóm chức năng của chúng ở các dòng màu hồng. Bạn có thể xem xét thêm ISOC nhóm chức năng bằng cách sử dụng màn hình Bộ điều hướng đối tượng (Giao dịch SE80). Bạn có thể xem danh sách các mô-đun chức năng và các đối tượng khác được giữ trong nhóm chức năng. Hãy xem xét mô-đun chức năng SPELL_AMOUNT. Mô-đun chức năng này chuyển đổi các số liệu thành từ.

Tạo một chương trình mới

Step 1 - Chuyển đến giao dịch SE38 và tạo một chương trình mới có tên Z_SPELLAMOUNT.

Step 2- Nhập một số mã để một tham số có thể được thiết lập nơi một giá trị có thể được nhập và truyền cho mô-đun chức năng. Phần tử văn bản text-001 ở đây có nội dung 'Nhập giá trị'.

Step 3- Để viết mã cho việc này, hãy sử dụng CTRL + F6. Sau đó, một cửa sổ xuất hiện trong đó 'CALL FUNCTION' là tùy chọn đầu tiên trong danh sách. Nhập 'spell_amount' vào hộp văn bản và nhấp vào nút tiếp tục.

Step 4- Một số mã được tạo tự động. Nhưng chúng ta cần cải thiện câu lệnh IF để bao gồm một đoạn mã để VIẾT thông báo ra màn hình cho biết "Mô-đun hàm trả về giá trị là: sy-subrc" và thêm câu lệnh ELSE để viết ra kết quả chính xác khi hàm mô-đun thành công. Ở đây, một biến mới phải được thiết lập để giữ giá trị trả về từ mô-đun hàm. Hãy gọi đây là 'kết quả'.

Sau đây là mã -

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- Biến mà mô-đun hàm trả về được gọi là IN_WORDS. Thiết lập biến tương ứng trong chương trình được gọi là 'kết quả'. Xác định IN_WORDS bằng cách sử dụng câu lệnh LIKE để tham chiếu đến cấu trúc được gọi là SPELL.

Step 6- Lưu, kích hoạt và thực thi chương trình. Nhập một giá trị như được hiển thị trong ảnh chụp màn hình sau và nhấn F8.

Đoạn mã trên tạo ra kết quả sau:

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

Chương trình bao gồm là các đối tượng kho lưu trữ toàn cầu được sử dụng để mô-đun hóa mã nguồn. Chúng cho phép bạn sử dụng cùng một mã nguồn trong các chương trình khác nhau. Bao gồm các chương trình cũng cho phép bạn quản lý các chương trình phức tạp một cách có trật tự. Để sử dụng một chương trình bao gồm trong một chương trình khác, chúng tôi sử dụng cú pháp sau:

INCLUDE <program_name>.

Câu lệnh INCLUDE có tác dụng tương tự như việc sao chép mã nguồn của chương trình include <program_name> vào một chương trình khác. Vì chương trình bao gồm không thể chạy độc lập, nó phải được tích hợp vào các chương trình khác. Bạn cũng có thể lồng các chương trình bao gồm.

Sau đây là một số hạn chế khi viết mã cho chương trình Bao gồm:

  • Bao gồm các chương trình không thể tự gọi.
  • Các chương trình bao gồm phải chứa các câu lệnh hoàn chỉnh.

Sau đây là các bước để tạo và sử dụng chương trình Bao gồm:

Step 1- Tạo chương trình (Z_TOBEINCLUDED) để đưa vào ABAP Editor. Mã được đưa vào ABAP Editor là:

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

Step 2 - Đặt Loại chương trình thành BAO GỒM chương trình, như thể hiện trong ảnh chụp màn hình sau.

Step 3 - Nhấp vào nút 'Lưu' và lưu chương trình trong một gói có tên ZINCL_PCKG.

Step 4- Tạo một chương trình khác mà chương trình Z_TOBEINCLUDED phải được sử dụng. Ở đây chúng tôi đã tạo một chương trình khác có tên Z_INCLUDINGTEST và gán kiểu cho chương trình là chương trình Có thể thực thi.

Step 5 - Mã hóa cho chương trình Z_INCLUDINGTEST bao gồm chương trình Z_TOBEINCLUDED với sự trợ giúp của câu lệnh INCLUDE như được hiển thị trong đoạn mã sau.

REPORT Z_INCLUDINGTEST.  
INCLUDE Z_TOBEINCLUDED.

Step 6 - Lưu, kích hoạt và thực thi chương trình.

Đoạn mã trên tạo ra kết quả sau:

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

Open SQL chỉ ra tập con các câu lệnh ABAP cho phép truy cập trực tiếp vào dữ liệu trong cơ sở dữ liệu trung tâm của AS ABAP hiện tại. Câu lệnh SQL mở ánh xạ chức năng Ngôn ngữ thao tác dữ liệu của SQL trong ABAP được hỗ trợ bởi tất cả các hệ thống cơ sở dữ liệu.

Các câu lệnh của Open SQL được chuyển đổi thành SQL cụ thể của cơ sở dữ liệu trong giao diện Open SQL của giao diện cơ sở dữ liệu. Sau đó chúng được chuyển vào hệ thống cơ sở dữ liệu và thực thi. Câu lệnh SQL mở có thể được sử dụng để truy cập các bảng cơ sở dữ liệu được khai báo trong Từ điển ABAP. Cơ sở dữ liệu trung tâm của AS ABAP được truy cập theo mặc định và cũng có thể truy cập vào các cơ sở dữ liệu khác thông qua các kết nối cơ sở dữ liệu thứ cấp.

Bất cứ khi nào bất kỳ câu lệnh nào trong số này được sử dụng trong chương trình ABAP, điều quan trọng là phải kiểm tra xem hành động được thực thi có thành công hay không. Nếu một người cố gắng chèn một bản ghi vào một bảng cơ sở dữ liệu và nó không được chèn đúng cách, điều rất cần thiết là phải biết để có thể thực hiện hành động thích hợp trong chương trình. Điều này có thể được thực hiện bằng cách sử dụng trường hệ thống đã được sử dụng, đó là SY-SUBRC. Khi một câu lệnh được thực thi thành công, trường SY-SUBRC sẽ chứa một giá trị 0, vì vậy điều này có thể được kiểm tra và người ta có thể tiếp tục chương trình nếu nó xuất hiện.

Câu lệnh DATA được sử dụng để khai báo một vùng làm việc. Hãy đặt tên này là 'wa_customers1'. Thay vì khai báo một kiểu dữ liệu cho điều này, một số trường tạo nên bảng có thể được khai báo. Cách dễ nhất để làm điều này là sử dụng câu lệnh LIKE.

Tuyên bố INSERT

Vùng làm việc wa_customers1 được khai báo ở đây giống như bảng ZCUSTOMERS1, có cùng cấu trúc mà không trở thành một bảng. Khu vực làm việc này chỉ có thể lưu trữ một bản ghi. Khi nó đã được khai báo, câu lệnh INSERT có thể được sử dụng để chèn vùng làm việc và bản ghi mà nó giữ vào bảng. Mã ở đây sẽ đọc là 'CHÈN ZCUSTOMERS1 TỪ wa_customers1'.

Khu vực làm việc phải được lấp đầy với một số dữ liệu. Sử dụng tên trường từ bảng ZCUSTOMERS1. Điều này có thể được thực hiện bằng cách điều hướng chuyển tiếp, nhấp đúp vào tên bảng trong mã hoặc bằng cách mở một phiên mới và sử dụng giao dịch SE11. Sau đó, các trường của bảng có thể được sao chép và dán vào trình chỉnh sửa ABAP.

Sau đây là đoạn mã -

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.

Sau đó, câu lệnh CHECK có thể được sử dụng như sau. Có nghĩa là nếu bản ghi được chèn đúng cách, hệ thống sẽ thông báo điều này. Nếu không, thì mã SY-SUBRC không bằng 0 sẽ được hiển thị. Sau đây là đoạn mã -

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

Kiểm tra chương trình, lưu, kích hoạt mã và sau đó kiểm tra nó. Cửa sổ đầu ra sẽ hiển thị là 'Đã Chèn Thành công Bản ghi'.

Tuyên bố rõ ràng

Câu lệnh CLEAR cho phép một trường hoặc biến được xóa để chèn dữ liệu mới vào vị trí của nó, cho phép nó được sử dụng lại. Câu lệnh CLEAR thường được sử dụng trong các chương trình và nó cho phép các trường hiện có được sử dụng nhiều lần.

Trong đoạn mã trước, cấu trúc vùng làm việc đã được lấp đầy dữ liệu để tạo bản ghi mới để chèn vào bảng ZCUSTOMERS1 và sau đó kiểm tra xác thực được thực hiện. Nếu chúng ta muốn chèn một bản ghi mới, câu lệnh CLEAR phải được sử dụng để sau đó nó có thể được lấp đầy lại bằng dữ liệu mới.

CẬP NHẬT Tuyên bố

Nếu bạn muốn cập nhật một hoặc nhiều bản ghi hiện có trong bảng cùng một lúc thì hãy sử dụng câu lệnh UPDATE. Tương tự như câu lệnh INSERT, một vùng làm việc được khai báo, chứa đầy dữ liệu mới sau đó được đưa vào bản ghi khi chương trình được thực thi. Bản ghi được tạo trước đó bằng câu lệnh INSERT sẽ được cập nhật tại đây. Chỉ cần chỉnh sửa văn bản được lưu trữ trong các trường NAME và TITLE. Sau đó, trên một dòng mới, cấu trúc tương tự như cho câu lệnh INSERT được sử dụng và lần này bằng cách sử dụng câu lệnh UPDATE như được hiển thị trong đoạn mã sau:

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.

Khi câu lệnh UPDATE được thực thi, bạn có thể xem Trình duyệt dữ liệu trong Từ điển ABAP để biết rằng bản ghi đã được cập nhật thành công.

Tuyên bố sửa đổi

Câu lệnh MODIFY có thể được coi là sự kết hợp của câu lệnh INSERT và UPDATE. Nó có thể được sử dụng để chèn một bản ghi mới hoặc sửa đổi một bản ghi hiện có. Nó tuân theo một cú pháp tương tự như hai câu lệnh trước trong việc sửa đổi bản ghi từ dữ liệu được nhập vào một vùng làm việc.

Khi câu lệnh này được thực thi, các trường chính liên quan sẽ được kiểm tra so với các trường trong bảng. Nếu một bản ghi có các giá trị trường khóa này đã tồn tại, nó sẽ được cập nhật. Nếu không, thì một bản ghi mới sẽ được tạo.

Sau đây là đoạn mã để tạo một bản ghi mới -

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.

Trong ví dụ này, câu lệnh CLEAR được sử dụng để một mục nhập mới có thể được đưa vào vùng làm việc và sau đó khách hàng (số) 100007 được thêm vào. Vì đây là giá trị trường khóa mới, duy nhất, một bản ghi mới sẽ được chèn và một kiểm tra xác thực khác được thực hiện.

Khi điều này được thực thi và dữ liệu được xem trong Trình duyệt dữ liệu, một bản ghi mới sẽ được tạo cho số khách hàng 100007 (RALPH).

Đoạn mã trên tạo ra kết quả sau (nội dung bảng):

Thuật ngữ 'SQL gốc' đề cập đến tất cả các câu lệnh có thể được chuyển tĩnh sang giao diện SQL gốc của giao diện cơ sở dữ liệu. Câu lệnh SQL gốc không thuộc phạm vi ngôn ngữ của ABAP và không tuân theo cú pháp ABAP. ABAP chỉ chứa các câu lệnh để cô lập các phần chương trình trong đó các câu lệnh SQL gốc có thể được liệt kê.

Trong SQL gốc, chủ yếu có thể sử dụng các câu lệnh SQL dành riêng cho cơ sở dữ liệu. Chúng được chuyển không thay đổi từ giao diện SQL gốc sang hệ thống cơ sở dữ liệu và được thực thi. Phạm vi ngôn ngữ SQL đầy đủ của cơ sở dữ liệu liên quan có thể được sử dụng và các bảng cơ sở dữ liệu đã định địa chỉ không cần phải khai báo trong Từ điển ABAP. Ngoài ra còn có một tập hợp nhỏ các câu lệnh SQL gốc cụ thể của SAP được xử lý theo một cách cụ thể bởi giao diện SQL gốc.

Để sử dụng câu lệnh SQL gốc, bạn phải đặt trước câu lệnh EXEC SQL và kết thúc bằng câu lệnh ENDEXEC.

Sau đây là cú pháp:

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

Các câu lệnh này xác định một vùng trong chương trình ABAP nơi một hoặc nhiều câu lệnh SQL gốc có thể được liệt kê. Các câu lệnh đã nhập được chuyển đến giao diện SQL gốc và sau đó được xử lý như sau:

  • Tất cả các câu lệnh SQL hợp lệ cho giao diện chương trình của hệ thống cơ sở dữ liệu địa chỉ có thể được liệt kê giữa EXEC và ENDEXEC, cụ thể là các câu lệnh DDL (ngôn ngữ định nghĩa dữ liệu).

  • Các câu lệnh SQL này được chuyển từ giao diện SQL gốc đến hệ thống cơ sở dữ liệu hầu như không thay đổi. Các quy tắc cú pháp được quy định bởi hệ thống cơ sở dữ liệu, đặc biệt là các quy tắc phân biệt chữ hoa chữ thường cho các đối tượng cơ sở dữ liệu.

  • Nếu cú ​​pháp cho phép dấu phân cách giữa các câu lệnh riêng lẻ, bạn có thể bao gồm nhiều câu lệnh SQL gốc giữa EXEC và ENDEXEC.

  • Các phần tử ngôn ngữ SQL bản địa cụ thể của SAP có thể được chỉ định giữa EXEC và ENDEXEC. Các câu lệnh này không được chuyển trực tiếp từ giao diện SQL gốc đến cơ sở dữ liệu, nhưng chúng được chuyển đổi một cách thích hợp.

Thí dụ

SPFLI là một Bảng SAP tiêu chuẩn được sử dụng để lưu trữ thông tin về lịch trình Chuyến bay. Điều này có sẵn trong hệ thống R / 3 SAP tùy thuộc vào phiên bản và mức độ phát hành. Bạn có thể xem thông tin này khi nhập Tên bảng SPFLI vào giao dịch SAP có liên quan như SE11 hoặc SE80. Bạn cũng có thể xem dữ liệu có trong bảng cơ sở dữ liệu này bằng cách sử dụng hai giao dịch này.

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.

Đoạn mã trên tạo ra kết quả sau:

0400  FRANKFURT  NEW YORK 
2402  FRANKFURT  BERLIN 
0402  FRANKFURT  NEW YORK

Bảng nội bộ thực sự là một bảng tạm thời, chứa các bản ghi của một chương trình ABAP mà nó đang được thực thi. Một bảng nội bộ chỉ tồn tại trong thời gian chạy chương trình SAP. Chúng được sử dụng để xử lý khối lượng lớn dữ liệu bằng cách sử dụng ngôn ngữ ABAP. Chúng ta cần khai báo một bảng nội bộ trong chương trình ABAP khi bạn cần lấy dữ liệu từ các bảng cơ sở dữ liệu.

Dữ liệu trong bảng nội bộ được lưu trữ trong các hàng và cột. Mỗi hàng được gọi làline và mỗi cột được gọi là field. Trong bảng nội bộ, tất cả các bản ghi có cùng cấu trúc và khóa. Các bản ghi riêng lẻ của một bảng nội bộ được truy cập bằng một chỉ mục hoặc một khóa. Vì bảng nội bộ tồn tại cho đến khi chương trình liên kết đang được thực thi, các bản ghi của bảng nội bộ sẽ bị loại bỏ khi việc thực thi chương trình bị chấm dứt. Vì vậy, các bảng bên trong có thể được sử dụng làm vùng lưu trữ tạm thời hoặc bộ đệm tạm thời, nơi dữ liệu có thể được sửa đổi theo yêu cầu. Các bảng này chỉ chiếm bộ nhớ tại thời điểm chạy chứ không phải tại thời điểm khai báo.

Bảng nội bộ chỉ tồn tại khi một chương trình đang chạy, vì vậy khi mã được viết, bảng nội bộ phải được cấu trúc theo cách mà chương trình có thể sử dụng nó. Bạn sẽ thấy rằng các bảng bên trong hoạt động theo cách giống như cấu trúc. Sự khác biệt chính là cấu trúc chỉ có một dòng, trong khi một bảng bên trong có thể có nhiều dòng theo yêu cầu.

Một bảng nội bộ có thể được tạo thành từ một số trường, tương ứng với các cột của bảng, giống như trong từ điển ABAP, một bảng được tạo bằng một số trường. Các trường khóa cũng có thể được sử dụng với các bảng nội bộ và trong khi tạo các bảng nội bộ này, chúng mang lại sự linh hoạt hơn một chút. Với các bảng nội bộ, người ta có thể chỉ định một khóa không phải duy nhất, cho phép lưu trữ bất kỳ số lượng bản ghi không phải duy nhất nào và cho phép lưu trữ các bản ghi trùng lặp nếu được yêu cầu.

Kích thước của một bảng nội bộ hoặc số dòng trong bảng đó không cố định. Kích thước của một bảng bên trong thay đổi theo yêu cầu của chương trình liên kết với bảng bên trong. Nhưng nên giữ các bảng nội bộ càng nhỏ càng tốt. Điều này là để tránh hệ thống chạy chậm vì nó phải vật lộn để xử lý một lượng lớn dữ liệu.

Bảng bên trong được sử dụng cho nhiều mục đích -

  • Chúng có thể được sử dụng để lưu giữ các kết quả tính toán có thể được sử dụng sau này trong chương trình.

  • Một bảng bên trong cũng có thể chứa các bản ghi và dữ liệu để có thể truy cập dữ liệu này một cách nhanh chóng thay vì phải truy cập dữ liệu này từ các bảng cơ sở dữ liệu.

  • Chúng rất linh hoạt. Chúng có thể được xác định bằng cách sử dụng bất kỳ số lượng cấu trúc xác định nào khác.

Thí dụ

Giả sử rằng một người dùng muốn tạo danh sách các số liên lạc của nhiều khách hàng khác nhau từ một hoặc một số bảng lớn. Đầu tiên người dùng tạo một bảng nội bộ, chọn dữ liệu có liên quan từ các bảng của khách hàng và sau đó đặt dữ liệu vào bảng nội bộ. Những người dùng khác có thể truy cập và sử dụng bảng nội bộ này trực tiếp để lấy thông tin mong muốn, thay vì viết các truy vấn cơ sở dữ liệu để thực hiện từng thao tác trong thời gian chạy chương trình.

Câu lệnh DATA dùng để khai báo một bảng bên trong. Chương trình phải được cho biết nơi bắt đầu và kết thúc của bảng. Vì vậy hãy sử dụng câu lệnh BEGIN OF sau đó khai báo tên bảng. Sau đó, bổ sung OCCURS được sử dụng, theo sau là một số, ở đây là 0. OCCURS cho SAP biết rằng một bảng nội bộ đang được tạo và số 0 cho biết ban đầu nó sẽ không chứa bất kỳ bản ghi nào. Sau đó, nó sẽ mở rộng khi chứa đầy dữ liệu.

Sau đây là cú pháp:

DATA: BEGIN OF <internal_tab> Occurs 0,

Hãy tạo các trường trên một dòng mới. Ví dụ: tạo 'tên' được khai báo là LIKE ZCUSTOMERS1-name. Tạo một trường khác có tên 'dob', LIKE ZCUSTOMERS1-dob. Ban đầu, sẽ hữu ích khi đặt tên trường trong bảng nội bộ giống tên với các trường khác đã được tạo ở nơi khác. Cuối cùng, khai báo phần cuối của bảng nội bộ bằng “END OF <internal_tab>.” như được hiển thị trong đoạn mã sau:

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

Ở đây 'itab01' thường được sử dụng viết tắt khi tạo các bảng tạm thời trong SAP. Mệnh đề OCCURS được sử dụng để xác định phần thân của một bảng bên trong bằng cách khai báo các trường cho bảng. Khi mệnh đề OCCURS được sử dụng, bạn có thể chỉ định một hằng số 'n' để xác định bộ nhớ mặc định bổ sung nếu cần. Kích thước bộ nhớ mặc định được sử dụng bởi mệnh đề OCCUR 0 là 8 KB. Cấu trúc của bảng nội bộ hiện đã được tạo và mã có thể được viết để điền vào nó với các bản ghi.

Một bảng nội bộ có thể được tạo có hoặc không sử dụng dòng tiêu đề. Để tạo bảng nội bộ có dòng tiêu đề, hãy sử dụng mệnh đề BEGIN OF trước mệnh đề OCCURS hoặc mệnh đề VỚI DÒNG ĐẦU sau mệnh đề OCCURS trong định nghĩa của bảng nội bộ. Để tạo một bảng nội bộ không có dòng tiêu đề, hãy sử dụng mệnh đề OCCURS mà không có mệnh đề BEGIN OF.

Bạn cũng có thể tạo bảng nội bộ dưới dạng kiểu dữ liệu cục bộ (kiểu dữ liệu chỉ được sử dụng trong ngữ cảnh của chương trình hiện tại) bằng cách sử dụng câu lệnh TYPES. Câu lệnh này sử dụng mệnh đề TYPE hoặc LIKE để tham chiếu đến một bảng hiện có.

Cú pháp để tạo một bảng nội bộ dưới dạng kiểu dữ liệu cục bộ là:

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

Ở đây <internal_tab_type> chỉ định kiểu bảng cho bảng nội bộ <internal_tab> và <line_type_itab> chỉ định kiểu cho một dòng của bảng nội bộ. Trong câu lệnh TYPES, bạn có thể sử dụng mệnh đề TYPE để chỉ định kiểu dòng của bảng nội bộ làm kiểu dữ liệu và mệnh đề LIKE để chỉ định kiểu dòng làm đối tượng dữ liệu. Chỉ định một khóa cho một bảng nội bộ là tùy chọn và nếu người dùng không chỉ định một khóa, hệ thống SAP sẽ xác định một loại bảng với một khóa tùy ý.

INITIAL SIZE <kích thước_number> tạo một đối tượng bảng bên trong bằng cách cấp phát một lượng bộ nhớ ban đầu cho nó. Trong cú pháp trước đó, mệnh đề INITIAL SIZE dành một không gian bộ nhớ cho các dòng bảng size_number. Bất cứ khi nào một đối tượng bảng bên trong được khai báo, kích thước của bảng không thuộc kiểu dữ liệu của bảng.

Note - Bộ nhớ được sử dụng ít hơn nhiều khi một bảng nội bộ được điền lần đầu tiên.

Thí dụ

Step 1- Mở ABAP Editor bằng cách thực hiện mã giao dịch SE38. Màn hình ban đầu của ABAP Editor xuất hiện.

Step 2 - Trong màn hình ban đầu, nhập tên cho chương trình, chọn nút radio Mã nguồn và nhấp vào nút Tạo để tạo chương trình mới.

Step 3- Trong hộp thoại 'ABAP: Thuộc tính chương trình', nhập mô tả ngắn gọn cho chương trình vào trường Tiêu đề, chọn tùy chọn 'Chương trình có thể thực thi' từ menu thả xuống Loại trong hộp nhóm Thuộc tính. Nhấp vào nút Lưu.

Step 4 - Viết đoạn mã sau trong trình soạn thảo 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 - Lưu, kích hoạt và thực hiện chương trình như bình thường.

Trong ví dụ này, mytable là một bảng nội bộ và một khóa duy nhất được xác định trên trường Cust_ID.

Đoạn mã trên tạo ra kết quả sau:

The mytable is an Internal Table.

Trong bảng nội bộ, việc điền bao gồm các tính năng như lựa chọn, chèn và nối thêm. Chương này tập trung vào các câu lệnh INSERT và APPEND.

Tuyên bố INSERT

Câu lệnh INSERT được sử dụng để chèn một dòng hoặc một nhóm dòng vào một bảng nội bộ.

Sau đây là cú pháp để thêm một dòng vào bảng nội bộ:

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

Trong cú pháp này, câu lệnh INSERT sẽ chèn một dòng mới trong bảng nội bộ internal_tab. Một dòng mới có thể được chèn bằng cách sử dụng biểu thức work_area_itab INTO trước tham số internal_tab. Khi biểu thức INTO work_area_itab được sử dụng, dòng mới được lấy từ vùng làm việc work_area_itab và được chèn vào bảng internal_tab. Tuy nhiên, khi biểu thức INTO work_area_itab không được sử dụng để chèn một dòng, dòng đó được lấy từ dòng tiêu đề của bảng internal_tab.

Khi một dòng mới được chèn vào bảng nội bộ bằng cách sử dụng mệnh đề INDEX, số chỉ mục của các dòng sau dòng được chèn sẽ tăng lên 1. Nếu một bảng nội bộ chứa <index_num> - 1 dòng, dòng mới sẽ được thêm vào cuối bảng. Khi hệ thống SAP thêm thành công một dòng vào bảng nội bộ, biến SY-SUBRC được đặt thành 0.

Thí dụ

Sau đây là một chương trình mẫu sử dụng câu lệnh insert.

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.

Đoạn mã trên tạo ra kết quả sau:

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

Trong ví dụ trên, vòng lặp DO nối 4 hàng chứa các số từ 1 đến 4 vào đó. Thành phần dòng tiêu đề itable1-F1 đã được gán giá trị -96. Câu lệnh Insert chèn dòng tiêu đề dưới dạng hàng mới vào phần nội dung trước hàng 3. Hàng 3 hiện có trở thành hàng 4 sau phần chèn. Câu lệnh LOOP AT truy xuất những hàng từ bảng nội bộ có giá trị F1 lớn hơn hoặc bằng 3. Trước mỗi hàng, câu lệnh Insert chèn một hàng mới từ dòng tiêu đề của nó. Trước khi chèn, thành phần F1 đã được thay đổi thành chứa -78.

Sau khi mỗi câu lệnh chèn được thực thi, hệ thống lập chỉ mục lại tất cả các hàng bên dưới câu lệnh được chèn. Điều này giới thiệu chi phí khi bạn chèn các hàng gần đầu một bảng lớn bên trong. Nếu bạn cần chèn một khối hàng vào một bảng lớn bên trong, hãy chuẩn bị một bảng khác có các hàng sẽ được chèn và sử dụng dòng chèn để thay thế.

Khi chèn một hàng mới bên trong itable1 bên trong vòng lặp tại itable1, nó không ảnh hưởng đến bảng nội bộ ngay lập tức. Nó thực sự có hiệu lực trong lần vượt qua vòng lặp tiếp theo. Trong khi chèn một hàng sau hàng hiện tại, bảng sẽ được lập chỉ mục lại tại ENDLOOP. Sy-tabix được tăng dần và vòng lặp tiếp theo xử lý hàng được sy-tabix trỏ đến. Ví dụ: nếu bạn đang vượt qua vòng lặp thứ hai và bạn chèn một bản ghi trước hàng 3. Khi endloop được thực thi, hàng mới sẽ trở thành hàng 3 và hàng 3 cũ trở thành hàng 4, v.v. Sy-tabix được tăng thêm 1 và lần vượt qua vòng lặp tiếp theo sẽ xử lý bản ghi mới được chèn vào.

Tuyên bố APPEND

Câu lệnh APPEND được sử dụng để thêm một hàng hoặc dòng vào một bảng nội bộ hiện có. Câu lệnh này sao chép một dòng duy nhất từ ​​một vùng làm việc và chèn nó vào sau dòng hiện có cuối cùng trong bảng nội bộ. Vùng làm việc có thể là một dòng tiêu đề hoặc bất kỳ chuỗi trường nào khác có cùng cấu trúc như một dòng của bảng nội bộ. Sau đây là cú pháp của câu lệnh APPEND được sử dụng để nối thêm một dòng trong bảng nội bộ:

APPEND <record_for_itab> TO <internal_tab>.

Trong cú pháp này, biểu thức <record_for_itab> có thể được biểu diễn bằng vùng làm việc <work_area_itab>, có thể chuyển đổi thành kiểu dòng hoặc bằng mệnh đề INITIAL LINE. Nếu người dùng sử dụng vùng làm việc <work_area_itab>, hệ thống SAP sẽ thêm một dòng mới vào bảng nội bộ của <internal_tab> và điền vào nó với nội dung của vùng làm việc. Mệnh đề INITIAL LINE thêm một dòng trống chứa giá trị ban đầu cho mỗi trường của cấu trúc bảng. Sau mỗi câu lệnh APPEND, biến SY-TABIX chứa số chỉ mục của dòng thêm vào.

Việc nối các dòng vào bảng tiêu chuẩn và đã được sắp xếp bằng khóa không phải duy nhất sẽ hoạt động bất kể các dòng có cùng khóa đã tồn tại trong bảng hay chưa. Nói cách khác, các mục nhập trùng lặp có thể xảy ra. Tuy nhiên, lỗi thời gian chạy xảy ra nếu người dùng cố gắng thêm một mục nhập trùng lặp vào bảng được sắp xếp bằng một khóa duy nhất hoặc nếu người dùng vi phạm thứ tự sắp xếp của bảng đã sắp xếp bằng cách nối các dòng vào bảng đó.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

Melissa		105467

Khi chúng tôi đọc một bản ghi từ một bảng nội bộ có dòng tiêu đề, bản ghi đó sẽ được chuyển từ chính bảng đó vào dòng tiêu đề. Sau đó, nó là dòng tiêu đề mà chương trình của chúng tôi hoạt động. Điều tương tự cũng áp dụng trong khi tạo bản ghi mới. Đây là dòng tiêu đề mà bạn làm việc với và từ đó bản ghi mới được gửi đến chính nội dung bảng.

Để sao chép các bản ghi, chúng ta có thể sử dụng câu lệnh SELECT để chọn tất cả các bản ghi từ bảng và sau đó sử dụng câu lệnh MOVE sẽ di chuyển các bản ghi từ bảng gốc vào bảng nội bộ mới vào các trường có tên tương ứng.

Sau đây là cú pháp cho câu lệnh MOVE:

MOVE <table_field> TO <internal_tab_field>.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

MARGARET  		02.11.1994

Vòng lặp chọn lấp đầy từng trường một, sử dụng câu lệnh MOVE để di chuyển dữ liệu từ trường của bảng này sang trường của bảng khác. Trong ví dụ trên, câu lệnh MOVE được sử dụng để di chuyển nội dung của bảng ZCUSTOMERS1 đến các trường tương ứng trong bảng nội bộ. Bạn có thể thực hiện hành động này chỉ với một dòng mã. Bạn có thể sử dụng câu lệnh MOVECORRESPONDING.

Sau đây là cú pháp cho câu lệnh MOVE-CORRESPONDING -

MOVE-CORRESPONDING <table_name> TO <internal_tab>.

Nó yêu cầu hệ thống di chuyển dữ liệu từ các trường của ZCUSTOMERS1 sang các trường tương ứng của chúng trong itab01.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

MARK           21.05.1981 
JAMES          14.08.1977 
AURIELE        19.06.1990 
STEPHEN        22.07.1985 
MARGARET       02.11.1994

Điều này được thực hiện bởi thực tế là cả hai đều có tên trường phù hợp. Khi sử dụng câu lệnh này, bạn cần đảm bảo rằng cả hai trường đều có kiểu dữ liệu và độ dài phù hợp. Nó đã được thực hiện ở đây với câu lệnh LIKE trước đó.

Chúng ta có thể đọc các dòng của bảng bằng cách sử dụng cú pháp sau của câu lệnh READ TABLE:

READ TABLE <internal_table> FROM <work_area_itab>.

Trong cú pháp này, biểu thức <work_area_itab> đại diện cho một vùng làm việc tương thích với kiểu dòng của bảng <internal_table>. Chúng ta có thể chỉ định một khóa tìm kiếm, nhưng không phải một khóa bảng, trong câu lệnh READ bằng cách sử dụng mệnh đề WITH KEY, như được hiển thị trong cú pháp sau:

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

Ở đây, toàn bộ dòng của bảng nội bộ được sử dụng làm search key. Nội dung của toàn bộ dòng của bảng được so sánh với nội dung của trường <internal_tab_field>. Nếu các giá trị của trường <internal_tab_field> không tương thích với kiểu dòng của bảng, các giá trị này được chuyển đổi theo kiểu dòng của bảng. Phím tìm kiếm cho phép bạn tìm các mục nhập trong các bảng nội bộ không có kiểu dòng có cấu trúc, nghĩa là, trong đó dòng là một trường đơn lẻ hoặc một kiểu bảng nội bộ.

Cú pháp sau của câu lệnh READ được sử dụng để chỉ định một vùng làm việc hoặc ký hiệu trường bằng cách sử dụng mệnh đề SO SÁNH -

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

Khi mệnh đề SO SÁNH được sử dụng, các trường bảng được chỉ định <F1>, <F2> .... <Fn> của kiểu dòng có cấu trúc được so sánh với các trường tương ứng của vùng làm việc trước khi được vận chuyển. Nếu mệnh đề ALL FIELDS được chỉ định, hệ thống SAP sẽ so sánh tất cả các thành phần. Khi hệ thống SAP tìm thấy một mục nhập trên cơ sở khóa, giá trị của biến SY-SUBRC được đặt thành 0. Ngoài ra, giá trị của biến SY-SUBRC được đặt thành 2 hoặc 4 nếu nội dung của biến được so sánh các trường không giống nhau hoặc nếu hệ thống SAP không thể tìm thấy mục nhập. Tuy nhiên, hệ thống SAP sao chép mục nhập vào khu vực làm việc mục tiêu bất cứ khi nào nó tìm thấy mục nhập, bất kể kết quả của phép so sánh.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

SY-SUBRC =    2 

4         9

Trong ví dụ trên, mytable là một bảng nội bộ của loại bảng băm, với Record1 là vùng làm việc và ColP là khóa duy nhất. Ban đầu, bảng của tôi có sáu dòng, trong đó trường ColP chứa các giá trị của biến SY-INDEX và trường ColQ chứa các giá trị (SY-INDEX + 5).

Vùng làm việc Record1 được điền 4 và 12 làm giá trị cho các trường ColP và ColQ tương ứng. Câu lệnh READ đọc dòng của bảng sau khi so sánh giá trị của trường khóa ColP với giá trị trong vùng làm việc Record1 bằng cách sử dụng mệnh đề SO SÁNH, rồi sao chép nội dung của dòng đã đọc trong vùng làm việc. Giá trị của biến SY-SUBRC được hiển thị là 2 vì khi giá trị trong trường ColP là 4, giá trị trong ColQ không phải là 12 mà là 9.

Câu lệnh DELETE được sử dụng để xóa một hoặc nhiều bản ghi khỏi bảng nội bộ. Các bản ghi của bảng nội bộ bị xóa bằng cách chỉ định khóa bảng hoặc điều kiện hoặc bằng cách tìm các mục nhập trùng lặp. Nếu một bảng nội bộ có khóa không phải duy nhất và chứa các mục nhập trùng lặp, mục nhập đầu tiên từ bảng sẽ bị xóa.

Sau đây là cú pháp để sử dụng câu lệnh DELETE để xóa bản ghi hoặc dòng khỏi bảng nội bộ:

DELETE TABLE <internal_table> FROM <work_area_itab>.

Trong cú pháp trên, biểu thức <work_area_itab> là một vùng làm việc và nó phải tương thích với kiểu của bảng nội bộ <internal_table>. Thao tác xóa được thực hiện trên cơ sở khóa mặc định có thể được lấy từ các thành phần của vùng làm việc.

Bạn cũng có thể chỉ định một khóa bảng một cách rõ ràng trong câu lệnh DELETE TABLE bằng cách sử dụng cú pháp sau:

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

Trong cú pháp này, <F1>, <F2> .... <Fn> là các trường của một bảng bên trong và <K1>, <K2> .... <Kn> là các trường khóa của bảng. Câu lệnh DELETE được sử dụng để xóa các bản ghi hoặc dòng của bảng <internal_table> dựa trên các biểu thức <K1> = <F1>, <K2> = <F2> ... <Kn> = <Fn>.

Note - Nếu kiểu dữ liệu của các trường <F1>, <F2> .... <Fn> không tương thích với các trường khóa <K1>, <K2> ... <Kn> thì hệ thống SAP sẽ tự động chuyển đổi chúng thành định dạng tương thích.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

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

Trong ví dụ này, mytable có hai trường, ColP và ColQ. Ban đầu, bảng của tôi có tám dòng, trong đó ColP chứa các giá trị 1, 2, 3, 4, 5, 6, 7 và 8. ColQ chứa các giá trị 5, 6, 7, 8, 9, 10, 11 và 12 bởi vì các giá trị ColP được tăng lên 4 mỗi lần.

Câu lệnh DELETE được sử dụng để xóa các dòng khỏi bảng của tôi trong đó giá trị của trường khóa ColP là 1 hoặc 3. Sau khi xóa, trường ColP của bảng của tôi chứa các giá trị 2, 4, 5, 6, 7 và 8, như được hiển thị trong đầu ra. Trường ColQ chứa các giá trị 6, 8, 9, 10, 11 và 12.

Hướng đối tượng đơn giản hóa thiết kế phần mềm để dễ hiểu, bảo trì và sử dụng lại. Object Oriented Programming(OOP) thể hiện một cách suy nghĩ khác trong việc viết phần mềm. Vẻ đẹp của OOP nằm ở sự đơn giản của nó. Tính biểu đạt của OOP giúp dễ dàng cung cấp các thành phần phần mềm chất lượng đúng hạn.

Khi các giải pháp được thiết kế dựa trên các đối tượng trong thế giới thực, việc các nhà lập trình và nhà phân tích kinh doanh trao đổi ý tưởng và thông tin về thiết kế sử dụng ngôn ngữ miền chung trở nên dễ dàng hơn nhiều. Những cải tiến này trong giao tiếp giúp tiết lộ các yêu cầu tiềm ẩn, xác định rủi ro và cải thiện chất lượng của phần mềm đang được phát triển. Phương pháp hướng đối tượng tập trung vào các đối tượng đại diện cho những thứ trừu tượng hoặc cụ thể của thế giới thực. Các đối tượng này được xác định bởi đặc tính và thuộc tính của chúng được thể hiện bằng cấu trúc bên trong và các thuộc tính (dữ liệu) của chúng. Hành vi của các đối tượng này được mô tả bằng các phương thức (tức là chức năng).

Hãy so sánh lập trình thủ tục và hướng đối tượng -

Đặc trưng Phương pháp hướng thủ tục Phương pháp hướng đối tượng
Nhấn mạnh Nhấn mạnh vào các nhiệm vụ. Nhấn mạnh vào những thứ thực hiện các nhiệm vụ đó.
Mô-đun hóa Các chương trình có thể được chia thành các chương trình nhỏ hơn được gọi là các hàm. Các chương trình được tổ chức thành các lớp và đối tượng và các chức năng được nhúng vào các phương thức của một lớp.
Bảo mật dữ liệu Hầu hết các chức năng chia sẻ dữ liệu toàn cầu. Dữ liệu có thể bị ẩn và không thể truy cập bằng các nguồn bên ngoài.
Khả năng mở rộng Điều này tốn nhiều thời gian hơn để sửa đổi và mở rộng chức năng hiện có. Dữ liệu và chức năng mới có thể được thêm vào một cách dễ dàng khi cần thiết.

ABAP ban đầu được phát triển như một ngôn ngữ thủ tục (tương tự như ngôn ngữ lập trình thủ tục trước đó như COBOL). Nhưng ABAP hiện đã điều chỉnh các nguyên tắc của mô hình hướng đối tượng với sự ra đời của Đối tượng ABAP. Các khái niệm hướng đối tượng trong ABAP như lớp, đối tượng, kế thừa và đa hình, về cơ bản giống với các khái niệm hướng đối tượng hiện đại khác như Java hoặc C ++.

Khi hướng đối tượng bắt đầu hình thành, mỗi lớp đảm nhận các nhiệm vụ vai trò cụ thể. Sự phân công lao động này giúp đơn giản hóa mô hình lập trình tổng thể, cho phép mỗi lớp chuyên giải quyết một phần cụ thể của vấn đề trong tầm tay. Các lớp như vậy có tính liên kết cao và hoạt động của mỗi lớp có liên quan chặt chẽ với nhau theo một cách trực quan nào đó.

Các tính năng chính của hướng đối tượng là -

  • Cấu trúc lập trình hiệu quả.
  • Các thực thể trong thế giới thực có thể được mô hình hóa rất tốt.
  • Căng thẳng về bảo mật và truy cập dữ liệu.
  • Giảm thiểu sự dư thừa mã.
  • Trừu tượng hóa và đóng gói dữ liệu.

Đối tượng là một loại biến đặc biệt có các đặc điểm và hành vi riêng biệt. Các đặc điểm hoặc thuộc tính của một đối tượng được sử dụng để mô tả trạng thái của một đối tượng và các hành vi hoặc phương thức thể hiện các hành động được thực hiện bởi một đối tượng.

Một đối tượng là một mẫu hoặc thể hiện của một lớp. Nó đại diện cho một thực thể trong thế giới thực chẳng hạn như một người hoặc một thực thể lập trình như các biến và hằng số. Ví dụ, tài khoản và sinh viên là ví dụ về các thực thể trong thế giới thực. Nhưng các thành phần phần cứng và phần mềm của máy tính là ví dụ về các thực thể lập trình.

Một đối tượng có ba đặc điểm chính sau:

  • Có trạng thái.
  • Có một bản sắc riêng.
  • Có thể có hoặc không hiển thị hành vi.

Trạng thái của một đối tượng có thể được mô tả như một tập hợp các thuộc tính và giá trị của chúng. Ví dụ: tài khoản ngân hàng có một tập hợp các thuộc tính như Số tài khoản, Tên, Loại tài khoản, Số dư và giá trị của tất cả các thuộc tính này. Hành vi của một đối tượng đề cập đến những thay đổi xảy ra trong các thuộc tính của nó trong một khoảng thời gian.

Mỗi đối tượng có một danh tính riêng có thể được sử dụng để phân biệt nó với các đối tượng khác. Hai đối tượng có thể biểu hiện cùng một hành vi và chúng có thể có hoặc không cùng trạng thái, nhưng chúng không bao giờ có cùng danh tính. Hai người có thể trùng tên, tuổi và giới tính nhưng không giống nhau. Tương tự, danh tính của một đối tượng sẽ không bao giờ thay đổi trong suốt thời gian tồn tại của nó.

Các đối tượng có thể tương tác với nhau bằng cách gửi tin nhắn. Các đối tượng chứa dữ liệu và mã để thao tác dữ liệu. Một đối tượng cũng có thể được sử dụng như một kiểu dữ liệu do người dùng định nghĩa với sự trợ giúp của một lớp. Các đối tượng còn được gọi là các biến của lớp kiểu. Sau khi xác định một lớp, bạn có thể tạo bất kỳ số lượng đối tượng nào thuộc lớp đó. Mỗi đối tượng được liên kết với dữ liệu của lớp kiểu mà nó đã được tạo.

Tạo một đối tượng

Việc tạo đối tượng thường bao gồm các bước sau:

  • Tạo một biến tham chiếu với tham chiếu đến lớp. Cú pháp là -

DATA: <object_name> TYPE REF TO <class_name>.
  • Tạo một đối tượng từ biến tham chiếu. Cú pháp là -

CREATE Object: <object_name>.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

ABAP Objects. 
This is the Display method.

Một lớp được sử dụng để chỉ định dạng của một đối tượng và nó kết hợp biểu diễn dữ liệu và các phương thức để thao tác dữ liệu đó thành một gói gọn gàng. Dữ liệu và các hàm trong một lớp được gọi làmembers of the class.

Định nghĩa và triển khai lớp

Khi bạn xác định một lớp, bạn xác định một bản thiết kế cho một kiểu dữ liệu. Điều này không thực sự xác định bất kỳ dữ liệu nào, nhưng nó xác định tên lớp có nghĩa là gì, một đối tượng của lớp sẽ bao gồm những gì và những thao tác nào có thể được thực hiện trên một đối tượng như vậy. Nghĩa là, nó xác định các đặc điểm trừu tượng của một đối tượng, chẳng hạn như các thuộc tính, trường và thuộc tính.

Cú pháp sau đây cho thấy cách xác định một lớp:

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

Định nghĩa lớp bắt đầu bằng từ khóa CLASS theo sau là tên lớp, DEFINITION và nội dung lớp. Định nghĩa của một lớp có thể chứa các thành phần khác nhau của lớp như thuộc tính, phương thức và sự kiện. Khi chúng ta khai báo một phương thức trong khai báo lớp, thì việc triển khai phương thức phải được đưa vào trong việc thực thi lớp. Cú pháp sau đây cho thấy cách triển khai một lớp:

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

Note- Việc thực thi một lớp chứa việc thực hiện tất cả các phương thức của nó. Trong Đối tượng ABAP, cấu trúc của một lớp chứa các thành phần như thuộc tính, phương thức, sự kiện, kiểu và hằng số.

Thuộc tính

Thuộc tính là các trường dữ liệu của một lớp có thể có bất kỳ kiểu dữ liệu nào như C, I, F và N. Chúng được khai báo trong khai báo lớp. Các thuộc tính này có thể được chia thành 2 loại: thuộc tính instance và static. Aninstance attributexác định trạng thái cụ thể của đối tượng. Các trạng thái khác nhau đối với các đối tượng khác nhau. Một thuộc tính instance được khai báo bằng cách sử dụng câu lệnh DATA.

Static attributesxác định trạng thái chung của một lớp được chia sẻ bởi tất cả các cá thể của lớp. Nghĩa là, nếu bạn thay đổi một thuộc tính static trong một đối tượng của một lớp, thì thay đổi đó cũng hiển thị cho tất cả các đối tượng khác của lớp. Một thuộc tính tĩnh được khai báo bằng cách sử dụng câu lệnh CLASS-DATA.

Phương pháp

Phương thức là một hàm hoặc thủ tục đại diện cho hành vi của một đối tượng trong lớp. Các phương thức của lớp có thể truy cập bất kỳ thuộc tính nào của lớp. Định nghĩa của một phương thức cũng có thể chứa các tham số để bạn có thể cung cấp các giá trị cho các tham số này khi các phương thức được gọi. Định nghĩa của một phương thức được khai báo trong phần khai báo lớp và được thực hiện trong phần thực thi của một lớp. Câu lệnh METHOD và ENDMETHOD được sử dụng để xác định phần thực thi của một phương thức. Cú pháp sau đây cho thấy cách triển khai một phương thức:

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

Trong cú pháp này, <m_name> đại diện cho tên của một phương thức. Note - Bạn có thể gọi một phương thức bằng cách sử dụng câu lệnh CALL METHOD.

Truy cập các thuộc tính và phương thức

Các thành phần lớp có thể được xác định trong các phần hiển thị công khai, riêng tư hoặc được bảo vệ để kiểm soát cách các thành phần này có thể được truy cập. Phần khả năng hiển thị riêng tư được sử dụng để từ chối quyền truy cập vào các thành phần từ bên ngoài của lớp. Các thành phần như vậy chỉ có thể được truy cập từ bên trong lớp chẳng hạn như một phương thức.

Các thành phần được xác định trong phần hiển thị công khai có thể được truy cập từ bất kỳ ngữ cảnh nào. Theo mặc định, tất cả các thành viên của một lớp sẽ là riêng tư. Trên thực tế, chúng ta định nghĩa dữ liệu trong phần private và các phương thức liên quan trong phần public để chúng có thể được gọi từ bên ngoài lớp như được hiển thị trong chương trình sau.

  • Các thuộc tính và phương thức được khai báo trong phần Public trong một lớp có thể được truy cập bởi lớp đó và bất kỳ lớp, lớp con nào khác của chương trình.

  • Khi các thuộc tính và phương thức được khai báo trong phần Protected trong một lớp, chúng chỉ có thể được truy cập bởi lớp đó và các lớp con (lớp dẫn xuất).

  • Khi các thuộc tính và phương thức được khai báo trong phần Riêng tư trong một lớp, chúng chỉ có thể được truy cập bởi lớp đó chứ không phải bởi bất kỳ lớp nào khác.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

Public Method: 
Public Data 
Protected Data 
Private Data
  
Public Data

Thuộc tính tĩnh

Thuộc tính Static được khai báo với câu lệnh CLASS-DATA. Tất cả các đối tượng hoặc cá thể có thể sử dụng thuộc tính static của lớp. Các thuộc tính static được truy cập trực tiếp với sự trợ giúp của tên lớp như class_name⇒name_1 = 'Some Text'.

Thí dụ

Sau đây là một chương trình mà chúng ta muốn in một văn bản có dòng số 4 đến 8 lần. Chúng tôi định nghĩa một lớp class1 và trong phần công khai, chúng tôi khai báo CLASS-DATA (thuộc tính tĩnh) và một phương thức. Sau khi thực hiện lớp và phương thức, chúng ta truy cập trực tiếp vào thuộc tính static trong sự kiện Start-Of-Selection. Sau đó, chúng ta chỉ cần tạo thể hiện của lớp và gọi phương thức.

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.

Đoạn mã trên tạo ra kết quả sau:

Người xây dựng

Các hàm tạo là các phương thức đặc biệt được gọi tự động, trong khi tạo một đối tượng hoặc truy cập các thành phần của một lớp. Hàm tạo được kích hoạt bất cứ khi nào một đối tượng được tạo, nhưng chúng ta cần gọi một phương thức để kích hoạt phương thức chung. Trong ví dụ sau, chúng ta đã khai báo hai phương thức public là method1 và constructor. Cả hai phương pháp này đều có các hoạt động khác nhau. Trong khi tạo một đối tượng của lớp, phương thức khởi tạo sẽ kích hoạt hoạt động của nó.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

Constructor Triggered

Toán tử ME trong các phương pháp

Khi bạn khai báo một biến thuộc bất kỳ kiểu nào trong phần công khai của một lớp, bạn có thể sử dụng nó trong bất kỳ triển khai nào khác. Một biến có thể được khai báo với giá trị ban đầu trong phần công khai. Chúng ta có thể khai báo lại biến bên trong một phương thức với giá trị khác. Khi chúng ta viết biến bên trong phương thức, hệ thống sẽ in ra giá trị đã thay đổi. Để phản ánh giá trị trước đó của biến, chúng ta phải sử dụng toán tử 'ME'.

Trong chương trình này, chúng tôi đã khai báo một biến công khai text1 và bắt đầu bằng một giá trị. Chúng tôi đã khai báo lại cùng một biến, nhưng được khởi tạo với giá trị khác. Bên trong phương thức, chúng ta đang viết biến đó bằng toán tử 'ME' để nhận giá trị được khởi tạo trước đó. Chúng tôi nhận được giá trị đã thay đổi bằng cách khai báo trực tiếp.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

This is CLASS Attribute 
This is METHOD Attribute

Một trong những khái niệm quan trọng nhất trong lập trình hướng đối tượng là kế thừa. Tính kế thừa cho phép chúng ta định nghĩa một lớp theo nghĩa của một lớp khác, giúp tạo và duy trì một ứng dụng dễ dàng hơn. Điều này cũng tạo cơ hội để sử dụng lại chức năng mã và thời gian thực hiện nhanh chóng.

Khi tạo một lớp, thay vì viết các thành viên và phương thức dữ liệu hoàn toàn mới, lập trình viên có thể chỉ định rằng lớp mới sẽ kế thừa các thành viên của một lớp hiện có. Lớp hiện có này được gọi làbase class hoặc là super classvà lớp mới được gọi là derived class hoặc là sub class.

  • Một đối tượng của một lớp có thể thu được các thuộc tính của một lớp khác.

  • Lớp sinh kế thừa dữ liệu và phương thức của một lớp siêu. Tuy nhiên, chúng có thể ghi đè các phương thức và cũng có thể thêm các phương thức mới.

  • Ưu điểm chính của kế thừa là khả năng tái sử dụng.

Mối quan hệ kế thừa được chỉ định bằng cách sử dụng bổ sung 'INHERITING FROM' vào câu lệnh định nghĩa lớp.

Sau đây là cú pháp:

CLASS <subclass> DEFINITION INHERITING FROM <superclass>.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

This is public data 
Method in child class 
This is public data

Kiểm soát truy cập và kế thừa

Một lớp dẫn xuất có thể truy cập tất cả các thành viên không riêng tư của lớp cơ sở của nó. Vì vậy, các thành viên siêu lớp không thể truy cập được vào các hàm thành viên của lớp con nên được khai báo là private trong siêu lớp. Chúng tôi có thể tóm tắt các kiểu truy cập khác nhau tùy theo người có thể truy cập chúng theo cách sau:

Truy cập Công cộng Được bảo vệ Riêng tư
Cùng một calss Đúng Đúng Đúng
Lớp có nguồn gốc Đúng Đúng Không
Ngoài lớp học Đúng Không Không

Khi dẫn xuất một lớp từ siêu lớp, nó có thể được kế thừa thông qua kế thừa công khai, bảo vệ hoặc tư nhân. Kiểu kế thừa được chỉ định bởi trình chỉ định truy cập như đã giải thích ở trên. Chúng tôi hầu như không sử dụng kế thừa được bảo vệ hoặc riêng tư, nhưng kế thừa công khai thường được sử dụng. Các quy tắc sau đây được áp dụng khi sử dụng các kiểu kế thừa khác nhau.

  • Public Inheritance- Khi dẫn xuất một lớp từ siêu lớp công khai, các thành viên công khai của siêu lớp trở thành thành viên công khai của lớp con và các thành viên được bảo vệ của siêu lớp trở thành thành viên được bảo vệ của lớp con. Các thành viên riêng tư của lớp siêu cấp không bao giờ có thể truy cập trực tiếp từ lớp con, nhưng có thể được truy cập thông qua các lệnh gọi công khai và các thành viên được bảo vệ của lớp siêu cấp.

  • Protected Inheritance - Khi xuất phát từ siêu lớp được bảo vệ, các thành viên công khai và được bảo vệ của siêu lớp trở thành thành viên được bảo vệ của lớp con.

  • Private Inheritance - Khi xuất phát từ siêu lớp riêng, các thành viên công khai và được bảo vệ của siêu lớp trở thành thành viên riêng của lớp con.

Định nghĩa lại các phương thức trong lớp con

Các phương thức của lớp siêu có thể được thực hiện lại trong lớp con. Một số quy tắc xác định lại các phương pháp -

  • Câu lệnh định nghĩa lại cho phương thức kế thừa phải nằm trong cùng phần với định nghĩa của phương thức gốc.

  • Nếu bạn xác định lại một phương thức, bạn không cần phải nhập lại giao diện của nó trong lớp con mà chỉ cần nhập tên của phương thức.

  • Trong phương thức được định nghĩa lại, bạn có thể truy cập các thành phần của lớp siêu trực tiếp bằng cách sử dụng siêu tham chiếu.

  • Siêu tham chiếu giả chỉ có thể được sử dụng trong các phương thức được xác định lại.

Thí dụ

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.

Sau khi thực hiện F8, nếu chúng ta nhập các giá trị 9 và 10, đoạn mã trên sẽ tạo ra kết quả sau:

Redefinition Demo 
29

Thuật ngữ đa hình có nghĩa đen là 'nhiều dạng'. Từ quan điểm hướng đối tượng, tính đa hình hoạt động cùng với tính kế thừa để làm cho nhiều kiểu khác nhau trong cây kế thừa có thể được sử dụng thay thế cho nhau. Đó là, tính đa hình xảy ra khi có một hệ thống phân cấp của các lớp và chúng có liên quan với nhau bằng cách kế thừa. Tính đa hình của ABAP có nghĩa là một lệnh gọi đến một phương thức sẽ khiến một phương thức khác được thực thi tùy thuộc vào loại đối tượng gọi phương thức.

Chương trình sau chứa một lớp trừu tượng 'class_prgm', 2 lớp con (class_procedural và class_OO) và một lớp trình điều khiển thử nghiệm 'class_type_approach'. Trong cách triển khai này, phương thức lớp 'start' cho phép chúng ta hiển thị kiểu lập trình và cách tiếp cận của nó. Nếu bạn nhìn kỹ vào chữ ký của phương thức 'start', bạn sẽ thấy rằng nó nhận được một tham số nhập kiểu class_prgm. Tuy nhiên, trong sự kiện Start-Of-Selection, phương thức này đã được gọi tại thời điểm chạy với các đối tượng kiểu class_procedural và class_OO.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

Procedural programming follows top-down approach  
Object oriented programming follows bottom-up approach

Môi trường thời gian chạy ABAP thực hiện ép kiểu thu hẹp ngầm trong quá trình gán tham số nhập class1_prgm. Tính năng này giúp phương pháp 'bắt đầu' được triển khai chung. Thông tin kiểu động được liên kết với một biến tham chiếu đối tượng cho phép môi trường thời gian chạy ABAP liên kết động một lệnh gọi phương thức với việc triển khai được xác định trong đối tượng được trỏ tới bởi biến tham chiếu đối tượng. Ví dụ: tham số nhập 'class1_prgm' cho phương thức 'start' trong lớp 'class_type_approach' đề cập đến một kiểu trừu tượng không bao giờ có thể tự khởi tạo được.

Bất cứ khi nào phương thức được gọi với một triển khai lớp con cụ thể chẳng hạn như class_procedural hoặc class_OO, thì kiểu động của tham số tham chiếu class1_prgm được liên kết với một trong những kiểu cụ thể này. Do đó, các lệnh gọi đến phương thức 'prgm_type' và 'method1' đề cập đến các triển khai được cung cấp trong các lớp con class_procedural hoặc class_OO thay vì các triển khai trừu tượng không xác định được cung cấp trong lớp 'class_prgm'.

Đóng gói là một khái niệm Lập trình hướng đối tượng (OOP) liên kết dữ liệu và các chức năng thao tác dữ liệu với nhau, đồng thời giữ cho cả hai an toàn khỏi sự can thiệp và lạm dụng từ bên ngoài. Việc đóng gói dữ liệu đã dẫn đến khái niệm OOP quan trọng về ẩn dữ liệu. Đóng gói là một cơ chế gói dữ liệu và các chức năng sử dụng chúng, và trừu tượng hóa dữ liệu là cơ chế chỉ để lộ các giao diện và ẩn các chi tiết triển khai với người dùng.

ABAP hỗ trợ các thuộc tính đóng gói và ẩn dữ liệu thông qua việc tạo ra các kiểu do người dùng định nghĩa được gọi là các lớp. Như đã thảo luận trước đó, một lớp có thể chứa các thành viên riêng tư, được bảo vệ và công khai. Theo mặc định, tất cả các mục được định nghĩa trong một lớp là riêng tư.

Đóng gói bằng giao diện

Tính đóng gói thực sự có nghĩa là một thuộc tính và phương thức có thể được sửa đổi trong các lớp khác nhau. Do đó, dữ liệu và phương thức có thể có dạng và logic khác nhau có thể được ẩn để tách lớp.

Hãy xem xét đóng gói theo giao diện. Interface được sử dụng khi chúng ta cần tạo một phương thức với các chức năng khác nhau trong các lớp khác nhau. Ở đây tên của phương thức không cần thay đổi. Phương thức tương tự sẽ phải được triển khai trong các triển khai lớp khác nhau.

Thí dụ

Chương trình sau chứa một Interface giao diện_1. Chúng tôi đã khai báo thuộc tính và một phương thức method1. Chúng tôi cũng đã định nghĩa hai lớp như Class1 và Class2. Vì vậy, chúng ta phải triển khai phương thức 'method1' trong cả hai lần triển khai lớp. Chúng tôi đã triển khai phương thức 'method1' khác nhau trong các lớp khác nhau. Trong phần bắt đầu, chúng ta tạo hai đối tượng Object1 và Object2 cho hai lớp. Sau đó, chúng ta gọi phương thức bởi các đối tượng khác nhau để lấy hàm được khai báo trong các lớp riêng biệt.

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.

Đoạn mã trên tạo ra kết quả sau:

Class 1 Interface method 
Class 2 Interface method

Các lớp được đóng gói không có nhiều phụ thuộc vào thế giới bên ngoài. Hơn nữa, các tương tác mà họ có với khách hàng bên ngoài được kiểm soát thông qua một giao diện công khai ổn định. Đó là, một lớp được đóng gói và các máy khách của nó được liên kết lỏng lẻo. Đối với hầu hết các phần, các lớp có giao diện được xác định rõ có thể được cắm vào một ngữ cảnh khác. Khi được thiết kế đúng cách, các lớp được đóng gói sẽ trở thành tài sản phần mềm có thể sử dụng lại.

Chiến lược thiết kế

Hầu hết chúng ta đã học được qua kinh nghiệm cay đắng để đặt các thành viên trong lớp ở chế độ riêng tư theo mặc định trừ khi chúng ta thực sự cần để lộ chúng. Đó chỉ là sự đóng gói tốt. Sự khôn ngoan này được áp dụng thường xuyên nhất cho các thành viên dữ liệu và nó cũng áp dụng như nhau cho tất cả các thành viên.

Tương tự như các lớp trong ABAP, các giao diện hoạt động như kiểu dữ liệu cho các đối tượng. Các thành phần của giao diện giống như các thành phần của các lớp. Không giống như khai báo các lớp, khai báo một giao diện không bao gồm các phần hiển thị. Điều này là do các thành phần được định nghĩa trong khai báo của một giao diện luôn được tích hợp trong phần hiển thị công khai của các lớp.

Giao diện được sử dụng khi hai lớp giống nhau có phương thức trùng tên, nhưng các chức năng khác nhau. Các giao diện có thể xuất hiện tương tự như các lớp, nhưng các chức năng được định nghĩa trong một giao diện được thực hiện trong một lớp để mở rộng phạm vi của lớp đó. Các giao diện cùng với tính năng kế thừa cung cấp cơ sở cho tính đa hình. Điều này là do một phương thức được định nghĩa trong một giao diện có thể hoạt động khác nhau trong các lớp khác nhau.

Sau đây là định dạng chung để tạo giao diện:

INTERFACE <intf_name>. 
DATA..... 
CLASS-DATA..... 
METHODS..... 
CLASS-METHODS..... 
ENDINTERFACE.

Trong cú pháp này, <intf_name> đại diện cho tên của một giao diện. Các câu lệnh DATA và CLASSDATA có thể được sử dụng để xác định các thuộc tính instance và static của giao diện tương ứng. Các câu lệnh METHODS và CLASS-METHODS có thể được sử dụng để định nghĩa các phương thức instance và static của giao diện tương ứng. Vì định nghĩa của giao diện không bao gồm lớp thực thi, nên không cần thiết phải thêm mệnh đề DEFINITION trong phần khai báo giao diện.

Note- Tất cả các phương thức của một giao diện là trừu tượng. Chúng được khai báo đầy đủ bao gồm giao diện tham số của chúng, nhưng không được triển khai trong giao diện. Tất cả các lớp muốn sử dụng một giao diện phải triển khai tất cả các phương thức của giao diện. Nếu không, lớp sẽ trở thành một lớp trừu tượng.

Chúng tôi sử dụng cú pháp sau trong phần triển khai của lớp:

INTERFACE <intf_name>.

Trong cú pháp này, <intf_name> đại diện cho tên của một giao diện. Lưu ý rằng cú pháp này phải được sử dụng trong phần công khai của lớp.

Cú pháp sau được sử dụng để triển khai các phương thức của một giao diện bên trong việc triển khai một lớp:

METHOD <intf_name~method_m>. 
<statements>. 
ENDMETHOD.

Trong cú pháp này, <intf_name ~ method_m> đại diện cho tên được khai báo đầy đủ của một phương thức của giao diện <intf_name>.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

The number is 7 
Total number of wheels is 4

Trong ví dụ trên, my_interface1 là tên của một giao diện có chứa phương thức 'msg'. Tiếp theo, hai lớp, num_counter và drive1 được định nghĩa và thực hiện. Cả hai lớp này đều triển khai phương thức 'msg' và các phương thức cụ thể xác định hành vi của các cá thể tương ứng của chúng, chẳng hạn như phương thức add_number và speed1.

Note - Phương thức add_number và speed1 dành riêng cho các lớp tương ứng.

An eventlà một tập hợp các kết quả được định nghĩa trong một lớp để kích hoạt các trình xử lý sự kiện trong các lớp khác. Khi một sự kiện được kích hoạt, chúng ta có thể gọi bất kỳ số lượng phương thức xử lý sự kiện nào. Mối liên kết giữa trình kích hoạt và phương thức xử lý của nó thực sự được quyết định động tại thời điểm chạy.

Trong một cuộc gọi phương thức thông thường, một chương trình gọi sẽ xác định phương thức nào của một đối tượng hoặc một lớp cần được gọi. Vì phương thức xử lý cố định không được đăng ký cho mọi sự kiện, trong trường hợp xử lý sự kiện, phương thức xử lý sẽ xác định sự kiện cần được kích hoạt.

Một sự kiện của một lớp có thể kích hoạt một phương thức xử lý sự kiện của cùng một lớp bằng cách sử dụng câu lệnh RAISE EVENT. Đối với một sự kiện, phương thức xử lý sự kiện có thể được định nghĩa trong cùng một lớp hoặc khác lớp bằng cách sử dụng mệnh đề FOR ​​EVENT, như thể hiện trong cú pháp sau:

FOR EVENT <event_name> OF <class_name>.

Tương tự như các phương thức của một lớp, một sự kiện có thể có giao diện tham số nhưng nó chỉ có các tham số đầu ra. Các tham số đầu ra được chuyển tới phương thức xử lý sự kiện bằng câu lệnh RAISE EVENT nhận chúng làm tham số đầu vào. Một sự kiện được liên kết động với phương thức xử lý của nó trong một chương trình bằng cách sử dụng câu lệnh SET HANDLER.

Khi một sự kiện được kích hoạt, các phương thức xử lý sự kiện thích hợp phải được thực thi trong tất cả các lớp xử lý.

Thí dụ

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.

Đoạn mã trên tạo ra kết quả sau:

Handling the CutOff 
Event has been processed

A reportlà một bản trình bày dữ liệu trong một cấu trúc có tổ chức. Nhiều hệ thống quản lý cơ sở dữ liệu bao gồm trình viết báo cáo cho phép bạn thiết kế và tạo báo cáo. Các ứng dụng SAP hỗ trợ tạo báo cáo.

Một báo cáo cổ điển được tạo bằng cách sử dụng dữ liệu đầu ra trong câu lệnh WRITE bên trong một vòng lặp. Chúng không chứa bất kỳ báo cáo phụ nào. SAP cũng cung cấp một số báo cáo tiêu chuẩn như RSCLTCOP được sử dụng để sao chép bảng giữa các máy khách và RSPARAM được sử dụng để hiển thị các tham số phiên bản.

Các báo cáo này chỉ bao gồm một màn hình làm đầu ra. Chúng tôi có thể sử dụng các sự kiện khác nhau như INITIALIZATON & TOP-OF-PAGE để tạo báo cáo cổ điển và mỗi sự kiện có tầm quan trọng riêng trong quá trình tạo báo cáo cổ điển. Mỗi sự kiện này được liên kết với một hành động cụ thể của người dùng và chỉ được kích hoạt khi người dùng thực hiện hành động đó.

Sau đây là bảng mô tả các sự kiện và mô tả:

Không. Sự kiện & Mô tả
1

INITIALIZATON

Được kích hoạt trước khi hiển thị màn hình lựa chọn.

2

AT SELECTION-SCREEN

Được kích hoạt sau khi xử lý đầu vào của người dùng trên màn hình lựa chọn. Sự kiện này xác minh đầu vào của người dùng trước khi thực hiện chương trình. Sau khi xử lý đầu vào của người dùng, màn hình lựa chọn vẫn ở chế độ hoạt động.

3

START-OF-SELECTION

Chỉ được kích hoạt sau khi quá trình xử lý màn hình lựa chọn kết thúc; nghĩa là, khi người dùng nhấp vào biểu tượng Execute trên màn hình lựa chọn.

4

END-OF-SELECTION

Được kích hoạt sau khi câu lệnh cuối cùng trong sự kiện START-OF-SELECTON được thực thi.

5

TOP-OF-PAGE

Được kích hoạt bởi câu lệnh WRITE đầu tiên để hiển thị dữ liệu trên một trang mới.

6

END-OF-PAGE

Được kích hoạt để hiển thị văn bản ở cuối trang trong báo cáo. Lưu ý rằng sự kiện này là sự kiện cuối cùng trong khi tạo báo cáo và phải được kết hợp với mệnh đề LINE-COUNT của câu lệnh REPORT.

Thí dụ

Hãy tạo một báo cáo cổ điển. Chúng tôi sẽ hiển thị thông tin được lưu trữ trong cơ sở dữ liệu chuẩn MARA (chứa dữ liệu vật liệu chung) bằng cách sử dụng một chuỗi các câu lệnh trong trình soạn thảo 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.

Đoạn mã trên tạo ra kết quả sau chứa dữ liệu vật liệu chung từ bảng tiêu chuẩn MARA -

Lập trình hộp thoại xử lý sự phát triển của nhiều đối tượng. Tất cả các đối tượng này được liên kết phân cấp với chương trình chính và chúng được thực thi theo một trình tự. Phát triển chương trình hội thoại sử dụng các công cụ trong bàn làm việc ABAP. Đây là những công cụ tương tự được sử dụng trong phát triển ứng dụng SAP tiêu chuẩn.

Đây là các thành phần chính của chương trình hội thoại:

  • Screens
  • Nhóm mô-đun
  • Subroutines
  • Menus
  • Transactions

Bộ công cụ

Các chương trình hộp thoại nên được phát triển bởi trình duyệt đối tượng (giao dịch: SE80) để tất cả các đối tượng được liên kết với chương trình chính mà không cần phải trỏ từng đối tượng một cách rõ ràng. Các kỹ thuật điều hướng nâng cao nâng cao quá trình di chuyển từ đối tượng này sang đối tượng khác.

Màn hình được tạo thành từ các thuộc tính màn hình, bố cục màn hình, các trường và logic luồng. Nhóm mô-đun bao gồm cú pháp được mô-đun hóa được đặt bên trong bao gồm các chương trình của chương trình hộp thoại. Các mô-đun này có thể được gọi bởi logic luồng, được xử lý bởi bộ xử lý hộp thoại.

Tạo một chương trình hộp thoại mới

Step 1 - Trong giao dịch SE80, chọn 'Chương trình' từ menu thả xuống và nhập tên Z cho chương trình SAP tùy chỉnh của bạn là 'ZSCREENEX'.

Step 2 - Nhấn Enter, chọn 'With TOP INCL' và nhấp vào nút 'Yes'.

Step 3 - Nhập tên cho bao gồm hàng đầu của bạn là 'ZSCRTOP' và nhấp vào dấu tích màu xanh lá cây.

Step 4 - Trong màn hình thuộc tính, chỉ cần nhập tiêu đề và nhấp vào nút lưu.

Thêm màn hình vào chương trình hộp thoại

Step 1 - Để thêm màn hình vào chương trình, nhấp chuột phải vào tên chương trình và chọn các tùy chọn Create → Screen.

Step 2 - Nhập số màn hình là '0211' và nhấp vào dấu tích màu xanh lá cây.

Step 3 - Trong màn hình tiếp theo, nhập tiêu đề ngắn, đặt thành kiểu màn hình bình thường và nhấp vào nút lưu trên thanh công cụ ứng dụng trên cùng.

Bố cục màn hình và thêm văn bản 'Hello World'

Step 1 - Nhấp vào nút bố cục trong thanh công cụ của ứng dụng và cửa sổ Screen Painter xuất hiện.

Step 2 - Thêm Trường Văn bản và nhập một số văn bản như "Hello World".

Step 3 - Lưu và kích hoạt màn hình.

Tạo giao dịch

Step 1 - Để tạo mã giao dịch cho chương trình của bạn, bạn chỉ cần nhấp chuột phải vào tên chương trình và chọn tùy chọn Tạo → Giao dịch và nhập mã giao dịch là 'ZTRANEX'.

Step 2 - Nhập văn bản giao dịch, chương trình và màn hình bạn vừa tạo (ZSCREENEX & 0211), và đánh dấu vào hộp kiểm 'SAPGUI cho Windows' trong phần 'Hỗ trợ GUI'.

Thực hiện chương trình

Lưu và kích hoạt mọi thứ. Bạn có thể thực hiện chương trình. Khi chương trình thực thi, văn bản bạn đã nhập sẽ hiển thị trên màn hình như trong ảnh chụp màn hình sau.

Công cụ SAP Smart Forms có thể được sử dụng để in và gửi tài liệu. Công cụ này hữu ích trong việc phát triển biểu mẫu, tệp PDF, e-mail và tài liệu cho Internet. Công cụ này cung cấp một giao diện để xây dựng và duy trì bố cục và logic của một biểu mẫu. SAP cũng cung cấp lựa chọn các biểu mẫu cho các quy trình kinh doanh, chẳng hạn như các biểu mẫu được sử dụng trong Quản lý quan hệ khách hàng (CRM), Bán hàng và Phân phối (SD), Kế toán Tài chính (FI) và Nhân sự (HR).

Công cụ cho phép bạn sửa đổi các biểu mẫu bằng cách sử dụng các công cụ đồ họa đơn giản thay vì sử dụng bất kỳ công cụ lập trình nào. Nó có nghĩa là người dùng không có kiến ​​thức lập trình có thể cấu hình các biểu mẫu này với dữ liệu cho quy trình kinh doanh một cách dễ dàng.

Trong Biểu mẫu thông minh, dữ liệu được truy xuất từ ​​các bảng tĩnh và động. Tiêu đề bảng và tổng phụ được chỉ định bởi các sự kiện được kích hoạt và dữ liệu sau đó được sắp xếp trước kết quả cuối cùng. Biểu mẫu thông minh cho phép bạn kết hợp đồ họa có thể được hiển thị dưới dạng một phần của biểu mẫu hoặc làm nền. Bạn cũng có thể chặn hình nền nếu cần trong khi in một biểu mẫu.

Một số ví dụ về Biểu mẫu thông minh tiêu chuẩn có sẵn trong hệ thống SAP như sau:

  • SF_EXAMPLE_01 đại diện cho một hóa đơn có đầu ra bảng để đặt vé máy bay cho khách hàng.

  • SF_EXAMPLE_02 đại diện cho một hóa đơn tương tự như SF_EXAMPLE_01, nhưng có tổng phụ.

  • SF_EXAMPLE_03 chỉ định hóa đơn tương tự như SF_EXAMPLE_02, nhưng một hóa đơn trong đó có thể chọn một số khách hàng trong chương trình ứng dụng.

Tạo biểu mẫu

Hãy tạo một biểu mẫu bằng cách sử dụng công cụ SAP Smart Forms. Bạn cũng sẽ học cách thêm nút trong Biểu mẫu thông minh và kiểm tra biểu mẫu trong hướng dẫn này. Ở đây chúng ta bắt đầu với việc tạo bản sao của biểu mẫu SF_EXAMPLE_01. Biểu mẫu SF_EXAMPLE_01 là một Biểu mẫu Thông minh tiêu chuẩn có sẵn trong hệ thống SAP.

Step 1- Smart Form Builder là giao diện chính được sử dụng để xây dựng một Smart Form. Nó có sẵn trên màn hình ban đầu của SAP Smart Forms. Chúng ta cần nhập mã giao dịch 'SMARTFORMS' vào trường Lệnh để mở màn hình ban đầu của Biểu mẫu thông minh SAP. Trong màn hình này, nhập tên biểu mẫu, SF_EXAMPLE_01, vào trường Biểu mẫu.

Step 2 - Chọn Smart Forms → Copy hoặc nhấp vào biểu tượng Copy để mở hộp thoại Copy Form hoặc Text.

Step 3- Trong trường Đối tượng đích, nhập tên cho biểu mẫu mới. Tên phải bắt đầu bằng chữ cái Y hoặc Z. Trong trường hợp này, tên của biểu mẫu là 'ZSMM1'.

Step 4 - Nhấp vào biểu tượng Tiếp tục hoặc nhấn phím ENTER trong hộp thoại Sao chép Biểu mẫu hoặc Văn bản để biểu mẫu ZSMM1 được tạo dưới dạng bản sao của biểu mẫu được xác định trước SF_EXAMPLE_01.

Step 5- Nhấp vào biểu tượng Lưu. Tên của biểu mẫu được hiển thị trong trường Biểu mẫu trên màn hình ban đầu của SAP Smart Forms.

Step 6- Nhấp vào nút Create trên màn hình ban đầu của SAP Smart Forms. Biểu mẫu ZSMM1 xuất hiện trong Trình tạo biểu mẫu.

Step 7- Trang nháp đầu tiên được tạo bằng cửa sổ CHÍNH. Tất cả các thành phần của biểu mẫu mới đều dựa trên biểu mẫu định sẵn SF_EXAMPLE_01. Bạn có thể chỉ cần nhấp vào một nút trong menu Điều hướng để xem nội dung của nó.

Tạo nút văn bản trong biểu mẫu

Step 1 - Mở biểu mẫu ở chế độ thay đổi của màn hình Trình tạo biểu mẫu SAP và nhấp chuột phải vào tùy chọn Cửa sổ chính trong nút Trang đầu tiên và chọn Tạo → Văn bản từ trình đơn ngữ cảnh.

Step 2- Sửa đổi văn bản trong trường Văn bản thành 'My_Text' và văn bản trong trường Ý nghĩa thành 'Text_Demo'. Nhập văn bản 'Hello TutorialsPoint .....' vào hộp soạn thảo văn bản trong khung chính giữa của Trình tạo biểu mẫu như được hiển thị trong ảnh chụp nhanh sau:

Step 3 - Nhấn nút Save để lưu nút ..

Step 4- Kích hoạt và kiểm tra nút bằng cách nhấp vào biểu tượng Kích hoạt và Kiểm tra tương ứng. Màn hình ban đầu của Trình tạo chức năng xuất hiện.

Step 5- Kích hoạt và kiểm tra mô-đun chức năng bằng cách nhấp vào biểu tượng Kích hoạt và Thực thi. Các tham số của mô-đun chức năng được hiển thị trong màn hình ban đầu của Trình tạo chức năng.

Step 6- Thực thi mô-đun chức năng bằng cách nhấp vào biểu tượng Execute. Hộp thoại In xuất hiện.

Step 7 - Chỉ định thiết bị đầu ra là 'LP01' và nhấp vào nút Xem trước bản in.

Các bước trên sẽ tạo ra kết quả sau:

Công cụ SAPscript của hệ thống SAP có thể được sử dụng để xây dựng và quản lý các hình thức kinh doanh như hóa đơn và đơn đặt hàng. Công cụ SAPscript cung cấp nhiều mẫu giúp đơn giản hóa việc thiết kế biểu mẫu kinh doanh ở một mức độ lớn.

Hệ thống SAP đi kèm với các biểu mẫu SAPscript tiêu chuẩn được cung cấp với ứng dụng khách tiêu chuẩn SAP (thường là ứng dụng khách 000). Sau đây là một vài ví dụ về các biểu mẫu SAPscript tiêu chuẩn được cung cấp với khách hàng 000 -

Không. Tên & Mô tả Biểu mẫu
1

RVORDER01

Biểu mẫu xác nhận đơn hàng bán hàng

2

RVDELNOTE

Bảng kê hàng hóa

3

RVINVOICE01

Hóa đơn

4

MEDRUCK

Đơn đặt hàng

5

F110_PRENUM_CHCK

Kiểm tra đánh số

Cấu trúc của biểu mẫu SAPscript bao gồm 2 thành phần chính:

Content - Đây có thể là văn bản (dữ liệu kinh doanh) hoặc đồ họa (logo công ty).

Layout - Điều này được xác định bởi một tập hợp các cửa sổ trong đó nội dung biểu mẫu xuất hiện.

SAPscript - Công cụ vẽ biểu mẫu

Công cụ Form Painter cung cấp bố cục đồ họa của biểu mẫu SAPscript và các chức năng khác nhau để thao tác với biểu mẫu. Trong ví dụ sau, chúng ta sẽ tạo một biểu mẫu hóa đơn sau khi sao chép cấu trúc bố cục của nó từ biểu mẫu SAPscript chuẩn RVINVOICE01 và hiển thị bố cục của nó bằng cách truy cập vào công cụ Người vẽ biểu mẫu.

Step 1- Mở Trình vẽ biểu mẫu. Bạn có thể yêu cầu màn hình bằng cách điều hướng menu SAP hoặc bằng cách sử dụng mã giao dịch SE71.

Step 2- Trong màn hình yêu cầu của Trình vẽ biểu mẫu, hãy nhập tên và ngôn ngữ cho biểu mẫu SAPscript tương ứng trong các trường Biểu mẫu và Ngôn ngữ. Hãy nhập 'RVINVOICE01' và 'EN' tương ứng vào các trường này.

Step 3 - Chọn nút radio Bố cục Trang trong hộp Nhóm đối tượng phụ.

Step 4- Chọn Tiện ích → Sao chép từ Máy khách để tạo bản sao của biểu mẫu RVINVOICE01. Màn hình 'Sao chép biểu mẫu giữa các khách hàng' xuất hiện.

Step 5- Trong màn hình 'Sao chép biểu mẫu giữa các khách hàng', hãy nhập tên gốc của biểu mẫu, 'RVINVOICE01', trong trường Tên biểu mẫu, số lượng khách hàng nguồn '000' trong trường Ứng dụng khách nguồn và tên của mục tiêu dạng 'ZINV_01' trong trường Biểu mẫu đích. Đảm bảo rằng các cài đặt khác không thay đổi.

Step 6- Tiếp theo, nhấp vào biểu tượng Execute trong màn hình 'Copy Forms between Clients'. Hộp thoại 'Tạo mục nhập thư mục đối tượng' xuất hiện. Nhấp vào biểu tượng Lưu.

Biểu mẫu ZINV_01 được sao chép từ biểu mẫu RVINVOICE01 và được hiển thị trong 'Màn hình sao chép biểu mẫu giữa các khách hàng' như được mô tả trong ảnh chụp nhanh sau:

Step 7 - Nhấp vào biểu tượng quay lại hai lần và điều hướng trở lại màn hình Trình vẽ biểu mẫu: Yêu cầu, chứa tên của biểu mẫu đã sao chép ZINV_01.

Step 8 - Sau khi nhấp vào nút Hiển thị, cửa sổ 'Biểu mẫu ZINV_01: Bố cục của Trang FIRST' và màn hình 'Biểu mẫu: Thay đổi Bố cục Trang: ZINV_01' xuất hiện như trong ảnh chụp màn hình sau.

Step 9- Cửa sổ 'Biểu mẫu ZINV_01: Bố cục của Trang FIRST' hiển thị bố cục ban đầu của biểu mẫu. Bố cục của biểu mẫu có năm cửa sổ: HEADER, ADDRESS, INFO, INFO1 và MAIN. Mô tả của các cửa sổ này có thể được truy cập trong PC Editor.

Ví dụ: chỉ cần chọn cửa sổ CHÍNH và nhấp vào biểu tượng Văn bản trong màn hình 'Biểu mẫu: Thay đổi bố cục trang: ZINV_01', bạn có thể xem tất cả các giá trị lề như được hiển thị trong ảnh chụp màn hình sau:

Khách hàng thoát ra có thể được coi là móc nối với các chương trình tiêu chuẩn SAP. Chúng tôi không cần khóa truy cập để viết mã và không cần sửa đổi chương trình chuẩn SAP. Các lối ra này không có bất kỳ chức năng nào và chúng trống rỗng. Logic nghiệp vụ có thể được thêm vào để đáp ứng các yêu cầu khác nhau của khách hàng. Tuy nhiên, Khách hàng Thoát không áp dụng cho tất cả các chương trình.

Khách hàng thoát cho các giao dịch tiêu chuẩn

Sau đây là các bước để tìm các lần thoát của khách hàng đối với các giao dịch tiêu chuẩn có liên quan. Hãy xác định các lần thoát của khách hàng có trong MM01 (Material Master Creation).

Step 1 - Chuyển đến giao dịch MM01 và xác định tên chương trình của MM01 bằng cách vào Menu bar → Hệ thống → Trạng thái như trong hình trên.

Step 2- Lấy tên chương trình từ màn hình bật lên. Tên chương trình là 'SAPLMGMM'.

Step 3 - Vào giao dịch SE38, nhập tên chương trình và bấm Hiển thị.

Step 4 - Điều hướng đến Go to → Properties và tìm gói của tên chương trình này.

Tên gói là 'MGA'.

Step 5- Vào mã giao dịch SMOD thường dùng để xác định các lần thoát của khách hàng. Điều hướng đến Tiện ích → Tìm (hoặc) bạn có thể nhấn trực tiếp Ctrl + F trên mã giao dịch SMOD.

Step 6 - Sau khi chuyển đến màn hình 'Find Exits', nhập tên gói chúng ta đã nhận trước đó và nhấn nút F8 (Execute).

Các bước trên tạo ra kết quả sau với danh sách các lối thoát có sẵn trong Material Master Creation.

Các lần thoát của người dùng được sử dụng trong quá trình trích xuất nếu trình trích xuất SAP tiêu chuẩn không cung cấp dữ liệu mong đợi hoặc chức năng cần thiết, ví dụ như trong ủy quyền hoặc kiểm tra thời gian. Lối thoát của người dùng thường được sử dụng trong các mô-đun Bán hàng và Phân phối (SD). Có nhiều lối thoát do SAP cung cấp trong các lĩnh vực bán hàng, vận chuyển, vận chuyển và thanh toán. Lối ra của người dùng được thiết kế để thực hiện một số thay đổi khi SAP tiêu chuẩn không có khả năng đáp ứng tất cả các yêu cầu.

Để có thể truy cập những lối thoát nào có sẵn trong từng khu vực bán hàng, hãy truy cập IMG bằng đường dẫn sau: IMG → Bán hàng và phân phối → Sửa đổi hệ thống → Người dùng thoát. Tài liệu cho mỗi lối ra trong các lĩnh vực SD được giải thích cặn kẽ.

Ví dụ: nếu bạn muốn tìm các lần thoát của người dùng trong Xử lý tài liệu bán hàng (hợp đồng, báo giá hoặc đơn đặt hàng), hãy làm theo đường dẫn được đề cập ở trên và tiếp tục mở rộng nút Người dùng thoát trong Bán hàng → Người dùng thoát. Nhấp vào tài liệu biểu tượng để xem tất cả các lần thoát của người dùng có sẵn trong Xử lý tài liệu bán hàng.

Không. Người dùng thoát & mô tả
1

USEREXIT_FIELD_MODIFICATION

Được sử dụng để sửa đổi các thuộc tính màn hình.

2

USEREXIT_SAVE_DOCUMENT

Giúp thực hiện các thao tác khi người dùng nhấn Lưu.

3

USEREXIT_SAVE_DOCUMENT_PREPARE

Rất hữu ích để kiểm tra các trường đầu vào, đặt bất kỳ giá trị nào vào trường hoặc hiển thị cửa sổ bật lên cho người dùng và xác nhận tài liệu.

4

USEREXIT_MOVE_FIELD_TO_VBAK

Được sử dụng khi các thay đổi tiêu đề người dùng được chuyển đến vùng làm việc tiêu đề.

5

USEREXIT_MOVE_FIELD_TO_VBAP

Được sử dụng khi các thay đổi mục của người dùng được chuyển đến khu vực làm việc của mục SAP.

Lối ra của người dùng phục vụ cùng mục đích với lần thoát của khách hàng nhưng chúng chỉ khả dụng cho mô-đun SD. Lối ra được thực hiện dưới dạng lời gọi đến Mô-đun chức năng. User Exit là những sửa đổi đối với các chương trình tiêu chuẩn SAP.

Thí dụ

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.

Trong khi xử lý, nhập mã giao dịch 'ME01' và nhấn nút F8 (Thực hiện). Đoạn mã trên tạo ra kết quả sau:

Trong một số trường hợp, các chức năng đặc biệt cần được xác định trước trong một ứng dụng phần mềm để nâng cao chức năng của các ứng dụng khác nhau. Có nhiều phần bổ trợ Microsoft Excel để cải thiện chức năng của MS Excel. Tương tự, SAP tạo điều kiện cho một số chức năng được xác định trước bằng cách cung cấpBusiness Add-Ins được gọi là BADIs.

BADI là một kỹ thuật nâng cao tạo điều kiện cho lập trình viên SAP, người dùng hoặc một ngành cụ thể thêm một số mã bổ sung vào chương trình hiện có trong hệ thống SAP. Chúng tôi có thể sử dụng logic tiêu chuẩn hoặc tùy chỉnh để cải thiện hệ thống SAP. Một BADI trước tiên phải được xác định và sau đó được triển khai để nâng cao ứng dụng SAP. Trong khi xác định BADI, một giao diện được tạo. BADI được thực hiện bởi giao diện này, giao diện này được thực hiện bởi một hoặc nhiều lớp bộ điều hợp.

Kỹ thuật BADI khác với các kỹ thuật nâng cao khác theo hai cách -

  • Kỹ thuật nâng cao chỉ có thể được thực hiện một lần.
  • Kỹ thuật nâng cao này có thể được sử dụng đồng thời cho nhiều khách hàng.

Bạn cũng có thể tạo BADI bộ lọc, có nghĩa là các BADI được xác định trên cơ sở dữ liệu đã lọc mà các kỹ thuật nâng cao không thể thực hiện được. Khái niệm BADIs đã được định nghĩa lại trong SAP Release 7.0 với các mục tiêu sau:

  • Nâng cao các ứng dụng tiêu chuẩn trong hệ thống SAP bằng cách thêm hai yếu tố mới trong ngôn ngữ ABAP, đó là 'GET BADI' và 'CALL BADI'.

  • Cung cấp các tính năng linh hoạt hơn như ngữ cảnh và bộ lọc để nâng cao các ứng dụng tiêu chuẩn trong hệ thống SAP.

Khi một BADI được tạo, nó chứa một giao diện và các thành phần bổ sung khác, chẳng hạn như mã chức năng cho các cải tiến menu và cải tiến màn hình. Việc tạo BADI cho phép khách hàng đưa các cải tiến của riêng họ vào ứng dụng SAP tiêu chuẩn. Nâng cao, giao diện và các lớp được tạo nằm trong một không gian tên phát triển ứng dụng thích hợp.

Do đó, BADI có thể được coi là một kỹ thuật nâng cao sử dụng các đối tượng ABAP để tạo ra 'các điểm được xác định trước' trong các thành phần SAP. Những điểm xác định trước này sau đó được thực hiện bởi các giải pháp ngành riêng lẻ, các biến thể quốc gia, đối tác và khách hàng để phù hợp với yêu cầu cụ thể của họ. SAP thực sự đã giới thiệu kỹ thuật nâng cao BADI với Phiên bản 4.6A và kỹ thuật này đã được triển khai lại một lần nữa trong Phiên bản 7.0.

Web Dynpro (WD) cho ABAP là công nghệ giao diện người dùng tiêu chuẩn SAP do SAP AG phát triển. Nó có thể được sử dụng để phát triển các ứng dụng dựa trên web trong môi trường SAP ABAP sử dụng các công cụ và khái niệm phát triển SAP. Nó cung cấp giao diện người dùng web front-end để kết nối trực tiếp với hệ thống phụ trợ SAP R / 3 để truy cập dữ liệu và các chức năng để báo cáo.

Web Dynpro cho ABAP bao gồm môi trường thời gian chạy và môi trường phát triển đồ họa với các công cụ phát triển cụ thể được tích hợp trong ABAP Workbench (giao dịch: SE80).

Kiến trúc của Web Dynpro

Hình minh họa sau đây cho thấy kiến ​​trúc tổng thể của Web Dynpro:

Sau đây là một số điểm cần lưu ý về Web Dynpro:

  • Web Dynpro là mô hình lập trình SAP NetWeaver cho giao diện người dùng.

  • Tất cả các ứng dụng Web Dynpro được cấu trúc theo mô hình lập trình Model View Controller (MVC).

  • Mô hình xác định giao diện cho hệ thống chính và ứng dụng Web Dynpro có thể có quyền truy cập vào dữ liệu hệ thống.

  • Chế độ xem chịu trách nhiệm hiển thị dữ liệu trong trình duyệt web.

  • Bộ điều khiển nằm giữa khung nhìn và mô hình. Bộ điều khiển định dạng dữ liệu mô hình sẽ được hiển thị trong dạng xem. Nó xử lý các mục nhập người dùng do người dùng thực hiện và trả chúng về mô hình.

Ưu điểm

Web Dynpro cung cấp những ưu điểm sau cho các nhà phát triển ứng dụng:

  • Việc sử dụng các công cụ đồ họa làm giảm đáng kể nỗ lực thực hiện.

  • Tái sử dụng và khả năng bảo trì tốt hơn bằng cách sử dụng các thành phần.

  • Bố cục và điều hướng có thể dễ dàng thay đổi bằng các công cụ Web Dynpro.

  • Hỗ trợ khả năng truy cập giao diện người dùng.

  • Tích hợp hoàn toàn trong môi trường phát triển ABAP.

Cửa sổ và thành phần Web Dynpro

Thành phần là đơn vị toàn cầu của dự án ứng dụng Web Dynpro. Tạo một thành phần Web Dynpro là bước đầu tiên trong việc phát triển một ứng dụng Web Dynpro mới. Sau khi thành phần được tạo, nó hoạt động như một nút trong danh sách đối tượng Web Dynpro. Bạn có thể tạo bất kỳ số lượng khung nhìn thành phần nào trong một thành phần và lắp ráp chúng trong bất kỳ số lượng cửa sổ Web Dynpro tương ứng nào.

Ít nhất một cửa sổ Web Dynpro được chứa trong mỗi thành phần Web Dynpro. Cửa sổ Web Dynpro nhúng tất cả các dạng xem được hiển thị trong ứng dụng web front-end. Cửa sổ được xử lý trong trình chỉnh sửa cửa sổ của ABAP Workbench.

Note

  • Dạng xem thành phần hiển thị tất cả các chi tiết quản trị cho ứng dụng bao gồm mô tả, tên của người đã tạo nó, ngày tạo và gói phát triển được chỉ định.

  • Ứng dụng Web Dynpro là đối tượng độc lập trong danh sách đối tượng của ABAP Workbench. Tương tác giữa cửa sổ và ứng dụng được tạo ra bởi giao diện của một cửa sổ nhất định.