In using BP transactions could be for customer, vendor and lot of other Business partners(internal and external) in the system. SAP has a set of predefined roles for each of the business partner which can be seen as a dropdown as below in SAP BP Tcode hide role in Dropdown
Please read on to find more below
Below is the screenshot of how the roles look like currently. And then 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
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
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:
*lv_string1 = IV_PARTNER_NUMBER+0(1).
Select single partner_guid from but000 into ls_but000 where partner_guid = IV_PARTNER_GUID .
if sy-subrc EQ 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_roles TYPE xfeld.
lv_string = 'ZVENDOR_ROLE'.
* convert retrieved value to range table
* Add your condition here;
* if else endif.
LOOP AT lt_roles INTO DATA(ls_role).
READ TABLE lt_groups INTO ls_group WITH KEY agr_name = ls_role.
IF sy-subrc EQ 0. " Vendor matching role exist
lv_delete_roles = 'X'. "so delete the other roles
EXIT.
ENDIF.
ENDLOOP.
IF lv_delete_roles IS NOT INITIAL.
FIELD-SYMBOLS: <fs_struct> TYPE any.
FIELD-SYMBOLS <fv_value> TYPE any.
DATA: lv_tabix TYPE sy-tabix.
LOOP AT it_possible_roles ASSIGNING <fs_struct> .
*
lv_tabix = sy-tabix.
ASSIGN COMPONENT 'ROLE' OF STRUCTURE <fs_struct> TO <fv_value> .
*
IF <fv_value> IS ASSIGNED AND ( ( <fv_value> = '000000' ) OR ( <fv_value> = 'FLVN00' ) OR ( <fv_value> = 'FLVN01' ) ) .
ELSE.
DELETE it_possible_roles INDEX lv_tabix..
* DELETE gt_partner_role_values INDEX lv_tabix.
ENDIF.
ENDLOOP.
ENDIF.
*ENDiF.
ENDIF.
However you could also use one of the BADIs below but I was not able to make them work for the specific requirement I had.
BUPA_BLOCK_ROLES_REMOVE
BUPA_ROLE_CHECK -
BUPA_ROLES_UPDATE - Only run specific to a BP when the Vendor Loads.
Let us know if you found the article useful. Do read our SAP Service offering page here:
If you have any business inquiry, please feel free to contact us