ABAP中创建动态内表的三种方法(转载)
BAP中創建動態內表的三種方法
第一種:
如果我們需要的動態內表字段或者動態工作區和數據字典中的類型一致,可以直接使用CREATE DATA生成,當然也可以是自定義類型。
比如要產生和數據表MARA結構一致的動態內表:
DATA : DY_TABLE TYPE REF TO DATA, WA_LINE TYPE REF TO DATA.
FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE .
CREATE DATA DY_TABLE TYPE TABLE OF MARA.?
ASSIGN DY_TABLE->* TO <DYN_TABLE>.
CREATE DATA WA_LINE LIKE LINE OF <DYN_TABLE>.
ASSIGN WA_LINE->* TO <DYN_WA>.
如果在程序中需要動態生成多個不同的動態內表,可以將表名設置為變量
CREATE DATA DY_TABLE TYPE TABLE OF (tabname).
第二種:
如果需要對動態內表進行輸出,控制輸出順序等屬性??梢允褂孟率龇椒?#xff1a;
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_CLIENT_NEVER_DISPLAY = ''
I_STRUCTURE_NAME = TABNAME
CHANGING
CT_FIELDCAT = IT_STRUCTURE
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
使用該方法創建輸入的tabname對應的字段目錄
之后根據該字段目錄產生與之對應的動態內表結構
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = IT_STRUCTURE
* I_LENGTH_IN_BYTE = 'X'
IMPORTING
EP_TABLE = DY_TABLE.
ASSIGN DY_TABLE->* TO <DYN_TABLE>.
動態工作區的產生跟第一種一樣。
該方法有一種弊端,僅能連續使用36次。即改方法產生動態是使用創建子例程的方法,當連續使用36次時,會出現子例程池溢出的異常,以為該方法是針對ALV技術的處理,所以用于其它地方的時候需要慎重。
第三種:
第三種的基本思路跟第二種是一樣的,只是使用的類和方法不一樣,導致輸入的數據不一樣。
首先產生結構
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_CLIENT_NEVER_DISPLAY = ''
I_STRUCTURE_NAME = TABNAME
CHANGING
CT_FIELDCAT = IT_STRUCTURE
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
根據字段產生的字段目錄生成相應的接口參數ZCOMPONENTS
DATA ZCOMPONENTS TYPE ABAP_COMPONENT_TAB. 在聲明該變量前要聲明 TYPE-POOLS:ABAP.
ABAP_COMPONENT_TAB這個結構中的字段如下所示:
name TYPE string,
type TYPE REF TO cl_abap_datadescr,
as_include TYPE abap_bool,
suffix TYPE string,
?
所以循環之前產生的字段目錄內表,
name字段是結構名或者表名 即TABNAME
type是一個對象,可以使用 CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME 這個方法得到,其中 P_NAME 這個參數是表名或結構名+字段名 type 使用?=符號來獲取 P_DESCR_REF 的實例
后兩個可以不填
?
產生結構
CALL METHOD CL_ABAP_STRUCTDESCR=>CREATE
EXPORTING
P_COMPONENTS = ZCOMPONENTS?
RECEIVING
P_RESULT = ZRESULT .
產生表
CALL METHOD CL_ABAP_TABLEDESCR=>CREATE
EXPORTING
P_LINE_TYPE = ZRESULT
RECEIVING
P_RESULT = WRESULT.
CREATE DATA WA_LINE TYPE HANDLE ZRESULT.
CREATE DATA DYN_TABLE TYPE HANDLE WRESULT.
該方法可以避免方法2的弊端。
轉載于:https://www.cnblogs.com/yanglikun/p/4177973.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的ABAP中创建动态内表的三种方法(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP .NET MVC 之Entity
- 下一篇: 逆向思维求素数