At last I have find time to write this :smile: . If you find anything wrong pls let me know.
As all you know screen process in ABAP has two main block PBO ( Process before output ) and PAI ( Process after input ). All screen has this block.
For dialog program I used this.
So we can declare a parent screen object for all screen which we use in program.
Definition:
CLASS lcl_screen DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS : constructor
IMPORTING
i_dynnr TYPE sy-dynnr.
* All screen process
METHODS : pbo ABSTRACT,
pai ABSTRACT
IMPORTING
fcode TYPE sy-ucomm
RETURNING value(r_fcode) TYPE sy-ucomm,
free ABSTRACT.
* Exit-command
METHODS : exit_command
IMPORTING
fcode TYPE sy-ucomm.
* Screen static methods
CLASS-METHODS : get_screen
IMPORTING
i_dynnr TYPE sy-dynnr
RETURNING value(r_screen) TYPE REF TO lcl_screen.
CLASS-METHODS : del_screen
IMPORTING
i_dynnr TYPE sy-dynnr.
PRIVATE SECTION.
DATA : screen TYPE sy-dynnr.
TYPES : BEGIN OF lst_screen,
screen TYPE REF TO lcl_screen,
END OF lst_screen.
CLASS-DATA : t_screen TYPE STANDARD TABLE OF lst_screen.
CONSTANTS : c_class_name TYPE string VALUE 'LCL_SCREEN'.
ENDCLASS. "lcl_screen DEFINITION
Implementation
CLASS lcl_screen IMPLEMENTATION.
METHOD constructor.
screen = i_dynnr."Which screen
ENDMETHOD. "constructor
METHOD exit_command.
CASE fcode.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMETHOD. "exit_command
METHOD get_screen.
DATA : ls_screen TYPE lst_screen,
lv_type TYPE string.
READ TABLE t_screen
INTO ls_screen
WITH KEY screen->screen = i_dynnr.
IF sy-subrc NE 0.
CONCATENATE c_class_name
i_dynnr
INTO lv_type
SEPARATED BY '_'.
CREATE OBJECT ls_screen-screen TYPE (lv_type)
EXPORTING
i_dynnr = i_dynnr.
APPEND ls_screen
TO t_screen.
ENDIF.
r_screen ?= ls_screen-screen.
ENDMETHOD. "get_screen
METHOD del_screen.
DATA : ls_screen TYPE lst_screen,
lv_type TYPE string.
READ TABLE t_screen
INTO ls_screen
WITH KEY screen->screen = i_dynnr.
IF sy-subrc NE 0.
* Screen doesnt exist
RETURN.
ENDIF.
ls_screen-screen->free( ).
DELETE t_screen
WHERE screen->screen = i_dynnr.
ENDMETHOD. "del_screen
ENDCLASS. "lcl_screen IMPLEMENTATION
In get_screen method, to decide which screen object will be created, logic is all screen object start with LCL_SCREEN_ and last 4 character is screen number. If screen object is not created, we create object and adding it to object table then returning screen object. If it is created just returning the object.
lets create our first screen :
And screen module is:
MODULE pbo OUTPUT.
lcl_screen=>get_screen( sy-dynnr )->pbo( ).
ENDMODULE. " PBO OUTPUT
MODULE pai INPUT.
gv_okcode = lcl_screen=>get_screen( sy-dynnr )->pai( gv_okcode ).
ENDMODULE. " PAI INPUT
MODULE exit_command INPUT.
lcl_screen=>get_screen( sy-dynnr )->exit_command( gv_okcode ).
ENDMODULE. " EXIT_COMMAND INPUT
Now lets create screen 9000 object
Definition
CLASS lcl_screen_9000 DEFINITION INHERITING FROM lcl_screen FINAL.
PUBLIC SECTION.
METHODS : pbo REDEFINITION,
pai REDEFINITION,
free REDEFINITION.
PRIVATE SECTION.
* Screen 9000 methods
METHODS : set_exclude
RETURNING value(rt_ex) TYPE status_excl_fcode_tt.
ENDCLASS. "lcl_screen_9000 DEFINITION
Implementation
CLASS lcl_screen_9000 IMPLEMENTATION.
METHOD pbo.
DATA : lt_ex TYPE status_excl_fcode_tt.
lt_ex = set_exclude( ).
SET PF-STATUS 'STATUS_9000' EXCLUDING lt_ex.
SET TITLEBAR '9000'.
ENDMETHOD. "pbo
METHOD set_exclude.
DATA : lv_ex TYPE fcode.
lv_ex = 'SAVE'.
APPEND lv_ex
TO rt_ex.
ENDMETHOD. "set_exclude
METHOD pai.
CASE fcode.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMETHOD. "pai
METHOD free.
* If we declare global object data, we can clear or refresh here!
ENDMETHOD. "free
ENDCLASS. "lcl_screen_9000 IMPLEMENTATION
As you can see screen releated methods can be declare in screen object.
like set_exclude method.
If a method is global for all screen we can add to lcl_screen for example POPUP_TO_CONFIRM function. we can add this method to lcl_screen
TYPES : ty_text(400) TYPE c.
METHODS : call_popup
IMPORTING
i_title TYPE text60
i_text TYPE ty_text
RETURNING value(r_answer) TYPE char1.
METHOD call_popup.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = i_title
text_question = i_text
IMPORTING
answer = r_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDMETHOD. "call_popup
Now we can use this method in all screen.
METHOD pai.
CASE fcode.
WHEN 'BACK'.
IF call_popup( i_title = text-006
i_text = text-007 ) EQ '1'.
LEAVE TO SCREEN 0.
ENDIF.
ENDCASE.
ENDMETHOD. "pai
If we need to create ALV object in one screen we can add this to screen like, or picture element. Just we need to do declare screen object inherited from lcl_screen.
I hope you like it.
Have a nice day.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
4 | |
4 | |
3 | |
3 | |
2 | |
2 | |
2 | |
2 | |
1 |