【SAP ABAP学习资料】通过RFC接口上传图片至SAP 图片格式转换 图片大小调整

SAP图片相关:
链接: 【SAP ABAP学习资料】图片上传SAP
链接: 【SAP ABAP学习资料】屏幕图片预览
链接: 【SAP ABAP学习资料】smartforms打印图片,动态打印图片

需求:

SAP上传图片只能本地电脑选择图片通过SE78或PERFORM IMPORT_BITMAP_BDS上传,现产品有专门的产品库系统管理,产品信息全部在产品库维护,要求用户上传在产品库的图片能同步至SAP,SAP打印合同能带出来图片信息。

解决方案

研究SAP图片上传发现,SAP系统图片保存数据为16进制数据,IMPORT_BITMAP_BDS方法先将本地链接地址的图片信息转成16进制数据,再保存到SAP数据表。
我们可以跳过转换步骤,直接上传16进制数据保存至SAP数据库,这样产品库图片可以直接调用RFC接口上传图片
在这里插入图片描述

功能实现

1.重写import_bitmap_bds方法
(包含文件LSTXBITMAPSF05)
可以将import_bitmap_bds复制出来重写,我这里是直接在包含文件下创建了隐式增强

form import_bitmap_bds_16using    p_filename       type rlgrap-filenamep_name           type stxbitmaps-tdnamep_object         type stxbitmaps-tdobjectp_id             type stxbitmaps-tdidp_btype          type stxbitmaps-tdbtypep_format         type cp_title          like bds_descriptionp_resident       type stxbitmaps-residentp_autoheight     type stxbitmaps-autoheightp_bmcomp         type stxbitmaps-bmcompp_bytecount      type ip_bitmap      "图片的16进制数据changing p_docid          type stxbitmaps-docidp_resolution     type stxbitmaps-resolutionp_type           type sy-msgty.data: l_object_key type sbdst_object_key.
data: l_tab        type ddobjname.
data: begin of l_bitmap occurs 0,l(64) type x,end of l_bitmap.
data: l_filename        type string,l_bytecount       type i,l_bds_bytecount   type i.
data: l_color(1)        type c,l_width_tw        type stxbitmaps-widthtw,l_height_tw       type stxbitmaps-heighttw,l_width_pix       type stxbitmaps-widthpix,l_height_pix      type stxbitmaps-heightpix.
data: l_bds_object      type ref to cl_bds_document_set,l_bds_content     type sbdst_content,l_bds_components  type sbdst_components,wa_bds_components type line of sbdst_components,l_bds_signature   type sbdst_signature,wa_bds_signature  type line of sbdst_signature,l_bds_properties  type sbdst_properties,wa_bds_properties type line of sbdst_properties.
data  wa_stxbitmaps type stxbitmaps.MOVE-CORRESPONDING p_bitmap to l_bitmap[].l_bytecount = p_bytecount.if p_btype = c_bmon.l_color = c_false.else.l_color = c_true.endif.* Bitmap conversioncall function 'SAPSCRIPT_CONVERT_BITMAP_BDS'exportingcolor                    = l_colorformat                   = p_formatresident                 = p_residentbitmap_bytecount         = l_bytecountcompress_bitmap          = p_bmcompimportingwidth_tw                 = l_width_twheight_tw                = l_height_twwidth_pix                = l_width_pixheight_pix               = l_height_pixdpi                      = p_resolutionbds_bytecount            = l_bds_bytecounttablesbitmap_file              = l_bitmapbitmap_file_bds          = l_bds_contentexceptionsformat_not_supported     = 1no_bmp_file              = 2bmperr_invalid_format    = 3bmperr_no_colortable     = 4bmperr_unsup_compression = 5bmperr_corrupt_rle_data  = 6others                   = 7.if sy-subrc <> 0.perform dequeue_graphic using p_objectp_namep_idp_btype.
*    message id sy-msgid type sy-msgty number sy-msgno
*            with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
*    raising conversion_failed.p_type = 'E'.endif.* Save bitmap in BDScreate object l_bds_object.wa_bds_components-doc_count  = '1'.wa_bds_components-comp_count = '1'.wa_bds_components-mimetype   = c_bds_mimetype.wa_bds_components-comp_size  = l_bds_bytecount.append wa_bds_components to l_bds_components.if p_docid is initial.          " graphic is newwa_bds_signature-doc_count = '1'.append wa_bds_signature to l_bds_signature.call method l_bds_object->create_with_tableexportingclassname  = c_bds_classnameclasstype  = c_bds_classtypecomponents = l_bds_componentscontent    = l_bds_contentchangingsignature  = l_bds_signatureobject_key = l_object_keyexceptionsothers     = 1.if sy-subrc <> 0.perform dequeue_graphic using p_objectp_namep_idp_btype.
*      message e285 with p_name  'BDS'.p_type = 'E'.endif.read table l_bds_signature index 1 into wa_bds_signaturetransporting doc_id.if sy-subrc = 0.p_docid = wa_bds_signature-doc_id.else.perform dequeue_graphic using p_objectp_namep_idp_btype.
*      message e285 with p_name 'BDS'.p_type = 'E'.endif.else.                " graphic already exists
********* read object_key for faster access *****clear l_object_key.select single * from stxbitmaps into wa_stxbitmapswhere tdobject = p_objectand tdid     = p_idand tdname   = p_nameand tdbtype  = p_btype.select single tabname from bds_locl into l_tabwhere classname = c_bds_classnameand classtype = c_bds_classtype.if sy-subrc = 0.select single object_key from (l_tab) into l_object_keywhere loio_id = wa_stxbitmaps-docid+10(32)and classname = c_bds_classnameand classtype = c_bds_classtype.endif.
******** read object_key end ********************call method l_bds_object->update_with_tableexportingclassname  = c_bds_classnameclasstype  = c_bds_classtypeobject_key = l_object_keydoc_id     = p_dociddoc_ver_no = '1'doc_var_id = '1'changingcomponents = l_bds_componentscontent    = l_bds_contentexceptionsnothing_found = 1others        = 2.if sy-subrc = 1.   " inconsistency STXBITMAPS - BDS; repeat check inwa_bds_signature-doc_count = '1'.append wa_bds_signature to l_bds_signature.call method l_bds_object->create_with_tableexportingclassname  = c_bds_classnameclasstype  = c_bds_classtypecomponents = l_bds_componentscontent    = l_bds_contentchangingsignature  = l_bds_signatureobject_key = l_object_keyexceptionsothers     = 1.if sy-subrc <> 0.perform dequeue_graphic using p_objectp_namep_idp_btype.
*        message e285 with p_name 'BDS'.p_type = 'E'.endif.read table l_bds_signature index 1 into wa_bds_signaturetransporting doc_id.if sy-subrc = 0.p_docid = wa_bds_signature-doc_id.else.perform dequeue_graphic using p_objectp_namep_idp_btype.
*        message e285 with p_name 'BDS'.p_type = 'E'.endif.elseif sy-subrc = 2.perform dequeue_graphic using p_objectp_namep_idp_btype.
*      message e285 with p_name 'BDS'.p_type = 'E'.endif.endif.* Save bitmap header in STXBITPMAPSwa_stxbitmaps-tdname     = p_name.wa_stxbitmaps-tdobject   = p_object.wa_stxbitmaps-tdid       = p_id.wa_stxbitmaps-tdbtype    = p_btype.wa_stxbitmaps-docid      = p_docid.wa_stxbitmaps-widthpix   = l_width_pix.wa_stxbitmaps-heightpix  = l_height_pix.wa_stxbitmaps-widthtw    = l_width_tw.wa_stxbitmaps-heighttw   = l_height_tw.wa_stxbitmaps-resolution = p_resolution.wa_stxbitmaps-resident   = p_resident.wa_stxbitmaps-autoheight = p_autoheight.wa_stxbitmaps-bmcomp     = p_bmcomp.insert into stxbitmaps values wa_stxbitmaps.if sy-subrc <> 0.update stxbitmaps from wa_stxbitmaps.if sy-subrc <> 0.
*       message e285 with p_name 'STXBITMAPS'.p_type = 'E'.endif.endif.* Set description in BDS attributeswa_bds_properties-prop_name  = 'DESCRIPTION'.wa_bds_properties-prop_value = p_title.append wa_bds_properties to l_bds_properties.call method l_bds_object->change_propertiesexportingclassname  = c_bds_classnameclasstype  = c_bds_classtypeobject_key = l_object_keydoc_id     = p_dociddoc_ver_no = '1'doc_var_id = '1'changingproperties = l_bds_propertiesexceptionsothers         = 1.perform dequeue_graphic using p_objectp_namep_idp_btype.endform.

2.创建RFC函数
SAP只支持BMP格式图片上传,而且smartforms图片打印不支持自适应大小,所以需要在接口里面转换上传的图片格式,裁剪图片大小后再上传至SAP

*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IN_MATNR) TYPE  MATNR OPTIONAL
*"     VALUE(IN_PICTURE) TYPE  STRING OPTIONAL
*"  EXPORTING
*"     VALUE(E_TYPE) TYPE  SY-MSGTY
*"     VALUE(E_MESSAGE) TYPE  STRING
*"----------------------------------------------------------------------IF IN_MATNR IS INITIAL OR IN_PICTURE IS INITIAL.E_TYPE = 'E'.E_MESSAGE = '参数不完整,图片上传失败!'.RETURN.ENDIF.IN_PICTURE = TO_UPPER( IN_PICTURE ).CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'EXPORTINGINPUT  = IN_MATNRIMPORTINGOUTPUT = IN_MATNR.DATA: GO_IMAGE_PROCESSOR TYPE REF TO CL_FXS_IMAGE_PROCESSOR,G_HANDLE           TYPE I.DATA:G_BUFFER_OLD TYPE XSTRING,G_BUFFER_NEW TYPE XSTRING.DATA: L_TYPE     TYPE STRING,L_XRES     TYPE I,L_YRES     TYPE I,L_XDPI     TYPE I,L_YDPI     TYPE I,L_BITDEPTH TYPE I.G_BUFFER_OLD = IN_PICTURE.CREATE OBJECT GO_IMAGE_PROCESSOR."添加到IMAGE_PROCESSOR中G_HANDLE = GO_IMAGE_PROCESSOR->ADD_IMAGE( IV_DATA = G_BUFFER_OLD  IV_IMAGE_NAME = '456' )."尺寸缩小至100*100CALL METHOD GO_IMAGE_PROCESSOR->GET_INFOEXPORTINGIV_HANDLE   = G_HANDLEIMPORTINGEV_MIMETYPE = L_TYPEEV_XRES     = L_XRESEV_YRES     = L_YRESEV_XDPI     = L_XDPIEV_YDPI     = L_YDPIEV_BITDEPTH = L_BITDEPTH.IF L_XRES > L_YRES.L_YRES = L_YRES /  L_XRES / 100.L_XRES = 100.ELSE.L_XRES = L_XRES /  L_YRES / 100.L_YRES = 100.ENDIF."压缩图片CALL METHOD GO_IMAGE_PROCESSOR->RESIZEEXPORTINGIV_HANDLE = G_HANDLEIV_XRES   = L_YRESIV_YRES   = L_YRES."转为BMP格式CALL METHOD GO_IMAGE_PROCESSOR->CONVERTEXPORTINGIV_HANDLE = G_HANDLEIV_FORMAT = 'image/x-ms-bmp'."取压缩后的图片CALL METHOD GO_IMAGE_PROCESSOR->GET_IMAGEEXPORTINGIV_HANDLE  = G_HANDLERECEIVINGRV_XSTRING = G_BUFFER_NEW.DATA: BEGIN OF P_BITMAP OCCURS 0,l(64) TYPE X,END OF P_BITMAP.DATA: P_FILENAME   TYPE RLGRAP-FILENAME,P_NAME       TYPE STXBITMAPS-TDNAME,P_TITLE      LIKE BAPISIGNAT-PROP_VALUE,P_DOCID      TYPE STXBITMAPS-DOCID,P_RESOLUTION TYPE STXBITMAPS-RESOLUTION,P_BYTECOUNT  TYPE I."上传bmp图片CLEAR:P_FILENAME,P_NAME,P_DOCID,P_RESOLUTION.P_FILENAME = ''.P_NAME = IN_MATNR.P_TITLE = IN_MATNR.P_BYTECOUNT = XSTRLEN( G_BUFFER_NEW ).CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'EXPORTINGBUFFER     = G_BUFFER_NEW
*     APPEND_TO_TABLE       = ' '
*   IMPORTING
*     OUTPUT_LENGTH         =TABLESBINARY_TAB = P_BITMAP.PERFORM IMPORT_BITMAP_BDS_16 IN PROGRAM SAPLSTXBITMAPSUSING P_FILENAME                   "文件路径P_NAME "p_name            "名字'GRAPHICS'"p_object          "对象 固定为 GRAPHIC'BMAP'"p_id                  "ID 固定为 BMAP'BCOL'"'BMON'"p_btype        "颜色模式 BMON黑白  BCOL彩色'BMP'"p_format               "BMP 格式P_TITLE"description    "描述''"p_resident               "依照打印请求驻留在打印机内存中 X 驻留'X'"p_autoheight              "自动高度''"p_bmcomp                 "是否压缩P_BYTECOUNTP_BITMAP[]                   "图片16进制数据CHANGING  P_DOCID                      "文档IDP_RESOLUTIONE_TYPE.                "分辨率IF E_TYPE = 'E'.E_MESSAGE = '图片上传失败!'.ELSE.E_TYPE = 'S'.E_MESSAGE = '成功!'.ENDIF.

3.调用RFC接口,上传图片
完成上面两步后,产品库只需要将图片转成16进制,调用SAP 发布的RFC接口就可以将图片上传同步至SAP。
SAP samrtforms打印图片 可看文章开头链接地址

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络-网络层

网络层 网络层的主要任务是实现网络互连&#xff0c;进而实现数据包在各网络之间的传输。 需要解决以下主要问题&#xff1a; 网络层向运输层提供怎样的服务网络层寻址问题路由选择问题 两种服务 IPv4地址概述 IPv4地址就是给因特网上的每一台主机&#xff08;或路由器&…

Cocos 2048从创建到发布上线

一、制作2048小游戏过程 扫描体验2048小游戏 场景搭建&#xff0c;4X4棋盘和基础设置绘制背景板&#xff0c;包含预制体等信息考虑在棋盘中随机出现两个数字方块&#xff0c;数字为2&#xff0c;初始化操作滑动事件部分&#xff0c;让方块移动起来&#xff0c;每滑动一次就生成…

websevere服务器从零搭建到上线(二)|Linux上的五种IO模型

文章目录 阻塞 blocking非阻塞 non-blockingIO复用 IO multiplexing信号驱动 signal-driven异步 asynchronous拓展知识 看过上篇文章英国基本能理解本文五张图的内容websevere服务器从零搭建到上线&#xff08;一&#xff09;&#xff5c;阻塞、非阻塞、同步、异步 本文要能够在…

出差——蓝桥杯十三届2022国赛大学B组真题

问题分析 该题属于枚举类型&#xff0c;遍历所有情况选出符合条件的即可。因为只需要派两个人&#xff0c;因此采用两层循环遍历每一种情况。 AC_Code #include <bits/stdc.h> using namespace std; string str;//选择的两人 bool ok(){if(str.find("A")!-1…

java-Spring-Lombok-讲解-(一文一言)创伤是成熟的途径

高手都在孤独前进-致敬我们不悔的青春 我打算每篇文章下找一下文言警句-说不那天会用上&#x1f601;&#x1f601;&#x1f601;&#x1f601; 每篇一言 创伤是成熟的途径 希望经历过创伤的人,能更好享受当下, 爱自己胜过爱别人呀 目录 &#x1f3bb;Lombok简介 &#…

HTML5 Canvas发光Loading动画特效源码

源码介绍 之前我们分享过很多基于CSS3的Loading动画效果&#xff0c;相信大家都很喜欢。今天我们要来分享一款基于HTML5 Canvas的发光Loading加载动画特效。Loading旋转图标是在canvas画布上绘制的&#xff0c;整个loading动画是发光3D的视觉效果&#xff0c;HTML5非常强大。 …

【SpringBoot整合系列】SpringBoot整合RabbitMQ-消息过期(死信队列和延迟队列)

目录 业务场景传统轮询消息队列完整版 默认情况TTL&#xff08;消息的有效期&#xff09;TTL 的设置有两种不同的方式单条消息过期队列消息过期特殊情况 死信队列概述应用场景产生原因原理图死信交换机死信队列实现一下 延迟队列背景定时任务&#xff1f;延迟队列实现思路代码 …

ICode国际青少年编程竞赛- Python-2级训练场-识别循环规律2

ICode国际青少年编程竞赛- Python-2级训练场-识别循环规律2 1、 for i in range(3):Dev.step(3)Dev.turnRight()Dev.step(4)Dev.turnLeft()2、 for i in range(3):Spaceship.step(3)Spaceship.turnRight()Spaceship.step(1)3、 Dev.turnLeft() Dev.step(Dev.x - Item[1].…

STM32--4G DTU 及 阿里云

模块概述 ATK-IDM750C/IDM751C 是正点原子(ALIENTEK)团队开发的一款高性能 4G Cat1 DTU 产品&#xff0c; 支持移动 4G、联通 4G 和电信 4G 手机卡。它以高速率、低延迟和无线数传作为核心功能&#xff0c; 可快速解决应用场景下的无线数传方案。 它支持 TCP/UDP/HTTP/MQTT/DN…

生产制造行业推拉式生产的复合应用

一、案例分析&#xff08;汽配行业&#xff09; 重点&#xff1a; 1. MTO/MTS 与 PUSH/PULL 有关系但是不是充分关系 2. MTO/MTS 是公司经营策略&#xff0c;更多是对市场需求的经营策略&#xff0c;体现在生产时机上的不同&#xff0c;一个是等客户需求&#xff0c;一个是填…

Ansible-inventory和playbook

文章目录 一、inventory 主机清单1、列表表示2、inventory 中的变量3、变量3.1 主机变量3.2 组变量3.3 组嵌套 二、playbook剧本1、playbook的组成2、编写剧本2.1 剧本制作2.2 准备nginx.conf2.3 运行剧本2.4 查看webservers服务器2.5 补充参数 3、剧本定义、引用变量3.1 剧本制…

【Linux网络】HTTPS【上】{运营商劫持/加密方式/数据摘要/https的诞生}

文章目录 1.引入1.1http与https1.2SSL/TLS1.3VPN1.4认识1.5密码学1.6为什么要加密&#xff1f;运营商 1.7常见的加密方式对称加密非对称加密 2.加密与解密3.数据摘要 && 数据指纹MD5 数字 签名理解三者数据摘要&#xff08;Digital Digest&#xff09;&#xff1a;数字…

vivado 低级别 SVF JTAG 命令

低级别 SVF JTAG 命令 注释 &#xff1a; 在 Versal ™ 器件上不支持 SVF 。 低级别 JTAG 命令允许您扫描多个 FPGA JTAG 链。针对链操作所生成的 SVF 命令使用这些低级别命令来访问链中的 FPGA 。 报头数据寄存器 (HDR) 和报头指令寄存器 (HIR) 语法 HDR length […

【数据结构课程学习】:队列学习

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;数据结构课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f697; 1.队列的基本概念&#xff1a…

[muduo网络库]——muduo库的Reactor模型(剖析muduo网络库核心部分、设计思想)

一、前言 在学习 C 服务端的过程中&#xff0c;必不可少的一项就是熟悉一个网络库&#xff0c;包括网络库的应用和其底层实现。我们熟知的网络库有 libevent、libev、muduo、Netty 等&#xff0c;其中 muduo 是由陈硕大佬个人开发的 TCP 网络库&#xff0c;最近跟着课程正在深…

分布式与一致性协议之ZAB协议(四)

ZAB协议 ZooKeeper是如何选举领导者的。 首先我们来看看ZooKeeper是如何实现成员身份的&#xff1f; 在ZooKeeper中&#xff0c;成员状态是在QuorumPeer.java中实现的&#xff0c;为枚举型变量 public enum ServerState { LOOKING, FOLLOWING, LEADING, OBSERVING }其实&…

代码生成工具1 ——项目简介和基础开发

1 项目简介 需要提前在数据库建好表&#xff0c;然后执行代码生成工具&#xff0c;会生成简单的Java文件&#xff0c;避免重复编写增删改查代码。类似的工具网上有很多&#xff0c;本人开发这个工具属于自娱自乐。这个专栏会记录开发的过程。 2 项目搭建 数据库使用MySQL &…

js图片回显的方法

直接上代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body>// HTML部分<input type"file" id"fileInput"><button onclick"show…

深度学习技术之加宽前馈全连接神经网络

深度学习技术 加宽前馈全连接神经网络1. Functional API 搭建神经网络模型1.1 利用Functional API编写宽深神经网络模型进行手写数字识别1.1.1 导入需要的库1.1.2 加载虹膜&#xff08;Iris&#xff09;数据集1.1.3 分割训练集和测试集1.1.4 定义模型输入层1.1.5 添加隐藏层1.1…

栈结构(详解)

1.栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&am…