Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

How to append data..

dhruv_shah3
Active Contributor
0 Likes
1,319

I have an requirement where in transaction MIGO. when user clicks on POST button, at that time the data should be e-mailed to the Vendor.

So for that i have created a Z implementation of BADI MB_MIGO_BADI.

Now in that i have written a Function Module name as Z_SENDMAIL.

where i have table paramater which is of type BCSY_TEXT which is again of LINE type of SOLI.

Now the data of MIGO is filled in table IT_MSEG which is paramter of Method POST_DOCUMENT of MB_MIGO_BADI.

So problem comes that how should i fill the data in my line type table of Function Module.

For your information i am sending you the FM.

FUNCTION Z_SENDMAIL.

*"----


""Local Interface:

*" IMPORTING

*" VALUE(FROM) TYPE ADR6-SMTP_ADDR OPTIONAL

*" REFERENCE(TO) TYPE ADR6-SMTP_ADDR OPTIONAL

*" REFERENCE(SUBJECT) TYPE SO_OBJ_DES

*" REFERENCE(FLAG) TYPE CHAR1 OPTIONAL

*" EXPORTING

*" REFERENCE(RETURNCODE) TYPE SY-SUBRC

*" TABLES

*" IT_TEXT TYPE BCSY_TEXT

*" IT_EMAILS STRUCTURE SOMLRECI1 OPTIONAL

*"----


TYPES : BEGIN OF TS_REC,

RECIPIENT TYPE REF TO IF_RECIPIENT_BCS,

END OF TS_REC.

DATA : IS_T1(255) TYPE C,

IT_REC TYPE TABLE OF TS_REC,

IS_REC TYPE TS_REC,

W_EMAIL TYPE ADR6-SMTP_ADDR,

W_TEXT TYPE BCSY_TEXT,

W_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,

W_SENDER TYPE REF TO IF_SENDER_BCS,

W_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS,

W_SENT_TO_ALL TYPE OS_BOOLEAN,

W_OREF TYPE REF TO CX_ROOT,

W_TEXT1 TYPE STRING,

W_SEND_REQUEST TYPE REF TO CL_BCS,

W_TABIX TYPE SY-TABIX.

CONSTANTS: C_TYPE TYPE SO_OBJ_TP VALUE 'RAW',

C_LENGTH TYPE SO_OBJ_LEN VALUE '12',

C_X TYPE C VALUE 'X'.

FROM = abc@yahoo.com'.

TRY.

  • create persistent send request

W_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).

LOOP AT IT_TEXT INTO IS_T1.

APPEND IS_T1 TO W_TEXT.

CLEAR IS_T1.

ENDLOOP.

W_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(

I_TYPE = C_TYPE

I_TEXT = W_TEXT

I_LENGTH = C_LENGTH

I_SUBJECT = SUBJECT ).

  • add document to send request

CALL METHOD W_SEND_REQUEST->SET_DOCUMENT( W_DOCUMENT ).

  • set sender

  • note: this is necessary only if you want to set the sender

  • different from actual user (SY-UNAME). Otherwise sender is

  • set automatically with actual user.

  • sender = cl_sapuser_bcs=>create( sy-uname ).

W_SENDER = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( FROM

).

CALL METHOD W_SEND_REQUEST->SET_SENDER

EXPORTING

I_SENDER = W_SENDER.

  • add recipient (e-mail address)

  • create recipient - please replace e-mail address !!!

IF TO IS NOT INITIAL .

W_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(

TO ).

CALL METHOD W_SEND_REQUEST->ADD_RECIPIENT

EXPORTING

I_RECIPIENT = W_RECIPIENT

  • i_copy = c_x

I_EXPRESS = C_X.

**********************************************

W_SEND_REQUEST->SET_SEND_IMMEDIATELY( 'X' ).

CALL METHOD W_SEND_REQUEST->SEND(

EXPORTING

I_WITH_ERROR_SCREEN = C_X

RECEIVING

RESULT = W_SENT_TO_ALL ).

COMMIT WORK.

ENDIF.

CATCH CX_SY_ARITHMETIC_ERROR INTO W_OREF.

RETURNCODE = 4.

W_TEXT1 = W_OREF->GET_TEXT( ).

CATCH CX_ROOT INTO W_OREF.

RETURNCODE = 4.

W_TEXT1 = W_OREF->GET_TEXT( ).

ENDTRY.

LOOP AT IT_EMAILS.

TRY.

CLEAR W_EMAIL.

W_EMAIL = IT_EMAILS-RECEIVER.

W_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(

W_EMAIL ).

IS_REC-RECIPIENT = W_RECIPIENT.

APPEND IS_REC TO IT_REC.

CATCH CX_ADDRESS_BCS.

RETURNCODE = 4.

ENDTRY.

ENDLOOP.

LOOP AT IT_REC INTO IS_REC.

TRY.

W_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).

W_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(

I_TYPE = C_TYPE

I_TEXT = W_TEXT

I_LENGTH = C_LENGTH

I_SUBJECT = SUBJECT ).

  • add document to send request

CALL METHOD W_SEND_REQUEST->SET_DOCUMENT( W_DOCUMENT ).

  • set sender

  • note: this is necessary only if you want to set the sender

  • different from actual user (SY-UNAME). Otherwise sender is

  • set automatically with actual user.

  • sender = cl_sapuser_bcs=>create( sy-uname ).

W_SENDER = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(

FROM ).

CALL METHOD W_SEND_REQUEST->SET_SENDER

EXPORTING

I_SENDER = W_SENDER.

CALL METHOD W_SEND_REQUEST->ADD_RECIPIENT

EXPORTING

I_RECIPIENT = IS_REC-RECIPIENT

I_EXPRESS = C_X.

W_SEND_REQUEST->SET_SEND_IMMEDIATELY( 'X' ).

CALL METHOD W_SEND_REQUEST->SEND(

EXPORTING

I_WITH_ERROR_SCREEN = C_X

RECEIVING

RESULT = W_SENT_TO_ALL ).

  • COMMIT WORK.

CATCH CX_SY_ARITHMETIC_ERROR INTO W_OREF.

RETURNCODE = 4.

W_TEXT1 = W_OREF->GET_TEXT( ).

CATCH CX_ROOT INTO W_OREF.

RETURNCODE = 4.

W_TEXT1 = W_OREF->GET_TEXT( ).

ENDTRY.

ENDLOOP.

IF FLAG = 'X'.

IF TO IS NOT INITIAL.

IT_EMAILS-RECEIVER = TO.

APPEND IT_EMAILS TO IT_EMAILS.

ENDIF.

ENDIF.

ENDFUNCTION.

So pls help me out asap its very Urgent.......

Regards,

DS

1 ACCEPTED SOLUTION
Read only

naimesh_patel
Active Contributor
0 Likes
700

You can fill the data into the body or attach an attachment with the email.

For filling the data into the body, you can use the CONCATENATE statement.

LOOP AT IT_MSEG.
* concatenate all your fields here
  CONCATENATE IT_MSEG-MEBLNR IT_MSEG-MGJAHR INTO L_TEXT SEPARATED BY ' | '.
APPEND L_TEXT TO IT_TEXT.
ENDLOOP.

Pass this IT_TEXT to your table.

For creating an attachment you need to create a SMARTForm and than create a PDF attachment which can go alongwith the Mail.

Regards,

Naimesh Patel

1 REPLY 1
Read only

naimesh_patel
Active Contributor
0 Likes
701

You can fill the data into the body or attach an attachment with the email.

For filling the data into the body, you can use the CONCATENATE statement.

LOOP AT IT_MSEG.
* concatenate all your fields here
  CONCATENATE IT_MSEG-MEBLNR IT_MSEG-MGJAHR INTO L_TEXT SEPARATED BY ' | '.
APPEND L_TEXT TO IT_TEXT.
ENDLOOP.

Pass this IT_TEXT to your table.

For creating an attachment you need to create a SMARTForm and than create a PDF attachment which can go alongwith the Mail.

Regards,

Naimesh Patel