07-09-2021 11:37 PM
I have created a Z program which call the smartform and send it as an PDF attachment to concerned persons. I am able to see the mail in SOST, but when I try to open the attachment it gives me error can't open file.
This is my code for converting SF to PDF
form smartform.
data:fname type rs38l_fnam,
wa_cparam type ssfctrlop,
wa_output type ssfcompop.
wa_cparam-preview = 'X'.
wa_cparam-no_dialog = 'X'.
wa_output-tddest = 'lp01'.
"break-point.
LW_CONTROL_PARAMETERS-GETOTF = 'X'.
*/.. To supress preview
LW_CONTROL_PARAMETERS-NO_DIALOG = 'X'.
LW_CONTROL_PARAMETERS-PREVIEW = 'X' .
LW_CONTROL_PARAMETERS-LANGU = SY-LANGU .
LW_OUTPUT_OPTIONS-TDNOPREV = 'X'.
LW_OUTPUT_OPTIONS-TDNOPRINT = 'X'.
LW_OUTPUT_OPTIONS-TDDEST = 'ZPRN'.
IF IT_EPKO-BUKRS EQ '3001'.
IF IT_EPKO-EBELN(2) EQ 43.
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = 'ZMM_PO_FORM_CPY'
importing
fm_name = fm_name
exceptions
no_form = 1
no_function_module = 2
others = 3.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
if sy-subrc <> 0.
* Implement suitable error handling here
endif.
CALL FUNCTION FM_NAME "'/1BCDWB/SF00000184'
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS = LW_CONTROL_PARAMETERS
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
OUTPUT_OPTIONS = LW_OUTPUT_OPTIONS
USER_SETTINGS = 'X'
PO_HEADER = PO_HEADER
PO_FOOTER = PO_FOOTER
PO_BOX_LOC = PO_BOX_LOC
STREET = STREET
HOUSE = HOUSE
REMARK = REMARK
C_CODE = C_CODE
IMPORTING
* DOCUMENT_OUTPUT_INFO =
JOB_OUTPUT_INFO = LW_SSFCRESCL
* JOB_OUTPUT_OPTIONS =
TABLES
IT_EPKO = IT_EPKO
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
PERFORM OTF_DATA.
FORM OTF_DATA .
REFRESH LI_OTF[].
LI_OTF[] = LW_SSFCRESCL-OTFDATA[].
CLEAR : LV_BIN_FILESIZE.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = GC_DOCTY_PDF
IMPORTING
BIN_FILESIZE = LV_BIN_FILESIZE
TABLES
OTF = LI_OTF
LINES = LI_PDF_TAB
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
ERR_BAD_OTF = 4
OTHERS = 5.
* IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
DESCRIBE TABLE LI_PDF_TAB LINES LV_PDFLINES.
REFRESH LI_CONTENT_TXT.
LOOP AT LI_OTF INTO LW_OTF.
CLEAR LW_CONTENT.
CONCATENATE LW_OTF-TDPRINTCOM LW_OTF-TDPRINTPAR
INTO LW_CONTENT.
APPEND LW_CONTENT TO LI_CONTENT_TXT.
ENDLOOP.
REFRESH : LI_CONTENT_HEX,
LI_OBJHEAD.
CLEAR : LV_TRANSFER_BIN,
LV_LEN.
CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF'
EXPORTING
FORMAT_SRC = 'OTF'
FORMAT_DST = 'PDF'
CHANGING
TRANSFER_BIN = LV_TRANSFER_BIN
CONTENT_TXT = LI_CONTENT_TXT
CONTENT_BIN = LI_CONTENT_HEX
OBJHEAD = LI_OBJHEAD
LEN = LV_LEN
EXCEPTIONS
ERR_CONV_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
07-11-2021 1:00 PM
Thankyou all for your input.
I've solved the issue, the problem was with my OTF Convert FM and SEND MAIL FM
Data Declaration:
** DATA FOR PRINT PREVIEW
DATA: LW_CONTROL_PARAMETERS TYPE SSFCTRLOP,
LW_OUTPUT_OPTIONS TYPE SSFCOMPOP.
*& for OTF CONVER FM
DATA: T_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE,
it_otf_data TYPE ssfcrescl,
it_pdfdata TYPE TABLE OF tline,
g_tab_lines TYPE i,
it_pdf TYPE TABLE OF solisti1,
i_pdf TYPE STANDARD TABLE OF tline,
w_pdf LIKE LINE OF i_pdf,
i_attachment TYPE STANDARD TABLE OF solisti1,
w_attachment LIKE LINE OF i_attachment.
DATA: "FM_NAME TYPE RS38L_FNAM, "FUCNTION MODULE
LV_BIN_FILESIZE TYPE I.
CONSTANTS: GC_DOCTY_PDF TYPE SO_OBJ_TP VALUE 'PDF',
GC_DOCTY_RAW TYPE SO_OBJ_TP VALUE 'RAW'.
*Data declaration for mail FM
DATA: IT_PACKING_LIST LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
IT_PACKING_LIST3 LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
IT_RECEIVERS LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,
GD_SENT_ALL(1) TYPE C VALUE 'X',
GD_DOC_DATA LIKE SODOCCHGI1,
LT_PACKING_LIST TYPE STANDARD TABLE OF SOPCKLSTI1 WITH HEADER LINE,
GD_ERROR TYPE SY-SUBRC.
*Internal table for message body
DATA: IT_MESSAGE TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0
WITH HEADER LINE,
IT_MESSAGEWA LIKE LINE OF IT_MESSAGE.
*Emiail subject
DATA : PSUBJECT(40) TYPE C .
This is what I did for the conversion of smartform to PDF.
LW_CONTROL_PARAMETERS-GETOTF = 'X'.
*/.. To supress preview
LW_CONTROL_PARAMETERS-NO_DIALOG = 'X'.
LW_CONTROL_PARAMETERS-PREVIEW = SPACE . " before: 'X'
LW_OUTPUT_OPTIONS-TDDEST = 'LP01'.
IF IT_EPKO-BUKRS EQ '3001'.
IF IT_EPKO-EBELN(2) EQ 43.
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = 'ZMM_PO_FORM_CPY'
importing
fm_name = fm_name
exceptions
no_form = 1
no_function_module = 2
others = 3.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
if sy-subrc <> 0.
* Implement suitable error handling here
endif.
CALL FUNCTION FM_NAME "'/1BCDWB/SF00000184'
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS = LW_CONTROL_PARAMETERS
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
OUTPUT_OPTIONS = LW_OUTPUT_OPTIONS
* USER_SETTINGS = 'X'
PO_HEADER = PO_HEADER
PO_FOOTER = PO_FOOTER
PO_BOX_LOC = PO_BOX_LOC
STREET = STREET
HOUSE = HOUSE
REMARK = REMARK
C_CODE = C_CODE
IMPORTING
* DOCUMENT_OUTPUT_INFO =
JOB_OUTPUT_INFO = IT_OTF_DATA
* JOB_OUTPUT_OPTIONS =
TABLES
IT_EPKO = IT_EPKO
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
PERFORM OTF_DATA.
PERFORM SEND_MAIL.
FORM OTF_DATA .
CLEAR T_OTF.
REFRESH T_OTF.
* LI_OTF[] = LW_SSFCRESCL-OTFDATA[].
T_OTF[] = IT_OTF_DATA-OTFDATA[].
CLEAR : LV_BIN_FILESIZE.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = GC_DOCTY_PDF
* MAX_LINEWIDTH = 132
IMPORTING
BIN_FILESIZE = LV_BIN_FILESIZE
TABLES
OTF = T_OTF
LINES = it_pdfdata[]
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
ERR_BAD_OTF = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
EXPORTING
* LINE_WIDTH_SRC =
LINE_WIDTH_DST = '255'
* TRANSFER_BIN = ' '
TABLES
CONTENT_IN = it_pdfdata[]
CONTENT_OUT = it_pdf[]
EXCEPTIONS
ERR_LINE_WIDTH_SRC_TOO_LONG = 1
ERR_LINE_WIDTH_DST_TOO_LONG = 2
ERR_CONV_FAILED = 3
OTHERS = 4
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
And this is what I did for sending mail
FORM SEND_MAIL .
* Fill the document data.
* GD_DOC_DATA-DOC_SIZE = 1.
* Populate the subject/generic message attributes
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.
DESCRIBE TABLE IT_MESSAGE LINES G_TAB_LINES.
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-BODY_NUM = g_tab_lines.
IT_PACKING_LIST-DOC_TYPE = 'RAW'.
APPEND IT_PACKING_LIST.
* CLEAR IT_PACKING_LIST2.
* REFRESH IT_PACKING_LIST2.
* IT_PACKING_LIST2-TRANSF_BIN = SPACE.
* IT_PACKING_LIST2-HEAD_START = 1.
* IT_PACKING_LIST2-HEAD_NUM = 1.
* IT_PACKING_LIST2-BODY_START = 1.
* IT_PACKING_LIST2-BODY_NUM = 1.
* DESCRIBE TABLE LI_CONTENT_TXT LINES IT_PACKING_LIST2-BODY_NUM.
* IT_PACKING_LIST2-DOC_TYPE = 'PDF'.
* APPEND IT_PACKING_LIST2.
CLEAR LT_PACKING_LIST.
REFRESH LT_PACKING_LIST.
LT_PACKING_LIST-TRANSF_BIN = 'X'.
LT_PACKING_LIST-HEAD_START = 1.
LT_PACKING_LIST-HEAD_NUM = 1.
LT_PACKING_LIST-BODY_START = 1.
* LT_PACKING_LIST-BODY_NUM = LV_PDFLINES.
DESCRIBE TABLE it_pdf LINES LT_PACKING_LIST-BODY_NUM.
LT_PACKING_LIST-DOC_TYPE = GC_DOCTY_PDF. " You can give RAW incase if you want just a txt file.
LT_PACKING_LIST-OBJ_NAME = 'PO_ATTACHMENT'.
LT_PACKING_LIST-OBJ_DESCR = 'PO Attachment'.
LT_PACKING_LIST-DOC_SIZE = LT_PACKING_LIST-BODY_NUM * 255.
APPEND LT_PACKING_LIST.
*& for filling document data and get size of attachment
GD_DOC_DATA-OBJ_LANGU = SY-LANGU.
read table it_pdf into w_pdf index G_TAB_LINES.
GD_DOC_DATA-DOC_SIZE = ( G_TAB_LINES - 1 ) * 255 + STRLEN( W_ATTACHMENT ).
DATA : LV_INDEXA TYPE SY-TABIX.
* Add the recipients email address
CLEAR IT_RECEIVERS.
REFRESH IT_RECEIVERS.
* CLEAR WA_RCV.
* LOOP AT IT_RCV INTO WA_RCV.
CLEAR LV_INDEXA.
LV_INDEXA = SY-TABIX.
IT_RECEIVERS-RECEIVER = WA_RCV-SMTP_ADDR.
IT_RECEIVERS-REC_TYPE = 'U'.
IT_RECEIVERS-COM_TYPE = 'INT'.
IT_RECEIVERS-NOTIF_DEL = 'X'.
IT_RECEIVERS-NOTIF_NDEL = 'X'.
APPEND IT_RECEIVERS.
* ENDLOOP.
CLEAR IT_PACKING_LIST3.
REFRESH IT_PACKING_LIST3.
APPEND IT_PACKING_LIST TO IT_PACKING_LIST3.
* APPEND IT_PACKING_LIST2 TO IT_PACKING_LIST3.
APPEND LT_PACKING_LIST TO IT_PACKING_LIST3.
*--------------------------------------------------------------
* Send Email and attach to Complaint
*--------------------------------------------------------------
* Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = GD_DOC_DATA
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
IMPORTING
SENT_TO_ALL = GD_SENT_ALL
* NEW_OBJECT_ID =
TABLES
PACKING_LIST = IT_PACKING_LIST3
* OBJECT_HEADER = LI_OBJHEAD
CONTENTS_BIN = IT_PDF
CONTENTS_TXT = IT_MESSAGE
* CONTENTS_HEX = LI_CONTENT_HEX
* OBJECT_PARA =
* OBJECT_PARB =
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.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF SY-SUBRC = 0.
COMMIT WORK AND WAIT.
MESSAGE 'Email Sent Successfully' TYPE 'S'.
* ELSE.
* WAIT UP TO 2 SECONDS.
* SUBMIT rsconn01 WITH mode = 'INT' WITH output = 'X' AND RETURN.
ENDIF.
* Store function module return code
GD_ERROR = SY-SUBRC.
ENDFORM.
07-10-2021 12:05 PM
Here, it's just the part to generate the PDF in memory, but the error can also occur when creating the email.
First, test the PDF generation by downloading the PDF to your laptop (GUI_DOWNLOAD) and display it.
If it works, then the culprit is the way you attach the PDF to the email.
07-10-2021 12:21 PM
Thanks for the reply sandra.rossi .
I got your point, i'll testing the PDF by downloading first.
07-10-2021 1:30 PM
sandra.rossi
This is what i'm doing to convert
FORM OTF_DATA .
REFRESH LI_OTF[].
CLEAR T_OTF.
REFRESH T_OTF.
* LI_OTF[] = LW_SSFCRESCL-OTFDATA[].
T_OTF[] = LW_SSFCRESCL-OTFDATA[].
CLEAR : LV_BIN_FILESIZE.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = GC_DOCTY_PDF
MAX_LINEWIDTH = 132
IMPORTING
BIN_FILESIZE = LV_BIN_FILESIZE
TABLES
OTF = T_OTF
LINES = T_PDF_TAB
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
ERR_BAD_OTF = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DESCRIBE TABLE T_PDF_TAB LINES LV_PDFLINES.
REFRESH LI_CONTENT_TXT.
LOOP AT T_OTF INTO LW_OTF.
CLEAR LW_CONTENT.
CONCATENATE LW_OTF-TDPRINTCOM LW_OTF-TDPRINTPAR
INTO LW_CONTENT.
APPEND LW_CONTENT TO LI_CONTENT_TXT.
ENDLOOP.
REFRESH : LI_CONTENT_HEX,
LI_OBJHEAD.
CLEAR : LV_TRANSFER_BIN,
LV_LEN.
CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF'
EXPORTING
FORMAT_SRC = 'OTF'
FORMAT_DST = 'PDF'
CHANGING
TRANSFER_BIN = LV_TRANSFER_BIN
CONTENT_TXT = LI_CONTENT_TXT
CONTENT_BIN = LI_CONTENT_HEX
OBJHEAD = LI_OBJHEAD
LEN = LV_LEN
EXCEPTIONS
ERR_CONV_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFROM.
And this is my email part
FORM GET_MESSAGE .
CLEAR WA_RCV.
LOOP AT IT_RCV INTO WA_RCV.
CLEAR IT_MESSAGEWA.
CONCATENATE 'PO Released' PO_MAIL-EBELN INTO PSUBJECT SEPARATED BY SPACE.
CLEAR IT_MESSAGE.
REFRESH IT_MESSAGE.
CONCATENATE 'Dear ' WA_RCV-NAME1 ',' INTO IT_MESSAGEWA SEPARATED BY SPACE.
APPEND IT_MESSAGEWA TO IT_MESSAGE.
CLEAR IT_MESSAGEWA.
CONCATENATE 'PO Number : ' PO_MAIL-EBELN INTO IT_MESSAGEWA SEPARATED BY SPACE.
APPEND IT_MESSAGEWA TO IT_MESSAGE.
CONCATENATE 'has been released' 'by' IT_DESIG-DSIGNTION INTO IT_MESSAGEWA SEPARATED BY SPACE.
APPEND IT_MESSAGEWA TO IT_MESSAGE.
APPEND 'Regards,' TO IT_MESSAGE.
APPEND 'SAP.' TO IT_MESSAGE.
PERFORM SEND_MAIL.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SEND_MAIL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SEND_MAIL .
* 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.
CLEAR IT_PACKING_LIST2.
REFRESH IT_PACKING_LIST2.
IT_PACKING_LIST2-TRANSF_BIN = SPACE.
IT_PACKING_LIST2-HEAD_START = 1.
IT_PACKING_LIST2-HEAD_NUM = 1.
IT_PACKING_LIST2-BODY_START = 1.
IT_PACKING_LIST2-BODY_NUM = 1.
DESCRIBE TABLE LI_CONTENT_TXT LINES IT_PACKING_LIST2-BODY_NUM.
IT_PACKING_LIST2-DOC_TYPE = 'PDF'.
APPEND IT_PACKING_LIST2.
LT_PACKING_LIST-TRANSF_BIN = 'X'.
LT_PACKING_LIST-HEAD_START = 1.
LT_PACKING_LIST-HEAD_NUM = 1.
LT_PACKING_LIST-BODY_START = 1.
LT_PACKING_LIST-BODY_NUM = LV_PDFLINES.
LT_PACKING_LIST-DOC_TYPE = GC_DOCTY_PDF. " You can give RAW incase if you want just a txt file.
LT_PACKING_LIST-OBJ_NAME = 'PO.PDF'.
LT_PACKING_LIST-OBJ_DESCR = 'PO.PDF'.
LT_PACKING_LIST-DOC_SIZE = LT_PACKING_LIST-BODY_NUM * 255.
APPEND LT_PACKING_LIST. CLEAR LT_PACKING_LIST.
DATA : LV_INDEXA TYPE SY-TABIX.
* Add the recipients email address
CLEAR IT_RECEIVERS.
REFRESH IT_RECEIVERS.
CLEAR LV_INDEXA.
LV_INDEXA = SY-TABIX.
IT_RECEIVERS-RECEIVER = WA_RCV-SMTP_ADDR.
IT_RECEIVERS-REC_TYPE = 'U'.
IT_RECEIVERS-COM_TYPE = 'INT'.
IT_RECEIVERS-NOTIF_DEL = 'X'.
IT_RECEIVERS-NOTIF_NDEL = 'X'.
APPEND IT_RECEIVERS.
APPEND IT_PACKING_LIST TO IT_PACKING_LIST3.
APPEND IT_PACKING_LIST2 TO IT_PACKING_LIST3.
*--------------------------------------------------------------
* Send Email and attach to Complaint
*--------------------------------------------------------------
* Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = GD_DOC_DATA
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
IMPORTING
SENT_TO_ALL = GD_SENT_ALL
* NEW_OBJECT_ID =
TABLES
PACKING_LIST = IT_PACKING_LIST3
OBJECT_HEADER = LI_OBJHEAD
* CONTENTS_BIN = LI_CONTENT_HEX
CONTENTS_TXT = IT_MESSAGE
* CONTENTS_HEX =
* OBJECT_PARA =
* OBJECT_PARB =
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.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF SY-SUBRC = 0.
COMMIT WORK AND WAIT.
MESSAGE 'Email Sent Successfully' TYPE 'S'.
ENDIF.
* Store function module return code
GD_ERROR = SY-SUBRC.
ENDFORM.
07-10-2021 2:28 PM
Okay. Waiting for your feedback to know what is to be investigated.
07-11-2021 12:08 PM
Hi Rameez
Am not sure if you can open the attachment from the SOST, but you can easily check the inbox where you sent the email to see if attachment received ...
Thanks
07-11-2021 1:00 PM
Thankyou all for your input.
I've solved the issue, the problem was with my OTF Convert FM and SEND MAIL FM
Data Declaration:
** DATA FOR PRINT PREVIEW
DATA: LW_CONTROL_PARAMETERS TYPE SSFCTRLOP,
LW_OUTPUT_OPTIONS TYPE SSFCOMPOP.
*& for OTF CONVER FM
DATA: T_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE,
it_otf_data TYPE ssfcrescl,
it_pdfdata TYPE TABLE OF tline,
g_tab_lines TYPE i,
it_pdf TYPE TABLE OF solisti1,
i_pdf TYPE STANDARD TABLE OF tline,
w_pdf LIKE LINE OF i_pdf,
i_attachment TYPE STANDARD TABLE OF solisti1,
w_attachment LIKE LINE OF i_attachment.
DATA: "FM_NAME TYPE RS38L_FNAM, "FUCNTION MODULE
LV_BIN_FILESIZE TYPE I.
CONSTANTS: GC_DOCTY_PDF TYPE SO_OBJ_TP VALUE 'PDF',
GC_DOCTY_RAW TYPE SO_OBJ_TP VALUE 'RAW'.
*Data declaration for mail FM
DATA: IT_PACKING_LIST LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
IT_PACKING_LIST3 LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
IT_RECEIVERS LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,
GD_SENT_ALL(1) TYPE C VALUE 'X',
GD_DOC_DATA LIKE SODOCCHGI1,
LT_PACKING_LIST TYPE STANDARD TABLE OF SOPCKLSTI1 WITH HEADER LINE,
GD_ERROR TYPE SY-SUBRC.
*Internal table for message body
DATA: IT_MESSAGE TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0
WITH HEADER LINE,
IT_MESSAGEWA LIKE LINE OF IT_MESSAGE.
*Emiail subject
DATA : PSUBJECT(40) TYPE C .
This is what I did for the conversion of smartform to PDF.
LW_CONTROL_PARAMETERS-GETOTF = 'X'.
*/.. To supress preview
LW_CONTROL_PARAMETERS-NO_DIALOG = 'X'.
LW_CONTROL_PARAMETERS-PREVIEW = SPACE . " before: 'X'
LW_OUTPUT_OPTIONS-TDDEST = 'LP01'.
IF IT_EPKO-BUKRS EQ '3001'.
IF IT_EPKO-EBELN(2) EQ 43.
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = 'ZMM_PO_FORM_CPY'
importing
fm_name = fm_name
exceptions
no_form = 1
no_function_module = 2
others = 3.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
if sy-subrc <> 0.
* Implement suitable error handling here
endif.
CALL FUNCTION FM_NAME "'/1BCDWB/SF00000184'
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS = LW_CONTROL_PARAMETERS
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
OUTPUT_OPTIONS = LW_OUTPUT_OPTIONS
* USER_SETTINGS = 'X'
PO_HEADER = PO_HEADER
PO_FOOTER = PO_FOOTER
PO_BOX_LOC = PO_BOX_LOC
STREET = STREET
HOUSE = HOUSE
REMARK = REMARK
C_CODE = C_CODE
IMPORTING
* DOCUMENT_OUTPUT_INFO =
JOB_OUTPUT_INFO = IT_OTF_DATA
* JOB_OUTPUT_OPTIONS =
TABLES
IT_EPKO = IT_EPKO
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
PERFORM OTF_DATA.
PERFORM SEND_MAIL.
FORM OTF_DATA .
CLEAR T_OTF.
REFRESH T_OTF.
* LI_OTF[] = LW_SSFCRESCL-OTFDATA[].
T_OTF[] = IT_OTF_DATA-OTFDATA[].
CLEAR : LV_BIN_FILESIZE.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = GC_DOCTY_PDF
* MAX_LINEWIDTH = 132
IMPORTING
BIN_FILESIZE = LV_BIN_FILESIZE
TABLES
OTF = T_OTF
LINES = it_pdfdata[]
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
ERR_BAD_OTF = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
EXPORTING
* LINE_WIDTH_SRC =
LINE_WIDTH_DST = '255'
* TRANSFER_BIN = ' '
TABLES
CONTENT_IN = it_pdfdata[]
CONTENT_OUT = it_pdf[]
EXCEPTIONS
ERR_LINE_WIDTH_SRC_TOO_LONG = 1
ERR_LINE_WIDTH_DST_TOO_LONG = 2
ERR_CONV_FAILED = 3
OTHERS = 4
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
And this is what I did for sending mail
FORM SEND_MAIL .
* Fill the document data.
* GD_DOC_DATA-DOC_SIZE = 1.
* Populate the subject/generic message attributes
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.
DESCRIBE TABLE IT_MESSAGE LINES G_TAB_LINES.
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-BODY_NUM = g_tab_lines.
IT_PACKING_LIST-DOC_TYPE = 'RAW'.
APPEND IT_PACKING_LIST.
* CLEAR IT_PACKING_LIST2.
* REFRESH IT_PACKING_LIST2.
* IT_PACKING_LIST2-TRANSF_BIN = SPACE.
* IT_PACKING_LIST2-HEAD_START = 1.
* IT_PACKING_LIST2-HEAD_NUM = 1.
* IT_PACKING_LIST2-BODY_START = 1.
* IT_PACKING_LIST2-BODY_NUM = 1.
* DESCRIBE TABLE LI_CONTENT_TXT LINES IT_PACKING_LIST2-BODY_NUM.
* IT_PACKING_LIST2-DOC_TYPE = 'PDF'.
* APPEND IT_PACKING_LIST2.
CLEAR LT_PACKING_LIST.
REFRESH LT_PACKING_LIST.
LT_PACKING_LIST-TRANSF_BIN = 'X'.
LT_PACKING_LIST-HEAD_START = 1.
LT_PACKING_LIST-HEAD_NUM = 1.
LT_PACKING_LIST-BODY_START = 1.
* LT_PACKING_LIST-BODY_NUM = LV_PDFLINES.
DESCRIBE TABLE it_pdf LINES LT_PACKING_LIST-BODY_NUM.
LT_PACKING_LIST-DOC_TYPE = GC_DOCTY_PDF. " You can give RAW incase if you want just a txt file.
LT_PACKING_LIST-OBJ_NAME = 'PO_ATTACHMENT'.
LT_PACKING_LIST-OBJ_DESCR = 'PO Attachment'.
LT_PACKING_LIST-DOC_SIZE = LT_PACKING_LIST-BODY_NUM * 255.
APPEND LT_PACKING_LIST.
*& for filling document data and get size of attachment
GD_DOC_DATA-OBJ_LANGU = SY-LANGU.
read table it_pdf into w_pdf index G_TAB_LINES.
GD_DOC_DATA-DOC_SIZE = ( G_TAB_LINES - 1 ) * 255 + STRLEN( W_ATTACHMENT ).
DATA : LV_INDEXA TYPE SY-TABIX.
* Add the recipients email address
CLEAR IT_RECEIVERS.
REFRESH IT_RECEIVERS.
* CLEAR WA_RCV.
* LOOP AT IT_RCV INTO WA_RCV.
CLEAR LV_INDEXA.
LV_INDEXA = SY-TABIX.
IT_RECEIVERS-RECEIVER = WA_RCV-SMTP_ADDR.
IT_RECEIVERS-REC_TYPE = 'U'.
IT_RECEIVERS-COM_TYPE = 'INT'.
IT_RECEIVERS-NOTIF_DEL = 'X'.
IT_RECEIVERS-NOTIF_NDEL = 'X'.
APPEND IT_RECEIVERS.
* ENDLOOP.
CLEAR IT_PACKING_LIST3.
REFRESH IT_PACKING_LIST3.
APPEND IT_PACKING_LIST TO IT_PACKING_LIST3.
* APPEND IT_PACKING_LIST2 TO IT_PACKING_LIST3.
APPEND LT_PACKING_LIST TO IT_PACKING_LIST3.
*--------------------------------------------------------------
* Send Email and attach to Complaint
*--------------------------------------------------------------
* Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = GD_DOC_DATA
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
IMPORTING
SENT_TO_ALL = GD_SENT_ALL
* NEW_OBJECT_ID =
TABLES
PACKING_LIST = IT_PACKING_LIST3
* OBJECT_HEADER = LI_OBJHEAD
CONTENTS_BIN = IT_PDF
CONTENTS_TXT = IT_MESSAGE
* CONTENTS_HEX = LI_CONTENT_HEX
* OBJECT_PARA =
* OBJECT_PARB =
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.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF SY-SUBRC = 0.
COMMIT WORK AND WAIT.
MESSAGE 'Email Sent Successfully' TYPE 'S'.
* ELSE.
* WAIT UP TO 2 SECONDS.
* SUBMIT rsconn01 WITH mode = 'INT' WITH output = 'X' AND RETURN.
ENDIF.
* Store function module return code
GD_ERROR = SY-SUBRC.
ENDFORM.