2009 Jan 16 9:14 AM
hi abepers, how to use single ALV for 2 different process
example from this code, there is 2 radio buttton option .. WBS and KPI ..but different type of struncture table.
the question is how i'm going to modify this code by only used ONE ALV code but can handle two different structure internal table?
SELECTION-SCREEN END OF BLOCK mode.
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
METHODS: get_data,
write_wbs,
write_kpi.
details listing by WBS is selected
TYPES: BEGIN OF st_wbs,
rsnum TYPE zmeime002a-rsnum,
rspos TYPE zmeime002a-rspos,
a TYPE zmmgitab01-menge, "previous month GI quantity
b TYPE zmeime002a-bdmng, "Requirement month GI Quantity
c TYPE zmeime002a-bdmng, "Actual Requirement Quantity
d TYPE zmeime002a-bdmng, "Actual Requirement Balance
e TYPE zmeime002a-bdmng, "Actual Reqn Quantity with MATR
f TYPE zmmgitab01-menge, "overall GI qty
g TYPE zmmgitab01-menge, "matr GI qty
qrtn TYPE zmmgitab01-menge, "quantitty returned
areq TYPE zmmgitab01-menge, "actual req value
amatr TYPE zmmgitab01-menge, "actual req value with MATR value
gival TYPE zmmgitab01-menge, "overall GI value
matrval TYPE zmmgitab01-menge, "MATR GI value
stmatr TYPE string,
stmatr2 TYPE string,
stat TYPE string,
END OF st_wbs.
TYPES: BEGIN OF st_kpi,
regio TYPE zmeime002a-regio,
gsber TYPE zmeime002a-gsber,
gtext TYPE zmeime002a-gtext,
x TYPE zmmgitab01-menge, "Actual Req with MATR value
y TYPE zmmgitab01-menge, "MATR GI Value
z TYPE zmmgitab01-menge, "KPI
END OF st_kpi.
CLASS-DATA: it_wbs TYPE TABLE OF st_wbs,
wa_wbs LIKE LINE OF it_wbs.
CLASS-DATA: it_kpi TYPE TABLE OF st_kpi,
wa_kpi LIKE LINE OF it_kpi.
PRIVATE SECTION.
DATA: set_display_setting TYPE REF TO cl_salv_table.
DATA: display_settings TYPE REF TO cl_salv_display_settings.
DATA: salv_table TYPE REF TO cl_salv_table.
DATA: error TYPE REF TO cx_root.
DATA: errtext TYPE string.
ENDCLASS.
CLASS lcl_kpi DEFINITION.
PUBLIC SECTION.
METHODS: process_kpi.
ENDCLASS.
----
C.L.A.S.S lcl_main D.E.F.I.N.I.T.I.O.N
----
CLASS lcl_wbs DEFINITION
INHERITING FROM lcl_main.
PUBLIC SECTION.
METHODS: process_wbs.
EVENTS: no_data.
ENDCLASS.
CLASS lcl_handler DEFINITION.
PUBLIC SECTION.
METHODS handle_event FOR EVENT no_data OF lcl_wbs.
ENDCLASS.
----
C.L.A.S.S lcl_handler I.M.P.L.E.M.E.N.T.A.T.I.O.N
----
CLASS lcl_handler IMPLEMENTATION.
METHOD handle_event.
MESSAGE i398(00) WITH 'No entries exist for this selection !'.
LEAVE LIST-PROCESSING.
ENDMETHOD.
ENDCLASS.
*----
M.A.I.N. .P.R.O.G.R.A.M.
*----
START-OF-SELECTION.
DATA: o_wbs TYPE REF TO lcl_wbs,
o_kpi TYPE REF TO lcl_kpi,
o_main TYPE REF TO lcl_main,
o_handler TYPE REF TO lcl_handler.
CREATE OBJECT: o_wbs,o_kpi,o_handler,o_main.
SET HANDLER o_handler->handle_event FOR ALL INSTANCES.
CASE 'X'.
WHEN r_wbs.
CALL METHOD o_wbs->process_wbs.
CALL METHOD o_main->write_wbs.
WHEN r_kpi.
CALL METHOD o_wbs->process_wbs.
CALL METHOD o_main->write_kpi.
ENDCASE
CLASS lcl_kpi IMPLEMENTATION.
METHOD get_kpi.
run some select statement into it_kpi*******
ENDMETHOD.
ENDCLASS.
CLASS lcl_wbs IMPLEMENTATION.
METHOD get_wbs.
run some select statement into it_wbs*******
ENDMETHOD.
ENDCLASS.
**write output using ALV
CLASS lcl_main IMPLEMENTATION.
METHOD write_wbs.
cl_salv_table=>factory(
EXPORTING
list_display = if_salv_c_bool_sap=>false
IMPORTING
r_salv_table = salv_table
CHANGING
t_table = it_wbs
).
salv_table->display( ).
ENDMETHOD.
METHOD write_kpi.
cl_salv_table=>factory(
EXPORTING
list_display = if_salv_c_bool_sap=>false
IMPORTING
r_salv_table = salv_table
CHANGING
t_table = it_kpi
).
salv_table->display( ).
ENDMETHOD.
ENDCLASS.
2009 Jan 16 10:37 AM
Hello
You could define the "structure" dependent methods as interface methods and create different implementations of this interface depending on the choosen option.
However, this appear to be an overkill to me. In order to simplify your class partially you could introduce two additional attributes:
DATA:
mdo_data TYPE REF TO data.
FIELD-SYMBOLS:
<lt_outtab> TYPE table.
The switch between the different structure should be imported into your class using the CONSTRUCTOR method.
METHOD constructor.
me->md_wbs = id_wbs. " e.g. you import the radio-button parameter for WBS
ENDMETHOD.METHOD process. " NOTE: public method
IF ( me->md_wbs = 'X' ).
CALL METHOD me->process_wbs( ). " NOTE: private method
GET REFERENCE OF me->mt_wbs INTO me->mdo_data.
ELSE.
CALL METHOD me->process_kpi( ). " NOTE: private method
GET REFERENCE OF me->mt_wbs INTO me->mdo_data.
ENDIF.
ENDMETHOD.METHOD write.
FIELD-SYMBOLS:
<lt_outtab> TYPE table.
ASSIGN me->mdo_data->* TO <lt_outtab>.
cl_salv_table=>factory(
EXPORTING
list_display = if_salv_c_bool_sap=>false
IMPORTING
r_salv_table = salv_table
CHANGING
t_table = <lt_outtab>
).
salv_table->display( ).
ENDMETHOD.Now the coding of the main report looks like this:
START-OF-SELECTION.
CREATE OBJECT go_myclass
EXPORTING
id_wbs = p_wbs.
go_myclass->process( ).
go_myclass->write( ).Regards
Uwe
hi abepers, how to use single ALV for 2 different process
example from this code, there is 2 radio buttton option .. WBS and KPI ..but different type of struncture table.
the question is how i'm going to modify this code by only used ONE ALV code but can handle two different structure internal table?
SELECTION-SCREEN END OF BLOCK mode.
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
METHODS: get_data,
write_wbs,
write_kpi.
details listing by WBS is selected
TYPES: BEGIN OF st_wbs,
rsnum TYPE zmeime002a-rsnum,
rspos TYPE zmeime002a-rspos,
a TYPE zmmgitab01-menge, "previous month GI quantity
b TYPE zmeime002a-bdmng, "Requirement month GI Quantity
c TYPE zmeime002a-bdmng, "Actual Requirement Quantity
d TYPE zmeime002a-bdmng, "Actual Requirement Balance
e TYPE zmeime002a-bdmng, "Actual Reqn Quantity with MATR
f TYPE zmmgitab01-menge, "overall GI qty
g TYPE zmmgitab01-menge, "matr GI qty
qrtn TYPE zmmgitab01-menge, "quantitty returned
areq TYPE zmmgitab01-menge, "actual req value
amatr TYPE zmmgitab01-menge, "actual req value with MATR value
gival TYPE zmmgitab01-menge, "overall GI value
matrval TYPE zmmgitab01-menge, "MATR GI value
stmatr TYPE string,
stmatr2 TYPE string,
stat TYPE string,
END OF st_wbs.
TYPES: BEGIN OF st_kpi,
regio TYPE zmeime002a-regio,
gsber TYPE zmeime002a-gsber,
gtext TYPE zmeime002a-gtext,
x TYPE zmmgitab01-menge, "Actual Req with MATR value
y TYPE zmmgitab01-menge, "MATR GI Value
z TYPE zmmgitab01-menge, "KPI
END OF st_kpi.
CLASS-DATA: it_wbs TYPE TABLE OF st_wbs,
wa_wbs LIKE LINE OF it_wbs.
CLASS-DATA: it_kpi TYPE TABLE OF st_kpi,
wa_kpi LIKE LINE OF it_kpi.
PRIVATE SECTION.
DATA: set_display_setting TYPE REF TO cl_salv_table.
DATA: display_settings TYPE REF TO cl_salv_display_settings.
DATA: salv_table TYPE REF TO cl_salv_table.
DATA: error TYPE REF TO cx_root.
DATA: errtext TYPE string.
ENDCLASS.
CLASS lcl_kpi DEFINITION.
PUBLIC SECTION.
METHODS: process_kpi.
ENDCLASS.
----
C.L.A.S.S lcl_main D.E.F.I.N.I.T.I.O.N
----
CLASS lcl_wbs DEFINITION
INHERITING FROM lcl_main.
PUBLIC SECTION.
METHODS: process_wbs.
EVENTS: no_data.
ENDCLASS.
CLASS lcl_handler DEFINITION.
PUBLIC SECTION.
METHODS handle_event FOR EVENT no_data OF lcl_wbs.
ENDCLASS.
----
C.L.A.S.S lcl_handler I.M.P.L.E.M.E.N.T.A.T.I.O.N
----
CLASS lcl_handler IMPLEMENTATION.
METHOD handle_event.
MESSAGE i398(00) WITH 'No entries exist for this selection !'.
LEAVE LIST-PROCESSING.
ENDMETHOD.
ENDCLASS.
*----
M.A.I.N. .P.R.O.G.R.A.M.
*----
START-OF-SELECTION.
DATA: o_wbs TYPE REF TO lcl_wbs,
o_kpi TYPE REF TO lcl_kpi,
o_main TYPE REF TO lcl_main,
o_handler TYPE REF TO lcl_handler.
CREATE OBJECT: o_wbs,o_kpi,o_handler,o_main.
SET HANDLER o_handler->handle_event FOR ALL INSTANCES.
CASE 'X'.
WHEN r_wbs.
CALL METHOD o_wbs->process_wbs.
CALL METHOD o_main->write_wbs.
WHEN r_kpi.
CALL METHOD o_wbs->process_wbs.
CALL METHOD o_main->write_kpi.
ENDCASE
CLASS lcl_kpi IMPLEMENTATION.
METHOD get_kpi.
run some select statement into it_kpi*******
ENDMETHOD.
ENDCLASS.
CLASS lcl_wbs IMPLEMENTATION.
METHOD get_wbs.
run some select statement into it_wbs*******
ENDMETHOD.
ENDCLASS.
**write output using ALV
CLASS lcl_main IMPLEMENTATION.
METHOD write_wbs.
cl_salv_table=>factory(
EXPORTING
list_display = if_salv_c_bool_sap=>false
IMPORTING
r_salv_table = salv_table
CHANGING
t_table = it_wbs
).
salv_table->display( ).
ENDMETHOD.
METHOD write_kpi.
cl_salv_table=>factory(
EXPORTING
list_display = if_salv_c_bool_sap=>false
IMPORTING
r_salv_table = salv_table
CHANGING
t_table = it_kpi
).
salv_table->display( ).
ENDMETHOD.
ENDCLASS.
2009 Jan 16 10:37 AM
Hello
You could define the "structure" dependent methods as interface methods and create different implementations of this interface depending on the choosen option.
However, this appear to be an overkill to me. In order to simplify your class partially you could introduce two additional attributes:
DATA:
mdo_data TYPE REF TO data.
FIELD-SYMBOLS:
<lt_outtab> TYPE table.
The switch between the different structure should be imported into your class using the CONSTRUCTOR method.
METHOD constructor.
me->md_wbs = id_wbs. " e.g. you import the radio-button parameter for WBS
ENDMETHOD.METHOD process. " NOTE: public method
IF ( me->md_wbs = 'X' ).
CALL METHOD me->process_wbs( ). " NOTE: private method
GET REFERENCE OF me->mt_wbs INTO me->mdo_data.
ELSE.
CALL METHOD me->process_kpi( ). " NOTE: private method
GET REFERENCE OF me->mt_wbs INTO me->mdo_data.
ENDIF.
ENDMETHOD.METHOD write.
FIELD-SYMBOLS:
<lt_outtab> TYPE table.
ASSIGN me->mdo_data->* TO <lt_outtab>.
cl_salv_table=>factory(
EXPORTING
list_display = if_salv_c_bool_sap=>false
IMPORTING
r_salv_table = salv_table
CHANGING
t_table = <lt_outtab>
).
salv_table->display( ).
ENDMETHOD.Now the coding of the main report looks like this:
START-OF-SELECTION.
CREATE OBJECT go_myclass
EXPORTING
id_wbs = p_wbs.
go_myclass->process( ).
go_myclass->write( ).Regards
Uwe
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |