zoukankan      html  css  js  c++  java
  • 邮箱发送SMARTFORMS 转 PDF附件

    事务代码smartforms创建一个表单ZTEST001

    将表单转换成PDF并添加到邮件的附件中发送给用户

    "打印参数
    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'
      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'
      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'
        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.
  • 相关阅读:
    揭开Socket编程的面纱(留着自己慢慢看)
    XML 新手入门基础知识
    RocketMQ集群平滑下线或重启某个节点
    RocketMQ borker配置文件
    ES:在线迁移集群索引,数据不丢失
    SQL命令汇总
    Redis过期key淘汰策略
    中间件服务器内核参数优化
    在线做RAID命令
    CPU网卡亲和绑定
  • 原文地址:https://www.cnblogs.com/BinGeneral/p/12987323.html
Copyright © 2011-2022 走看看