1. Trang chủ
  2. » Giáo Dục - Đào Tạo

ABAP programming I ppt

116 810 19

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 116
Dung lượng 5,52 MB

Nội dung

Sử dụng các câu lệnh điều kiện Khi tạo chương trình ABAP, bạn cần điều khiển luồng chương trình để được kết xuấtnhư mong muốn.. Ngoài câu lệnh if, bạn có thể sử dụng câu lệnh case để thự

Trang 1

ABAP Programming I

Trang 2

ABAP Programming I

I Tạo chương trình ABAP cơ bản:

1 Định nghĩa dữ liệu với trình soạn thảo ABAP (ABAP Editor):

a Tạo chương trình ABAP

ABAP (Advanced Business Application Programming) là ngôn ngữ lập trình được sửdụng để phát triển các ứng dụng SAP

ABAP Editor là công cụ phát triển mà SAP R/3 cung cấp Công cụ này cho phép bạntạo, hiệu chỉnh và thực thi chương trình ABAP Bạn có thể sử dụng cửa sổ ‘SAP EasyAccess’ để truy cập ABAP Editor

Để mở ABAP Editor, gõ transaction code ‘SE38’ vào trường Command và nhấn Enter

Để tạo chương trình ABAP, cần xác định trên chương trình trong trường Program, tênbắt đầu là Y hoặc Z → nhấn Create

Trang 3

Sử dụng cửa sổ ‘Program Attributes’ để xác định tiêu đề và các thuộc tính bao gồm loạichương trình và application area mà chương trình phụ thuộc.

Khi bạn hiệu chỉnh và lưu chương trình ABAP, đó là phiên bản chưa kích hoạt(inactive) Không thể thực thi chương trình này, để thực thi được cần kích hoạt(activate) nó

Trang 4

Trường trong bộ nhớ lưu dữ liệu của chương trình trong quá trình thực thi gọi là đốitượng dữ liệu (data object) Các trường trong bộ nhớ này được gán cho chương trình khi

nó thực thi và được giải phóng khi thực thi xong Trường trong bộ nhớ đã giải phóng cóthể được gán cho chương trình khác

Hai loại đối tượng dữ liệu:

+ có thể thay đổi (modifiable)

+ không thể thay đổi (nonmodifiable)

Bạn có thể thay đổi giá trị được lưu trong đối tượng dữ liệu modifiable trong quá trìnhthực thi Đối tượng modifiable bao gồm biến (variable), field string, internal table.Giá trị của đối tượng dữ liệu nonmodifiable duy trì hông đổi trong quá trình thực thi.Bạn có thể xác định giá trị của nó khi định nghĩa Đối tượng nonmodifiable bao gồmchữ (literal) và hằng (constant)

Loại dữ liệu mà ABAP hỗ trợ:

Kích cỡ của đối tượng như character, numeric hoặc hexadecimal là giữa 1 và 65,535 ký

tự Tuy nhiên kích cỡ loại dữ liệu date là 8 ký tự hoặc time là 6 ký tự => kích cở của cáckiểu dữ liệu này là cố định

Trang 5

1 charater: các giá trị alphanumeric

2 hexadecimal: A-F và 0-9

3 numeric: 0-9

d Định nghĩa biến và literal:

Có nhiều vùng và nhiều khối trong chương trình Bạn có thể chỉ định các câu lệnh trongvùng xác định dựa vào loại công việc mà câu lệnh thực hiện

data username(15) type c <= character

data reports(5) type n <= numeric

Định nghĩa biến sử dụng câu lệnh parameters

parameters variable name(size) type data type

parameters age(3) type n

Ví dụ:

Sau khi định nghĩa biến user, cần khởi tạo giá trị trong quá trình thực thi

parameters user(12) type c

Để định nghĩa biến bằng câu lệnh select-options, bạn phải chỉ định tên và tiêu đề củaselection screen nơi người dùng khởi tạo dãy giá trị cho biến

select-options title for variable name.

Ví dụ:

Trang 6

select-options Number for serial <= định nghĩa biến serial với tên selection screen làNumber.

Khi muốn giá trị của đối tượng dữ liệiu không thay đổi, hãy định nghĩa literal => sửdụng để hiển thị kết xuất

Để định nghĩa literal, sử dụng ' Ví dụ: bạn đã định nghĩa chuỗi literal "Samantha" khi

Sử dụng câu lệnh clear để thiết lập lại giá trị cho một biến

clear variable name.

Trang 7

add product to stock <= stock = stock + product

divide effort by hours <= effort = effort / hours

multiply variable1 by variable2 <= variable1 = variable1 * variable2

subtract variable1 from variable2 <= variable2 = variable1 - variable2

Bạn có thể sử dụng câu lệnh compute để thực hiện các phép tính toán học Không giốngadd, substract, divide và multiply, compute là câu lệnh đa năng cho phép bạn thực thinhiều câu câu lệnh tính toán Hơn nữa nó cho phép bạn lưu kết quả của biểu thức trong

Trang 8

một biến khác.

Ví dụ:

Tính tổng của b và c và lưu kết quả vào biến a

compute a = b + c

3 Các câu lệnh điều kiện, vòng lặp, điều khiển:

a Sử dụng các câu lệnh điều kiện

Khi tạo chương trình ABAP, bạn cần điều khiển luồng chương trình để được kết xuấtnhư mong muốn

Ví dụ: bạn muốn kiểm tra kết quả của biểu thức logical, và hiển thị kết xuất ra màn hìnhdựa vào kết quả

Các loại câu lệnh được sử dụng phổ biến để điều khiển luồng chương trình là:

+ conditional

+ control

+ looping

Câu lệnh if được sử dụng phổ biến nhất Câu lệnh bắt đầu với từ khóa if và kết thúc với

từ khóa endif Mệnh đề elseif và else được sử dụng để kiểm tra giá trị của expression1

và expression2 Nếu biểu thức là đúng, câu lệnh ABAP tương ứng được thực thi

Trang 9

Ngoài câu lệnh if, bạn có thể sử dụng câu lệnh case để thực thi các câu lệnh dựa vào giátrị của một biến Sử dụng khi muốn thực hiện hơn 3 hành động.

Câu lệnh while là câu lệnh lặp có điều kiện Nó thực thi khối chương trình nếu biểu thứclogical đúng

Trang 10

while logical expression.

=> câu lệnh write sẽ không được thực thi khi giá trị của counter là 2

Sử dụng câu lệnh exit để thoát khỏi vòng lặp Câu lệnh stop để thoát khỏi khối chươngtrình và chuyển đến khối kế tiếp Ví dụ: bạn chỉ định câu lệnh stop trong vùng "start ofselection" Khi đến stop, sự thực thi sẽ chuyển đến vùng "end of selection"

Tạo chương trình hiển thị danh sách các số từ 1 đến 20

data counter type n value 0

data out type n value 0

data final type c value 'The final value of counter is 0'

write / 'Here is the list of numbers:'

do 20 times "begining of the loop

Trang 11

counter = counter + 1 "incrementing the value

move counter to out "assign the updated value

write / out "display the updated value

enddo "end of the loop

Thay đổi code để đảm bảo giá trị 11 không được hiển thị trong danh sách Bạn cần sửdụng câu lệnh điều kiện để kiểm tra giá trị và sử dụng câu lệnh điều khiển để điều khiểnvòng lặp

data counter type n value 0

data out type n value 0

data final type c value 'The final value of counter is 0'

write / 'Here is the list of numbers:'

do 20 times "begining of the loop

counter = counter + 1 "incrementing the value

move counter to out "assign the updated value

if out = 11

continue

write / out "display the updated value

enddo "end of the loop

Thêm giá trị 13 không được hiển thị

data counter type n value 0

data out type n value 0

data final type c value 'The final value of counter is 0'

write / 'Here is the list of numbers:'

do 20 times "begining of the loop

counter = counter + 1 "incrementing the value

move counter to out "assign the updated value

if out = 11

continue

elseif out = 13

continue

write / out "display the updated value

enddo "end of the loop

Trang 12

II Tạo chương trình report:

1 Internal table:

a Định nghĩa internal table:

Chương trình report là chương trình để rút trích các dữ liệu mong muốn từ CSDL vàhiển thị dữ liệu theo định dạng cần thiết

Khi bạn chạy một chương trình report, nó hiển thị hai loại màn hình: selection vàoutput

Selection screen là màn hình đầu tiên để bạn cung cấp các tiêu chí chọn (selectioncriteria) Dựa vào nó một danh sách được hiển thị trên màn hình thứ hai gọi là outputscreen List là report mà bạn tạo

Chương trình report hông hiển thị trực tiếp dữ liệu được lưu trong table ra màn hình.Đầu tiên nó lấy dữ liệu từ table đưa vào đối tượng có kiểu dữ liệu tạm gọi là internal

Trang 13

field1 (data type) (like database_table_name_dbfield1),

field2 (data type) (like database_table_name_dbfield2),

end of internal_table_name

Hoặc định nghĩa internal table bằng cách sao chép các trường của cấu trúc trong ABAPData Dictionary (DDIC)

data : internal_table_name like copied_internal_table_name occurs n.

b Lấy dữ liệu đưa vào internal table:

Để lấy dữ liệu từ table vào internal table, bạn có thể sử dụng:

+ câu lệnh select

+ câu lệnh select endselect và append

Trang 14

Khi sử dụng câu lệnh select bạn cần xác định tên các trường mà dữ liệu bạn muốn lấy từtable Hơn nữa bạn có thể sử dụng mệnh đề into để xác định tên internal table và mệnh

đề from để chỉ định tên table

into table itab_materials from materials

Khi sử dụng câu lệnh select endselect và append, bạn đặt câu lệnh append bên trongselect endselect

select database_table_name-field1

database_table_name-field2

from database_table_name into header_line_name

*code modify the header line data comes here

append internal_table_name.

endselect

c Đọc dữ liệu trong internal table:

Sau khi lấy dữ liệu từ table đưa vào internal table, bạn có thể đọc dữ liệu từ internaltable để hiển thị ra màn hình kết xuất

Đọc dữ liệu từ internal table bằng hai câu lệnh:

+ loop at

+ read

Hiển thị chi tiết các record nằm giữa 49 và 76

loop at itab_customers from 50 to 75

"code to display the data on the screen comes here

endloop

Trang 15

Đọc chi tiết vendor có thuế lớn nhất:

read table itab_vendors index 1

d Sửa dữ liệu trong internal table:

Sau khi bạn lấy dữ liệu từ table đưa vào internal table, bạn có thể sửa dữ liệu đang tồntại trong internal table Bạn có thể sửa header line và sử dụng câu lệnh modify để cậpnhật dòng chỉ định trong internal table

modify internal_table_name index i.

Thêm tiền thưởng cho nhân viên:

insert internal_table_name index i.

Giả sử một nhân viên mới vừa vào công ty bạn Bạn cần thêm dòng vào internal table

"itab_employees"

"variable to store total records in the internal table

data : records(20) type n value 0

loop at itab_employees

"Calculating the total number of records in the table

records = records + 1

endloop

"Code to update the header line comes here

insert itab_workers index records.

e Chương trình mẫu sử dụng internal table:

Định nghĩa internal table để chứa dữ liệu bảng PO và tính khối lượng tổng cộng của mộtPO

Trang 16

Report PO Journal

data : begin of itab_PO_header occurs 0,

PO_Number like PO-Number, "PO number

PO_Group like PO-Group, "Purchasing Group

PO_Amount like PO_Items-Amount, "Total PO amount

end of itab_PO_header

Tạo internal table để lưu bảng PO_Items và tính khối lượng tổng cộng của một PO.data : begin of itab_PO_items occurs 0,

PO_Number like PO_Items-Number,

PO_Amount like PO_Items-Amount,

end of itab_PO_items

Sau khi định nghĩa internal table, bạn cần lấy dữ liệu từ table thích hợp và chèn vàointernal table tương ứng

select PO-Number PO-Group

into table itab_PO_header from PO

select PO_Items-Numer PO_Items-Amount

into table itab_PO_Items from PO_Items

Tính khối lượng tổng cộng của một PO:

"variable to store total amount of a PO

data : total_amount(20) type n value 0

endloop "loop for the itab_PO_items table ends

Sau khi tính toán, cần lưu giá trị đã tính vào internal table ‘itab_POJounal_header’:

"assigning the total PO amount to the header line of itab_PO_header

Trang 17

data: begin of itab_PO_header occurs 0,

PO_Number like PO-Number, " PO number

PO_Group like PO-Group, " Purchasing Group

PO_Amount like PO_Items-Amount , "Total PO amount

end of itab_PO_header

data: begin of itab_PO_items occurs 0,

PO_Number like PO_Items-Number,

PO_Amount like PO_Items-Amount,

end of itab_PO_items

select PO~Number PO~Group

into itab_PO_header from PO

select PO_Items~Number PO_Items~Amount

into itab_PO_items from PO_Items

" variable to store total amount of a PO

data : total_amount(20) type n value 0

Trang 18

"assigning the total PO amount to the header line of itab_PO_header

itab_PO_header-PO_Amount = total_amount

"modifying itab_PO_header with the value of its header line

modify itab_PO_header

endloop "loop for the itab_PO_header table ends

Câu lệnh append và select endselect để rút trích tất cả các dòng từ table, cập nhật dữliệu trong mỗi dòng được rút trích và sau đó insert vào internal table

Lấy dữ liệu từ table vào internal table, sử dụng select hoặc select endselect và append;đọc dữ liệu từ internal table, sử dụng loop at endloop và read table; cập nhật nội dunginternal table, sử dụng modify và insert

2 Classical report:

a Classical report:

Chương trình report cho phép bạn lấy dữ liệu từ table vào internal table, đọc dữ liệu từinternal table, thay đổi dữ liệu trong internal table và hiển thị theo định dạng mongmuốn

Có hai loại report:

+ classical report

+ interactive report

Cả classical và interactive report đều có cấu trúc modular Để tạo modular, bạn có thể

sử dụng các thành phần khác gọi là khối xử lý (processing block) Mỗi thành phần chứamột nhóm câu lệnh ABAP và được thực thi ở một thời điểm nhất định

Có hai thành phần quan trọng của classical report là event block và subroutine Trongquá trình thực thi của classical report, event block được chạy bởi môi trường thực thitrong khi subroutine được gọi từ chương trình report

Môi trường thực thi tải và chạy một event block phụ thuộc vào sự kiện xảy ra Sau khithực thi event block, điều khiển quay trở lại môi trường thực thi Phụ thuộc vào sự kiện

kế tiếp xảy ra, môi trường thực thi sẽ thực thi event block tương ứng Trong quá trìnhthực thi event block, khi câu lệnh thực thi subroutine được thấy, điều khiển đượcchuyển từ event block cho subroutine Sau khi thực thi các câu lệnh trong subroutine,

Trang 19

điều khiển quay trở lại cho người gọi event block.

b Các sự kiện trong classical report:

Sáu sự kiện trong classical report:

Không bắt buộc viết câu lệnh trong event block Nếu bạn không sử dụng event block,môi trường thực thi ABAP sẽ đặt tất cả câu lệnh ABAP trong event block mặc định:start-of-selection Trong trường hợp này, câu lệnh sẽ được thực thi tuần tự

Nếu bạn sử dụng một vài hoặc tất cả event block trong chương trình report và đặt mộtvài câu lệnh ABAP bên ngoài event block thì câu lệnh ABAP sẽ được thực thi như mộtphần của event block ‘start-of-selection’

Tuy nhiên, nếu các câu lệnh như định nghĩa biến không nằm trong event block thì cáccâu lệnh này sẽ được thực thi khi chương trình được tải và không thuộc phạm vi start-of-selection

Giả sử bạn tạo một chương trình phát sinh ra danh sách hóa đơn Để làm điều này bạncần viết câu lệnh lấy các record từ bảng "billings" bên trong event block thích hợp.report BillingInfo

tables: billing

Trang 20

parameters : charge type N.

data : begin of itab_billing occurs 0,

document_number like billing-document_number,

party like billing-party

write: / 'Billling Information'

=> câu lệnh select được thực thi khi event block ‘start-of-selection’ xảy ra

Bạn sử dụng event block ‘end-of-page’ cho các câu lệnh tạo report footer, sau đó sửdụng event block ‘end-of-selection’ cho câu lệnh cập nhật nội dung internal table Sửdụng event block ‘start-of-selection’ cho câu lệnh lấy dữ liệu từ table và sau đó sử dụngevent block ‘top-of-page’ cho câu lệnh tạo report header

report Customer_Late_Payment_Charge

data : begin of itab_customers occurs 0,

customer_name like customers-customer_name,

amount_due like customers-amount_due

Trang 21

select customer_code customer_name customer_amount_due

from customers

top-of-page

"report header

write: / 'CUSTOMER LATE PAYMENT CHARGE REPORT'

c Message trong classical report:

Trong quá trình thực thi chương trình, bạn có thể cần giao tiếp với người dùng cuối.Bạn có thể sử dụng câu lệnh message trong chương trình report để làm điều này Sửdụng câu lệnh này cũng có thể điều khiển lỗi xảy ra

message 'message_string' Type 'message_type' => message_string là thông tin bạn

muốn giao tiếp với người dùng, message_type là loại thông tin

Có sáu loại message:

Giả sử bạn cần hiển thị tài liệu mua bán dựa vào phạm vi ngày Lấy dữ liệu từ table vàointernal table tốn nhiều thời gian vì phụ thuộc vào phạm vi ngày và số record được lấyrất lớn Do đó, bạn cần hiển thị message status trong khi tiến trình fetching đang thựchiện

selection document_number sale_person date amount

from into itab_sales from sales

message 'Fetching data ' Type 'S'

endselect

Trang 22

Trong câu lệnh message, thay vì gõ message string mỗi lần, bạn có thể lưu messagestring thường xuyên sử dụng trong message class với message ID duy nhất Sau đó sửdụng message ID trong câu lệnh message để hiển thị message string được yêu cầu.message ID 'message_id' Type 'message_type'.

Bạn có thể tạo message class trên màn hình ‘Message maintenance: Inital Screen’ Để

mở màn hình này, bạn sử dụng transaction code ‘SE91’

Giả sử bạn tạo message class với ID là "ZProcessing" và lưu nó trong package "Z001"

Để tạo nó gõ Zprocessing trong trường message class => Create => Save trên thanhcông cụ chuẩn => gõ Z001 trong text box ‘package’ => Save và sau đó Continue

Giả sử bạn cần tạo message "Processing Please wait " để hiển thị mỗi khi xử lý dữ liệulâu Bạn muốn thêm message này vào message class "ZProcessing" Để làm điều này,nhấn Change, gõ "ZProgressing Pease wait " trong trường Message short text củadòng đầu tiên với message ID 000 trên tab Messages và nhấn Save

Để hiển thị message trước khi thoát chương trình, bạn sử dụng kiểu message là "A".message 'Wrong Password.' Type 'A'

Classical report là loại report đơn giản nhất để lấy dữ liệu từ table, xử lý và sau đó hiểnthị Bạn có thể điều khiển luồng bằng cách sử dụng processing block như event blockhoặc subroutine

Các sự kiện quan trọng trong classical report là initlization, at selection-screen, page, start-of-selection, end-of-page và end-of-page Bạn có thể làm cho classical reporttrả lời các sự kiện này bằng cách viết các câu lệnh bên trong event block thích hợp

Trang 23

top-of-Ngoài processing block, bạn cũng có thể sử dụng message để điều khiển luồng thực thicủa chương trình Sử dụng câu lệnh message bạn có thể giao tiếp với người dùng trongquá trình thực thi chương trình Phụ thuộc vào tình huống, bạn có thể sử dụng các loạimessage khác nhau như: A, E, I, S, W và X Bạn có thể định nghĩa message riêng củabạn để sử dụng thường xuyên, và nhóm chúng vào message class.

3 Interactive report:

a Interactive report:

Kết xuất của interactive report chứa hai loại list: basic list và secondary list

Interactive report cho phép bạn giao tiếp nhiều cách:

+ chọn dòng trong basic list

+ sử dụng menu

+ sử dụng nút nhấn

Trang 24

Bạn có thể gọi giao dịch và report khác dựa vào giao tiếp của người dùng.

Dựa vào loại giao tiếp với basic list, sự kiện tương ứng được rút trích Có 3 loại sự kiện:+ at line-selection

+ at pf<nn>

+ at user-command

Giả sử bạn tạo danh sách các dụng cụ IT của công ty bạn sử dụng internal table

"itab_ITAsset" và bảng "IT_Asset" Nhấp đối một dòng trong danh sách cơ bản, mộtdanh sách thứ hai sẽ hiển thị thông tin chỉ định của dụng cụ IT tương ứng Bạn cần viếtmột câu lệnh để tạo danh sách thứ hai trong event block thích hợp

start-of-selection

"Basic List

select asset_number acquired_date asset_value

into itab_ITAsset from IT_Asset

"code to create the secondary list comes here

Giả sử bạn có danh sách cơ bản hiển thị danh sách khách hàng của công ty bạn và các

Trang 25

sản phẩm họ mua Khi người dùng chọn một dòng trong danh sách cơ bản và nhấn F1,danh sách thứ hai thể hiện chi tiết khách hành tương ứng với dòng được chọn Khingười dùng nhấn Shift+F12, danh sách thứ hai hiển thị chi tiết sản phẩm.

"create the secondary list displaying product details here

Khi người dùng chọn 1 dòng và nhấn Enter, danh sách chi tiết vendor sẽ xuất hiện Giả

sử bạn gán function code "20" cho phím Enter

start-of-selection

"Basic list

select vendor_code name amount_outstanding

into itab_vendors from vendors

"system variable sy-ucomm stores function code of the key pressed

"code to create the secondary list comes here

endif

Giả sử bạn tạo một danh sách hiển thị tài khoản từ internal table "itab_billing" và table

"billing" Khi bạn nhấp đôi một dòng trong danh sách cơ bản, bạn cần hiển thị một danhsách thứ hai hiển thị thông tin chi tiết của khách hàng Khi người dùng chọn một dòng

và nhấn F2, một danh sách thứ hai hiển thị thông tin chi tiết của billing sẽ xuất hiện

start-of-selection

"Basic list

select * into itab_billing from billing

Trang 26

"code to create the basic list comes here

endselect

at line-selection

"create a secondary list displaying customer information here

at pf2

"create the secondary list displaying billing document here

b Trao đổi dữ liệu trong interactive report:

Bạn tạo danh sách thứ hai dựa vào dòng hoặc trường của danh sách cơ bản mà ngườidùng giao tiếp Để cung cấp tên và giá trị của trường cho danh sách thứ hai, bạn cầnchuyển tên và giá trị từ danh sách cơ bản đến danh sách thứ hai trong suốt quá trìnhthực thi report

Bạn có thể chuyển dữ liệu từ danh sách cơ bản sang danh sách thứ hai bằng hai câu lệnhphổ biến:

Trang 27

trường asset_number được lưu trong vùng Hide Khi người dùng nhấp đôi một dòngtrong danh sách cơ bản, bạn muốn sử dụng giá trị của trường asset_number và internaltable "itab_ITAllocation" để tạo danh sách thứ hai hiển thị thông tin chỉ định của dụng

cụ IT tương ứng

"basic list

select assert_number acquired_date asset_value

into itab_ITAsset from IT_Asset

"if the asset number of itab_ITAllocation table matched

"the asset number of basic list row on which the user double-clicked

"create the secondary list

get cusor Field f Value v

Giả sử bạn tạo danh sách cơ bản hiển thị danh sách khách hàng của công ty và các sảnphẩm họ mua Vào lúc runtime, nếu một người dùng chọn customer code, customername từ danh sách cơ bản, danh sách thứ hai phải hiển thị chi tiết khách hàng tương ứngnhư địa chỉ Mặt khác, danh sách thứ hai cũng hiển thị các khách hàng mua cùng sảnphẩm Để làm điều này, bạn nên rút trích tên và giá trị của trường nơi con trỏ được đặttrong quá trình tương tác của người dùng

Trang 28

data: f(20) type C,

v(10) type N

"basic list

select customer_code name product

into itab_Customer_Prod from Customer_Prod

Ngoài sử dụng event block để tạo danh sách thứ hai, bạn cần chuyển tên và giá trị củatrường mà người dùng tương tác trong danh sách cơ bản Để làm điều này, bạn có thể sửdụng hide hoặc get cursor

4 Tạo interactive report program:

a Tạo internal table:

Dữ liệu cho report được lưu trong ba bảng "Billing_BU", "Billing" và "BU" Để tạoreport, đầu tiên bạn cần tạo 3 internal table - một là tạo basic list, hai là tạo haisecondary list

Trang 29

Tạo internal table "itab_billing_bu" từ table "Bulling_BU":

data: begin of itab_billing_bu occurs 0,

document_number type Billing_BU-document_number,

BU_code type Billing_BU-BU_code,

billing_amount type billing-billing_amount,

end of itab_billing_bu

Tạo internal table "itab_billing" từ table "Billing" để tạo danh sách thứ hai hiển thịthông tin chi tiết về billing Bạn có thể sử dụng cấu trúc "ZBilling" trong DDIC:

data : itab_billing like ZBilling occurs 0

Giả sử bạn tạo internal table thứ ba "itab_bu" từ table "BU" như sau:

data: begin of itab_bu occurs 0,

BU_code type Billing_BU-BU_code,

head_name type BU-head_name,

BU_address type BU-BU_address,

end of itab_bu

Sau khi định nghĩa 3 internal table với các trường cần hiển thị trong danh sách, bạn cóthể lấy dữ liệu từ table vào internal table:

select document_number BU_code into itab_billing_bu from Billing_BU

select * into itab_billing from Billing

select * into itab_bu from BU

b Sử dụng event và message:

Bạn muốn modularize chương trình report và cho phép nó trả lời các sự kiện được yêucầu Bạn muốn chứa câu lệnh lấy dữ liệu từ các table "Billing_BU", "Billing" và "BU"trong event block thích hợp Hơn nữa, bạn muốn thêm các câu lệnh trong event block đểthực thi khi người dùng nhấp đôi vào danh sách cơ bản

"create basic list

select document_number BU_code into itab_billing_bu from from Billing_BU

at start-of-selection

" create secondary lists

select * from into itab_billing from Billing

Trang 30

select * from into itab_bu from BU.

Để tạo hai danh sách thứ hai dựa vào dòng và trường mà người dùng nhấp đôi trongdanh sách cơ bản, bạn cần rút trích tên và giá trị của trường vào lúc runtime

II Lập trình hướng đối tượng trong ABAP

1 Lớp trong ABAP:

a Đặc trưng của lập trình HĐT:

Chương trình ABAP chứa nhiều khối: khai báo dữ liệu (data declaration), selection, end-of-selection Khối chương trình được thực thi tuần tự => mô hình lậptrình thủ tục

start-of-Lập trình thủ tục sử dụng các hàm (function) và subroutine được gọi trong chương trình

Dữ liệu và hàm không liên kết với nhau

Lập trình HĐT dựa vào khái niệm lớp Một lớp là tập hợp các đối tượng có cùng thuộctính Một đối tượng là thể hiện của một lớp

Ví dụ: Có hai phòng ban: Finance và HR trong công ty, Finance và HR là các đối tượngcủa lớp Department Chúng có các thuộc tính tương tự như Department

Lập trình HĐT sử dụng các phương thức (method) Dữ liệu và phương thức được liênkết với nhau và phụ thuộc vào lớp mà chúng được định nghĩa

Thuận lợi của lập trình HĐT:

+ cho phép cài đặt mô hình nghiệp vụ

+ tái sử dụng code khi tạo chương trình mới

+ dễ hiệu chỉnh vì không ảnh hưởng đến toàn bộ chương trình

+ dễ hiểu vì chứa nhiều khối riêng nhau

Trang 31

Phần định nghĩa của một lớp là:

+ public

+ protected

+ private

Khi định nghĩa lớp, bạn xác định từ khóa class theo sau bởi tên lớp Đồng thời chỉ định

từ khóa definition hoặc implementation để chỉ phần lớp mà bạn đang định nghĩa

Trang 32

class name implementation

end class

Giả sử bạn định nghĩa lớp employee, bạn chỉ muốn lớp employee và các lớp con của nó

có thể truy cập vào biến "first_name" và phương thức "display_attributes"

data first_name(10) type c

data last_name(10) type c

"code to define the method comes here

endclass

* -*

* class name implementation *

* -*

class employee definition

"code to implement the method comes here

endclass

Thuộc tính là thành phần của lớp Nó quan trọng vì thuộc tính lưu dữ liệu trong chươngtrình Bạn có thể thao tác dữ liệu và thực hiện các thao tác logical thể tạo ra kết qủa nhưmong muốn

Trang 33

Phương thức nhận dữ liệu từ chương trình, xử lý dữ liệu và trả về kết xuất Sử dụng câulệnh methods để định nghĩa phương thức trong một lớp Bạn cần xác định tên phươngthức trong câu lệnh methods.

methods : method name

Giả sử bạn định nghĩa một phương thức "display_attributes" trong lớp "employees" Chỉ

có các đối tượng của lớp "employees" mới có thể truy cập các phương thức đó

class employees definition

methods get_name importing name(15) type c

Khi muốn trả kết xuất của phương thức cho chương trình, bạn sử dụng từ khóaexporting:

methods method name exporting variable type data type.

Ví dụ:

methods display_name exporting name(15) type c

Trang 34

Định nghĩa phương thức "display_info" chỉ có lớp "employee" có thể truy cập:

class employee definition

methods get_attributes importing flight_num type c

data name type string

Trang 35

data flight_list type ref to airplane.

create object flight_list

flight_list->get_attributes(flight_num(5) = 'JJ25')

Event là một loại phương thức được rút trích dựa vào điều kiện mà bạn chỉ định Chỉđịnh một event thực thi khối chương trình gọi là event handlers

Định nghĩa event bằng câu lệnh events:

events event name.

Xác định tham số kết xuất cho sự kiện, sử dụng từ khóa exporting với các tham số

events event name exporting variable name type data type.

Ví dụ:

events increment exporting counter(3) type n

Định nghĩa một event handler để xác định code cần được thực thi khi một sự kiện đượcrút trích Sử dụng câu lệnh set handler để định nghĩa event handler

set handler object name->method name for variable.

Ví dụ:

set handler emp_name->display_name for name

=> sử dụng đối tượng "emp_name" để gọi phương thức "display_name" khi sự kiện rúttrích event handler Biến "name" là tham số đầu vào cho phương thức

Khi bạn định nghĩa một event trong lớp, bạn có thể rút trích sự kiện trong chương trìnhbằng câu lệnh raise event

raise event event name.

Giả sử bạn kiểm tra giá trị "counter" và rút trích event "display_value" khi giá trị là

"10" Khi được rút trích, sự kiện gọi phương thức "display" để hiển thị message "The

Trang 36

value of counter equals 10" Bạn cần định nghĩa event handler cho event.

class numbers definition

private section

events display_value exporting value type n

methods display

endclass

class numbers implementation

"code to implement the method comes here

set handler emp_name->display for counter

Bạn muốn định nghĩa event "display_info" trong lớp "products" Bạn muốn rút tríchevent nếu giá trị của product code là "pp0023" Khi event handler được rút trích, bạnmuốn gọi phương thức "define" để hiển thị product code

class products definition

Trang 37

"code to create an object comes here

set handler r_dis->display for code

Trước khi gọi phương thức, cần định nghĩa một biến của lớp

data variable name type ref to class name.

Ví dụ:

dat flight_num type ref to airplane

Sau khi định nghĩa một biến lớp, bạn sử dụng câu lệnh create để tạo đối tượng Sau đógọi phương thức của lớp bằng cách sử dụng đối tượng này

create object object name.

object name-> method name().

Ví dụ:

start-of-selection

data flight_num type ref to airplane

create object flight_num

Trang 38

data r_dis type ref to employee.

create object r_dis

r_dis->display_name()

Note:

ABAP hỗ trợ hai mô hình lập trình: thủ tục và hướng đối tượng Lập trình HĐT dựa vàokhái niệm lớp Dữ liệu và phương thức trong chương trình HĐT được liên kết với nhau

và phụ thuộc vào lớp mà bạn định nghĩa chúng

Bạn định nghĩa thành phần: thuộc tính, sự kiện, phương thức của lớp trong các vùng:public, protected, private

Phương thức nhận dữ liệu từ chương trình, xử lý dữ liệu và trả về kết xuất cho chươngtrình

Sự kiện được rút trích dựa vào điều kiện Khi một sự kiện được rút trích, khối chươngtrình gọi event handers sẽ được thực thi

Khi bạn định nghĩa hoặc cài đặt một lớp, bạn có thể gọi các phương thức của lớp bằngcách khởi tạo lớp

2 Đặc tính của các đối tượng:

a Đặc tính của các đối tượng:

Các đối tượng ABAP cung cấp nhiều đặc tính như: kế thừa, đóng gói, đa hình Các đặctính này cho phép bạn cài đặt các ngữ cảnh phức tạp mà không cần các đoạn mã dài.Hơn nữa nó cho phép bạn cài đặt dữ liệu bảo mật

Các lớp con kế thừa các thành phần: phương thức, sự kiện, thuộc tính Ví dụ: lớp con

"boeing" và "airbus" kế thừa các thuộc tính của lớp cha "airplane"

Lớp con có thể truy cập các thành phần public và protected của cha Hơn nữa ngoài cácthành phần của lớp cha, lớp con có thể tạo thành phần riêng của nó

Trang 39

Tính đóng gói đảm bảo dữ liệu của đối tượng không được truy cập bên ngoài lớp Ví dụ:nếu bạn định nghĩa phương thức "fuel_efficiency" trong lớp "vehicle", lớp con "car" và

"truck" có thể truy cập phương thức Tuy nhiên, cài đặt chi tiết việc tính toán bị dấu đốivới lớp con

Bạn định nghĩa thuộc tính, phương thức, sự kiện trong vùng public, protected, privatecủa lớp dựa vào loại truy cập mà bạn muốn cho phép Ví dụ: nếu bạn định nghĩaphương thức private trong lớp, chỉ lớp đó mới có thể truy cập phương thức

Đa hình cho phép bạn cài đặt một phương thức theo nhiều cách Nó cho phép mộtphương thức tạo ra nhiều loại kết xuất khác nhau khi nhiều lớp con gọi nó

Ví dụ: bạn định nghĩa một phương thức "total_fare" để tính toán tiền máy bay dựa vàokhoảng cách du lịch Có hai lớp "business" và "economy" sử dụng cùng một phươngthức tính tiền Tuy nhiên cài đặt thì khác nhau trong hai lớp

Trang 40

b Cài đặc tính kế thừa:

Định nghĩa lớp con, sử dụng từ khóa inheriting trong câu lệnh class:

class subclass definition inheriting from superclass

statements

endclass

Giả sử bạn định nghĩa phương thức "total_stock" trong vùng protected của lớp

"raw_material" Ngoài ra, còn tạo lớp con "lcd_screen" kế thừa nó

class raw_material definition

protected section

data stock type n

methods : total_stock redefinition

endclass

class raw_material implementation

"code to implement the method comes here

Ngày đăng: 06/07/2014, 02:20

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w