‎2010 Jan 19 6:02 AM
Hi,
I am using FM SO_NEW_DOCUMENT_ATT_SEND_API1 to send mail to the user. My requirement is, i need to attach a photo with the mail. Can any one tell me how to attach photo to the mail using the above FM.
Thanks & Regards,
Srinath
‎2010 Jan 19 6:24 AM
Hi Srinath ,
Try like this :
DATA: docdata LIKE sodocchgi1,
objpack LIKE sopcklsti1 OCCURS 1 WITH HEADER LINE,
objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE,
objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
objbin LIKE solisti1 OCCURS 10 WITH HEADER LINE,
objhex LIKE solix OCCURS 10 WITH HEADER LINE,
reclist LIKE somlreci1 OCCURS 1 WITH HEADER LINE,
DATA: tab_lines TYPE i,
doc_size TYPE i,
att_type LIKE soodk-objtp.
DATA: listobject LIKE abaplist OCCURS 1 WITH HEADER LINE.
Upload file from presentation server.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = wa_fnm
filetype = 'BIN'
CHANGING
data_tab = objbin[]
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
objbin = ' '. APPEND objbin.
DESCRIBE TABLE objbin LINES tab_lines.
docdata-obj_name = 'TEST'.
docdata-obj_descr = 'Test including Attachment'.
objtxt = 'Test Document.'.
APPEND objtxt.
objtxt = 'You will find an attachment in this message.'.
APPEND objtxt.
objtxt = 'Have a nice day.'.
APPEND objtxt.
DESCRIBE TABLE objtxt LINES tab_lines.
READ TABLE objtxt INDEX tab_lines.
objpack-doc_size = tab_lines (multiplied by) 255.
CLEAR objpack-transf_bin.
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = tab_lines.
objpack-doc_type = 'RAW'.
APPEND objpack.
att_type = 'TXT'.
DESCRIBE TABLE objbin LINES tab_lines.
READ TABLE objbin INDEX tab_lines.
objpack-doc_size = tab_lines (multiplied by) 255.
objpack-transf_bin = 'X'.
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = tab_lines.
objpack-doc_type = att_type.
objpack-obj_name = wa_fnm.
objpack-obj_descr = wa_fnm.
APPEND objpack.
reclist-receiver = 'abc(AT)abc.com'.
reclist-rec_type = 'U'.
APPEND reclist.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = docdata
put_in_outbox = 'X'
commit_work = 'X'
TABLES
packing_list = objpack
object_header = objhead
contents_bin = objbin
contents_txt = objtxt .
IF sy-subrc <> 0.
MESSAGE ID 'SO' TYPE 'S' NUMBER '023'
WITH docdata-obj_name.
ENDIF.
Hope this will help you.
Regards,
Nikhil
‎2010 Jan 19 6:33 AM
Hi,
here is the piece of code...
PARAMETERS: P_FILE(4096) TYPE C DEFAULT 'C:\PICTURE.BMP' OBLIGATORY.
parameters: P_header like G_HEADER-OBJDES
G_USER-SAPNAME = SY-UNAME.
CALL FUNCTION 'SO_USER_READ_API1'
EXPORTING
USER = G_USER
PREPARE_FOR_FOLDER_ACCESS = ' '
IMPORTING
USER_DATA = G_USER_DATA
EXCEPTIONS
USER_NOT_EXIST = 1
PARAMETER_ERROR = 2
X_ERROR = 3
OTHERS = 4.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
G_DOCUMENT-FOLTP = G_USER_DATA-OUTBOXFOL+0(3)..
G_DOCUMENT-FOLYR = G_USER_DATA-OUTBOXFOL+3(2).
G_DOCUMENT-FOLNO = G_USER_DATA-OUTBOXFOL+5(12).
G_DOCUMENT-OBJTP = 'RAW'.
G_DOCUMENT-OBJYR = '33'.
G_DOCUMENT-OBJNAM = 'Mess'.
G_DOCUMENT-OKCODE = 'CHNG'.
G_DOCUMENT-FOLRG = 'O'.
G_DOCUMENT-OBJLEN = '0'.
G_HEADER-OBJDES = p_header.
G_HEADER-OBJLA = 'D'.
G_HEADER-OBJNAM = 'Mess'.
G_HEADER-OWNNAM = SY-UNAME.
G_HEADER-CRONAM = SY-UNAME.
G_HEADER-CRDAT = SY-DATUM.
G_HEADER-CHTIM = SY-UZEIT.
G_HEADER-OBJPRI = '5'.
G_HEADER-OBJSNS = 'O'.
G_HEADER-CROADR = g_user_data-FULLNAME.
G_HEADER-CHOADR = g_user_data-FULLNAME.
G_HEADER-OWNADR = g_user_data-FULLNAME.
METHOD1 = 'SAVE'.
CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
EXPORTING
METHOD = METHOD1
OFFICE_USER = G_OWNER
REF_DOCUMENT = G_REF_DOCUMENT
NEW_PARENT = G_NEW_PARENT
IMPORTING
AUTHORITY = G_AUTHORITY
CHANGING
DOCUMENT = G_DOCUMENT
HEADER_DATA = G_HEADER.
G_FILES-TEXT = P_FILE.
APPEND G_FILES.
METHOD1 = 'ATTCREATEFROMPC'.
CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
EXPORTING
METHOD = METHOD1
OFFICE_USER = G_OWNER
TABLES
OBJCONT = G_OBJCNT
FILES = G_FILES
CHANGING
DOCUMENT = G_DOCUMENT
HEADER_DATA = G_HEADER.
CLEAR DOCUMENTS[].
APPEND G_DOCUMENT TO DOCUMENTS.
--- ----------------------- ----------------------------------------*
CLEAR G_ATTACHMENTS_READ.
PERFORM ATTACHMENT_LIST_GET.
--- ----------------------- ----------------------------------------*
DESCRIBE TABLE G_ATTACHMENTS LINES ATTACH_CNT.
G_HEADER-ENCCNT = ATTACH_CNT.
--- ----------------------- ----------------------------------------*
PERFORM FILL_ATTLIST TABLES G_ATTACHMENTS.
--- Bestimmen an wen senden ----------------------------------------*
G_RECEIPIENTS-RECEXTNAM = ''' put mail id
G_RECEIPIENTS-RECESC = 'U'.
G_RECEIPIENTS-SNDEX = 'X'.
APPEND G_RECEIPIENTS.
G_OBJCNT-LINE ='testline1'.
APPEND G_OBJCNT.
G_OBJCNT-LINE ='testline2'.
APPEND G_OBJCNT.
G_OBJCNT-LINE ='testline3'.
APPEND G_OBJCNT.
MOVE-CORRESPONDING G_HEADER TO OBJ_HD_CHNG.
MOVE: G_DOCUMENT-FOLTP TO FOL_ID-OBJTP,
G_DOCUMENT-FOLYR TO FOL_ID-OBJYR,
G_DOCUMENT-FOLNO TO FOL_ID-OBJNO,
G_DOCUMENT-OBJTP TO DOC_ID-OBJTP,
G_DOCUMENT-OBJYR TO DOC_ID-OBJYR,
G_DOCUMENT-OBJNO TO DOC_ID-OBJNO,
G_DOCUMENT-ATTTP TO ATT_ID-OBJTP,
G_DOCUMENT-ATTYR TO ATT_ID-OBJYR,
G_DOCUMENT-ATTNO TO ATT_ID-OBJNO.
CALL FUNCTION 'SO_OBJECT_UPDATE'
EXPORTING
FOLDER_ID = FOL_ID
OBJECT_HD_CHANGE = OBJ_HD_CHNG
OBJECT_ID = DOC_ID
TABLES
OBJCONT = G_OBJCNT
OBJHEAD = G_OBJHEAD
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 1
COMMUNICATION_FAILURE = 2
COMPONENT_NOT_AVAILABLE = 3
FOLDER_NOT_EXIST = 4
FOLDER_NO_AUTHORIZATION = 5
FORWARDER_NOT_EXIST = 6
OBJECT_NOT_EXIST = 7
OBJECT_NO_AUTHORIZATION = 8
OPERATION_NO_AUTHORIZATION = 9
OWNER_NOT_EXIST = 10
PARAMETER_ERROR = 11
SUBSTITUTE_NOT_ACTIVE = 12
SUBSTITUTE_NOT_DEFINED = 13
SYSTEM_FAILURE = 14
X_ERROR = 15
OTHERS = 16.
METHOD1 = 'SEND'.
MOVE: G_DOCUMENT-OBJTP TO G_REC_DATA-NOTTP,
G_DOCUMENT-OBJYR TO G_REC_DATA-NOTYR,
G_DOCUMENT-OBJNO TO G_REC_DATA-NOTNO,
'from me' TO G_REC_DATA-SNDADR.
G_HEADER-OBJSND = 'X'.
CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
EXPORTING
METHOD = METHOD1
OFFICE_USER = G_OWNER
NEW_PARENT = G_NEW_PARENT
IMPORTING
AUTHORITY = G_AUTHORITY
TABLES
RECIPIENTS = G_RECEIPIENTS
ATTACHMENTS = G_ATTACHMENTS
REFERENCES = G_REFERENCES
CHANGING
DOCUMENT = G_DOCUMENT
HEADER_DATA = G_HEADER
RECEIVE_DATA = G_REC_DATA.
----
----
----
----
----
----
Form ATTACHMENT_LIST_GET
----
FORM ATTACHMENT_LIST_GET.
IF G_ATTACHMENTS_READ IS INITIAL.
IF G_HEADER-ENCCNT > 0.
CLEAR G_ATTACHMENTS. CLEAR G_ATTACHMENTS[].
CALL FUNCTION 'SO_ATTACHMENT_LIST_READ'
EXPORTING
OBJECT_ID = G_OBJECT_ID
TABLES
OBJECTS = G_ATTACHMENTS
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC = 0.
G_ATTACHMENTS_READ = ON.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " ATTACHMENT_LIST_GET
----
Form FILL_ATTLIST
----
FORM FILL_ATTLIST TABLES P_ATT_LIST STRUCTURE SOOD5.
DATA ATTSIZE_I TYPE I.
DATA ATTSIZE_P TYPE P DECIMALS 1.
DATA L_ATTTYPE TYPE SO_OBJ_TP.
CLEAR: ATT_LIST, ATT_LIST[].
LOOP AT P_ATT_LIST.
MOVE-CORRESPONDING P_ATT_LIST TO ATT_LIST.
IF P_ATT_LIST-OBJTP EQ EXT.
ATT_LIST-OBJTYPE = P_ATT_LIST-FILE_EXT.
L_ATTTYPE = P_ATT_LIST-FILE_EXT.
ELSE.
ATT_LIST-OBJTYPE = P_ATT_LIST-OBJTP.
L_ATTTYPE = P_ATT_LIST-OBJTP.
ENDIF.
TRANSLATE L_ATTTYPE TO UPPER CASE. "#EC TRANSLANG
IF P_ATT_LIST-OBJLEN CN '1234567890 ' "note 616365
OR P_ATT_LIST-OBJLEN LT 1024.
ATT_LIST-OBJLEN = '1K'.
ELSE.
ATTSIZE_P = P_ATT_LIST-OBJLEN / 1024.
ATTSIZE_I = CEIL( ATTSIZE_P ).
ATT_LIST-OBJLEN = ATTSIZE_I.
CONCATENATE ATT_LIST-OBJLEN 'kB' INTO ATT_LIST-OBJLEN.
ENDIF.
APPEND ATT_LIST.
ENDLOOP.
Thanks
Ashu
‎2010 Jan 19 8:04 AM
Hi Srinath ,
Please check the function module SO_NEW_DOCUMENT_ATT_SEND_API1 documentation .
Example present in this is sufficient to understand the functionality of the FM. You need to change the type of attachment in your case.
Search SDN to know more.