1. 程式人生 > >ABAP筆記

ABAP筆記

eth abap all length clist creat data 發出 ror

  ABAP程序開發,經常會遇到報表開發需求。使用ABAP的Report類型程序開發報表十分便利,用很少的代碼就可以快速開發出一個報表。這種報表需求,拋開各種細枝末節,都可以歸結為“三步走”:1、選擇屏幕;2、OPEN SQL;3、結果呈現。一般情況下,在編寫報表之前,都是知道取數的表是哪個表的,但是,如果想要讓用戶輸入取數的表,然後再從這個表裏把所有數據都取出來,呈現在屏幕上,這樣的需求,涉及到動態編程。因為報表運行前,並不知道會從哪個數據表裏取數據,也就無法參照聲明出用來存放數據的結構和內表,只有用戶輸入表名,點擊報表運行以後,才會知道所需要的內表的結構信息,這些信息,需要動態的獲取,並動態的聲明出所需的內表,然後動態的取出數據存放在這個內表中,最後呈現在屏幕上。

 1 REPORT zm_test01.
 2 "選擇屏幕提取一個用戶輸入的字符串
 3 PARAMETERS p_name TYPE c LENGTH 20 DEFAULT sflight.
 4 "r_dataob是一個數據引用,data類型。
 5 "<f_tb>為字段符號。可以指向任何內表。
 6 DATA r_dataob TYPE REF TO data.
 7 FIELD-SYMBOLS <f_tb> TYPE ANY TABLE.
 8 "錯誤處理用來處理用戶輸入的字符串不是數據字典裏的內表的情況
 9 TRY .
10     "定義錯誤類型
11     DATA
r_err TYPE REF TO cx_sy_create_data_error. 12 "這裏是關鍵,指向名稱為用戶輸入的p_name的內表指針 13 CREATE DATA r_dataob TYPE TABLE OF (p_name). 14 CATCH cx_sy_create_data_error INTO r_err. "捕捉定義的錯誤類型 15 DATA err_txt TYPE string. 16 err_txt = r_err->get_text( ). 17 WRITE: 不存在的表, err_txt. 18 "
使用EXIT關鍵字結束程序,從而下面的代碼就不會繼續執行了, 19 "否則雖然捕捉到了錯誤,但是程序還會繼續向下運行 20 EXIT. 21 ENDTRY. 22 "將指針解引用,解引用後為其指向的內表,然後將字段符號<f_tb>指向這個內表 23 "此時字段符號才會有值 24 "之後需要用這個內表,只需要使用字段符號即可 25 ASSIGN r_dataob->* TO <f_tb>. 26 "在這個select語句中,p_name為用戶輸入的取數據的表,而<f_tb>字段符號為根據用戶輸入的字符串動態生成的內表。 27 "註意在select語句中可以使用字段符號,但是不能直接把解引用放進來。也就是說,字段符號是很有必要的。 28 SELECT * FROM (p_name) INTO TABLE <f_tb>. 29 "使用savl快速構建報表簡單呈現 30 DATA r_alv_tb TYPE REF TO cl_salv_table. 31 DATA r_alv_funclist TYPE REF TO cl_salv_functions_list. 32 TRY. 33 CALL METHOD cl_salv_table=>factory 34 IMPORTING 35 r_salv_table = r_alv_tb 36 CHANGING 37 t_table = <f_tb>. 38 CATCH cx_salv_msg . 39 ENDTRY. 40 r_alv_funclist = r_alv_tb->get_functions( ). 41 r_alv_funclist->set_all( ). 42 r_alv_tb->display( ).

ABAP筆記