Introduction
In this Blog, I am going to explain CRUD Operations using module pool programming in a single screen.
Here, I have done CRUD operations by taking single screens by using buttons i.e., SAVE, EDIT, DELETE and BACK buttons & displaying editable and non-editable.
STEP – 1: Goto SE11 transaction code, Create Custom Database Table (E.g., ZEMP_AADHAR).
STEP-2: Goto SE38 transaction code, Create Program, shown as below
STEP - 3: Click on create it will show popup will display as below, enter title description, type as Module Pool Program and Click on Save button. Then provide Package and request number.
STEP – 4: Creating Screen 100 to display an output.
STEP – 5: Creating Layout for screen 100, first double clicks on Screen number 100 and click YES button in popup.
STEP –6: Enter Short Description & click on Layout. It will display Screen Painter
Step-7: In Screen Painter click on Goto select Secondary Windon then select Dictionary/Program Fields. It will display Dictionary fields.
STEP-8: Enter Database table name and click on Get from Dictionary. It shows tables fields and select all fields and click on ok button. As shown in below
STEP-9: Drag and drop the selected fields and double click on input field rename it and make input fields as non-editable by selecting not possible as shown below. Except key input field, make remaining all fields as non-editable.
Note: To avoid confusion between the screen fieldname and table fieldname I have renamed as (SCR_FIELDS).
STEP- 10: select custom container drag and drop on the screen and give the name for container then click on Flow Logic, then check and activate as show in below-
NOTE: Container is used to display records in database table.
STEP – 11: In, Flow Logic Uncomment the both the PBO & PAI modules and double click on PBO module as show below-
Click Yes button, it will show Popup click on Main screen as shown in below-
STEP-12: Write code in PBO module for Screen 100 -
CODE: Code for PBO
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'STATUS'.
* SET TITLEBAR 'xxx'.
PERFORM CONTAINER.
LOOP AT SCREEN.
" Control the editability of fields based on EDIT_MODE
IF EDIT_MODE = 'X'. " In edit mode, allow fields to be editable
IF SCREEN-NAME = 'SCR_FIELDS-AADHARCARDNO'.
SCREEN-INPUT = 1. " Make the field editable
MODIFY SCREEN.
ENDIF.
" Add other fields as needed for editing
IF SCREEN-NAME = 'SCR_FIELDS-HOLDERNAME' OR SCREEN-NAME = 'SCR_FIELDS-ADDRESS'
OR SCREEN-NAME = 'SCR_FIELDS-CITY' OR SCREEN-NAME = 'SCR_FIELDS-PINCODE'
OR SCREEN-NAME = 'SCR_FIELDS-COUNTRY' OR SCREEN-NAME = 'SCR_FIELDS-MOBILENO'
OR SCREEN-NAME = 'SCR_FIELDS-ALTMOBILENO' OR SCREEN-NAME = 'SCR_FIELDS-EMAILID'
OR SCREEN-NAME = 'SCR_FIELDS-ALTMAILID'.
SCREEN-INPUT = 1. " Make other fields editable
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
ENDMODULE.
CODE:
*&---------------------------------------------------------------------*
*& Form CONTAINER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CONTAINER .
REFRESH LT_AADHAR.
SELECT * FROM ZEMP_AADHARCARD INTO TABLE LT_AADHAR.
IF O_CONT IS INITIAL AND O_GRID IS INITIAL.
CREATE OBJECT O_CONT
EXPORTING
CONTAINER_NAME = 'EMP_CONT'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT O_GRID
EXPORTING
I_PARENT = O_CONT
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD O_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'ZEMP_AADHARCARD'
CHANGING
IT_OUTTAB = LT_AADHAR
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ENDIF.
" Update the ALV grid display
IF O_GRID IS BOUND.
CALL METHOD O_GRID->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDFORM.
STEP-13: Activate the code and again go to Screen 100 Flow logic, double click on PAI module.
Click Yes button, it will show Popup click on Main screen as shown in below-
STEP – 14: Write code in PAI module for Screen 100 -
Code: WHEN 'ENTER'.
" Fetch the record based on AADHARCARDNO
SELECT SINGLE * FROM ZEMP_AADHARCARD
INTO LS_AADHAR
WHERE AADHARCARDNO = SCR_FIELDS-AADHARCARDNO.
IF SY-SUBRC <> 0.
EDIT_MODE = 'X'. " Turn on edit mode
CLEAR: SCR_FIELDS-ADDRESS, SCR_FIELDS-ALTMAILID, SCR_FIELDS-ALTMOBILENO, SCR_FIELDS-CITY, SCR_FIELDS-COUNTRY, SCR_FIELDS-EMAILID, SCR_FIELDS-HOLDERNAME,
SCR_FIELDS-MOBILENO, SCR_FIELDS-PINCODE.
CALL SCREEN 100. " Refresh the screen
ELSE.
EDIT_MODE = ''. " Turn on edit mode
ENDIF.
SCR_FIELDS = CORRESPONDING ( LS_AADHAR ). " Populate SCR_FIELDS with LS_AADHAR
CODE:
WHEN 'SAVE'.
" Save the changes made in the editable fields (SCR_FIELDS)
LS_AADHAR = CORRESPONDING #( SCR_FIELDS ).
IF LS_AADHAR IS NOT INITIAL.
" Update the existing record
MODIFY ZEMP_AADHARCARD FROM LS_AADHAR.
IF SY-SUBRC = 0.
" Again, call the CONTAINER to display the updated or newly created record .
PERFORM CONTAINER.
MESSAGE 'Record saved successfully' TYPE 'S'.
ELSE.
MESSAGE 'Error saving record' TYPE 'E'.
ENDIF.
ENDIF.
CODE:
WHEN 'EDIT'.
" Toggle the EDIT_MODE flag to enable/disable editable fields
IF EDIT_MODE = 'X'.
EDIT_MODE = ''. " Turn off edit mode
ELSE.
EDIT_MODE = 'X'. " Turn on edit mode
ENDIF.
CALL SCREEN 100. " Refresh the screen
CODE:
WHEN 'DELETE'.
" Ask for confirmation before deleting the record
DATA: LV_ANSWER TYPE CHAR1.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'DELETE RECORD'
TEXT_QUESTION = 'ARE YOU SURE YOU WANT TO DELETE THIS RECORD?'
TEXT_BUTTON_1 = 'YES'
TEXT_BUTTON_2 = 'NO'
DISPLAY_CANCEL_BUTTON = 'X'
START_COLUMN = 20
START_ROW = 6
IMPORTING
ANSWER = LV_ANSWER.
IF LV_ANSWER = '1'. " If user clicked 'Yes'
DELETE FROM ZEMP_AADHARCARD WHERE AADHARCARDNO = SCR_FIELDS-AADHARCARDNO.
CLEAR SCR_FIELDS.
IF SY-SUBRC = 0.
" After deleting the record, again call the CONTAINER to display remaining records.
PERFORM CONTAINER.
MESSAGE 'RECORD DELETED SUCCESSFULLY' TYPE 'S'.
ELSE.
MESSAGE 'ERROR DELETING RECORD' TYPE 'E'.
ENDIF.
ELSEIF LV_ANSWER = '2'.
MESSAGE 'RECORD DELETION CANCELLED' TYPE 'W'.
ELSE.
MESSAGE 'DELETE OPERATION CANCELLED' TYPE 'S'.
ENDIF.
WHEN 'BACK'.
LEAVE PROGRAM.
STEP-15: Click on Object Navigator -
STEP-16: Right click on the program name and activate it.
STEP-17: Right click on program name select create and then click on Transaction as show below-
STEP – 18: After it will display Popup, give Transaction code and short text and select dialog transaction as shown below -
STEP – 19: Click continue it will ask program name, screen number and select all checkboxes in GUI support. Then click on save and display -
STEP – 20: Output will be display as -
CODE:
REPORT ZMP_CRUD.
TABLES: ZEMP_AADHARCARD.
DATA: LT_AADHAR TYPE TABLE OF ZEMP_AADHARCARD,
LS_AADHAR TYPE ZEMP_AADHARCARD,
SCR_FIELDS TYPE ZEMP_AADHARCARD,
EDIT_MODE TYPE CHAR1.
DATA: O_GRID TYPE REF TO CL_GUI_ALV_GRID,
O_CONT TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
START-OF-SELECTION.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE SY-UCOMM.
WHEN 'ENTER'.
" Fetch the record based on AADHARCARDNO
SELECT SINGLE * FROM ZEMP_AADHARCARD
INTO LS_AADHAR
WHERE AADHARCARDNO = SCR_FIELDS-AADHARCARDNO.
IF SY-SUBRC <> 0.
EDIT_MODE = 'X'. " Turn on edit mode
CLEAR: SCR_FIELDS-ADDRESS,SCR_FIELDS-ALTMAILID,SCR_FIELDS-ALTMOBILENO,SCR_FIELDS-CITY,SCR_FIELDS-COUNTRY,SCR_FIELDS-EMAILID,SCR_FIELDS-HOLDERNAME,SCR_FIELDS-MOBILENO,SCR_FIELDS-PINCODE.
CALL SCREEN 100. " Refresh the screen
ELSE.
EDIT_MODE = ''. " Turn on edit mode
ENDIF.
SCR_FIELDS = CORRESPONDING #( LS_AADHAR ). " Populate SCR_FIELDS with LS_AADHAR
WHEN 'SAVE'.
" Save the changes made in the editable fields (SCR_FIELDS)
LS_AADHAR = CORRESPONDING #( SCR_FIELDS ).
IF LS_AADHAR IS NOT INITIAL.
" Update the existing record
MODIFY ZEMP_AADHARCARD FROM LS_AADHAR.
IF SY-SUBRC = 0.
PERFORM CONTAINER.
MESSAGE 'Record saved successfully' TYPE 'S'.
ELSE.
MESSAGE 'Error saving record' TYPE 'E'.
ENDIF.
ENDIF.
WHEN 'EDIT'.
" Toggle the EDIT_MODE flag to enable/disable editable fields
IF EDIT_MODE = 'X'.
EDIT_MODE = ''. " Turn off edit mode
ELSE.
EDIT_MODE = 'X'. " Turn on edit mode
ENDIF.
CALL SCREEN 100. " Refresh the screen
WHEN 'DELETE'.
" Ask for confirmation before deleting the record
DATA: LV_ANSWER TYPE CHAR1.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'DELETE RECORD'
TEXT_QUESTION = 'ARE YOU SURE YOU WANT TO DELETE THIS RECORD?'
TEXT_BUTTON_1 = 'YES'
TEXT_BUTTON_2 = 'NO'
DISPLAY_CANCEL_BUTTON = 'X'
START_COLUMN = 20
START_ROW = 6
IMPORTING
ANSWER = LV_ANSWER.
IF LV_ANSWER = '1'. " If user clicked 'Yes'
DELETE FROM ZEMP_AADHARCARD WHERE AADHARCARDNO = SCR_FIELDS-AADHARCARDNO.
CLEAR SCR_FIELDS.
IF SY-SUBRC = 0.
PERFORM CONTAINER.
MESSAGE 'RECORD DELETED SUCCESSFULLY' TYPE 'S'.
ELSE.
MESSAGE 'ERROR DELETING RECORD' TYPE 'E'.
ENDIF.
ELSEIF LV_ANSWER = '2'.
MESSAGE 'RECORD DELETION CANCELLED' TYPE 'W'.
ELSE.
MESSAGE 'DELETE OPERATION CANCELLED' TYPE 'S'.
ENDIF.
WHEN 'BACK'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'STATUS'.
* SET TITLEBAR 'xxx'.
PERFORM CONTAINER.
LOOP AT SCREEN.
" Control the editability of fields based on EDIT_MODE
IF EDIT_MODE = 'X'. " In edit mode, allow fields to be editable
IF SCREEN-NAME = 'SCR_FIELDS-AADHARCARDNO'.
SCREEN-INPUT = 1. " Make the field editable
MODIFY SCREEN.
ENDIF.
" Add other fields as needed for editing
IF SCREEN-NAME = 'SCR_FIELDS-HOLDERNAME' OR SCREEN-NAME = 'SCR_FIELDS-ADDRESS'
OR SCREEN-NAME = 'SCR_FIELDS-CITY' OR SCREEN-NAME = 'SCR_FIELDS-PINCODE'
OR SCREEN-NAME = 'SCR_FIELDS-COUNTRY' OR SCREEN-NAME = 'SCR_FIELDS-MOBILENO'
OR SCREEN-NAME = 'SCR_FIELDS-ALTMOBILENO' OR SCREEN-NAME = 'SCR_FIELDS-EMAILID'
OR SCREEN-NAME = 'SCR_FIELDS-ALTMAILID'.
SCREEN-INPUT = 1. " Make other fields editable
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form CONTAINER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CONTAINER .
REFRESH LT_AADHAR.
SELECT * FROM ZEMP_AADHARCARD INTO TABLE LT_AADHAR.
IF O_CONT IS INITIAL AND O_GRID IS INITIAL.
CREATE OBJECT O_CONT
EXPORTING
CONTAINER_NAME = 'EMP_CONT'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT O_GRID
EXPORTING
I_PARENT = O_CONT
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD O_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'ZEMP_AADHARCARD'
CHANGING
IT_OUTTAB = LT_AADHAR
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ENDIF.
" Update the ALV grid display
IF O_GRID IS BOUND.
CALL METHOD O_GRID->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDFORM.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
| User | Count |
|---|---|
| 16 | |
| 14 | |
| 4 | |
| 4 | |
| 3 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |