Scenario: Usually in standard ALV the filter criteria provides the option of selecting some fields based on which the ALV output is determined. This post creates the same with the help of Module pool screen table control option.
Step1. Create a module pool program and only declare the required variables and activate it.
Step2. Create a Normal screen with screen number '9999' and designed as per below.
Step3. Details of Table control one.
Step4. Details of Table control two
Step5. Declare some modules in the flow logic.
Step6. Set the program PF status as mentioned below.
Step7. The detailed program code is given below. At last create a tcode for the Module pool program and activate all.
________________________________________________________________________________
PROGRAM zsapmtest2.
DATA : tab_name TYPE dd02l-tabname,
ls TYPE dd02l,
lt TYPE TABLE OF dd03l,
wa TYPE dd03l,
focde1 TYPE sy-ucomm,
fcode2 TYPE sy-ucomm,
indx1 TYPE i,
indx2 TYPE i.
TYPES: BEGIN OF ty_blk1,
ch1,
fieldname TYPE dd03l-fieldname,
END OF ty_blk1.
TYPES: BEGIN OF ty_blk2,
ch2,
fieldname TYPE dd03l-fieldname,
END OF ty_blk2.
DATA : lt1 TYPE TABLE OF ty_blk1,
ls1 TYPE ty_blk1,
ls11 TYPE ty_blk1,
lt2 TYPE TABLE OF ty_blk2,
ls2 TYPE ty_blk2,
ls22 TYPE ty_blk2.
CONTROLS: tc1 TYPE TABLEVIEW USING SCREEN 9999,
tc2 TYPE TABLEVIEW USING SCREEN 9999.
*&---------------------------------------------------------------------*
*& Module status_9999 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_9999 OUTPUT.
SET PF-STATUS 'STATUS'.
ENDMODULE. " status_9999 OUTPUT
*&---------------------------------------------------------------------*
*& Module fill_lt1 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE fill_lt1 OUTPUT.
ENDMODULE. " fill_lt1 OUTPUT
*&---------------------------------------------------------------------*
*& Module fill_lt2 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE fill_lt2 OUTPUT.
ENDMODULE. " fill_lt2 OUTPUT
*&---------------------------------------------------------------------*
*& Module pick_lt1 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pick_lt1 INPUT.
IF ls1-ch1 = 'X'.
indx1 = tc1-current_line.
ls22-fieldname = ls1-fieldname.
ENDIF.
ENDMODULE. " pick_lt1 INPUT
*&---------------------------------------------------------------------*
*& Module pick_lt2 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pick_lt2 INPUT.
IF ls2-ch2 EQ 'X'.
indx2 = tc2-current_line.
ls11-fieldname = ls2-fieldname.
ENDIF.
ENDMODULE. " pick_lt2 INPUT
*&---------------------------------------------------------------------*
*& Module user_command_9999 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9999 INPUT.
CASE sy-ucomm .
WHEN 'ENTER'.
REFRESH : lt[], lt2[].
SELECT * FROM dd03l INTO TABLE lt WHERE tabname = ls-tabname AND rollname <> ' '.
LOOP AT lt INTO wa .
IF wa-fieldname <> 'MANDT'.
ls2-fieldname = wa-fieldname.
APPEND ls2 TO lt2.
CLEAR: ls2, wa.
ENDIF.
ENDLOOP.
IF lt2 IS NOT INITIAL.
SORT lt2 BY fieldname.
ENDIF.
WHEN 'SEL'.
IF indx2 IS NOT INITIAL.
IF ls11-fieldname IS NOT INITIAL.
APPEND ls11 TO lt1.
SORT lt1 BY fieldname.
DELETE lt2 INDEX indx2.
CLEAR : ls11, indx2.
ENDIF.
ENDIF.
WHEN 'DESEL'.
IF indx1 IS NOT INITIAL.
IF ls22-fieldname IS NOT INITIAL.
APPEND ls22 TO lt2.
SORT lt2 BY fieldname.
DELETE lt1 INDEX indx1.
CLEAR : ls22, indx1.
ENDIF.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " user_command_9999 INPUT
*&---------------------------------------------------------------------*
*& Module validate_table_name INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE validate_table_name INPUT.
CASE sy-ucomm .
WHEN 'ENTER'.
SELECT SINGLE * FROM dd02l INTO ls WHERE tabname = tab_name.
IF sy-subrc <> 0.
MESSAGE 'Table Name doesnot Exists in Repository' TYPE 'E'.
ENDIF.
REFRESH : lt2[], lt1[].
WHEN OTHERS.
ENDCASE.
ENDMODULE. " validate_table_name INPUT
*&---------------------------------------------------------------------*
*& Module no_input_exit INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE no_input_exit INPUT.
CASE sy-ucomm.
WHEN 'EXIT' OR 'CANCEL'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " no_input_exit INPUT
_________________________________________________________________________________
Step8. Execute the program and the below screen comes up.
Step9. Provide any table name and hit Enter Key from keyboard. Pls check that in the PF status of the program the ENTER menu is activated. The Table fields appears in the right hand side table control. Here the user can select any field and click on the LEFT arrow button , so that the selected field added to the Left hand side table control.
Step10. If the field is wrongly selected then, user can selected the field from the left table control and click on the Right arrow button to take it to the Right hand side table control.
Step11. If the user at this point decides to provide another table name to select that fields of the table.
Step12. Provide the new table name and hit enter key from key board. So the new set of fields appear in the right hand side table control and the user can perform the select and deselect operation.
________________________________________________________________________________
No comments:
Post a Comment