Display first name and last name of BP instead of BP number in the error messages
Hello All,
Some opportunities will contain invalid Business Partners( like archived, marked for deletion, not released). If such business partners are added then system will throw error message saying ” The BP is marked for deletion / archived / not released with the BP number”.
Now in this blog i am going to show how to display first name and last name of the BP instead of the BP number in the error message.
This will involve 3 steps.
1. Delete the standard error messages.
2. Structure the custom message.
3. Display the custom error message.
You can use all the below code in do_prepare_output method of the opportunity view.
1.Delete the standard error messages.
DATA: lr_msg_cont TYPE REF TO if_genil_message_container,
lr_msg_service TYPE REF TO cl_bsp_wd_message_service.
DATA: lt_msg TYPE crmt_genil_message_tab,
lv_partner TYPE bu_partner,
ls_bp_detail TYPE bapibus1006_central_person,
lv_chk_msg TYPE boolean,
ls_msg TYPE crmt_genil_message,
lt_msg_partner TYPE crmt_genil_message_tab,
ls_msg_partner TYPE crmt_genil_message,
lv_guid TYPE crmt_genil_object_guid,
*****Initially delete the standard error messages raised for the invalid BPs
lr_msg_service = cl_bsp_wd_message_service=>get_instance( ).
lr_msg_cont = er_entity->get_message_container( ).
*These are the standard error messages thrown by system when we add invalid BPs to sales team
ls_msg–id = ‘R11’.
ls_msg–number = ‘185’.
APPEND ls_msg TO lt_msg.
ls_msg–id = ‘COM_PARTNER’.
ls_msg–number = ‘156’.
APPEND ls_msg TO lt_msg.
ls_msg–id = ‘COM_PARTNER’.
ls_msg–number = ‘158’.
APPEND ls_msg TO lt_msg.
IF lr_msg_cont IS BOUND.
LOOP AT lt_msg INTO ls_msg.
lr_msg_cont->delete_messages( iv_msg_id = ls_msg–id
iv_msg_number = ls_msg–number ).
ENDLOOP.
ENDIF.“lr_msg_cont
lv_guid = er_entity->get_property_as_string( ‘GUID’ ) .
2. Structure the custom message.
*function module to read the invalid BPs from the opportunity and structuring the custom error message
CALL FUNCTION ‘ZCHECK_PARTNERS’
EXPORTING
iv_guid = lv_guid
IMPORTING
et_message = lt_msg_partner.
3. Display the custom error message.
IF lt_msg_partner IS NOT INITIAL.
LOOP AT lt_msg_partner INTO ls_msg_partner.
IF lr_msg_service IS BOUND.
lr_msg_service->add_message( iv_msg_type = ls_msg_partner–type
iv_msg_id = ls_msg_partner–id
iv_msg_number = ls_msg_partner–number
iv_msg_v1 = ls_msg_partner–var1
iv_msg_v2 = ls_msg_partner–var2
iv_msg_v3 = ls_msg_partner–var3
iv_msg_v4 = ls_msg_partner–var4
).
ENDIF.“lr_msg_service
ENDLOOP.
ENDIF.
function module source code.
ZCHECK_PARTNERS
FUNCTION zcheck_partners.
*”———————————————————————-
*”*”Local Interface:
*” IMPORTING
*” REFERENCE(IV_GUID) TYPE CRMT_OBJECT_GUID
*” EXPORTING
*” REFERENCE(ET_MESSAGE) TYPE CRMT_GENIL_MESSAGE_TAB
*”———————————————————————-
*****Data Declarations
DATA: lt_header_guid TYPE crmt_object_guid_tab,
lt_partner TYPE crmt_partner_external_wrkt,
ls_but000 TYPE but000,
lt_msg TYPE crmt_genil_message_tab,
ls_msg TYPE crmt_genil_message,
ls_partner_fct TYPE CRMC_PARTNER_FT,
ls_partner TYPE crmt_partner_external_wrk,
lt_partner_fct TYPE STANDARD TABLE OF crmc_partner_ft,
lt_but000 TYPE STANDARD TABLE OF but000.
CHECK iv_guid IS NOT INITIAL.
APPEND iv_guid TO lt_header_guid.
CALL FUNCTION ‘CRM_ORDER_READ’
EXPORTING
it_header_guid = lt_header_guid
iv_no_auth_check = ‘X’
IMPORTING
et_partner = lt_partner
.
CLEAR: lt_but000,lt_msg,ls_msg,lt_partner_fct,ls_partner_fct.
SELECT * FROM but000 INTO TABLE lt_but000 FOR ALL ENTRIES IN lt_partner WHERE type = 1
AND partner_guid = lt_partner–bp_partner_guid.
SELECT * FROM CRMC_PARTNER_FT INTO TABLE lt_partner_fct where spras = ‘E’.
IF lt_but000 IS NOT INITIAL.
LOOP AT lt_partner INTO ls_partner.
READ TABLE lt_but000 INTO ls_but000 WITH KEY partner_guid = ls_partner–bp_partner_guid.
IF sy–subrc IS INITIAL.
CONCATENATE ls_but000–name_first ls_but000–name_last INTO ls_msg–var2 SEPARATED BY SPACE.
*****Now Read the Partner function description
READ TABLE lt_partner_fct INTO ls_partner_fct WITH KEY partner_fct = ls_partner–partner_fct.
IF sy–subrc IS INITIAL.
CONCATENATE ‘(‘ ls_partner_fct–description ‘)’ into ls_msg–var3.
ENDIF.“lt_partner_fct
IF ls_but000–xdele EQ ‘X’.“If BP marked for deletion.
ls_msg–type = ‘E’.
ls_msg–id =‘XXXXXX’.
ls_msg–number = ‘000’.
ls_msg–var1 = ‘Business Partner’.
ls_msg–var4 = ‘has status “Flagged for Archiving”‘.
append ls_msg to lt_msg.
ENDIF.“ls_but000-XDELE
IF ls_but000–xblck EQ ‘X’.“If the BP is blocked
ls_msg–type = ‘E’.
ls_msg–id =‘XXXX’.
ls_msg–number = ‘000’.
ls_msg–var1 = ‘Business Partner’.
ls_msg–var4 = ‘has status “Locked”‘.
append ls_msg to lt_msg.
ENDIF.“ls_but000-XBLCK
IF ls_but000–not_released EQ ‘X’.“If the BP marked as not released
ls_msg–type = ‘E’.
ls_msg–id =‘XXXX’.
ls_msg–number = ‘000’.
ls_msg–var1 = ‘Business Partner’.
ls_msg–var4 = ‘has status “Not Released”‘.
append ls_msg to lt_msg.
ENDIF.“ls_but000-NOT_RELEASED
ENDIF.“sy-subrc
clear: ls_msg.
ENDLOOP.“lt_partner
ENDIF.“lt_but000
et_message = lt_msg.
ENDFUNCTION.
The final result will be like this.
Standard error messages.
Custom error messages.
Br,
Navn
Hi Naveen,
It awesome , thanks for such wonderful information.
Br,
Hemangi