SAP transaction BP - Hide the BP roles in Dropdown

Table of Contents
    Add a header to begin generating the table of contents

    SAP transaction BP - Hide the BP roles in Dropdown

    In using BP transactions could be for customer, vendor and lot of other Business partners(internal and external) in the systemSAP has a set of predefined roles for each of the business partner which can be seen as a dropdown as below 

    1. How the screen looks currently  
    2. Config based control 
    3. Conditional restriction for dropdown
    4. Other BADIs which can be used  

    Please read on to find more below  

    How the screen looks currently

    Below is the screenshot of how the roles look like currently. When you click on display it only shows the role assigned to the BP  but clicking on change or create gives a whole drop down list as seen below  

     

    SAP BP Transaction Dropdown for Roles

    Config based Control

    Below is the config point.  
    SPRO->Cross-application Components ->Sap Bussiness Partner ->Bussiness Partner -> Basic Settings -> Business Partner Roles -> Define BP Roles

    Refer note which has the screenshot explaining this setting  

    2813078 - How to hide BP role/BP role grouping on BP screen 

     

    SAP BP transaction role for config

    Conditional Restriction for the dropdown

    Conditional Viewing of roles based on predefined business condition example role assigned to the user   

    We can add custom logic based on which we can define  

    Check the class CL_IM_VKK_BUPA_ROLES_REMOVE  and method 

    IF_BUPA_BLOCK_ROLES_REMOVE~REMOVE_ROLES_FROM_DROPDOWN 

    I created a user exit for this method as a Post exit 

    Logic as below:  

    1. Read the specific BP being opened by the user  
    2. Restrict for a specific BP grouping or number range 
    3. Get the roles for the user and check for the role combination which you want to show / hide a specific tab 
    4. Based on the condition hide/ show the specific item in dropdown menu 
    *lv_string1 = IV_PARTNER_NUMBER+0(1). 
    Select single partner_guidfrom but000 into ls_but000 where partner_guid= IV_PARTNER_GUID . 
      if sy-subrcEQ 0 and iv_partner_number+0(1) NE 'E'. 
    *You can also use partner grouping instead of number range in below  
     
          IF ( iv_partner_number+0(1) = '0' AND  ( iv_partner_number+4(1) = '9' OR iv_partner_number+4(1) = '7' ) ) . " M01 
     
     
            CALL FUNCTION 'BAPI_USER_GET_DETAIL' 
              EXPORTING 
                username       = sy-uname 
              TABLES 
                activitygroups= lt_groups 
                return         = lt_return          . 
     
            DATA: lv_string       TYPE string, 
                  lv_delete_rolesTYPE xfeld. 
     
            lv_string= 'ZVENDOR_ROLE'. 
    * convert retrieved value to range table 
    * Add your condition here; 
    * if else endif.  
            LOOP AT lt_rolesINTO DATA(ls_role). 
              READ TABLE lt_groupsINTO ls_groupWITH KEY agr_name= ls_role. 
              IF sy-subrcEQ 0