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

regarding SO_NEW_DOCUMENT_ATT_SEND_API1

Former Member
0 Likes
1,138

hi all,

i am using SO_NEW_DOCUMENT_ATT_SEND_API1 function module to send PDF file to mail.

i am facing the problem "Document_not sent" , sy-subrc is 2 , what could be the problem.

REPORT ZSANDYTEST.

DATA: number TYPE tbtcjob-jobcount,

name TYPE tbtcjob-jobname VALUE 'JOB_SANDY',

print_parameters TYPE pri_params,

l_spoolid TYPE RSPOID,

l_rqcretime TYPE RSPOCRTIME,

t_pdf like tline occurs 0 with header line,

i_objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE,

i_reclist LIKE somlreci1 OCCURS 5 WITH HEADER LINE,

s_doc_data TYPE sodocchgi1,

gd_buffer TYPE string,

it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,

i_objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,

g_tablines TYPE sy-tabix,

l_name type CHAR40,

l_email type char40.

CALL FUNCTION 'JOB_OPEN'

EXPORTING

jobname = name

IMPORTING

jobcount = number

EXCEPTIONS

cant_create_job = 1

invalid_job_data = 2

jobname_missing = 3

OTHERS = 4.

IF sy-subrc = 0.

data: Zscreen type table of RSPARAMS with header line.

Zscreen-selname = 'PM_AENNR'.

Zscreen-kind = 'P'.

ZSCREEN-LOW = '500000000125'.

APPEND ZSCREEN.

SUBMIT RCC00130 WITH selection-table Zscreen TO SAP-SPOOL

SPOOL PARAMETERS print_parameters

WITHOUT SPOOL DYNPRO

VIA JOB name NUMBER number

AND RETURN.

IF sy-subrc = 0.

CALL FUNCTION 'JOB_CLOSE'

EXPORTING

jobcount = number

jobname = name

strtimmed = 'X'

EXCEPTIONS

cant_start_immediate = 1

invalid_startdate = 2

jobname_missing = 3

job_close_failed = 4

job_nosteps = 5

job_notex = 6

lock_failed = 7

OTHERS = 8.

IF sy-subrc <> 0.

...

ENDIF.

ENDIF.

ENDIF.

WAIT UP TO 5 SECONDS.

SELECT rqident rqcretime INTO (l_spoolid,

l_rqcretime)

FROM tsp01 UP TO 1 rows

WHERE rqclient = sy-mandt

AND RQ0NAME = 'LIST1S'

AND rqowner = sy-uname

*AND RQDOCTYPE = 'OTF'

*AND RQCRETIME = SY-UZEIT

ORDER BY rqcretime

DESCENDING.

ENDSELECT.

CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = L_SPOOLID

TABLES

PDF = t_pdf

EXCEPTIONS

ERR_NO_ABAP_SPOOLJOB = 1

ERR_NO_SPOOLJOB = 2

ERR_NO_PERMISSION = 3

ERR_CONV_NOT_POSSIBLE = 4

ERR_BAD_DESTDEVICE = 5

USER_CANCELLED = 6

ERR_SPOOLERROR = 7

ERR_TEMSEERROR = 8

ERR_BTCJOB_OPEN_FAILED = 9

ERR_BTCJOB_SUBMIT_FAILED = 10

ERR_BTCJOB_CLOSE_FAILED = 11

OTHERS = 12.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

  • Transfer the 132-long strings to 255-long strings

LOOP AT t_pdf.

TRANSLATE t_pdf USING ' ~'.

CONCATENATE gd_buffer t_pdf INTO gd_buffer.

ENDLOOP.

TRANSLATE gd_buffer USING '~ '.

DO.

it_mess_att = gd_buffer.

APPEND it_mess_att.

SHIFT gd_buffer LEFT BY 255 PLACES.

IF gd_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

DESCRIBE TABLE it_mess_att LINES g_tablines.

READ TABLE it_mess_att INDEX g_tablines.

s_doc_data-doc_size = ( g_tablines - 1 ) * 255 + STRLEN( it_mess_att ).

s_doc_data-obj_name = 'ECM NOTIFICATIONS'.

CONCATENATE '<br> ECM #:' '500000000125' INTO i_objtxt SEPARATED BY space.

APPEND i_objtxt.

i_reclist-receiver = 'email id'.

append i_reclist.

i_objpack-transf_bin = 'X'.

i_objpack-head_start = 1.

i_objpack-head_num = 0.

i_objpack-body_start = 1.

i_objpack-body_num = g_tablines.

i_objpack-doc_type = 'PDF'.

APPEND i_objpack.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = s_doc_data

PUT_IN_OUTBOX = 'X'

COMMIT_WORK = 'X'

tables

packing_list = i_objpack

  • OBJECT_HEADER =

CONTENTS_BIN = it_mess_att

CONTENTS_TXT = i_objtxt

  • CONTENTS_HEX =

  • OBJECT_PARA =

  • OBJECT_PARB =

receivers = i_reclist

EXCEPTIONS

TOO_MANY_RECEIVERS = 1

DOCUMENT_NOT_SENT = 2

DOCUMENT_TYPE_NOT_EXIST = 3

OPERATION_NO_AUTHORIZATION = 4

PARAMETER_ERROR = 5

X_ERROR = 6

ENQUEUE_ERROR = 7

OTHERS = 8.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

thanks

sandeep

4 REPLIES 4
Read only

Former Member
0 Likes
693

Your code is not readable.

Check my code, you will get poiinters.


*     Objects to send mail.
  DATA: L_T_OBJPACK   LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE,        " SAPoffice: Description of Imported Object Components
        L_T_OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE,
        L_T_OBJTXT    LIKE SOLISTI1   OCCURS 10 WITH HEADER LINE,
        L_T_OBJBIN    LIKE SOLISTI1   OCCURS 10 WITH HEADER LINE,
        L_T_RECLIST   LIKE SOMLRECI1  OCCURS 5 WITH HEADER LINE,        " SAPoffice: Structure of the API Recipient List
        L_DATE LIKE SY-DATUM,
        V_DOCUMENT_DATA TYPE SODOCCHGI1.


  DATA:
*     Work Area declarations
        L_WA_OBJHEAD   TYPE SOLI_TAB,                                    " Work Area for Objcont and Objhead as Table Type
        L_WA_DOC_CHNG  TYPE SODOCCHGI1,                                  " Work Area - Data of an object which can be changed

*     Variables declarations
        L_LINES_TXT    TYPE I,
        L_LINES_BIN    TYPE I,
        L_OBJ_DESC(100),
        L_NAME(100).

  DATA : BEGIN OF L_T_EMAIL OCCURS 0,
  EMAIL_ID(100),
  END OF L_T_EMAIL.

* email -id
  SELECT LOW INTO TABLE L_T_EMAIL
  FROM TVARVC
  WHERE NAME EQ 'ZREUTERS_MAIL'.

  IF SY-SUBRC <> 0.
    L_T_EMAIL-EMAIL_ID = SY-UNAME.
    APPEND L_T_EMAIL.
    MESSAGE I999 WITH 'Email IDs not maintained in TVARVC'.
  ENDIF.

  
*Fill in the contents of the mail body
L_T_OBJBIN = ' Reuters File format'.
APPEND L_T_OBJBIN.


* Attachment
  REFRESH: L_T_RECLIST,
           L_T_OBJTXT,
           L_T_OBJPACK.

  CLEAR L_WA_OBJHEAD.

  
* Create Message Body Title and Description
  CONCATENATE 'Reuters File' Sy-datum INTO L_NAME SEPARATED BY SPACE.
  L_T_OBJTXT = L_NAME.
  APPEND L_T_OBJTXT.

  CONCATENATE 'Reuters File' Sy-datum INTO L_OBJ_DESC SEPARATED BY SPACE.

  DESCRIBE TABLE L_T_OBJTXT LINES L_LINES_TXT.
  READ TABLE L_T_OBJTXT INDEX L_LINES_TXT.
  L_WA_DOC_CHNG-OBJ_NAME = L_NAME.
  L_WA_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.
  L_WA_DOC_CHNG-OBJ_DESCR = L_OBJ_DESC.
  L_WA_DOC_CHNG-SENSITIVTY = 'O'.
  L_WA_DOC_CHNG-DOC_SIZE = STRLEN( L_T_OBJTXT ).

* Main Text
  CLEAR L_T_OBJPACK-TRANSF_BIN.
  L_T_OBJPACK-HEAD_START = 1.
  L_T_OBJPACK-HEAD_NUM = 0.
  L_T_OBJPACK-BODY_START = 1.
  L_T_OBJPACK-BODY_NUM = 1.
  L_T_OBJPACK-DOC_TYPE = 'RAW'.
  L_T_OBJPACK-DOC_SIZE = STRLEN( L_T_OBJTXT ).
  APPEND L_T_OBJPACK.

* Attachment
  DESCRIBE TABLE L_T_OBJBIN LINES L_LINES_BIN.
  READ TABLE L_T_OBJBIN INDEX L_LINES_BIN.

  CLEAR L_T_OBJPACK.
  L_T_OBJPACK-TRANSF_BIN = 'X'.
  L_T_OBJPACK-HEAD_START = 1.
  L_T_OBJPACK-HEAD_NUM = 1.
  L_T_OBJPACK-BODY_START = 1.
  L_T_OBJPACK-BODY_NUM = L_LINES_BIN.
  L_T_OBJPACK-DOC_TYPE = 'RAW'.
  L_T_OBJPACK-OBJ_NAME = 'EMAIL'.
  L_T_OBJPACK-OBJ_DESCR = ' Exchange rate File'.
  L_T_OBJPACK-DOC_SIZE = ( 255 * ( L_LINES_BIN - 1 ) ) + STRLEN( L_T_OBJBIN-LINE ).
  APPEND L_T_OBJPACK.

  LOOP AT L_T_EMAIL.
* Maintain Recievers
    CLEAR L_T_RECLIST.
    L_T_RECLIST-RECEIVER = L_T_EMAIL-EMAIL_ID.
    L_T_RECLIST-REC_TYPE = 'U'.
    L_T_RECLIST-EXPRESS = 'X'.
    APPEND L_T_RECLIST.
  ENDLOOP.

  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      DOCUMENT_DATA              = L_WA_DOC_CHNG
      PUT_IN_OUTBOX              = 'X'
      COMMIT_WORK                = 'X'
    TABLES
      PACKING_LIST               = L_T_OBJPACK
      OBJECT_HEADER              = L_WA_OBJHEAD
      CONTENTS_BIN               = L_T_OBJBIN
      CONTENTS_TXT               = L_T_OBJTXT
      RECEIVERS                  = L_T_RECLIST
    EXCEPTIONS
      TOO_MANY_RECEIVERS         = 1
      DOCUMENT_NOT_SENT          = 2
      DOCUMENT_TYPE_NOT_EXIST    = 3
      OPERATION_NO_AUTHORIZATION = 4
      PARAMETER_ERROR            = 5
      X_ERROR                    = 6
      ENQUEUE_ERROR              = 7
      OTHERS                     = 8.
  IF SY-SUBRC NE 0.
    MESSAGE S999(ZZ) WITH 'Mail Could not be sent'.
  ELSE.
    MESSAGE S999(ZZ) WITH 'Mail sent to group'.
  ENDIF.
ENDFORM.                    "F0005_ATTACH_AND_MAIL

Read only

Former Member
0 Likes
693

Hi,

check the below link

https://www.sdn.sap.com/irj/scn/wiki?path=/display/abap/smartformSendvia+Email

Regards,

Madhu

Read only

Former Member
0 Likes
693

/people/thomas.jung3/blog/2004/09/09/receiving-e-mail-and-processing-it-with-abap--version-610-and-higher

Read only

Former Member
0 Likes
693

Example of sending external email via SAPCONNECT *

REPORT zsendemail .

PARAMETERS: psubject(40) type c default 'Hello',

p_email(40) type c default 'EMAIL ADDRESS' .

data: it_packing_list like sopcklsti1 occurs 0 with header line,

it_contents like solisti1 occurs 0 with header line,

it_receivers like somlreci1 occurs 0 with header line,

it_attachment like solisti1 occurs 0 with header line,

gd_cnt type i,

gd_sent_all(1) type c,

gd_doc_data like sodocchgi1,

gd_error type sy-subrc.

data: it_message type standard table of SOLISTI1 initial size 0

with header line.

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

*START-OF-SELECTION.

START-OF-SELECTION.

Perform populate_message_table.

*Send email message, although is not sent from SAP until mail send

*program has been executed(rsconn01)

PERFORM send_email_message.

*Instructs mail send program for SAPCONNECT to send email(rsconn01)

perform initiate_mail_execute_program.

&----


*& Form POPULATE_MESSAGE_TABLE

&----


  • Adds text to email text table

----


form populate_message_table.

Append 'Email line 1' to it_message.

Append 'Email line 2' to it_message.

Append 'Email line 3' to it_message.

Append 'Email line 4' to it_message.

endform. " POPULATE_MESSAGE_TABLE

&----


*& Form SEND_EMAIL_MESSAGE

&----


  • Send email message

----


form send_email_message.

  • Fill the document data.

gd_doc_data-doc_size = 1.

  • Populate the subject/generic message attributes

gd_doc_data-obj_langu = sy-langu.

gd_doc_data-obj_name = 'SAPRPT'.

gd_doc_data-obj_descr = psubject.

gd_doc_data-sensitivty = 'F'.

  • Describe the body of the message

clear it_packing_list.

refresh it_packing_list.

it_packing_list-transf_bin = space.

it_packing_list-head_start = 1.

it_packing_list-head_num = 0.

it_packing_list-body_start = 1.

describe table it_message lines it_packing_list-body_num.

it_packing_list-doc_type = 'RAW'.

append it_packing_list.

  • Add the recipients email address

clear it_receivers.

refresh it_receivers.

it_receivers-receiver = p_email.

it_receivers-rec_type = 'U'.

it_receivers-com_type = 'INT'.

it_receivers-notif_del = 'X'.

it_receivers-notif_ndel = 'X'.

append it_receivers.

  • Call the FM to post the message to SAPMAIL

call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'

exporting

document_data = gd_doc_data

put_in_outbox = 'X'

importing

sent_to_all = gd_sent_all

tables

packing_list = it_packing_list

contents_txt = it_message

receivers = it_receivers

exceptions

too_many_receivers = 1

document_not_sent = 2

document_type_not_exist = 3

operation_no_authorization = 4

parameter_error = 5

x_error = 6

enqueue_error = 7

others = 8.

  • Store function module return code

gd_error = sy-subrc.

  • Get it_receivers return code

loop at it_receivers.

endloop.

endform. " SEND_EMAIL_MESSAGE

&----


*& Form INITIATE_MAIL_EXECUTE_PROGRAM

&----


  • Instructs mail send program for SAPCONNECT to send email.

----


form initiate_mail_execute_program.

wait up to 2 seconds.

if gd_error eq 0.

submit rsconn01 with mode = 'INT'

with output = 'X'

and return.

endif.

endform. " INITIATE_MAIL_EXECUTE_PROGRAM