2008 Jul 23 7:51 PM
DATA: LO_STRUCT_TYPE TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA: LO_TABLE_TYPE TYPE REF TO CL_ABAP_TABLEDESCR.
DATA: LO_DATAREF TYPE REF TO DATA.
DATA: LT_COMP_TAB TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE.
DATA: LS_COMP_TAB LIKE LINE OF LT_COMP_TAB.
FIELD-SYMBOLS: <LT_TABLE> TYPE STANDARD TABLE,
<LS_TABLE> TYPE ANY,
<LV_FIELD> TYPE ANY.
LS_COMP_TAB-NAME = P_1040.
LS_COMP_TAB-TYPE ?= CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME( P_1041 ).
APPEND LS_COMP_TAB TO LT_COMP_TAB.
Create dynamic internal table based on LT_COMP_TAB
LO_STRUCT_TYPE = CL_ABAP_STRUCTDESCR=>CREATE( LT_COMP_TAB ).
LO_TABLE_TYPE = CL_ABAP_TABLEDESCR=>CREATE( P_LINE_TYPE = LO_STRUCT_TYPE ).
Create references to dyn internal table and work area
CREATE DATA LO_DATAREF TYPE HANDLE LO_TABLE_TYPE.
ASSIGN LO_DATAREF->* TO <LT_TABLE>.
CREATE DATA LO_DATAREF TYPE HANDLE LO_STRUCT_TYPE.
ASSIGN LO_DATAREF->* TO <LS_TABLE>.
ASSIGN COMPONENT P_1655 OF STRUCTURE <LS_TABLE> TO <LV_FIELD>.
IF SY-SUBRC = 0.
<LV_FIELD> = P_DATA.
ENDIF.
APPEND <LS_TABLE> TO <LT_TABLE>.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = ZLAYOUT
IT_FIELDCAT = I_FIELDCAT
I_SAVE = 'A'
IT_EVENTS = V_EVENTS
TABLES
T_OUTTAB = <LT_TABLE>.
This is the code I have written for a Dynamic internal table.
Everything works fine.
Except at the ALV displey.
I am getting a Short Dump with the message 'Field symbol has not yet been assigned'.
Can someone help me with this please.
2008 Jul 23 7:55 PM
post the complete coding. so that it will be easy to check and fix the issue.
post the complete coding. so that it will be easy to check and fix the issue.
2008 Jul 23 7:55 PM
post the complete coding. so that it will be easy to check and fix the issue.
2008 Jul 23 8:05 PM
DATA: LO_STRUCT_TYPE TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA: LO_TABLE_TYPE TYPE REF TO CL_ABAP_TABLEDESCR.
DATA: LO_DATAREF TYPE REF TO DATA.
DATA: LT_COMP_TAB TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE.
DATA: LS_COMP_TAB LIKE LINE OF LT_COMP_TAB.
FIELD-SYMBOLS: <LT_TABLE> TYPE STANDARD TABLE,
<LS_TABLE> TYPE ANY,
<LV_FIELD> TYPE ANY.
LS_COMP_TAB-NAME = 'VBELN'.
LS_COMP_TAB-TYPE ?= CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME( 'CHAR10' ).
APPEND LS_COMP_TAB TO LT_COMP_TAB.
Create dynamic internal table based on LT_COMP_TAB
LO_STRUCT_TYPE = CL_ABAP_STRUCTDESCR=>CREATE( LT_COMP_TAB ).
LO_TABLE_TYPE = CL_ABAP_TABLEDESCR=>CREATE( P_LINE_TYPE = LO_STRUCT_TYPE ).
Create references to dyn internal table and work area
CREATE DATA LO_DATAREF TYPE HANDLE LO_TABLE_TYPE.
ASSIGN LO_DATAREF->* TO <LT_TABLE>.
CREATE DATA LO_DATAREF TYPE HANDLE LO_STRUCT_TYPE.
ASSIGN LO_DATAREF->* TO <LS_TABLE>.
ASSIGN COMPONENT 'VBELN' OF STRUCTURE <LS_TABLE> TO <LV_FIELD>.
IF SY-SUBRC = 0.
<LV_FIELD> = '10085'.
ENDIF.
APPEND <LS_TABLE> TO <LT_TABLE>.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = ZLAYOUT
IT_FIELDCAT = I_FIELDCAT
I_SAVE = 'A'
IT_EVENTS = V_EVENTS
TABLES
T_OUTTAB = <LT_TABLE>.
This is the complete code.
2008 Jul 23 8:13 PM
How about trying the ALV OM instead of the function module.
DATA: lo_struct_type TYPE REF TO cl_abap_structdescr.
DATA: lo_table_type TYPE REF TO cl_abap_tabledescr.
DATA: lo_dataref TYPE REF TO data.
DATA: lt_comp_tab TYPE cl_abap_structdescr=>component_table.
DATA: ls_comp_tab LIKE LINE OF lt_comp_tab.
FIELD-SYMBOLS: <lt_table> TYPE STANDARD TABLE,
<ls_table> TYPE ANY,
<lv_field> TYPE ANY.
ls_comp_tab-name = 'VBELN'.
ls_comp_tab-type ?= cl_abap_datadescr=>describe_by_name( 'CHAR10' ).
APPEND ls_comp_tab TO lt_comp_tab.
*Create dynamic internal table based on LT_COMP_TAB
lo_struct_type = cl_abap_structdescr=>create( lt_comp_tab ).
lo_table_type = cl_abap_tabledescr=>create( p_line_type = lo_struct_type ).
*Create references to dyn internal table and work area
CREATE DATA lo_dataref TYPE HANDLE lo_table_type.
ASSIGN lo_dataref->* TO <lt_table>.
CREATE DATA lo_dataref TYPE HANDLE lo_struct_type.
ASSIGN lo_dataref->* TO <ls_table>.
ASSIGN COMPONENT 'VBELN' OF STRUCTURE <ls_table> TO <lv_field>.
IF sy-subrc = 0.
<lv_field> = '10085'.
ENDIF.
APPEND <ls_table> TO <lt_table>.
DATA: lr_table TYPE REF TO cl_salv_table.
DATA: lr_functions TYPE REF TO cl_salv_functions.
DATA: lr_columns TYPE REF TO cl_salv_columns_table.
DATA: lr_column TYPE REF TO cl_salv_column_table.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = lr_table
CHANGING
t_table = <lt_table> ).
CATCH cx_salv_msg .
ENDTRY.
lr_functions = lr_table->get_functions( ).
lr_functions->set_all( abap_true ).
lr_columns = lr_table->get_columns( ).
lr_column ?= lr_columns->get_column( 'VBELN' ).
lr_column->set_medium_text( 'Sales Document' ).
lr_table->display( ).Regards,
Rich Heilman
2008 Jul 23 8:15 PM
Modified code.
REPORT Y_TEST.
type-pools:slis.
DATA: LO_STRUCT_TYPE TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA: LO_TABLE_TYPE TYPE REF TO CL_ABAP_TABLEDESCR.
DATA: LO_DATAREF TYPE REF TO DATA.
data: wa_layout type SLIS_LAYOUT_ALV .
DATA: LT_COMP_TAB TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE.
DATA: LS_COMP_TAB LIKE LINE OF LT_COMP_TAB.
data: it_fieldcat TYPE SLIS_T_FIELDCAT_ALV.
data: wa_fcat like line of it_fieldcat.
FIELD-SYMBOLS: <LT_TABLE> TYPE STANDARD TABLE,
<LS_TABLE> TYPE ANY,
<LV_FIELD> TYPE ANY.
LS_COMP_TAB-NAME = 'VBELN'.
LS_COMP_TAB-TYPE ?= CL_ABAP_DATADESCR=>DESCRIBE_BY_NAME( 'CHAR10' ).
APPEND LS_COMP_TAB TO LT_COMP_TAB.
wa_fcat-fieldname = 'VBELN'.
wa_fcat-outputlen = 10.
wa_fcat-seltext_l = 'Sales Order'.
append wa_fcat to it_fieldcat.
*Create dynamic internal table based on LT_COMP_TAB
LO_STRUCT_TYPE = CL_ABAP_STRUCTDESCR=>CREATE( LT_COMP_TAB ).
LO_TABLE_TYPE = CL_ABAP_TABLEDESCR=>CREATE( P_LINE_TYPE = LO_STRUCT_TYPE ).
*Create references to dyn internal table and work area
CREATE DATA LO_DATAREF TYPE HANDLE LO_TABLE_TYPE.
ASSIGN LO_DATAREF->* TO <LT_TABLE>.
CREATE DATA LO_DATAREF TYPE HANDLE LO_STRUCT_TYPE.
ASSIGN LO_DATAREF->* TO <LS_TABLE>.
ASSIGN COMPONENT 'VBELN' OF STRUCTURE <LS_TABLE> TO <LV_FIELD>.
IF SY-SUBRC = 0.
<LV_FIELD> = '10085'.
ENDIF.
APPEND <LS_TABLE> TO <LT_TABLE>.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
I_SAVE = 'A'
*IT_EVENTS = V_EVENTS
TABLES
T_OUTTAB = <LT_TABLE>.
2008 Jul 23 9:29 PM
Hello,
With this,
How will I be able to handle the User Commands function.
Thanks,
Archana.
2008 Jul 23 9:20 PM
check out this link...
http://help-abap.blogspot.com/2008/07/important.html
and try this code:
*&---------------------------------------------------------------------*
*& Report ZDYNAMIC_ALV
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zdynamic_alv.
FIELD-SYMBOLS:
<f_tab1> TYPE STANDARD TABLE.
PARAMETERS:
p_tname TYPE tabname16 OBLIGATORY, " DEFAULT 'MARA' ,
p_rows(5) TYPE c DEFAULT '200'.
*----------------------------------------------------------------------*
* CLASS lcl_dynamic DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_dynamic DEFINITION CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
check_selection
EXCEPTIONS invalid_table,
main
EXCEPTIONS no_data_found,
display.
PRIVATE SECTION.
TYPE-POOLS: abap.
CLASS-DATA: tab TYPE REF TO cl_abap_structdescr,
wa_tab TYPE REF TO cl_abap_structdescr,
comp_tab TYPE cl_abap_structdescr=>component_table,
i_tab TYPE REF TO cl_abap_tabledescr,
i_table TYPE REF TO data.
ENDCLASS. "lcl_dynamic DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_dynamic IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_dynamic IMPLEMENTATION.
METHOD check_selection.
SELECT COUNT( * )
FROM dd02l
WHERE tabname = p_tname
AND as4local = 'A'
AND tabclass = 'TRANSP'.
IF sy-subrc <> 0.
RAISE invalid_table.
ENDIF.
ENDMETHOD. "check_selection
METHOD main.
tab ?= cl_abap_typedescr=>describe_by_name( p_tname ).
comp_tab = tab->get_components( ).
wa_tab = cl_abap_structdescr=>create( comp_tab ).
i_tab = cl_abap_tabledescr=>create( wa_tab ).
CREATE DATA i_table TYPE HANDLE i_tab.
ASSIGN i_table->* TO <f_tab1>.
IF p_rows IS INITIAL.
p_rows = '50000'.
ENDIF.
*Get data
SELECT * FROM (p_tname)
INTO TABLE <f_tab1>
UP TO p_rows ROWS.
IF sy-subrc <> 0.
RAISE no_data_found.
ENDIF.
ENDMETHOD. "main
METHOD display.
SET TITLEBAR sy-title
OF PROGRAM sy-cprog
WITH 'Display table:' p_tname.
DATA:
l_gr_alv TYPE REF TO cl_salv_table,
l_gr_functions TYPE REF TO cl_salv_functions.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = l_gr_alv
CHANGING
t_table = <f_tab1>.
CATCH cx_salv_msg . "#EC NO_HANDLER
ENDTRY.
l_gr_functions = l_gr_alv->get_functions( ).
l_gr_functions->set_all( abap_true ).
l_gr_alv->display( ).
ENDMETHOD. "display
ENDCLASS. "lcl_dynamic IMPLEMENTATION
AT SELECTION-SCREEN.
CALL METHOD lcl_dynamic=>check_selection
EXCEPTIONS
invalid_table = 1.
IF sy-subrc <> 0.
MESSAGE e001(00) WITH
p_tname ' is not a Transparant Table'.
ENDIF.
START-OF-SELECTION.
CALL METHOD lcl_dynamic=>main
EXCEPTIONS
no_data_found = 1.
IF sy-subrc <> 0.
MESSAGE i001(00) WITH 'No data found'.
LEAVE LIST-PROCESSING.
ENDIF.
END-OF-SELECTION.
CALL METHOD lcl_dynamic=>display.
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |