Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
monika_suchy2
Explorer

With this implementation you will be able to send mails from solar02 when changing status.

Therefore I will use the enhancement spot SOLAR_DOCUMENT_EXITS, which is normally used for changing attributes during document save.

Use case: Send an e-mail to the quality manager when status is set to "REVIEW".

    

Go to transaction se18 and display enhancement spot SOLAR_DOCUMENT_EXITS:

With a right click on implementation you can create a new one:

and the next step the badi implementation:

Now you can find the two methods:

DELETE_DOCUMENT: the method is called before a document is deleted. You can also cancel deleting the document.

SAVE_DOCUMENT: the method is called before a document is saved. It can change document attributes. You can also cancel saving the document.

Code for save_document method

METHOD if_ex_solar_documents~save_document.
***********************************************************************
* Change history:
* 1.00  05.06.12  Suchy, Monika
*
************************************************************************


* Data
definitions

************************************************************************
*
  DATA:
     l_text               
TYPE soli_tab,
     l_header            
TYPE so_obj_des,
     l_recipient         
TYPE ad_smtpadr,
     l_subject           
TYPE so_obj_des,
     iwb_description     
TYPE   sdokpropty-value,
     iwb_tech_name       
TYPE   sdokpropty-value,
     iwb_state           
TYPE  sdokpropty-value,
     iwb_solar_docutype  
TYPE   sdokpropty-value,
     iwb_solar_prio       
TYPE   sdokpropty-value,
     iwb_responsible     
TYPE  sdokpropty-value,
     iwb_folder_id       
TYPE  sdokpropty-value,
     iwb_p_description   
TYPE   sdokpropty-value,
     iwb_p_tech_name     
TYPE   sdokpropty-value,
     iwb_p_state         
TYPE  sdokpropty-value,
     iwb_p_solar_docutype
TYPE   sdokpropty-value,
     iwb_p_solar_prio     
TYPE   sdokpropty-value,
     iwb_p_responsible   
TYPE  sdokpropty-value,
     l_string            
TYPE string,
     lo_recipient        
TYPE REF TO if_recipient_bcs,
     lo_send_request     
TYPE REF TO cl_bcs,
     lo_document         
TYPE REF TO cl_document_bcs,
     ls_current_attrib   
TYPE LINE OF sdokproptys,
     ls_previous_attrib  
TYPE LINE OF sdokproptys,
     sent_to_all,
     lx_document_bcs
TYPE REF TO cx_root.

*****************************************************************
* Recipient
  l_recipient = 'test@test.de'.

*Subject
  l_subject =
'SolMan: Status change Doc '.

*Get attributes
 
LOOP AT it_current_attributes INTO ls_current_attrib.

   
CASE ls_current_attrib-name.
     
WHEN 'DESCRIPTION'.
        iwb_description = ls_current_attrib-value.
     
WHEN 'IWB_TECH_NAME'.
        iwb_tech_name = ls_current_attrib-value.
     
WHEN 'IWB_STATE'.
        iwb_state = ls_current_attrib-value.
     
WHEN 'IWB_SOLAR_DOCUTYPE'.
        iwb_solar_docutype = ls_current_attrib-value.
     
WHEN 'IWB_SOLAR_PRIO'.
        iwb_solar_prio = ls_current_attrib-value.
     
WHEN 'IWB_RESPONSIBLE'.
        iwb_responsible = ls_current_attrib-value.
     
WHEN 'IWB_FOLDER_ID'.
        iwb_folder_id = ls_current_attrib-value.
    ENDCASE.
  ENDLOOP.

 
LOOP AT it_previous_attributes INTO ls_previous_attrib.
   
CASE ls_previous_attrib-name.
     
WHEN 'DESCRIPTION'.
        iwb_p_description = ls_previous_attrib-value.
     
WHEN 'IWB_TECH_NAME'.
        iwb_p_tech_name = ls_previous_attrib-value.
     
WHEN 'IWB_STATE'.
        iwb_p_state = ls_previous_attrib-value.
     
WHEN 'IWB_SOLAR_DOCUTYPE'.
        iwb_p_solar_docutype = ls_previous_attrib-value.
     
WHEN 'IWB_SOLAR_PRIO'.
        iwb_p_solar_prio = ls_previous_attrib-value.
     
WHEN 'IWB_RESPONSIBLE'.
        iwb_p_responsible = ls_previous_attrib-value.
    ENDCASE.
  ENDLOOP.

*e-mail text
 
CONCATENATE 'Document:           ' iwb_description INTO l_string.
 
APPEND l_string TO l_text.
 
CONCATENATE 'Project:            ' i_project_id INTO l_string.
 
APPEND l_string TO l_text.
 
CONCATENATE 'Solution:           ' i_solution_id INTO l_string.
 
APPEND l_string TO l_text.
 
CONCATENATE 'Status new:         ' iwb_state INTO l_string.
 
APPEND l_string TO l_text.
 
CONCATENATE 'Status old:         ' iwb_p_state INTO l_string.
 
APPEND l_string TO l_text.
 
CONCATENATE 'Responsible:        ' iwb_responsible INTO l_string.
 
APPEND l_string TO l_text.
 
APPEND '' TO l_text.
 
APPEND 'Your Solution Manager' TO l_text.

*check status change
 
IF iwb_state NE iwb_p_state.
   
IF iwb_state = 'REVIEW'.

      TRY.
          lo_document = cl_document_bcs=>create_document(
                        i_type     =
'RAW'
                        i_text     = l_text
                        i_subject  = l_subject ).

       
CATCH cx_document_bcs INTO lx_document_bcs.
         
"
*         error handling
      ENDTRY.

*Now create the e-mail

      TRY.
          lo_send_request = cl_bcs=>create_persistent( ).
          lo_send_request->set_expires_on( '199901010000' ).
          lo_send_request->set_document( lo_document ).

* Recipient

          TRY.
              lo_recipient = cl_cam_address_bcs=>create_internet_address(
                 i_address_string = l_recipient ).

             lo_send_request->add_recipient(
                
EXPORTING
                   i_recipient = lo_recipient
                   i_express   =
'X').

           
CATCH cx_address_bcs INTO lx_document_bcs.
*         error handling
          ENDTRY.

* Send
          lo_send_request->send(
              
EXPORTING
                  i_with_error_screen =
'X'
               RECEIVING
                  result = sent_to_all ).

         
IF sent_to_all <> 'X'.
            lo_send_request->delete( ).
          ENDIF.

       
CATCH cx_send_req_bcs INTO lx_document_bcs.
*         error handling
      ENDTRY.

      COMMIT WORK.

    ENDIF.
  ENDIF.

ENDMETHOD.

Last but not least check if your implementation is active:

Now you can change the status of yout test document in solar02:

In transaction SOST you can find the generated mail:

2 Comments