SAMRTFORMS 转换PDF 发送邮件

news2025/2/2 22:32:09

最终成果:

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

*& 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.coloradmin.cn/o/1555141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

建立一个简单的网页音乐盒模型效果#css#h5

“音乐盒”可以看做一个大盒子&#xff0c;用<div>标签进行定义。大盒子的上面为文本内容&#xff0c;可以在<div>标签中嵌套<h2>和<p>标签来实现&#xff1b;大盒子下面为图像&#xff0c;通过在<div>标签中嵌套<img/>标签来实现。 样式…

基于SDXL——ComfyUI下使用Layerdiffusion一键生成透明底图像

ComfyUI下使用Layerdiffusion一键生成透明底图像 一. 安装workspace工作流插件二. 安装、部署、运行Layerdiffusion1. 下载和安装layerdiffusion节点2. 下载LayerDiffusion 处理模型3. 导入工作流4. 开始运行LayerDiffusion4.1 直接生成透明底图像4.2 生成背景&生成前景4.3…

Ubuntu上安装Python3.11-源码编译

1、下载依赖 sudo apt install -y wget build-essential libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev 2、上传文件 &#xff0c;解压并进入 tar -xf Python-3.11.0.tar.xz 3、编译 cd Pyt…

WordPress分页函数function

1、可以通过下面的代码在编辑器上添加一个分页符按钮。 2、将下面的代码添加到当前主题functions.php即可。 3、代码如下&#xff1a; function mce_page_break($mce_buttons) { $pos array_search(wp_more, $mce_buttons, true); if ($pos ! false) { $buttons …

【C语言】结构体详解 (二) 内存函数、结构体传参

目录 1、 结构体的内存对齐 1.1、对齐规则 1.2、练习1、练习2&#xff08;演示对齐规则1、2、3、4&#xff09; 2、为什么存在内存对齐 2.1、平台原因&#xff08;移植原因&#xff09; 2.2、性能原因 2.3、那么如何即满足对齐&#xff0c;又要节省空间呢&#xff1f; …

PTA L2-038 病毒溯源

病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株&#xff0c;而这些变异的病毒又可能被诱发突变产生第二代变异&#xff0c;如此继续不断变化。 现给定一些病毒之间的变异关系&#xff0c;要求你找出其中最长的一条变异链。 在此假设给出的变异都是由突变引起的&a…

PS从入门到精通视频各类教程整理全集,包含素材、作业等复发(2)

PS从入门到精通视频各类教程整理全集&#xff0c;包含素材、作业等 最新PS以及插件合集&#xff0c;可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制&#xff0c;今天先分享到这里&#xff0c;后续持续更新 初级教程素材 等文件 https://www.alipan.com/s/fC…

AI计算平台设计方案:901-基于3U VPX的图像数据AI计算平台

一、产品概述 设备基于3U VPX的导冷结构&#xff0c;集成FPGA接口预处理卡&#xff0c;GPU板卡、飞腾ARM处理卡&#xff0c;实现光纤、差分电口或者Camera link的图像接入&#xff0c;FPGA信号预处理&#xff0c;GPU AI计算&#xff0c;飞腾ARM的采集管理存储。 二、系统…

Flutter 使用 AndroidStudio 给(Android 安卓)进行签名方法

一、使用 AndroidStudio 创建签名 使用 AndroidStudio 打开 Flutter项目中的 android 文件夹首次打开 AndroidStudio 会加载一会。菜单栏 &#xff1a; Build -> Generate Signed Bundle APK... 选中 APK -> Next点击Create new....下面按照需求填写即可- 文件夹选择 项…

openPLC_Editor C语言编程 在mp157 arm板上调用io等使用记录

1.编程界面比较简单&#xff0c;具备PLC开发编程的四种编程方式。梯形图语言LD &#xff0c;指令表语言IL&#xff0c;结构化文本语言ST&#xff0c;功能模块图语言FBD。 2.官方使用手册。学习资料实在是太少&#xff0c;目前都是自己比较费劲的研究。 3.2 Creating Your First…

vmWare虚拟机下载安装详细教程,手把手一步一步教学

一.下载 先去官网下载vm 官网地址:https://www.vmware.com/ 官网下载速度太慢了 国内应用商店或者别的下载地址:vmware下载_vmware下载免费中文版客户端[虚拟机]-下载之家 然后再去下载一个镜像 地址是:Index of /centos/7/isos/x86_64/ 我个人下载的是这个 ,看各位的需求…

Reasoning on Graphs: Faithful and Interpretable Large Language Model Reasonin

摘要 大型语言模型(llm)在复杂任务中表现出令人印象深刻的推理能力。然而&#xff0c;他们在推理过程中缺乏最新的知识和经验幻觉&#xff0c;这可能导致不正确的推理过程&#xff0c;降低他们的表现和可信度。知识图谱(Knowledge graphs, KGs)以结构化的形式捕获了大量的事实…

linux centos7.9 weblogic14c java1.8.401 安装部署流程

一、获取安装包&#xff1a; Java1.8.401&#xff1a;Java Downloads | Oracle weblogic 14c&#xff1a;https://download.oracle.com/otn/nt/middleware/14c/14110/fmw_14.1.1.0.0_wls_lite_Disk1_1of1.zip 选generic版本 二、将安装包传到Linux服务器上 方法不限&#xf…

Antd Vue3 使用 Anchor 锚点组件记录

项目场景 客户要求做一个表单页面&#xff0c;表单数据分为三步&#xff0c;每一步骤是一个单独的 Vue 组件&#xff0c;表单上方需要使用锚点组件实现锚点定位到每一步的功能。 代码总览 <template><div class"guided-form-content-wrapper"><!-- …

阿里云实时计算Flink的产品化思考与实践【下】

摘要&#xff1a;本文整理自阿里云高级产品专家黄鹏程和阿里云技术专家陈婧敏在 FFA 2023 平台建设专场中的分享。内容主要为以下五部分&#xff1a; 阿里云实时计算 Flink 产品化思考 产品化实践 SQL 产品化思考及实践 展望 接上篇&#xff1a;阿里云实时计算Flink的产品…

主流好用的 Markdown 编辑器介绍

在当今程序员的日常工作中&#xff0c;Markdown 已经成为了一种常用的文本标记语言&#xff0c;它简洁、易读、易写&#xff0c;被广泛应用于写作、文档编写、博客撰写等场景。为了更高效地编辑和管理 Markdown 格式的文档&#xff0c;选择一款功能强大、易用的 Markdown 编辑器…

Flask Python:请求上下文和应用上下文

请求上下文和应用上下文详解 一、背景二、什么是上下文2.1、请求上下文2.2、应用上下文2.3、两种上下文的底层逻辑 三、写在最后 一、背景 在如何实现异步发送邮件的时候&#xff0c;遇到过这样一个报错 RuntimeError: Working outside of request context.This typically me…

FreeRtos作业1

1.总结keil5下载代码和编译代码需要注意的事项 代码写完之后的操作流程 2.总结STM32Cubemx的使用方法和需要注意的事项 选择芯片型号 生成代码 3.总结STM32Cubemx配置GPIO的方法 4、使用定时器2让黄灯闪烁 /* USER CODE END Header */ /* Includes --------------------------…

爬虫逆向实战(38)-某空气质量平台(反调试,AES,DES,MD5)

一、数据接口分析 主页地址&#xff1a;某空气质量平台 1、抓包 (1) 反调试 该网站对鼠标右击以及F12进行了监听并拦截 虽然该网站无法打开Chrome控制台&#xff0c;导致我们无法抓包&#xff0c;但是道高一尺魔高一丈。既然我们无法在打开该网站的时候打开Chrome控制台&…

蓝队面经(一)

蓝队面经(一) 文章目录 蓝队面经(一)入侵排查思路windows入侵排查思路Linux入侵排查思路 Linux 如何查看登录日志Windows 和 Linux 的日志文件放在哪里&#xff1f;WindowsLinux Linux 常用排查命令有哪些&#xff1f;Linux 的 Selinux 是什么&#xff1f;如何设置 Selinux&…