動態的實現任意表的ALV顯示02
第一部分:程式框架
REPORT ZALV_20090304_EVENT.
INCLUDE ZALV_DATA_INTI.
INCLUDE ZALV_EVENT_F01.
START-OF-SELECTION.
PERFORM SUB_ALV_DATA_GET.
第二部分:INCLUDE ZALV_DATA_INTI.
TYPE-POOLS:ABAP.
PARAMETERS P_NAME TYPE OBJNAME.
DATA LT_TABLE TYPE TABLE OF DFIES.
DATA LS_TABLE TYPE DFIES.
CALL FUNCTION 'DDIF_NAMETAB_GET'
EXPORTING
TABNAME = P_NAME
TABLES
* X031L_TAB =
DFIES_TAB = LT_TABLE
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DATA LR_STRUC TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA LR_TABLE TYPE REF TO CL_ABAP_TABLEDESCR.
DATA LR_TYPE TYPE REF TO CL_ABAP_TYPEDESCR.
DATA LR_DATA TYPE REF TO CL_ABAP_DATADESCR.
DATA L_STRING TYPE STRING.
DATA LT_COMP TYPE ABAP_COMPONENT_TAB.
DATA LS_COMP LIKE LINE OF LT_COMP.
DATA E_WA TYPE REF TO DATA.
DATA E_TABLE TYPE REF TO DATA.
FIELD-SYMBOLS
FIELD-SYMBOLS
LOOP AT LT_TABLE INTO LS_TABLE.
CONCATENATE LS_TABLE-TABNAME '-' LS_TABLE-FIELDNAME INTO L_STRING.
* L_STRING = LS_COMP-NAME.
LS_COMP-NAME = LS_TABLE-FIELDNAME.
CALL METHOD CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME
EXPORTING
P_NAME = L_STRING
RECEIVING
P_DESCR_REF = LR_TYPE
EXCEPTIONS
TYPE_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LS_COMP-TYPE ?= LR_TYPE.
APPEND LS_COMP TO LT_COMP.
CLEAR LS_COMP.
ENDLOOP.
CALL METHOD CL_ABAP_STRUCTDESCR=>CREATE
EXPORTING
P_COMPONENTS = LT_COMP
RECEIVING
P_RESULT = LR_STRUC
.
CALL METHOD CL_ABAP_TABLEDESCR=>CREATE
EXPORTING
P_LINE_TYPE = LR_STRUC
RECEIVING
P_RESULT = LR_TABLE
.
CREATE DATA E_WA TYPE HANDLE LR_STRUC.
CREATE DATA E_TABLE TYPE HANDLE LR_TABLE.
ASSIGN E_WA->* TO
ASSIGN E_TABLE->* TO
第三部分:INCLUDE ZALV_EVENT_F01.
FORM SUB_ALV_DATA_GET .
SELECT * INTO CORRESPONDING FIELDS OF TABLE
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_STRUCTURE_NAME = P_NAME
TABLES
T_OUTTAB =
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " SUB_ALV_DATA_GET
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ABAP動態建立表結構的方法
DATA: LR_EXCEPTION TYPE REF TO CX_ROOT.
DATA: LT_COMP TYPE ABAP_COMPONENT_TAB.
DATA: LS_COMP LIKE LINE OF LT_COMP.
DATA: L_FIELD TYPE STRING.
DATA: LR_STRUC TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA: LR_TYPE TYPE REF TO CL_ABAP_TYPEDESCR.
DATA: LR_TABLE TYPE REF TO CL_ABAP_TABLEDESCR.
TRY.
LOOP AT IT_QUERYFIELDS.
CONCATENATE IT_QUERYFIELDS-TABLENAME '-' IT_QUERYFIELDS-FIELDNAME INTO L_FIELD.
IF I_NOTABLENAME EQ 'X'.
LS_COMP-NAME = IT_QUERYFIELDS-FIELDNAME.
ELSE.
CONCATENATE IT_QUERYFIELDS-TABLENAME '_' IT_QUERYFIELDS-FIELDNAME INTO LS_COMP-NAME.
ENDIF.
CALL METHOD CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME
EXPORTING
P_NAME = L_FIELD
RECEIVING
P_DESCR_REF = LR_TYPE
EXCEPTIONS
TYPE_NOT_FOUND = 1.
IF SY-SUBRC <> 0.
E_RC = 1.
EXIT.
ENDIF.
LS_COMP-TYPE ?= LR_TYPE.
APPEND LS_COMP TO LT_COMP.
CLEAR LS_COMP.
ENDLOOP.
CHECK E_RC = 0.
CALL METHOD CL_ABAP_STRUCTDESCR=>CREATE
EXPORTING
P_COMPONENTS = LT_COMP
RECEIVING
P_RESULT = LR_STRUC.
CALL METHOD CL_ABAP_TABLEDESCR=>CREATE
EXPORTING
P_LINE_TYPE = LR_STRUC
RECEIVING
P_RESULT = LR_TABLE.
CREATE DATA E_WA TYPE HANDLE LR_STRUC.
CREATE DATA E_TABLE TYPE HANDLE LR_TABLE.
CATCH CX_ROOT INTO LR_EXCEPTION .
CALL METHOD LR_EXCEPTION->IF_MESSAGE~GET_TEXT
RECEIVING
RESULT = E_MESSAGE.
E_RC = 1.
ENDTRY.
程式碼分析:ABAP_COMPONENT_TAB,在程式中,首先要用TYPE-POOLS:ABAP.宣告一下。這個段程式碼是一個RFC的程式碼。宣告部分不在這裡。
注意查詢ABAP_COMPONTET_TAB的結構。其中 的 NAME和 TYPE需要注意賦值的變數的型別。
LS_COMP-TYPE ?= LR_TYPE. 子類繼承。將 LR_TYPE的內容 賦給LS_COMP-TYPE 注意他的型別TYPE RRF TO DATADESCR. LR_TYPE TYPE RRF TO TYPEDESCR.
[url=]CL_ABAP_TYPEDESCR[/url]
|
|--[url=]CL_ABAP_DATADESCR[/url]
| |
| |--[url=]CL_ABAP_ELEMDESCR[/url]
| |--[url=]CL_ABAP_REFDESCR[/url]
| |--[url=]CL_ABAP_COMPLEXDESCR[/url]
| |
| |-- [url=]CL_ABAP_STRUCTDESCR[/url]
| |--[url=]CL_ABAP_TABLEDESCR[/url]
|
|--[url=]CL_ABAP_OBJECTDESCR[/url]
|
|--[url=]CL_ABAP_CLASSDESCR[/url]
|--[url=]CL_ABAP_INTFDESCR[/url]
這個時候建立的是一個型別引用,用 CREATE DATA E_WA 接受這個型別。
E_WA的型別
和E_TABLE型別都是 TYPE REF TO DATA.
當要使用這個動態建立的表結構的時候,就需要FILED-SYBOMLS: <> TYPE.
ASSIGN E_WA->* TO <>.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8356764/viewspace-1023159/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SAP ABAP 動態內表實現 ALV橫向按月份動態顯示資料
- 【轉載】ALV的Excel方式顯示缺少模板Excel
- 圖表外掛Highcharts的動態化賦值,實現圖表資料的動態化設定顯示賦值
- Element 利用Tooltip提示框實現動態顯示文字提示
- vue中:is的用法,動態顯示需要的元件Vue元件
- 如何在 SAPGUI 的同一個螢幕顯示兩個 ALV listGUI
- 數碼管動態顯示
- ExpandableListView實現二級列表的顯示View
- springboot整合quarzt實現動態定時任務Spring Boot
- 動態棧的實現
- 動態的新增ImageView到LinearLayout中並居中顯示View
- 記一個angular在路由配置中管理 Angular Material Dialog(實現動態元件的彈窗顯示)Angular路由元件
- SpringBoot中併發定時任務的實現、動態定時任務的實現(看這一篇就夠了)Spring Boot
- 靜態數碼管顯示、動態數碼管顯示、矩陣按鍵矩陣
- 02-使用BIOS中斷 顯示字元/讀取磁碟 【實現boot中載入loader的功能】iOS字元boot
- springboot整合Quartz實現動態配置定時任務Spring Bootquartz
- SAP ALV小數點後面如果為0不顯示
- openlayers3實現動態圖示gif其他css支援的格式S3CSS
- Geoserver + MySQL實現圖層顯示和文字顯示ServerMySql
- jqgrid動態顯示,隱藏指定列
- javaScript動態顯示當前時間JavaScript
- Spring+quartz實現動態化定時任務 (轉)Springquartz
- 如何在 SAP ABAP ALV 報表裡以交通燈的方式顯示某一列的值
- unity 實現滑鼠控制角色移動和角色頭部的血條顯示Unity
- Laravel 動態屬性的實現Laravel
- uniapp uni.showModal的content實現換行顯示APP
- android關鍵字特殊顏色顯示的實現Android
- css實現文字過長顯示省略號的方法CSS
- qt中實現實時的顯示當前時刻的時間QT
- 動態控制C4C UI元素的顯示和隱藏UI
- SpringBoot整合Quartz實現動態修改定時任務間隔Spring Bootquartz
- 實習任務之使用react實現登入獲取動態列表React
- 基於DataTables實現根據每個使用者動態顯示隱藏列,可排序排序
- web動態驗證碼的實現Web
- SAP Hybris裡搜尋顯示結果的實現原理
- SAP CRM頁面assignment block動態顯示與否的控制邏輯BloC
- 淺談 SAP ABAP 系統裡的 ALV 輸出方式實現
- 短視訊程式開發,動態實現密碼、核取方塊等顯示與隱藏密碼
- CSS實現單行、多行文字溢位顯示省略號的實現方法CSS