【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.mzph.cn/pingmian/11734.shtml

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

相关文章

Milvus入门初探

引言 Milvus 是一款开源的向量数据库&#xff0c;专为处理向量搜索任务而设计。它支持多种类型的向量&#xff0c;如浮点向量、二进制向量等&#xff0c;并且可以处理大规模的向量数据。Milvus 在 AI 应用中非常流行&#xff0c;尤其是在需要执行相似性搜索或最近邻搜索的场景…

【超详细】跑通YOLOv8之深度学习环境配置3-YOLOv8安装

环境配置3下载安装内容如下&#xff1a; 1、配置清华等镜像源 2、创建环境 3、下载安装Pytorch 4、下载安装YOLOv8运行环境 版本&#xff1a;Python3.8&#xff08;要求>3.8&#xff09;&#xff0c;torch1.12.0cu113&#xff08;要求>1.8&#xff09; 1、配置清华等镜…

算法-卡尔曼滤波之为什么要使用卡尔曼滤波器

假设使用雷达来预测飞行器的位置&#xff1b; 预先的假设条件条件: 1.激光雷达的激光束每5s发射一次&#xff1b; 2.通过接受的激光束&#xff0c;雷达估计目标当前时刻的位置和速度&#xff1b; 3.同时雷达要预测下一时刻的位置和速度 根据速度&#xff0c;加速度和位移的…

ESP32重要库示例详解(三):按键之avdweb_Switch库

在Arduino开发中&#xff0c;我们经常需要处理按钮和开关的输入。avdweb_Switch库就是为了简化这一任务&#xff0c;提供了一个优雅且高效的事件处理方式。本文将通过一个实际示例&#xff0c;介绍该库的主要特性和用法。 导入库 在Arduino IDE导入avdweb_Switch库的步骤如下…

Python---NumPy万字总结【此篇文章内容难度较大,线性代数模块】(3)

NumPy的应用&#xff08;3&#xff09; 向量 向量&#xff08;vector&#xff09;也叫矢量&#xff0c;是一个同时具有大小和方向&#xff0c;且满足平行四边形法则的几何对象。与向量相对的概念叫标量或数量&#xff0c;标量只有大小&#xff0c;绝大多数情况下没有方向。我们…

家居分类的添加、修改、逻辑删除和批量删除

文章目录 1.逻辑删除家居分类1.将之前的docker数据库换成云数据库2.树形控件增加添加和删除按钮1.找到控件2.粘贴四个属性到<el-tree 属性>3.粘贴两个span到<el-tree>标签里4.代码5.效果6.方法区新增两个方法处理添加和删除分类7.输出查看一下信息8.要求节点等级小…

李开复引领的零一万物开源了Yi-1.5模型,推出了6B、9B、34B三个不同规模的版本

零一万物&#xff0c;由李开复博士引领的AI 2.0公司&#xff0c;近期开源了其备受瞩目的Yi-1.5模型&#xff0c;这一举措再次彰显了公司在人工智能领域的创新实力与开放精神。Yi-1.5模型作为零一万物的重要技术成果&#xff0c;不仅代表了公司在大模型技术研发上的新高度&#…

冥想的时候怎么专注自己

冥想的时候怎么专注自己&#xff1f;我国传统的打坐养生功法&#xff0c;实际最早可追溯到五千年前的黄帝时代。   每天投资两个半小时的打坐&#xff0c;有上千年之久的功效。因为当你们打坐进入永恒时&#xff0c;时间停止了。这不只是两个半小时&#xff0c;而是百千万亿年…

为什么3d重制变换模型会变形?---模大狮模型网

3D建模和渲染过程中&#xff0c;设计师经常会遇到一个让人头疼的问题&#xff0c;那就是模型在进行重制变换后出现的意外变形。这种变形不仅影响了模型的外观和质量&#xff0c;也给设计工作带来了额外的麻烦。本文将深入探讨3D模型进行重制变换后出现变形的原因&#xff0c;帮…

回炉重造java----JVM

为什么要使用JVM ①一次编写&#xff0c;到处运行&#xff0c;jvm屏蔽字节码与底层的操作差异 ②自动内存管理&#xff0c;垃圾回收功能 ③数组下边越界检查 ④多态 JDK&#xff0c;JRE&#xff0c;JVM的关系 JVM组成部分 JVM的内存结构 《一》程序计数器(PC Register) 作用…

傻瓜化备份/恢复K8S集群Etcd数据

前言&#xff1a; 备份重要数据&#xff0c;简化重复操作&#xff0c;让一指禅、点点点也能完成运维任务。 脚本呈现界面如下&#xff1a; 1、查看Etcd版本 rootmaster:~# cat /etc/kubernetes/manifests/etcd.yaml | grep image: | awk {print $2} registry.aliyuncs.com/goo…

SpringCloud------Eureka,Ribbon,Nacos

认识微服务 微服务技术栈 微服务概念 微服务结构 微服务技术对比 企业需求 SpringCloud 认识Springcloud 服务拆分及远程调用 每个服务只能查询自己数据库中的表&#xff0c;导致其他服务如果想使用别人的表数据&#xff0c;这就需要进行远程调用&#xff0c;这里使用RestTem…

杨校老师项目之基于51单片机的汽车智能照明系统【嵌入式】

获取全套资料&#xff1a; 有偿获取&#xff1a;mryang511688 技术&#xff1a;C语言、单片机等 摘要&#xff1a; 科技的发展&#xff0c;人们对汽车的安全性也提出了更高要求。照明系统作为汽车组成部分之一&#xff0c;承担着重要职能&#xff0c;传统汽车智能照明系统已无法…

【云计算小知识】云管理的作用是什么?

云计算已经成为推动企业数字化转型&#xff0c;提升运营效率的重要力量。而在这个过程中&#xff0c;云管理作为确保云计算环境稳定、高效运行的关键环节&#xff0c;其作用愈发凸显。今天我们小编就给大家详细介绍一下云管理的作用是什么&#xff1f; 云管理的作用是什么&…

小程序的小组件

进度的组件 文字换行过滤 以及 排序 简单易懂 只为了记录工作 <template><div><ProgressBar :progress"progress" /><button click"increaseProgress">增加进度</button><view class"goods-name">12…

【408精华知识】提高外部排序速度的三种方式

文章目录 一、败者树二、置换-选择排序三、最佳归并树 一、败者树 还没写完… 二、置换-选择排序 三、最佳归并树 写在后面 这个专栏主要是我在学习408真题的过程中总结的一些笔记&#xff0c;因为我学的也很一般&#xff0c;如果有错误和不足之处&#xff0c;还望大家在评…

Wikimedia To Opensearch

概览 Wikimedia ⇒ Kafka ⇒ OpensearchJava Library&#xff1a;OKhttp3和OkHttp EventSource&#xff1b;生产者&#xff1a;Wikimedia&#xff1a;WikimediaChangeHandler和WikimediaChangeProducer&#xff1b;消费者&#xff1a;Opensearch&#xff1a;OpenSearchConsume…

AI智能体|我把Kimi接入了个人微信

大家好&#xff0c;我是无界生长。 最近加入AI学习交流群的小伙伴越来越多&#xff0c;我打算在微信群接入一个聊天机器人&#xff0c;让它协助管理微信群&#xff0c;同时也帮忙给群友解答一些问题。普通的群聊机器人肯定是不能满足需求的&#xff0c;得上AI大模型&#xff0c…

【JVM类加载机制】深度剖析JVM类加载机制

深度剖析JVM类加载机制 前言类加载运行全过程loadClass的类加载过程 类加载器和双亲委派机制类加载器的类型类加载器的初始化过程双亲委派机制为什么要设置双亲委派机制&#xff1f;全盘负责委托机制自定义类加载器实例打破双亲委派机制Tomcat打破双亲委派机制Tomcat自定义加载…

问题解决记录 | kettle中出现中文乱码

spoon.bat的启动文件中进行修改 if "%PENTAHO_DI_JAVA_OPTIONS%""" set PENTAHO_DI_JAVA_OPTIONS"-Xms1024m" "-Xmx2048m" "-Dfile.encodingUTF-8"