SAMRTFORMS 转换PDF 发送邮件

最终成果:

*&---------------------------------------------------------------------*

*& Report ZLC_FIND_EXIT

*&---------------------------------------------------------------------*

*&根据T-CODE / 程序名查询出口、BADI增强

*&---------------------------------------------------------------------*

REPORT ZEDIT_G.





"打印参数

DATA:LV_FMNAME  TYPE RS38L_FNAM,

     LS_CTRLOP  TYPE SSFCTRLOP,

     LS_COMPOP  TYPE SSFCOMPOP,

     LS_RETURN  TYPE SSFCRESCL,

     LS_INFO    TYPE SSFCRESCL,

     LS_OPTIONS TYPE SSFCRESOP.





"附件参数

DATA:LT_OTF    TYPE ITCOO OCCURS 0 WITH HEADER LINE,

     LT_TLINE  TYPE TLINE OCCURS 0 WITH HEADER LINE,

     LT_RECORD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.





"邮件参数

DATA:LV_SIZE      TYPE I, "邮件附件大小

     LV_LINES_TXT TYPE I, "邮件文本行数

     LV_LINES_BIN TYPE I, "邮件附件行数

     LV_BENFILE   TYPE XSTRING,

     LV_OBJECT    TYPE CHAR50, "邮件主题

     LV_PDFNAME   TYPE CHAR50,

     GT_OBJPACK   LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE, "邮件内容 正文+附件

     GT_OBJTXT    LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, "正文内容

     GT_OBJBIN    LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, "附件内容

     GT_RECLIST   LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE, "收件人

     LS_DOC_CHNG  TYPE SODOCCHGI1. "邮件属性





"打印控制

LS_CTRLOP-NO_OPEN = 'X'.

LS_CTRLOP-NO_CLOSE = 'X'.

LS_CTRLOP-GETOTF = 'X'.    "这个必须要打上标记,否则无法获取打印页面数据

LS_CTRLOP-LANGU = '1'.

LS_CTRLOP-NO_DIALOG = 'X'.





LS_COMPOP-TDNOPREV = 'X'.





CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

  EXPORTING

    FORMNAME           = 'ZTEST001'  "创建的SMARTFORMS表单名称

  IMPORTING

    FM_NAME            = LV_FMNAME

  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.





CALL FUNCTION 'SSF_OPEN'                 "打开打印页面

  EXPORTING

    OUTPUT_OPTIONS     = LS_COMPOP

    CONTROL_PARAMETERS = LS_CTRLOP

    USER_SETTINGS      = 'X'

  IMPORTING

    JOB_OUTPUT_OPTIONS = LS_OPTIONS

  EXCEPTIONS

    FORMATTING_ERROR   = 1

    INTERNAL_ERROR     = 2

    SEND_ERROR         = 3

    USER_CANCELED      = 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 LV_FMNAME              调用打印表单接口函数

  EXPORTING

    OUTPUT_OPTIONS     = LS_COMPOP

    CONTROL_PARAMETERS = LS_CTRLOP

    USER_SETTINGS      = ' '

  IMPORTING

    JOB_OUTPUT_INFO    = LS_RETURN

  EXCEPTIONS

    FORMATTING_ERROR   = 1

    INTERNAL_ERROR     = 2

    SEND_ERROR         = 3

    USER_CANCELED      = 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.

ELSE.

ENDIF.





CALL FUNCTION 'SSF_CLOSE'                "关闭打印表单

  IMPORTING

    JOB_OUTPUT_INFO  = LS_INFO

  EXCEPTIONS

    FORMATTING_ERROR = 1

    INTERNAL_ERROR   = 2

    SEND_ERROR       = 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.

ELSE.

  APPEND LINES OF LS_INFO-OTFDATA TO LT_OTF.

ENDIF.





CALL FUNCTION 'CONVERT_OTF'            "转换PDF格式

  EXPORTING

    FORMAT                = 'PDF'

    PDF_USERNAME          = 'TIANCZ'

  IMPORTING

    BIN_FILESIZE          = LV_SIZE

    BIN_FILE              = LV_BENFILE

  TABLES

    OTF                   = LT_OTF

    LINES                 = LT_TLINE

  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.





IF LV_BENFILE IS NOT INITIAL.

  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'      "转换PDF添加邮件附件

    EXPORTING

      BUFFER        = LV_BENFILE

    IMPORTING

      OUTPUT_LENGTH = LV_SIZE

    TABLES

      BINARY_TAB    = LT_RECORD.

ENDIF.





REFRESH:GT_RECLIST,GT_OBJTXT,GT_OBJBIN,GT_OBJPACK.

CLEAR: LS_DOC_CHNG.





"将转换后的文件添加到邮件附件

APPEND LINES OF LT_RECORD TO GT_OBJBIN.





"添加邮件正文

GT_OBJTXT = ''.

APPEND GT_OBJTXT.





GT_OBJTXT = '邮件测试,包含一个PDF附件'.

APPEND GT_OBJTXT.





"邮件正文行数

LV_LINES_TXT = LINES( GT_OBJTXT ).





LV_OBJECT = '邮件测试'.

LV_PDFNAME = 'SM转换的PDF文件.pdf'.





LS_DOC_CHNG-OBJ_LANGU = SY-LANGU.

LS_DOC_CHNG-OBJ_NAME = 'Email'.

LS_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.

LS_DOC_CHNG-OBJ_DESCR = LV_OBJECT.  "邮件主题

LS_DOC_CHNG-SENSITIVTY = 'F'.

LS_DOC_CHNG-DOC_SIZE = LV_LINES_TXT * 255 + LV_SIZE.

LS_DOC_CHNG-PRIORITY = '1'.





CLEAR GT_OBJPACK-TRANSF_BIN.

GT_OBJPACK-HEAD_START = 1.

GT_OBJPACK-HEAD_NUM = 0.

GT_OBJPACK-BODY_START = 1.

GT_OBJPACK-BODY_NUM = LV_LINES_TXT.

GT_OBJPACK-DOC_TYPE = 'RAW'.

APPEND GT_OBJPACK.





CLEAR:LV_LINES_BIN.

GT_OBJPACK-TRANSF_BIN = 'X'.

GT_OBJPACK-HEAD_START = 1.

GT_OBJPACK-HEAD_NUM = 1.

GT_OBJPACK-BODY_START = 1.





LV_LINES_BIN = LINES( LT_RECORD ).





GT_OBJPACK-DOC_SIZE = LV_SIZE .

GT_OBJPACK-BODY_NUM = LV_LINES_BIN.

GT_OBJPACK-DOC_TYPE = 'PDF'.

GT_OBJPACK-OBJ_NAME = 'PO'.

GT_OBJPACK-OBJ_DESCR = LV_PDFNAME.

APPEND GT_OBJPACK.





GT_RECLIST-RECEIVER = 'XXXXX@163.com'."收件人邮箱

GT_RECLIST-REC_TYPE = 'U'.

APPEND GT_RECLIST.





CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

  EXPORTING

    DOCUMENT_DATA              = LS_DOC_CHNG  " 邮件属性

    PUT_IN_OUTBOX              = ''

    COMMIT_WORK                = 'X'

  TABLES

    PACKING_LIST               = GT_OBJPACK  " 邮件内容

    CONTENTS_BIN               = GT_OBJBIN   " 附件内容(二进制)

    CONTENTS_TXT               = GT_OBJTXT   " 邮件内容(直接填入)

    RECEIVERS                  = GT_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 '发送成功!' TYPE 'S'.

  WAIT UP TO 1 SECONDS.

  SUBMIT RSCONN01 WITH MODE = 'INT'

  WITH OUTPUT = ''

  AND RETURN.

ELSE.

  MESSAGE '发送失败!' TYPE 'S'.

ENDIF.

T-CODE:SOST--查看邮件发送情况:

可参考学习笔记:https://www.cnblogs.com/StephenAmell/p/17414767.html

相关推荐
耶啵奶膘12 分钟前
uniapp-是否删除
linux·前端·uni-app
2401_850410831 小时前
文件系统和日志管理
linux·运维·服务器
XMYX-02 小时前
使用 SSH 蜜罐提升安全性和记录攻击活动
linux·ssh
一只哒布刘3 小时前
NFS服务器
运维·服务器
二十雨辰4 小时前
[linux]docker基础
linux·运维·docker
饮浊酒4 小时前
Linux操作系统 ------(3.文本编译器Vim)
linux·vim
lihuhelihu5 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
矛取矛求5 小时前
Linux系统性能调优技巧
linux
山东布谷科技官方5 小时前
布谷直播源码部署服务器关于数据库配置的详细说明
运维·服务器·数据库·直播系统源码·直播源码·直播系统搭建·直播软件开发
One_Blanks5 小时前
渗透测试-Linux基础(1)
linux·运维·安全