Thursday 17 June 2010

SAP/SD - Sending order/delivery/invoice via email with body text

This is surely not new, most of us ABAP developers will somehow come across this requirement in some of our project/implementation/support. For those who're on the latest SAP platform, probably you guys are lucky to have the IMPLICIT/EXPLICIT enhancement which you could do to enhance standard SAP function module. But for some of us who're still stuck with 620 or below, we're not so lucky.

Anyway, to share some of the thing that I've done to get the body text work:

  1. You can't use body text in NACE, it just doesn't work that way. Tried it so many times and given up. SAP has a note which says that no matter what you do, it will not work for you :) SAP Note 753622.
  2. Next best thing to do is, to go ahead and change the way the standard SAP send out email in the print program, create an OTF, and just after CLOSE_FORM, use SO_NEW_DOCUMENT_ATT_SEND_API1 or BCS to send the email out. For me, this is too much too.
  3. Probably the best option, do this in FORM_OPEN subroutine in the print program. This is what I've done and it works. Copy the standard RVADOPF0 into customer namespace and replace this in FROM_OPEN subroutine. Add the following code just after the check for retcode eq 0. Create a standard text using SO10 .. text name will be your (output type)_BODY_TEXT.
Here is the code that I've:

DATA: lines_tab LIKE tline OCCURS 0 WITH HEADER LINE,
             obj_name LIKE thead-tdname,
             email_body_text TYPE TABLE OF soli,
             email_line TYPE soli.

CONCATENATE nast-kschl '_BODY_TEXT' INTO obj_name.
CALL FUNCTION 'READ_TEXT'
            EXPORTING
                id = 'ST'
                language = nast-spras
                name = obj_name
                object = 'TEXT'
            TABLES
                lines = lines_tab
            EXCEPTIONS
                id = 1
                language = 2
                name = 3
                not_found = 4
                object = 5
                reference_check = 6
                wrong_access_to_archive = 7
                OTHERS = 8.
LOOP AT lines_tab.
  email_line = lines_tab-tdline.
  APPEND email_line TO email_body_text.
ENDLOOP.
IF email_body_text[] IS NOT INITIAL.
  swc_object_from_persistent lvs_recipient recipient.
  swc_clear_container container.
  swc_set_element container 'NoteText' email_body_text.
  swc_call_method recipient 'AddNote' container.
  swc_object_to_persistent recipient lvs_recipient.
ENDIF.

7 comments:

Anonymous said...

Hello,

I followed your steps and tried to use your code, but I got error message: SWC_OBJECT_FROM_PERSISTENT" is not defined.

How should I define this and propably next statemens?

Thank you,
David

Anonymous said...

Hello. I tried to use your example, but I have problems with:
swc_object_from_persistent lvs_recipient swc_recipient.
swc_clear_container swc_container.
swc_set_element swc_container 'NoteText' email_body_text.
swc_call_method swc_recipient 'AddNote' swc_container.
swc_object_to_persistent swc_recipient lvs_recipient.

I don't know how to use it. I suppose there should be any declaration.

Could you plese help me with this?

Thank you. David

9M2TPT said...

Hi David,

I guess you missed the include. Check the following on how to use the swc macros.

http://help.sap.com/saphelp_nwpi71/helpdata/en/c5/e4b130453d11d189430000e829fbbd/content.htm

Anonymous said...

Hi, I red the SAP help, but it didn't explain how to declare swc_object_from_persistent, can you help me ? Thanks in advance.

9M2TPT said...

If you look at the SAP Help.. to enable the macro, you need to add the pre-requisite INCLUDE ..

INCLUDE "".

Somehow, blogspot won't allow me to have that < and >, guess it tought its a HTML tag .. it will get deleted, so .. add the above .. and don't forget to remove the "

9M2TPT said...

Oh .. dammit blogspot .. 'INCLUDE .' if this is failed .. read back the help page, it has that pre-req. INCLUDE ..

Anonymous said...

Works fine for me, thanks from Austria!

Calling MS SQL Stored Procedure from ABAP

One of the few things sometime coming up in your ticket request. Calling stored procedure from ABAP to remote SQL server.  How do we send th...