ABAP動態內表的多方面闡述

一、欄位長度的設定

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-02 20:34
下一篇 2024-12-02 20:34

相關推薦

  • QML 動態載入實踐

    探討 QML 框架下動態載入實現的方法和技巧。 一、實現動態載入的方法 QML 支持從 JavaScript 中動態指定需要載入的 QML 組件,並放置到運行時指定的位置。這種技術…

    編程 2025-04-29
  • Python愛心代碼動態

    本文將從多個方面詳細闡述Python愛心代碼動態,包括實現基本原理、應用場景、代碼示例等。 一、實現基本原理 Python愛心代碼動態使用turtle模塊實現。在繪製一個心形的基礎…

    編程 2025-04-29
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • 使用easypoi創建多個動態表頭

    本文將詳細介紹如何使用easypoi創建多個動態表頭,讓表格更加靈活和具有可讀性。 一、創建單個動態表頭 easypoi是一個基於POI操作Excel的Java框架,支持通過註解的…

    編程 2025-04-28
  • Python動態輸入: 從基礎使用到應用實例

    Python是一種高級編程語言,因其簡單易學和可讀性而備受歡迎。Python允許程序員通過標準輸入或命令行獲得用戶輸入,這使得Python語言無法預測或控制輸入。在本文中,我們將詳…

    編程 2025-04-28
  • Python動態規劃求解公共子串

    本文將從以下多個方面對公共子串Python動態規划進行詳細闡述: 一、什麼是公共子串? 公共子串是指在兩個字元串中同時出現且連續的子串。例如,字元串”ABCD&#822…

    編程 2025-04-27
  • 使用Thymeleaf動態渲染下拉框

    本文將從下面幾個方面,詳細闡述如何使用Thymeleaf動態渲染下拉框: 一、Thymeleaf是什麼 Thymeleaf是一款Java模板引擎,可用於Web和非Web環境中的應用…

    編程 2025-04-27
  • 動態規劃例題用法介紹

    本文將以動態規劃(Dynamic Programming, DP)例題為中心,深入闡述動態規劃的原理和應用。 一、最長公共子序列問題 最長公共子序列問題(Longest Commo…

    編程 2025-04-27
  • Python取較大值的多方面

    Python是一款流行的編程語言,廣泛應用於數據分析、科學計算、Web開發等領域。作為一名全能開發工程師,了解Python的取較大值方法非常必要。本文將從多個方面對Python取較…

    編程 2025-04-27
  • IPv6動態域名解析的實現和應用

    一、IPv6的動態域名解析概述 IPv6是下一代互聯網協議,解決了IPv4中IP地址不足的問題。IPv6的地址長度為128位,地址空間巨大,同時支持更多的安全和網路管理特性。動態域…

    編程 2025-04-25

發表回復

登錄後才能評論