Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
navn_metts
Active Participant

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

1 Comment
Labels in this area