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/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

发表回复

登录后才能评论