一、欄位長度的設定
1、首先,我們需要了解動態內表的特點:內表結構可以在程序運行時動態創建,可以在程序運行時根據需求添加欄位,而且可以在程序運行時決定欄位的長度。
2、以下是動態內表創建和欄位長度設定的代碼實例:
TYPES: BEGIN OF ty_student,
name TYPE string,
END OF ty_student.
DATA: wa_student TYPE ty_student,
lt_student TYPE STANDARD TABLE OF ty_student.
FIELD-SYMBOLS: <fs_fieldname> TYPE ANY.
ASSIGN COMPONENT 'NAME' OF STRUCTURE wa_student TO <fs_fieldname>.
IF sy-subrc EQ 0.
ASSIGN <fs_fieldname> TO FIELD-SYMBOL().
DESCRIBE FIELD <fs_name> LENGTH DATA(lv_length).
IF sy-subrc EQ 0.
WRITE:/ 'FieldName:', <fs_name>, 'FieldLength:', lv_length.
ENDIF.
ENDIF.
二、動態內表的創建
1、動態內表的創建與靜態內表的創建有很大的不同。在運行時創建動態內表需要通過函數 module 函數動態定義結構體。在函數 module return 後,再為 ABAP 動態內表添加行。
2、以下是動態內表創建的代碼實例:
DATA: lr_type TYPE REF TO cl_abap_structdescr,
lr_table TYPE REF TO data.
lr_type ?= cl_abap_structdescr=>describe_by_name( 'ZDYNAMIC' ).
CREATE DATA lr_table TYPE HANDLE lr_type.
ASSIGN lr_table->* TO FIELD-SYMBOL().
三、ABAP內錶轉CSV文件
1、將 ABAP 內表數據存儲到 CSV 文件中是一種比較常見的操作。我們可以通過使用 GUI_DOWNLOAD 函數,將 ABAP 動態內表的數據存儲到 CSV 文件中。
2、以下是將 ABAP 動態內錶轉換為 CSV 文件的代碼實例:
DATA: lv_file TYPE string VALUE 'C:\abap.csv'.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_file
filetype = 'ASC'
TABLES
data_tab = lt_student
EXCEPTIONS
OTHERS = 1.
四、ABAP動態SQL
1、ABAP 動態 SQL 是指在程序運行時生成 SQL 語句,然後通過 EXEC SQL 語句來執行它。 以下是動態 SQL 調用 ABAP 動態內表的代碼實例:
DATA: lv_select TYPE string,
lv_where TYPE string,
lt_result TYPE STANDARD TABLE OF ty_student.
lv_select = 'SELECT NAME FROM ' && 'LT_STUDENT'.
lv_where = ' WHERE NAME LIKE ''M%'' '.
lv_select = lv_select && lv_where.
EXEC SQL.
PREPARE stmt FROM :lv_select.
ENDEXEC.
EXEC SQL.
DECLARE c CURSOR FOR stmt.
ENDEXEC.
EXEC SQL.
OPEN c.
ENDEXEC.
DO.
EXEC SQL.
FETCH NEXT c INTO :wa_student-name.
ENDEXEC.
IF sy-subrc 0.
EXIT.
ENDIF.
APPEND wa_student TO lt_result.
ENDDO.
EXEC SQL.
CLOSE c.
ENDEXEC.
五、ABAP動態語句
1、ABAP 動態語句允許我們在程序運行時創建 ABAP 語句,並且可以根據需要添加或移除變數和其他條件。以下是動態調用 ABAP 動態內表的代碼實例:
DATA: lv_fieldname TYPE string VALUE 'NAME',
lv_value TYPE string VALUE 'Mary'.
CONCATENATE 'lt_student-' lv_fieldname ' = ''' lv_value ''''
INTO DATA(lv_code).
CALL METHOD cl_abap_dyn_prg_create=>create_dyn_program
EXPORTING
program_name = 'ZDYNAMIC'
show_errors_in_browser = abap_true
EXCEPTIONS
program_generation_error = 1
OTHERS = 2.
DATA(lo_dynamic_program) = cl_abap_dyn_prg_create=>get_dynamic_program( program_name = 'ZDYNAMIC' ).
CALL METHOD lo_dynamic_program->run
EXPORTING
program_name = 'ZDYNAMIC'
top = '1'
dynpro_number = '1000'
EXCEPTIONS
program_error = 1
OTHERS = 2.
六、ABAP 動態結構
1、ABAP 動態結構允許我們在程序運行時動態創建和修改結構體。以下是動態創建結構體的代碼實例:
DATA: lr_type TYPE REF TO cl_abap_structdescr,
lr_field TYPE REF TO cl_abap_typedescr.
lr_type = cl_abap_structdescr=>create( ).
LR_FIELD = CL_ABAP_DATATYPE_DESCR=>DESCRIBE_BY_NAME( 'STRING' ).
CALL METHOD lr_type->ADD_COMPONENT
EXPORTING
name = 'STUDENT_NAME'
type = lr_field.
CREATE DATA lr_table TYPE HANDLE lr_type.
ASSIGN lr_table->* TO FIELD-SYMBOL().
七、ABAP動態選擇屏幕
1、通過使用 ABAP 動態選擇屏幕,我們可以讓用戶在運行時選擇需要分析的信息。以下是動態選擇屏幕的代碼實例:
DATA: lt_fields TYPE STANDARD TABLE OF dfies,
lt_mask TYPE STANDARD TABLE OF dfies.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'LT_STUDENT'
i_inclname = sy-repid
i_bypassing_buffer = abap_true
CHANGING
ct_fieldcat = lt_fields
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
internal_error = 3
OTHERS = 4.
FIELD-SYMBOLS: <ls_fieldcat> TYPE dfies.
LOOP AT lt_fields ASSIGNING <ls_fieldcat>.
APPEND VALUE #( fieldname = <ls_fieldcat>-fieldname
position = <ls_fieldcat>-position
outputlen = <ls_fieldcat>-outputlen )
TO lt_mask.
ENDLOOP.
IF lt_mask IS NOT INITIAL.
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
i_title = 'Choose Fields'
iv_fieldname = 'FIELDNAME'
it_mandatory_cols = lt_mask
IMPORTING
et_fieldname = lt_chosenfields
EXCEPTIONS
OTHERS = 1.
ENDIF.
八、ABAP動態賦值
1、我們可以使用 ABAP 動態賦值將動態內表與其他內表進行結合。以下是動態賦值的代碼實例:
TYPES: BEGIN OF ty_student_2,
name TYPE string,
age TYPE i,
END OF ty_student_2.
DATA: lt_student_2 TYPE STANDARD TABLE OF ty_student_2,
lt_student_complete TYPE STANDARD TABLE OF ty_student.
FIELD-SYMBOLS: <fs_fieldname> TYPE any.
LOOP AT lt_student REFERENCE INTO DATA(lr_student).
CLEAR lt_student_2.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE lr_student->* TO <fs_fieldname>.
IF sy-subrc 0.
EXIT.
ENDIF.
APPEND <fs_fieldname> TO lt_student_2.
ENDDO.
APPEND lt_student_2 TO lt_student_complete.
ENDLOOP.
九、ABAP 動態 where 條件選取
1、使用 ABAP 動態 where 語句,我們可以在運行時選擇符合某些條件的記錄,以便進行進一步的操作。以下是 ABAP 動態 where 條件選取的代碼實例:
DATA: lv_where TYPE string,
lt_student_filtered TYPE STANDARD TABLE OF ty_student.
lv_where = 'WHERE NAME LIKE ''M%'' AND AGE < 25'.
REFRESH lt_student_filtered.
SELECT * FROM lt_student INTO TABLE lt_student_filtered
(lv_where).
總結
本文介紹了多方面的 ABAP 動態內表的特點和用法,包括欄位長度設定、動態內表創建、內錶轉 CSV,動態 SQL,動態語句,動態結構,動態選擇屏幕,動態賦值和動態 where 條件選取等等。這些技巧能夠幫助開發人員更加靈活地應對不同的需求,提高開發效率。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/195456.html
微信掃一掃
支付寶掃一掃