REPORT Y_ABC_SEND_MAIL.
TABLES: RLGRAP.
DATA: G_SEND_FLG LIKE SONV-FLAG.
DATA: G_EMAIL_ID LIKE SOFOLENTI1-OBJECT_ID.
DATA: GT_RECE TYPE TABLE OF SOMLRECI1 WITH HEADER LINE.
DATA: GT_MAIL_TEXT TYPE TABLE OF SOLISTI1 WITH HEADER LINE.
DATA: GT_FIELD_TAB TYPE TABLE OF SOLIX WITH HEADER LINE.
DATA: GT_PACK_TAB TYPE TABLE OF SOPCKLSTI1 WITH HEADER LINE.
DATA: GT_OBJ_HEAD TYPE TABLE OF SOLISTI1 WITH HEADER LINE.
DATA: GS_DOCMENT TYPE SODOCCHGI1.
DATA: GV_HEAD_SID TYPE I.
DATA: GV_BODY_SID TYPE I.
DATA: GV_BODY_SIDA TYPE I.
DATA: GV_TITLE TYPE STRING VALUE 'title:C'.
DATA: GT_FILE_PATH TYPE TABLE OF STRING WITH HEADER LINE.
DATA: LT_T001 TYPE TABLE OF T001 WITH HEADER LINE.
PARAMETERS: P_FILE TYPE RLGRAP-FILENAME DEFAULT 'C:\Users\ABC_a\Desktop\fj3.xlsx'.
SELECT-OPTIONS: S_FILE FOR RLGRAP-FILENAME DEFAULT 'C:\Users\ABC_a\Desktop\fj3.xlsx'.
PARAMETERS: L1(84) DEFAULT 'ABC'.
PARAMETERS: L2(84) DEFAULT 'END'.
INITIALIZATION.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_FILE-LOW.
PERFORM FRM_ZF4_FILE.
START-OF-SELECTION.
PERFORM FRM_00_INIT_DATA.
PERFORM FRM_SEND_MAIL.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_00_INIT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_00_INIT_DATA .
CLEAR: GV_HEAD_SID.
CLEAR: GV_BODY_SIDA.
CLEAR: GT_FILE_PATH[].
CLEAR: LT_T001[].
IF P_FILE IS NOT INITIAL.
GT_FILE_PATH = P_FILE.
APPEND GT_FILE_PATH.
ENDIF.
LOOP AT S_FILE.
GT_FILE_PATH = S_FILE-LOW.
APPEND GT_FILE_PATH.
ENDLOOP.
SORT GT_FILE_PATH.
DELETE ADJACENT DUPLICATES FROM GT_FILE_PATH COMPARING ALL FIELDS.
SELECT * INTO TABLE LT_T001 FROM T001 UP TO 10 ROWS.
ENDFORM. " FRM_00_INIT_DATA
*&---------------------------------------------------------------------*
*& Form FRM_SEND_MAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_SEND_MAIL.
CLEAR: GS_DOCMENT.
CLEAR: G_SEND_FLG.
CLEAR: G_EMAIL_ID.
CLEAR: GT_PACK_TAB[].
CLEAR: GT_OBJ_HEAD[].
CLEAR: GT_MAIL_TEXT[].
CLEAR: GT_FIELD_TAB[].
CLEAR: GT_RECE[].
PERFORM FRM_SEND_MAIL_S1_RECEIVER TABLES GT_RECE.
PERFORM FRM_SEND_MAIL_S2_TITLE_BODY TABLES GT_PACK_TAB GT_MAIL_TEXT USING GS_DOCMENT GV_TITLE.
PERFORM FRM_SEND_MAIL_S3_FILE_ITAB.
BREAK-POINT.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1' DESTINATION 'DEABK'
EXPORTING
DOCUMENT_DATA = GS_DOCMENT
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
IMPORTING
G_SEND_FLG_TO_ALL = G_SEND_FLG
NEW_OBJECT_ID = G_EMAIL_ID
TABLES
PACKING_LIST = GT_PACK_TAB " 邮件详细列表清单
OBJECT_HEADER = GT_OBJ_HEAD " 邮件附件列表【参数作用不详】
CONTENTS_TXT = GT_MAIL_TEXT " 邮件内容
CONTENTS_HEX = GT_FIELD_TAB " 内容(all)【本地附件、内表】
RECEIVERS = GT_RECE " 收件人列表
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_G_SEND_FLG = 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.
ENDIF.
WRITE:/ G_EMAIL_ID.
WRITE:/ G_SEND_FLG.
WRITE:/ SY-SUBRC.
ENDFORM. "FRM_SEND_MAIL
*&---------------------------------------------------------------------*
*& Form FRM_SEND_MAIL_S1_RECEIVER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_RECE text
*----------------------------------------------------------------------*
FORM FRM_SEND_MAIL_S1_RECEIVER TABLES PT_RECE STRUCTURE SOMLRECI1.
PT_RECE-REC_TYPE = 'U'.
PT_RECE-COM_TYPE = 'INT'.
PT_RECE-EXPRESS = 'X'.
""""""""""""""""""""""""""""""""""""""""""""""""""
PT_RECE-COPY = ''. " 正常收件人
PT_RECE-RECEIVER = 'cly-apple@hotmail.com'.
APPEND PT_RECE.
PT_RECE-COPY = 'X'. " 抄送
PT_RECE-RECEIVER = '262560478@QQ.COM'.
APPEND PT_RECE.
CLEAR: PT_RECE.
ENDFORM. "FRM_SEND_RECEIVER
*&---------------------------------------------------------------------*
*& Form FRM_SEND_TITLE_BODY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->GT_PACK_TAB text
* -->PT_MAIL_TEXT text
* -->GS_DOCMENT text
* -->PV_TITLE text
*----------------------------------------------------------------------*
FORM FRM_SEND_MAIL_S2_TITLE_BODY TABLES PT_PACK_TAB STRUCTURE SOPCKLSTI1
PT_MAIL_TEXT STRUCTURE SOLISTI1
USING GS_DOCMENT TYPE SODOCCHGI1
PV_TITLE.
PT_MAIL_TEXT-LINE = L1.
APPEND PT_MAIL_TEXT.
PT_MAIL_TEXT-LINE = L2.
APPEND PT_MAIL_TEXT.
**** Mail Attribute
GS_DOCMENT-OBJ_NAME = 'MESSAGE'.
GS_DOCMENT-OBJ_DESCR = '邮件主题' . " 邮件主题
GS_DOCMENT-OBJ_DESCR = PV_TITLE. " 标题
GS_DOCMENT-OBJ_LANGU = SY-LANGU.
GS_DOCMENT-EXPIRY_DAT = SY-DATUM.
GS_DOCMENT-SENSITIVTY = 'F'.
GS_DOCMENT-PRIORITY = ''. " 优先权 1-9 (高-低) 空-无优先
DATA: LV_S TYPE I.
DESCRIBE TABLE PT_MAIL_TEXT LINES LV_S.
GS_DOCMENT-DOC_SIZE = ( LV_S - 1 ) * 255 + STRLEN( PT_MAIL_TEXT ).
*****************************************************
DATA : LINES TYPE I.
DESCRIBE TABLE PT_MAIL_TEXT LINES LINES.
PT_PACK_TAB-TRANSF_BIN = SPACE.
PT_PACK_TAB-HEAD_START = 1.
PT_PACK_TAB-HEAD_NUM = 0.
PT_PACK_TAB-BODY_START = 1.
PT_PACK_TAB-BODY_NUM = LINES.
PT_PACK_TAB-DOC_SIZE = LV_S * 255.
PT_PACK_TAB-DOC_TYPE = 'RAW'.
APPEND PT_PACK_TAB.
CLEAR: PT_PACK_TAB.
ENDFORM. "FRM_SEND_TITLE_BODY
*&---------------------------------------------------------------------*
*& Form FRM_SEND_MAIL_S3_FILE_ITAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SEND_MAIL_S3_FILE_ITAB .
"""""""" 本地附件
LOOP AT GT_FILE_PATH.
GV_HEAD_SID = GV_HEAD_SID + 1.
PERFORM FRM_FILE_A0_UPLOAD TABLES GT_PACK_TAB GT_FIELD_TAB USING GT_FILE_PATH.
ENDLOOP.
* """""""" 内表
PERFORM FRM_FILE_A7_UPLOAD_APPEND_ITAB TABLES GT_PACK_TAB GT_FIELD_TAB.
"""""""" smartforms
PERFORM FRM_FILE_A7_UPLOAD_APPEND_SMF TABLES GT_PACK_TAB GT_FIELD_TAB.
ENDFORM. " FRM_SEND_MAIL_S3_FILE_ITAB
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_PACK_TAB text
* -->PT_FIELD_TAB text
* -->PV_FILE_PATH text
*----------------------------------------------------------------------*
FORM FRM_FILE_A0_UPLOAD TABLES PT_PACK_TAB STRUCTURE SOPCKLSTI1
PT_FIELD_TAB STRUCTURE SOLIX
USING PV_FILE_PATH.
DATA: LT_FIELD_TAB TYPE TABLE OF SOLIX WITH HEADER LINE.
DATA: L_FILE_PATH LIKE RLGRAP-FILENAME.
DATA: L_FILE_NAME LIKE RLGRAP-FILENAME.
DATA: L_FILE_TYPE LIKE RLGRAP-FILETYPE.
DATA: L_FILE_SIZE TYPE I.
DATA: L_DOC_TYPE TYPE CHAR3.
DATA: L_DOC_SIZE TYPE I.
DATA: L_TAB_LINES TYPE I.
* """ 先选择文件 PV_FILE_PATH
PERFORM FRM_FILE_A1_UPLOAD_WS_EXITS USING PV_FILE_PATH CHANGING L_FILE_PATH.
PERFORM FRM_FILE_A2_UPLOAD_WS_ITAB TABLES LT_FIELD_TAB USING L_FILE_PATH CHANGING L_FILE_SIZE.
""" 可选择文件 路径可能变更 L_FILE_NAME
PERFORM FRM_FILE_A5_UPLOAD_ITAB TABLES LT_FIELD_TAB USING PV_FILE_PATH CHANGING L_FILE_PATH L_FILE_SIZE.
CHECK SY-SUBRC = 0 .
CHECK LT_FIELD_TAB[] IS NOT INITIAL .
DATA: LV_TAB_LINES TYPE I.
DATA: LT_TAB_STR TYPE TABLE OF STRING WITH HEADER LINE.
SPLIT L_FILE_PATH AT '\' INTO TABLE LT_TAB_STR .
DESCRIBE TABLE LT_TAB_STR LINES LV_TAB_LINES.
READ TABLE LT_TAB_STR INDEX LV_TAB_LINES.
SPLIT LT_TAB_STR AT '.' INTO L_FILE_NAME L_DOC_TYPE.
DESCRIBE TABLE LT_FIELD_TAB LINES L_TAB_LINES.
* L_DOC_SIZE = L_TAB_LINES * 255.
GV_BODY_SIDA = GV_BODY_SID + 1.
GV_BODY_SID = GV_BODY_SID + L_TAB_LINES.
PT_PACK_TAB-TRANSF_BIN = 'X'.
PT_PACK_TAB-HEAD_START = GV_HEAD_SID.
PT_PACK_TAB-HEAD_NUM = 0.
PT_PACK_TAB-BODY_START = GV_BODY_SIDA.
PT_PACK_TAB-BODY_NUM = L_TAB_LINES.
PT_PACK_TAB-OBJ_NAME = 'obj name'.
PT_PACK_TAB-OBJ_DESCR = L_FILE_NAME. " 附件文件名
PT_PACK_TAB-DOC_TYPE = L_DOC_TYPE.
PT_PACK_TAB-DOC_SIZE = L_FILE_SIZE. " l_doc_size.
PT_PACK_TAB-OBJ_LANGU = SY-LANGU.
APPEND PT_PACK_TAB.
CLEAR: PT_PACK_TAB.
* GT_OBJ_HEAD = L_FILE_NAME.
* APPEND GT_OBJ_HEAD.
APPEND LINES OF LT_FIELD_TAB TO PT_FIELD_TAB.
ENDFORM. "FRM_UPLOAD
*&---------------------------------------------------------------------*
*& Form FRM_FILE_A7_UPLOAD_APPEND_ITAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_PACK_TAB text
* -->PT_FIELD_TAB text
*----------------------------------------------------------------------*
FORM FRM_FILE_A7_UPLOAD_APPEND_ITAB TABLES PT_PACK_TAB STRUCTURE SOPCKLSTI1
PT_FIELD_TAB STRUCTURE SOLIX.
CONSTANTS:
LC_TAB TYPE CHAR1 VALUE CL_BCS_CONVERT=>GC_TAB, "CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
LC_CRLF TYPE CHAR2 VALUE CL_BCS_CONVERT=>GC_CRLF. "CL_ABAP_CHAR_UTILITIES=>CR_LF
DATA: LV_MIMETYPE TYPE CHAR64 VALUE 'APPLICATION/MSEXCEL;charset=utf-16le'.
DATA: LV_XSTR1 TYPE XSTRING.
DATA: LV_STR2 TYPE STRING.
DATA: L_TAB_LINES LIKE SY-TABIX.
DATA: LT_FIELD_TAB TYPE TABLE OF SOLIX WITH HEADER LINE.
LOOP AT LT_T001.
CONCATENATE LV_STR2
LT_T001-BUKRS LC_TAB
LT_T001-ORT01 LC_TAB
LT_T001-BUTXT LC_CRLF
INTO LV_STR2.
ENDLOOP.
" Convert string to xstring type
" 'APPLICATION/MSEXCEL;charset=utf-16le'
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
TEXT = LV_STR2
MIMETYPE = LV_MIMETYPE
IMPORTING
BUFFER = LV_XSTR1
EXCEPTIONS
FAILED = 1
OTHERS = 2.
IF SY-SUBRC = 0.
" Add the file header for utf-16le. .
CONCATENATE CL_ABAP_CHAR_UTILITIES=>BYTE_ORDER_MARK_LITTLE
LV_XSTR1 INTO LV_XSTR1 IN BYTE MODE.
ENDIF.
DATA: LV_OUTPUT_LENGTH TYPE I.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = LV_XSTR1
IMPORTING
OUTPUT_LENGTH = LV_OUTPUT_LENGTH
TABLES
BINARY_TAB = LT_FIELD_TAB.
***set attachment name, count size*******************
DESCRIBE TABLE LT_FIELD_TAB LINES L_TAB_LINES.
GV_HEAD_SID = GV_HEAD_SID + 1.
GV_BODY_SIDA = GV_BODY_SID + 1.
GV_BODY_SID = GV_BODY_SID + L_TAB_LINES.
PT_PACK_TAB-TRANSF_BIN = 'X'.
PT_PACK_TAB-HEAD_START = GV_HEAD_SID.
PT_PACK_TAB-HEAD_NUM = 0.
PT_PACK_TAB-BODY_START = GV_BODY_SIDA.
PT_PACK_TAB-BODY_NUM = L_TAB_LINES.
PT_PACK_TAB-DOC_TYPE = 'XLS'.
PT_PACK_TAB-OBJ_NAME = 'ATTACHMENT'.
PT_PACK_TAB-OBJ_DESCR = 't001'.
PT_PACK_TAB-DOC_SIZE = L_TAB_LINES * 255.
PT_PACK_TAB-OBJ_LANGU = SY-LANGU.
APPEND PT_PACK_TAB.
CLEAR: PT_PACK_TAB.
* GT_OBJ_HEAD = 'T001x.xls'.
* APPEND GT_OBJ_HEAD.
APPEND LINES OF LT_FIELD_TAB TO PT_FIELD_TAB.
ENDFORM. "FRM_FILE_A7_UPLOAD_APPEND_ITAB
*&---------------------------------------------------------------------*
*& Form FRM_FILE_UPLOAD_WS_EXITS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PV_FILE text
* <--CV_FILE text
*----------------------------------------------------------------------*
FORM FRM_FILE_A1_UPLOAD_WS_EXITS USING PV_FILE CHANGING CV_FILE.
DATA: LV_FILE TYPE STRING.
DATA: LV_RESULT. " 返回值为'X'时,文件存在
CLEAR: LV_RESULT.
LV_FILE = PV_FILE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
EXPORTING
FILE = LV_FILE
RECEIVING
RESULT = LV_RESULT
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
WRONG_PARAMETER = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
IF LV_RESULT IS INITIAL.
" 不存在
MESSAGE S001(00) WITH 'File is not exits!' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ELSE.
" 存在
CV_FILE = PV_FILE.
ENDIF.
ENDIF.
ENDFORM. "FRM_FILE_UPLOAD_WS_EXITS
*&---------------------------------------------------------------------*
*& Form FRM_FILE_UPLOAD_WS_ITAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_FIELD_TAB text
* -->PV_FILE text
* <--CV_FILE_SIZE text
*----------------------------------------------------------------------*
FORM FRM_FILE_A2_UPLOAD_WS_ITAB TABLES PT_FIELD_TAB STRUCTURE SOLIX
USING PV_FILE
CHANGING CV_FILE_SIZE.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
* CODEPAGE = ' '
FILENAME = PV_FILE
FILETYPE = 'BIN'
* HEADLEN = ' '
* LINE_EXIT = ' '
* TRUNCLEN = ' '
* USER_FORM = ' '
* USER_PROG = ' '
* DAT_D_FORMAT = ' '
IMPORTING
FILELENGTH = CV_FILE_SIZE
TABLES
DATA_TAB = PT_FIELD_TAB
* EXCEPTIONS
* CONVERSION_ERROR = 1
* FILE_OPEN_ERROR = 2
* FILE_READ_ERROR = 3
* INVALID_TYPE = 4
* NO_BATCH = 5
* UNKNOWN_ERROR = 6
* INVALID_TABLE_WIDTH = 7
* GUI_REFUSE_FILETRANSFER = 8
* CUSTOMER_ERROR = 9
* NO_AUTHORITY = 10
* OTHERS = 11
.
ENDFORM. "FRM_FILE_UPLOAD_WS_ITAB
*&---------------------------------------------------------------------*
*& Form FRM_ZF4_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_ZF4_FILE .
DATA:
L_DESKTOP TYPE STRING,
L_I_FILES TYPE FILETABLE WITH HEADER LINE,
L_RCODE TYPE INT4.
DATA: L_ACTION TYPE I .
* Finding desktop
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY
CHANGING
DESKTOP_DIRECTORY = L_DESKTOP
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE E001(00) WITH
'Desktop not found'.
ENDIF.
* Update View
CALL METHOD CL_GUI_CFW=>UPDATE_VIEW
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2
OTHERS = 3.
* CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
* EXPORTING
** WINDOW_TITLE =
** DEFAULT_EXTENSION =
** DEFAULT_FILENAME =
** FILE_FILTER =
* INITIAL_DIRECTORY = 'd:temp'
* MULTISELECTION = 'X'
* CHANGING
* FILE_TABLE = L_I_FILES[]
* RC = L_RCODE "打开文件的数量
** USER_ACTION =
* EXCEPTIONS
* FILE_OPEN_DIALOG_FAILED = 1
* CNTL_ERROR = 2
* ERROR_NO_GUI = 3
* OTHERS = 4.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = 'Select Excel file'
DEFAULT_EXTENSION = '.xls'
FILE_FILTER = '.xls'
INITIAL_DIRECTORY = L_DESKTOP
MULTISELECTION = 'X'
CHANGING
FILE_TABLE = L_I_FILES[]
RC = L_RCODE
USER_ACTION = L_ACTION
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE E001(00) WITH 'Error while opening file'.
ENDIF.
IF L_ACTION EQ 9 . " user cancelled selection
EXIT .
ENDIF.
CLEAR: S_FILE[].
IF L_I_FILES[] IS NOT INITIAL.
LOOP AT L_I_FILES.
S_FILE-SIGN = 'I'.
S_FILE-OPTION = 'EQ'.
S_FILE-LOW = L_I_FILES.
APPEND S_FILE.
CLEAR: S_FILE.
ENDLOOP.
ENDIF.
ENDFORM. "FRM_ZF4_FILE
*&---------------------------------------------------------------------*
*& Form FRM_FILE_UPLOAD_ITAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_FIELD_TAB text
* -->PV_FILE_PATH text
* <--CV_FILE_PATH text
* <--CV_FILE_SIZE text
*----------------------------------------------------------------------*
FORM FRM_FILE_A5_UPLOAD_ITAB TABLES PT_FIELD_TAB STRUCTURE SOLIX
USING PV_FILE_PATH
CHANGING CV_FILE_PATH TYPE RLGRAP-FILENAME
CV_FILE_SIZE.
DATA: LV_FILE_PATH TYPE RLGRAP-FILENAME.
DATA: LV_FILE_TYPE TYPE RLGRAP-FILETYPE.
LV_FILE_PATH = PV_FILE_PATH.
CV_FILE_SIZE = 0.
CALL FUNCTION 'UPLOAD'
EXPORTING
FILENAME = LV_FILE_PATH
FILETYPE = 'BIN'
IMPORTING
ACT_FILENAME = CV_FILE_PATH
ACT_FILETYPE = LV_FILE_TYPE
FILESIZE = CV_FILE_SIZE
* CANCEL =
TABLES
DATA_TAB = PT_FIELD_TAB
EXCEPTIONS
CONVERSION_ERROR = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 6
OTHERS = 7.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
IF PT_FIELD_TAB[] IS INITIAL.
" 未选中
MESSAGE S001(00) WITH 'File is not Selected!' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
ENDFORM. "FRM_FILE_UPLOAD_ITAB
*&---------------------------------------------------------------------*
*& Form FRM_FILE_A7_UPLOAD_APPEND_SMF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_PACK_TAB text
* -->P_GT_FIELD_TAB text
*----------------------------------------------------------------------*
FORM FRM_FILE_A7_UPLOAD_APPEND_SMF TABLES PT_PACK_TAB STRUCTURE GT_PACK_TAB
PT_FIELD_TAB STRUCTURE GT_FIELD_TAB.
DATA: LT_RECORD LIKE TABLE OF SOLIX.
DATA: LV_FILE_DAT TYPE XSTRING.
DATA: LV_FILE_SIZE TYPE I.
DATA: L_TAB_LINES TYPE I.
DATA: LT_OTF TYPE TSFOTF WITH HEADER LINE.
PERFORM FRM_SMART_OTF_TAB TABLES LT_OTF.
PERFORM FRM_CONVERT_OTF_V22 TABLES LT_OTF LT_RECORD USING 'PDF' CHANGING LV_FILE_SIZE.
***set attachment name, count size*******************
DESCRIBE TABLE LT_RECORD LINES L_TAB_LINES.
GV_HEAD_SID = GV_HEAD_SID + 1.
GV_BODY_SIDA = GV_BODY_SID + 1.
GV_BODY_SID = GV_BODY_SID + L_TAB_LINES.
PT_PACK_TAB-TRANSF_BIN = 'X'.
PT_PACK_TAB-HEAD_START = GV_HEAD_SID.
PT_PACK_TAB-HEAD_NUM = 0.
PT_PACK_TAB-BODY_START = GV_BODY_SIDA.
PT_PACK_TAB-BODY_NUM = L_TAB_LINES.
PT_PACK_TAB-OBJ_NAME = 'obj name'.
PT_PACK_TAB-OBJ_DESCR = '附件文件名2'. " 附件文件名
PT_PACK_TAB-DOC_TYPE = 'PDF'.
PT_PACK_TAB-DOC_SIZE = LV_FILE_SIZE. " l_doc_size.
PT_PACK_TAB-OBJ_LANGU = SY-LANGU.
APPEND PT_PACK_TAB.
CLEAR: PT_PACK_TAB.
* GT_OBJ_HEAD = 'T001x.xls'.
* APPEND GT_OBJ_HEAD.
APPEND LINES OF LT_RECORD TO PT_FIELD_TAB.
* "控制变量
* DATA FM_NAME TYPE RS38L_FNAM.
* DATA: CONTROL_PARAMETERS TYPE SSFCTRLOP,
* L_OUTPUT_OPTIONS TYPE SSFCOMPOP.
*
* DATA JOB_OUTPUT_INFO TYPE SSFCRESCL.
* DATA JOB_OUTPUT_OPTIONS TYPE SSFCRESOP.
*
**--------------------------------------------------------------------*
* "转OTF
* DATA: GT_OTF LIKE TABLE OF ITCOO WITH HEADER LINE,
* GT_PDF_LINE LIKE TABLE OF TLINE WITH HEADER LINE,
* GT_RECORD LIKE TABLE OF SOLISTI1 WITH HEADER LINE.
* DATA: G_LEN_IN TYPE I, "OTF 文件大小(邮件附件大小)
* G_LINES_TXT TYPE I, "邮件文本行数
* G_LINES_BIN TYPE I. "邮件附件行数
* DATA: G_BENFILE TYPE XSTRING. "二进制格式的邮件
* DATA: G_OBJECT(50) TYPE C. "邮件主题
*
* DATA PDF_NAME TYPE STRING. "附件名称
*
* DATA: GT_OBJPACK LIKE TABLE OF SOPCKLSTI1 WITH HEADER LINE, "邮件内容 正文+附件
* GT_OBJTXT LIKE TABLE OF SOLISTI1 WITH HEADER LINE, "正文内容
* GT_OBJBIN LIKE TABLE OF SOLISTI1 WITH HEADER LINE, "附件内容
* GT_RECLIST LIKE TABLE OF SOMLRECI1 WITH HEADER LINE, "收件人
* WA_DOC_CHNG TYPE SODOCCHGI1. "邮件属性
*
*
* CLEAR: JOB_OUTPUT_OPTIONS,
* JOB_OUTPUT_INFO,
* G_LEN_IN,
* G_LINES_TXT,
* G_LINES_BIN,
* G_BENFILE.
* CLEAR : GT_OTF[], GT_PDF_LINE[],GT_RECORD[].
*
*
* "将转换后的文件添加到邮件附件
* APPEND LINES OF GT_RECORD TO GT_OBJBIN.
*
* "添加邮件正文
* GT_OBJTXT = ' '.
* APPEND GT_OBJTXT.
*
* GT_OBJTXT = ' 本邮件由系统自动发出,请勿直接回复!'.
* APPEND GT_OBJTXT.
*
* "邮件正文行数
* DESCRIBE TABLE GT_OBJTXT LINES G_LINES_TXT.
*
* G_OBJECT = '测试邮件!'. "邮件主题
* PDF_NAME = '测试.pdf'. "附件名称
*
*
*
** Main Text
* CLEAR GT_OBJPACK-TRANSF_BIN.
* GT_OBJPACK-HEAD_START = 1.
* GT_OBJPACK-HEAD_NUM = 0.
* GT_OBJPACK-BODY_START = 1.
* GT_OBJPACK-BODY_NUM = G_LINES_TXT.
* GT_OBJPACK-DOC_TYPE = 'RAW'.
* APPEND GT_OBJPACK.
*
ENDFORM. " FRM_FILE_A7_UPLOAD_APPEND_SMF
*&---------------------------------------------------------------------*
*& Form FRM_SMART_OTF_TAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_OTF text
*----------------------------------------------------------------------*
FORM FRM_SMART_OTF_TAB TABLES PT_OTF TYPE TSFOTF.
DATA: L_FNAME TYPE RS38L_FNAM.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'Y_TEST_ABC_1'
IMPORTING
FM_NAME = L_FNAME.
DATA: L_OUTPUT_OPTIONS TYPE SSFCOMPOP ,
L_TMP_CONTROL_PAR LIKE SSFCTRLOP,
L_JOB_OUTPUT_INFO TYPE SSFCRESCL ,
L_PRINTCOUNT TYPE I.
***以下设置打印预览功能***
****Smart Forms: 控制结构*****
L_TMP_CONTROL_PAR-GETOTF = 'X'. "这个参数一定要设:OTF 表的返回。无打印,显示或传真
* L_TMP_CONTROL_PAR-PREVIEW = 'X'. "打印预览
L_TMP_CONTROL_PAR-NO_DIALOG = 'X'. "必须设置
** L_TMP_CONTROL_PAR-DEVICE = 'PRINTER'.
****SAP Smart Forms: 智能写作器 (传输) 选项*****
L_OUTPUT_OPTIONS-TDNOPREV = 'X'. "是否打印预览,X 不预览。
L_OUTPUT_OPTIONS-TDNOPRINT = 'X'. "没有打印输出,X 不显示。
L_OUTPUT_OPTIONS-TDIMMED = 'X'. "立即打印标志。
L_OUTPUT_OPTIONS-TDIEXIT = 'X'. "预览打印后直接退出
* L_OUTPUT_OPTIONS-TDDEST = 'RED_LOCAL'. "假脱机,输出设备。
DATA: LT_DATA TYPE TABLE OF T001 WITH HEADER LINE.
SELECT * INTO TABLE LT_DATA FROM T001 UP TO 10 ROWS.
DATA: L_LINES TYPE I.
DATA: G_C_X TYPE C VALUE 'X'.
DESCRIBE TABLE LT_DATA LINES L_LINES.
LOOP AT LT_DATA.
CASE SY-TABIX.
WHEN 1.
L_TMP_CONTROL_PAR-NO_CLOSE = G_C_X.
L_TMP_CONTROL_PAR-NO_OPEN = SPACE.
WHEN L_LINES.
L_TMP_CONTROL_PAR-NO_CLOSE = SPACE.
L_TMP_CONTROL_PAR-NO_OPEN = G_C_X.
WHEN OTHERS.
L_TMP_CONTROL_PAR-NO_CLOSE = G_C_X.
L_TMP_CONTROL_PAR-NO_OPEN = G_C_X.
ENDCASE.
IF L_LINES = 1 .
L_TMP_CONTROL_PAR-NO_CLOSE = SPACE.
L_TMP_CONTROL_PAR-NO_OPEN = SPACE.
ENDIF.
CALL FUNCTION L_FNAME
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS = L_TMP_CONTROL_PAR
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
OUTPUT_OPTIONS = L_OUTPUT_OPTIONS
* USER_SETTINGS = 'X'
IMPORTING
* DOCUMENT_OUTPUT_INFO =
JOB_OUTPUT_INFO = L_JOB_OUTPUT_INFO
* JOB_OUTPUT_OPTIONS =
* EXCEPTIONS
* FORMATTING_ERROR = 1
* INTERNAL_ERROR = 2
* SEND_ERROR = 3
* USER_CANCELED = 4
* OTHERS = 5
.
ENDLOOP.
PT_OTF[] = L_JOB_OUTPUT_INFO-OTFDATA[].
ENDFORM. " FRM_SMART_OTF_TAB
*&---------------------------------------------------------------------*
*& Form FRM_CONVERT_OTF_V22
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_OTF text
* -->P_LT_RECORD text
* -->P_L_PDF text
* <--P_L_LEN text
*----------------------------------------------------------------------*
FORM FRM_CONVERT_OTF_V22 TABLES P_T_OTF TYPE TSFOTF
PT_RECORD TYPE STANDARD TABLE
USING PV_TYP
CHANGING P_L_LEN.
DATA: LV_XSTR TYPE XSTRING.
DATA: LT_RECORD LIKE SOLIX OCCURS 0 WITH HEADER LINE.
DATA: LT_LINES TYPE TABLE OF TLINE WITH HEADER LINE..
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = PV_TYP " 'PDF'
* MAX_LINEWIDTH = 132
* ARCHIVE_INDEX = ' '
* COPYNUMBER = 0
* ASCII_BIDI_VIS2LOG = ' '
IMPORTING
BIN_FILESIZE = P_L_LEN
BIN_FILE = LV_XSTR
TABLES
OTF = P_T_OTF[]
LINES = LT_LINES[]
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 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = LV_XSTR
IMPORTING
OUTPUT_LENGTH = P_L_LEN
TABLES
BINARY_TAB = LT_RECORD[].
FIELD-SYMBOLS: <FS_DAT1> TYPE ANY.
DATA: LV_STR1 TYPE STRING.
FIELD-SYMBOLS: <FS_DAT2> TYPE ANY.
DATA: LV_STR2 TYPE STRING.
LV_STR1 = 'LT_RECORD[]'.
ASSIGN (LV_STR1) TO <FS_DAT1>.
LV_STR2 = 'PT_RECORD[]'.
ASSIGN (LV_STR2) TO <FS_DAT2>.
<FS_DAT2> = <FS_DAT1>.
ENDFORM. " FRM_CONVERT_OTF_V22
ABAP-发邮件SO_NEW_DOCUMENT_ATT_SEND_API1(本地附件,内表,SmartForms)
于 2019-08-29 15:35:32 首次发布
本文介绍如何在ABAP中利用SO_NEW_DOCUMENT_ATT_SEND_API1函数发送包含本地附件和内表数据的电子邮件,同时涉及SmartForms的使用。
4029

被折叠的 条评论
为什么被折叠?



