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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/498715.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】LeetCode 547. 省份数量(Java版 什么是并查集)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 一、题目描述 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间接相连。 省份 是一组直…

位操作符

简介&#xff1a; &&#xff0c;|,^,~都是常见的位操作符&#xff0c;操作对象是二进制数&#xff0c;运算时须将原码转换成补码&#xff08;符号位为0&#xff0c;即正数时&#xff0c;补码与原码一致&#xff0c;不需要再转换&#xff09;&#xff0c;位数不一致时&#…

ros2相关代码记录

1.ros2概述 ROS2&#xff08;Robot Operating System 2&#xff09;是一个用于机器人应用程序的开源软件框架。它是ROS&#xff08;Robot Operating System&#xff09;的下一代版本&#xff0c;旨在改进和扩展原始ROS的特性&#xff0c;以适应更广泛的机器人应用场景和需求。…

HarmonyOS入门--配置环境 + IDE汉化

文章目录 下载安装DevEco Studio配置环境先认识DevEco Studio界面工程目录工程级目录模块级目录 app.json5module.json5main_pages.json通知栏预览区 运行模拟器IED汉化 下载安装DevEco Studio 去官网下载DevEco Studio完了安装 配置环境 打开已安装的DevEco Studio快捷方式…

【机器学习】数据探索(Data Exploration)---数据质量和数据特征分析

一、引言 在机器学习项目中&#xff0c;数据探索是至关重要的一步。它不仅是模型构建的基础&#xff0c;还是确保模型性能稳定、预测准确的关键。数据探索的过程中&#xff0c;数据质量和数据特征分析占据了核心地位。数据质量直接关系到模型能否从数据中提取有效信息&#xff…

Day24:私信列表、私信详情、发送私信

测试用户&#xff1a;用户名aaa 密码aaa 查询当前用户的会话列表&#xff1b;每个会话只显示一条最新的私信&#xff1b;支持分页显示。 首先看下表结构&#xff1a; conversation_id: 用from_id和to_id拼接&#xff0c;小的放前面去&#xff08;因为两个人的对话应该在一个会…

Linux:详解TCP报头类型

文章目录 温习序号的意义序号和确认序号报文的类型 TCP报头类型详解ACK: 确认号是否有效SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段FIN: 通知对方, 本端要关闭了PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带RST标识的称…

【学习】软件企业何时会选择第三方软件测试机构

近年来&#xff0c;随着软件行业的迅猛发展&#xff0c;软件企业对软件测试的需求也越来越大。为了保证软件的质量和稳定性&#xff0c;许多企业选择寻找第三方软件测试机构来进行软件测试。第三方软件测试机构是独立于软开发企业的专业机构&#xff0c;主要从事软件测试和质量…

【SpringBoot从入门到精通】02_SpringBoot快速上手

二、SpringBoot快速上手 环境准备&#xff1a; Java8及以上 Maven3.5 https://docs.spring.io/spring-boot/docs/2.7.14/reference/html/getting-started.html#getting-started SpringBoot 2.x 最新版 开发工具&#xff1a; IDEA 2022 2.1 开发第一个SpringBoot应用程序 …

什么是土壤墒情检测站?它在农业生产中有什么作用?

土壤墒情检测站是一种专门用于监测土壤水分状况和土壤水力性质的设备。它由多个传感器和数据采集单元组成&#xff0c;能够实时监测土壤中的水分含量、土壤温度等参数&#xff0c;并收集和记录相关的数据&#xff0c;提供土壤墒情&#xff08;即土壤水分状态&#xff09;的详细…

|行业洞察·趋势报告|《2024旅游度假市场简析报告-17页》

报告的主要内容解读&#xff1a; 居民收入提高推动旅游业发展&#xff1a;报告指出&#xff0c;随着人均GDP的提升&#xff0c;居民的消费能力增强&#xff0c;旅游需求从传统的观光游向休闲、度假游转变&#xff0c;国内人均旅游消费持续增加。 政府政策促进旅游市场复苏&…

代码随想录——移除元素(Leetcode27)

题目链接 暴力&#xff1a;&#xff08;没有改变元素相对位置&#xff09; class Solution {public int removeElement(int[] nums, int val) {int len nums.length;for(int i 0; i < len; i){if(nums[i] val){for(int j i 1; j < len; j){nums[j-1] nums[j];}i…

C#自定义最大化、最小化和关闭按钮

目录 1.资源文件 2.读取资源文件中的图片 3.WindowState属性 4. 示例 用户在制作应用程序时&#xff0c;为了使用户界面更加美观&#xff0c;一般都自己设计窗体的外观&#xff0c;以及窗体的最大化、最小化和关闭按钮。本例通过资源文件来存储窗体的外观&#xff0c;以及最…

【设计模式】中介者模式的应用

文章目录 1.概述2.中介者模式的适用场景2.1.用户界面事件2.2.分布式架构多模块通信 3.总结 1.概述 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为型设计模式&#xff0c;它用于解决对象间复杂、过度耦合的问题。当多个对象&#xff08;一般是两个以上的对象&…

腾讯云邮件推送功能有哪些?如何有效使用?

腾讯云邮件推送如何设置&#xff1f;怎么用邮件推送做高效营销&#xff1f; 腾讯云作为业界领先的云服务提供商&#xff0c;其邮件推送功能在便捷性、稳定性和安全性上都有着出色的表现。那么&#xff0c;腾讯云邮件推送功能究竟有哪些呢&#xff1f;让AokSend来探个究竟。 腾…

map与set容器常见操作详解(含示例代码及注意事项)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

类与对象中C++

加油&#xff01;&#xff01;&#xff01; 文章目录 前言 一、类的6个默认成员函数 ​编辑 二、构造函数 1.概念 三、析构函数 1.概念 2.特性 四、拷贝构造函数 1.概念 2.特征 拷贝构造函数典型调用场景 五、赋值运算符重载 1.运算符重载 2.赋值运算符重载 赋值运算符重载格式…

【Qt】:坐标

坐标 一.常用快捷键二.使用帮助文档三.Qt坐标体系1.理论2.代码 一.常用快捷键 注释&#xff1a;ctrl / • 运⾏&#xff1a;ctrl R • 编译&#xff1a;ctrl B • 字体缩放&#xff1a;ctrl ⿏标滑轮 • 查找&#xff1a;ctrl F 比特就业课 • 整⾏移动&#xff1a;ctrl …

【Linux】体验一款开源的Linux服务器运维管理工具

今天为大家介绍一款开源的 Linux 服务器运维管理工具 - 1panel。 一、安装 根据官方那个提供的在线文档&#xff0c;这款工具的安装需要执行在线安装&#xff0c; # Redhat / CentOScurl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start…

.NET CORE使用Redis分布式锁续命(续期)问题

结合上一期 .NET CORE 分布式事务(三) DTM实现Saga及高并发下的解决方案(.NET CORE 分布式事务(三) DTM实现Saga及高并发下的解决方案-CSDN博客)。有的小伙伴私信说如果锁内锁定的程序或者资源未在上锁时间内执行完&#xff0c;造成的使用资源冲突&#xff0c;需要如何解决。本…