本實(shí)踐通過(guò)程序編輯器(SE38)即可完成听隐,編寫(xiě)的代碼將有如下幾部分組成,按開(kāi)發(fā)人員風(fēng)格不同风范,其組成部分并非強(qiáng)制一致沪么。
No | 部分 | 說(shuō)明 |
---|---|---|
1 | 程序聲明 | 聲明本程序執(zhí)行后是否包含標(biāo)準(zhǔn)標(biāo)題禽车,數(shù)據(jù)輸出寬度和每頁(yè)的行數(shù)量為多少 |
2 | 對(duì)象定義 | 通過(guò)定義變量或常量或要使用的表結(jié)構(gòu)等刊殉,以在程序執(zhí)行過(guò)程中計(jì)算和存儲(chǔ)臨時(shí)值 |
3 | 類(lèi)的定義 | 定義一個(gè)類(lèi)州胳,類(lèi)中包含公共區(qū)域和私有區(qū)域 |
4 | 類(lèi)的方法 | 從表中獲得員工數(shù)據(jù)并存儲(chǔ)到變量以待后續(xù)輸出 |
5 | 數(shù)據(jù)輸出 | 創(chuàng)建對(duì)象實(shí)例并調(diào)用方法栓撞,并按需求進(jìn)行數(shù)據(jù)的輸出 |
1、程序聲明
程序聲明部分代碼如下:
REPORT zu0601_employee_method.
REPORT 程序名稱(chēng)捌归,是對(duì)程序的定義惜索,表明此程序代碼不是FUNCTION MODULE(功能函數(shù))剃浇,不是CLASS(類(lèi)),而是可以執(zhí)行的可以輸出數(shù)據(jù)的此程序角塑;這是對(duì)程序最基本的聲明淘讥,且必須存在的部分蒲列。
2、對(duì)象定義
對(duì)象定義部分代碼如下:
******對(duì)象定義*****
CLASS local_employee DEFINITION DEFERRED. "未定義本地類(lèi)
DATA: cl_ref TYPE REF TO local_employee,
out_emp_id TYPE ztemployee-employeeid,
out_emp_sex TYPE ztemployee-sex,
out_emp_newid TYPE ztemployee-employeeid,
writestr(20) TYPE c.
PARAMETERS p_emp_id TYPE ztemployee-employeeid.
如上代碼侥猩,首先通過(guò)預(yù)定義一個(gè)本地類(lèi)“l(fā)ocal_employee”抵赢,此類(lèi)將在后續(xù)步驟中進(jìn)行定義和實(shí)現(xiàn)铅鲤;然后參考此類(lèi)定義了一個(gè)cl_ref的對(duì)象,以在程序執(zhí)行時(shí)創(chuàng)建員工對(duì)象實(shí)例腔剂;同時(shí)定義了變量: out_emp_id(員工ID)驼仪、 out_emp_sex(性別)袜漩、out_emp_newid(最新員工ID)宙攻、writestr(性別)介褥,以在程序執(zhí)行時(shí)存儲(chǔ)獲得的員工信息以待輸出柔滔;
最后通過(guò)PARAMETERS定義了一個(gè)初始輸入框以輸入員工ID。
3形真、類(lèi)的定義
在對(duì)象預(yù)定義local_employee類(lèi)后超全,還需要進(jìn)行類(lèi)的詳細(xì)定義,包括類(lèi)所包含的方法蛾坯、屬性脉课,以及各方法改览、屬性的訪問(wèn)控制級(jí)別:公開(kāi)(PUBLIC)、保護(hù)(PROTECTED)、私有(PRIVATE)庆揩。詳細(xì)代碼如下跌穗。
CLASS local_employee DEFINITION.
PUBLIC SECTION. "公有成員
METHODS get_emp_lastid "獲得最后一個(gè)員工ID
RETURNING
VALUE(re_emp_id) TYPE ztemployee-employeeid.
METHODS get_emp_byid "指定員工ID
IMPORTING
VALUE(im_emp_id) TYPE ztemployee-employeeid.
METHODS get_emp_sex "獲得員工的性別
RETURNING
VALUE(re_emp_sex) TYPE ztemployee-sex
EXCEPTIONS no_data.
METHODS show_emp_maxid. "輸出最后的員工ID
METHODS set_emp_newid "設(shè)置新的員工ID
RETURNING
VALUE(re_newemp_id) TYPE ztemployee-employeeid.
PRIVATE SECTION. "私有成員
DATA:emp_maxid TYPE ztemployee-employeeid, "員工類(lèi)的最大員工id值
emp_id TYPE ztemployee-employeeid. "員工類(lèi)的員工id
ENDCLASS.
通過(guò)如上代碼蚌吸,定義了類(lèi)local_employee有4種方法:get_emp_lastid(獲得最后一個(gè)員工ID)羹唠、get_emp_byid(根據(jù)輸入值獲得員工)娄昆、get_emp_sex(獲得員工性別)缝彬、show_emp_maxid(輸出最后員工ID)谷浅、set_emp_newid(設(shè)置新的ID),這些方法都是在PUBLIC SECTION中撼玄,表明對(duì)外公開(kāi)墩邀;另外定義了2個(gè)屬性emp_maxid(員工的最大ID)磕蒲、emp_id(員工對(duì)象的ID),這2個(gè)屬性都是在PRIVATE SECTION中兔院,表明只能在對(duì)象的內(nèi)部訪問(wèn)站削。
4许起、類(lèi)方法的實(shí)現(xiàn)
在《類(lèi)的定義》中,只是說(shuō)明類(lèi)包含了哪些方法哪些屬性惦积,但并沒(méi)有說(shuō)明方法的具體實(shí)現(xiàn)猛频、屬性的賦值等鹿寻,在本部分則進(jìn)行這些方法、屬性賦值的實(shí)現(xiàn)坦敌。
CLASS local_employee IMPLEMENTATION.
METHOD get_emp_lastid.
SELECT MAX( employeeid ) FROM ztemployee INTO emp_maxid. "從員工表中獲得最大員工ID值
emp_id = emp_maxid. "賦值給員工類(lèi)中的emp_id屬性
re_emp_id = emp_id. "賦值給方法的輸出參數(shù)re_emp_id
ENDMETHOD.
METHOD get_emp_byid.
emp_id = im_emp_id. "輸入值直接賦值給員工類(lèi)的emp_id屬性
ENDMETHOD.
METHOD get_emp_sex.
SELECT SINGLE sex FROM ztemployee INTO re_emp_sex "根據(jù)員工類(lèi)的emp_id屬性值從表獲得性別
WHERE employeeid = emp_id.
IF re_emp_sex IS INITIAL.
RAISE no_data.
ENDIF.
ENDMETHOD.
METHOD show_emp_maxid.
WRITE:/5 '最后員工ID:' ,20 emp_maxid. "輸出員工類(lèi)中的emp_maxid屬性值
ENDMETHOD.
METHOD set_emp_newid.
DATA new_id(4) TYPE n.
new_id = emp_maxid+1(4). "根據(jù)員工類(lèi)中的emp_maxid屬性值得到新的ID
new_id = new_id + 1.
re_newemp_id = 'E' && new_id.
ENDMETHOD.
ENDCLASS.
代碼說(shuō)明如下:
get_emp_lastid: 通過(guò)OPEN SQL從員工表中獲得最大ID號(hào)狱窘;
get_emp_byid: 獲取選擇界面輸入的員工ID號(hào)训柴;
get_emp_sex: 根據(jù)員工ID從員工表中獲得性別,并判斷性別是否為空洗鸵,空則拋出異常仗嗦;
show_emp_maxid: 輸出員工類(lèi)中的emp_maxid值稀拐;
set_emp_newid: 根據(jù)最大員工ID號(hào),計(jì)算出最新ID號(hào)铲咨。
5蜓洪、數(shù)據(jù)輸出
在前面各個(gè)部分完成后隆檀,則可在START-OF-SELECTION事件中,通過(guò)創(chuàng)建對(duì)象實(shí)例并調(diào)用方法泉坐,獲得和輸出數(shù)據(jù)。
*&----------------------------------------------------------------------*
*& START-OF-SELECTION
*&----------------------------------------------------------------------*
START-OF-SELECTION.
CREATE OBJECT cl_ref. "創(chuàng)建對(duì)象
CALL METHOD cl_ref->get_emp_byid "調(diào)用方法的方式1
EXPORTING
im_emp_id = p_emp_id.
CALL METHOD cl_ref->get_emp_sex
RECEIVING
re_emp_sex = out_emp_sex
EXCEPTIONS
no_data = 1.
** cl_ref->get_emp_byid( p_emp_id ). "調(diào)用方法的方式2
** out_emp_sex = cl_ref->get_emp_sex( ).
IF sy-subrc <> 0.
writestr = '沒(méi)有獲得性別'.
ELSE.
writestr = out_emp_sex.
ENDIF.
WRITE:/5 '輸入員工ID', 20 p_emp_id,
/5 '輸入員工性別:',20 writestr.
SKIP.
out_emp_id = cl_ref->get_emp_lastid( ).
out_emp_sex = cl_ref->get_emp_sex( ).
WRITE:/5 '最后員工ID', 20 out_emp_id,
/5 '最后員工性別:',20 out_emp_sex.
SKIP.
cl_ref->show_emp_maxid( ).
out_emp_newid = cl_ref->set_emp_newid( ).
WRITE:/5 '最新員工ID:',20 out_emp_newid.
CLEAR cl_ref.
在如上代碼中:
首先通過(guò)CREATE創(chuàng)建對(duì)象的實(shí)例裳仆;
然后再通過(guò)CALL METHOD語(yǔ)句調(diào)用方法獲得相應(yīng)數(shù)據(jù)或執(zhí)行相應(yīng)語(yǔ)句腕让,并根據(jù)獲得的數(shù)據(jù)進(jìn)行處理;
最后通過(guò)語(yǔ)句CLEAR清理對(duì)象內(nèi)容歧斟。