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.