Enterprise Resource Planning Blogs by Members
Gain new perspectives and knowledge about enterprise resource planning in blog posts from community members. Share your own comments and ERP insights today!
cancel
Showing results for 
Search instead for 
Did you mean: 
vijaymanikandan
Contributor

Custom Screen in Transaction Manager - TM_61/ 62/63

In this Blog, lets see how to enhance a the transaction manager screen using a BADI. Basically adding a new custom tab.

Transaction manager is TM_61.

The basic table behind this transaction is VTBFHA.

We need to create the Append structure for this table with the needed fields that you think must be there in the screen,

Now comes the tricky part. Which BADI to use and how to implement the logic.

The BADI here to be used is 'FTR_CUSTOMER_EXTENT'.

Create a BADi implementation for this BADI.

Next step is that we have to create a function Group.

Now we need 2 things.

1. Screen where we will have the new fields must be created in this Function group.

Note: The screen must be created as a sub-screen.

Write Logic in PBO & PAI accordingly.

Now comes one more interesting aspect of how you need to handle this custom fields in your PBO.

We need to get the custom data fields using the 'GET_CUST_DATA' method and then do further logics.

FORM 100_PREPARE_OUTPUT  CHANGING P_VTMFHA.

  DATA: L_FHA_APPENDS LIKE LINE OF G_TAB_FHA_APPENDS.

  DATA: LD_TEXT1 TYPE T005T-LANDX,

        LD_NAME1 TYPE ZZNAME,

        LD_NAME2 TYPE T880-NAME1.

* try to get append data from VTBFHA

  CALL METHOD G_PROXY_CUST_DATA->GET_CUST_DATA

    IMPORTING

      PE_TAB_FHA_APPENDS = G_TAB_FHA_APPENDS

    EXCEPTIONS

      OTHERS             = 4.

  LOOP AT G_TAB_FHA_APPENDS INTO L_FHA_APPENDS.

    IF NOT L_FHA_APPENDS-CONTENT IS INITIAL.

      VTMFHA-ZZGENERATION = L_FHA_APPENDS-CONTENT+0(2).

      VTMFHA-ZZCOUNTRY    = L_FHA_APPENDS-CONTENT+2(3).

      VTMFHA-ZZBENEFI     = L_FHA_APPENDS-CONTENT+5(10).

      VTMFHA-ZZTRADPAR    = L_FHA_APPENDS-CONTENT+15(25).

    ENDIF.

  ENDLOOP.



  IF NOT VTMFHA-ZZCOUNTRY IS INITIAL.

    SELECT SINGLE LANDX INTO LD_TEXT1 FROM T005T WHERE LAND1 = VTMFHA-ZZCOUNTRY AND SPRAS = SY-LANGU.

    IF SYST-SUBRC = 0.

      T005T-LANDX = LD_TEXT1.

    ENDIF.

  ENDIF.



  IF NOT VTMFHA-ZZBENEFI IS INITIAL.

    SELECT SINGLE NAME1 INTO LD_NAME1 FROM ZTM_CUST_BOND WHERE ZCUSTOMER = VTMFHA-ZZBENEFI AND LAND1 = VTMFHA-ZZCOUNTRY.

    IF SYST-SUBRC = 0.

      ZTM_CUST_BOND-NAME1 = LD_NAME1.

    ENDIF.

  ENDIF.



  IF NOT VTMFHA-ZZTRADPAR IS INITIAL.

    SELECT SINGLE NAME1 INTO LD_NAME2 FROM T880 WHERE RCOMP = VTMFHA-ZZTRADPAR.

    IF SYST-SUBRC = 0.

      T880-NAME1 = LD_NAME2.

    ENDIF.

  ENDIF.



  CALL METHOD G_PROXY_FMOD->APPLY_FMOD.

Next is PAI

You need to concatenate all the values and send into the CONTENT and the system will take care of splitting it and storing using the SET_CUST_DATA.

2. A Function module which we will use in the BADI to call this screen. The structure is a standard and is a copy from the standard FM but you need to implement your logic inside to get the right screen created above to be called.

DATA: L_BADI_TABS LIKE LINE OF PC_TAB_BADI_TABS.

  DATA: L_TAB_MOD_FIELDS TYPE FTRG_TAB_FIELD_MODIFY.

  DATA: L_MOD_FIELDS LIKE LINE OF L_TAB_MOD_FIELDS.



* save references in the global memory of the function module first

  G_PROXY_TRANSACTION  = PI_PROXY_TRANSACTION.

  G_PROXY_CUST_DATA    = PI_CUST_TRANSACTION.

  G_PROXY_MESSAGES     = PI_PROXY_MESSAGES.

  G_PROXY_FCODE        = PI_PROXY_FCODE.

  G_PROXY_FMOD         = PI_PROXY_FMOD.



  L_BADI_TABS-REPID    = 'SAPLZFI_TRM_TM_BOND'. "REPORT

  L_BADI_TABS-DYNNR    = '0100'.       "Subscreen

  L_BADI_TABS-TEXT_TAB = TEXT-001.     "Text (max. 30 CHAR) to displayed

  MODIFY PC_TAB_BADI_TABS FROM L_BADI_TABS

                          TRANSPORTING REPID DYNNR TEXT_TAB

                          WHERE FCODE = C_CUSTOM_GUI_FCODE1. "1st FCODE



  L_MOD_FIELDS-TABNAME = 'VTMFHA'.

  L_MOD_FIELDS-FIELDNAME = 'ZZGENERATION'.

  IF SY-TCODE NE 'TM_63'.

    L_MOD_FIELDS-ATTRIBUTE = C_FMOD_INPUT.

  ELSE.

    L_MOD_FIELDS-ATTRIBUTE = C_FMOD_DISPLAY.

  ENDIF.

  APPEND L_MOD_FIELDS TO L_TAB_MOD_FIELDS.



  L_MOD_FIELDS-TABNAME = 'VTMFHA'.

  L_MOD_FIELDS-FIELDNAME = 'ZZCOUNTRY'.

  IF SY-TCODE NE 'TM_63'.

    L_MOD_FIELDS-ATTRIBUTE = C_FMOD_INPUT.

  ELSE.

    L_MOD_FIELDS-ATTRIBUTE = C_FMOD_DISPLAY.

  ENDIF.

  APPEND L_MOD_FIELDS TO L_TAB_MOD_FIELDS.



  L_MOD_FIELDS-TABNAME = 'VTMFHA'.

  L_MOD_FIELDS-FIELDNAME = 'ZZBENEFI'.

  IF SY-TCODE NE 'TM_63'.

    L_MOD_FIELDS-ATTRIBUTE = C_FMOD_INPUT.

  ELSE.

    L_MOD_FIELDS-ATTRIBUTE = C_FMOD_DISPLAY.

  ENDIF.

  APPEND L_MOD_FIELDS TO L_TAB_MOD_FIELDS.





  L_MOD_FIELDS-TABNAME = 'VTMFHA'.

  L_MOD_FIELDS-FIELDNAME = 'ZZTRADPAR'.

  IF SY-TCODE NE 'TM_63'.

    L_MOD_FIELDS-ATTRIBUTE = C_FMOD_INPUT.

  ELSE.

    L_MOD_FIELDS-ATTRIBUTE = C_FMOD_DISPLAY.

  ENDIF.

  APPEND L_MOD_FIELDS TO L_TAB_MOD_FIELDS.



  CALL METHOD G_PROXY_FMOD->SET_FIELDMOD

    EXPORTING

      PI_MODIFIED_FIELDS = L_TAB_MOD_FIELDS.

Now you are done with the steps and when you open the transaction TM_61 you can find the new tab coming up in the screen.

You can follow similar steps for the other transactions where you need to enhance a screen using a BADI. To ensure that you can use the BADI check if there is a FCODE and Screen in the BADI.

Appreciate your comments & feedback.

5 Comments
Labels in this area