Enterprise Architecture Blog Posts
Need a little more room to share your thoughts with the community? Post a blog in the SAP Enterprise Architecture group to explain the more complex topics.
cancel
Showing results for 
Search instead for 
Did you mean: 
Swetha_Irugu
Explorer
5,560

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).

Swetha_Irugu_0-1735538019022.png

STEP-2:  Goto SE38 transaction code, Create Program, shown as below

Swetha_Irugu_1-1735538019036.png

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.

Swetha_Irugu_2-1735538019043.png

STEP – 4: Creating Screen 100 to display an output.

Swetha_Irugu_3-1735538019047.png

STEP – 5: Creating Layout for screen 100, first double clicks on Screen number 100 and click YES button in popup.

Swetha_Irugu_4-1735538019066.png

STEP –6: Enter Short Description & click on Layout. It will display Screen Painter

Swetha_Irugu_5-1735538019079.png

Step-7: In Screen Painter click on Goto select Secondary Windon then select Dictionary/Program Fields. It will display Dictionary fields.

Swetha_Irugu_6-1735538019087.png

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

Swetha_Irugu_7-1735538019105.png

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).

Swetha_Irugu_8-1735538019113.png

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.

Swetha_Irugu_9-1735538019124.png

STEP – 11: In, Flow Logic Uncomment the both the PBO & PAI modules and double click on PBO module as show below-

Swetha_Irugu_10-1735538019133.png

Click Yes button, it will show Popup click on Main screen as shown in below-

Swetha_Irugu_11-1735538019142.png

STEP-12: Write code in PBO module for Screen 100 -

Swetha_Irugu_12-1735538019146.png

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.

  • Double click on STATUS shown in above screenshot to add Function keys i.e., Back, Save, Enter & Application Toolbar i.e., Edit, Delete then click on activate and click back as shown below-

Swetha_Irugu_13-1735538019155.png

  • Double click on Perform to display the records in database table in a format of ALV grid by using SET_TABLE_FOR_FIRST_DISPLAY & to refresh the container grid REFRESH_TABLE_DISPLAY.

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.

Swetha_Irugu_14-1735538019165.png

Click Yes button, it will show Popup click on Main screen as shown in below-

Swetha_Irugu_15-1735538019174.png

STEP – 14:  Write code in PAI module for Screen 100 -

  • Enter Button: When ENTER button click -

Swetha_Irugu_16-1735538019185.png

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

  • Save Button: When SAVE button click -

Swetha_Irugu_17-1735538019195.png

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.

  • Edit Button: When Edit button click -

Swetha_Irugu_18-1735538019198.png

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

  • Delete & Back Buttons: When DELETE & BACK buttons click -

Swetha_Irugu_19-1735538019203.png

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 -

Swetha_Irugu_20-1735538019213.png

STEP-16: Right click on the program name and activate it.

Swetha_Irugu_21-1735538019227.png

STEP-17: Right click on program name select create and then click on Transaction as show below-

Swetha_Irugu_22-1735538019242.png

STEP – 18: After it will display Popup, give Transaction code and short text and select dialog transaction as shown below -

Swetha_Irugu_23-1735538019256.png

STEP – 19: Click continue it will ask program name, screen number and select all checkboxes in GUI support. Then click on save and display -

Swetha_Irugu_24-1735538019270.png

STEP – 20:  Output will be display as -

  • Key field as (Aadhar Card No), Container to display records in database table & buttons i.e., Save, Edit, Delete as shown in below -

Swetha_Irugu_25-1735538019280.png

  • When we enter a Aadhar card number having a record in database table then click on enter key it automatically displays remaining fields in non-editable mode as shown below-

Swetha_Irugu_26-1735538019290.png

  • When we enter Aadhar card number which is not in database table it automatically displays in editable mode when we click on enter key. If we want to create new record enter the fields and click on SAVE button as shown in below-

Swetha_Irugu_27-1735538019300.png

  • When we display the record after clicking on the enter key, if we want any changes in that record then click on EDIT button it will display in editable mode, change the fields then click on the SAVE button. It will display record saved successfully automatically it will refresh the container with changed record -

Swetha_Irugu_28-1735538019311.png

  • When we click on DELETE button to delete a record it will display popup confirmation whether are you sure delete record or not. If we click on the YES button it will delete the record, it will show success message and refresh the container automatically. If we click on NO button, it will display warning message & if we click on cancel it will display cancellation message as show below   -

Swetha_Irugu_29-1735538019320.png

Swetha_Irugu_30-1735538019328.png

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.

1 Comment