【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_16
        using    p_filename       type rlgrap-filename
                 p_name           type stxbitmaps-tdname
                 p_object         type stxbitmaps-tdobject
                 p_id             type stxbitmaps-tdid
                 p_btype          type stxbitmaps-tdbtype
                 p_format         type c
                 p_title          like bds_description
                 p_resident       type stxbitmaps-resident
                 p_autoheight     type stxbitmaps-autoheight
                 p_bmcomp         type stxbitmaps-bmcomp
                 p_bytecount      type i
                 p_bitmap      "图片的16进制数据
        changing p_docid          type stxbitmaps-docid
                 p_resolution     type stxbitmaps-resolution
                 p_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 conversion
  call function 'SAPSCRIPT_CONVERT_BITMAP_BDS'
       exporting
            color                    = l_color
            format                   = p_format
            resident                 = p_resident
            bitmap_bytecount         = l_bytecount
            compress_bitmap          = p_bmcomp
       importing
            width_tw                 = l_width_tw
            height_tw                = l_height_tw
            width_pix                = l_width_pix
            height_pix               = l_height_pix
            dpi                      = p_resolution
            bds_bytecount            = l_bds_bytecount
       tables
            bitmap_file              = l_bitmap
            bitmap_file_bds          = l_bds_content
       exceptions
            format_not_supported     = 1
            no_bmp_file              = 2
            bmperr_invalid_format    = 3
            bmperr_no_colortable     = 4
            bmperr_unsup_compression = 5
            bmperr_corrupt_rle_data  = 6
            others                   = 7.
  if sy-subrc <> 0.
    perform dequeue_graphic using p_object
                                  p_name
                                  p_id
                                  p_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 BDS
  create 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 new

    wa_bds_signature-doc_count = '1'.
    append wa_bds_signature to l_bds_signature.

    call method l_bds_object->create_with_table
         exporting
              classname  = c_bds_classname
              classtype  = c_bds_classtype
              components = l_bds_components
              content    = l_bds_content
         changing
              signature  = l_bds_signature
              object_key = l_object_key
         exceptions
              others     = 1.
    if sy-subrc <> 0.
      perform dequeue_graphic using p_object
                                    p_name
                                    p_id
                                    p_btype.
*      message e285 with p_name  'BDS'.
      p_type = 'E'.
    endif.
    read table l_bds_signature index 1 into wa_bds_signature
    transporting doc_id.
    if sy-subrc = 0.
      p_docid = wa_bds_signature-doc_id.
    else.
      perform dequeue_graphic using p_object
                                    p_name
                                    p_id
                                    p_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_stxbitmaps
       where tdobject = p_object
         and tdid     = p_id
         and tdname   = p_name
         and tdbtype  = p_btype.
   select single tabname from bds_locl into l_tab
      where classname = c_bds_classname
         and classtype = c_bds_classtype.
   if sy-subrc = 0.
     select single object_key from (l_tab) into l_object_key
       where loio_id = wa_stxbitmaps-docid+10(32)
         and classname = c_bds_classname
           and classtype = c_bds_classtype.
   endif.
******** read object_key end ********************

    call method l_bds_object->update_with_table
         exporting
              classname  = c_bds_classname
              classtype  = c_bds_classtype
              object_key = l_object_key
              doc_id     = p_docid
              doc_ver_no = '1'
              doc_var_id = '1'
         changing
              components = l_bds_components
              content    = l_bds_content
         exceptions
              nothing_found = 1
              others        = 2.
    if sy-subrc = 1.   " inconsistency STXBITMAPS - BDS; repeat check in
      wa_bds_signature-doc_count = '1'.
      append wa_bds_signature to l_bds_signature.

      call method l_bds_object->create_with_table
           exporting
                classname  = c_bds_classname
                classtype  = c_bds_classtype
                components = l_bds_components
                content    = l_bds_content
           changing
                signature  = l_bds_signature
                object_key = l_object_key
           exceptions
                others     = 1.
      if sy-subrc <> 0.
        perform dequeue_graphic using p_object
                                      p_name
                                      p_id
                                      p_btype.
*        message e285 with p_name 'BDS'.
        p_type = 'E'.
      endif.
      read table l_bds_signature index 1 into wa_bds_signature
      transporting doc_id.
      if sy-subrc = 0.
        p_docid = wa_bds_signature-doc_id.
      else.
        perform dequeue_graphic using p_object
                                      p_name
                                      p_id
                                      p_btype.
*        message e285 with p_name 'BDS'.
        p_type = 'E'.
      endif.

    elseif sy-subrc = 2.
      perform dequeue_graphic using p_object
                                    p_name
                                    p_id
                                    p_btype.
*      message e285 with p_name 'BDS'.
      p_type = 'E'.
    endif.

  endif.

* Save bitmap header in STXBITPMAPS
  wa_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 attributes
  wa_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_properties
       exporting
            classname  = c_bds_classname
            classtype  = c_bds_classtype
            object_key = l_object_key
            doc_id     = p_docid
            doc_ver_no = '1'
            doc_var_id = '1'
       changing
            properties = l_bds_properties
       exceptions
            others         = 1.

  perform dequeue_graphic using p_object
                                p_name
                                p_id
                                p_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'
    EXPORTING
      INPUT  = IN_MATNR
    IMPORTING
      OUTPUT = 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*100
  CALL METHOD GO_IMAGE_PROCESSOR->GET_INFO
    EXPORTING
      IV_HANDLE   = G_HANDLE
    IMPORTING
      EV_MIMETYPE = L_TYPE
      EV_XRES     = L_XRES
      EV_YRES     = L_YRES
      EV_XDPI     = L_XDPI
      EV_YDPI     = L_YDPI
      EV_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->RESIZE
    EXPORTING
      IV_HANDLE = G_HANDLE
      IV_XRES   = L_YRES
      IV_YRES   = L_YRES.

  "转为BMP格式
  CALL METHOD GO_IMAGE_PROCESSOR->CONVERT
    EXPORTING
      IV_HANDLE = G_HANDLE
      IV_FORMAT = 'image/x-ms-bmp'.

  "取压缩后的图片
  CALL METHOD GO_IMAGE_PROCESSOR->GET_IMAGE
    EXPORTING
      IV_HANDLE  = G_HANDLE
    RECEIVING
      RV_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'
    EXPORTING
      BUFFER     = G_BUFFER_NEW
*     APPEND_TO_TABLE       = ' '
*   IMPORTING
*     OUTPUT_LENGTH         =
    TABLES
      BINARY_TAB = P_BITMAP.

  PERFORM IMPORT_BITMAP_BDS_16 IN PROGRAM SAPLSTXBITMAPS
  USING 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_BYTECOUNT
        P_BITMAP[]                   "图片16进制数据
  CHANGING  P_DOCID                      "文档ID
         P_RESOLUTION
         E_TYPE.                "分辨率

  IF E_TYPE = 'E'.
    E_MESSAGE = '图片上传失败!'.
  ELSE.
    E_TYPE = 'S'.
    E_MESSAGE = '成功!'.
  ENDIF.

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

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

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

相关文章

【专利】一种日志快速分析方法、设备、存储介质

公开号CN116560938A申请号CN202310311478.5申请日2023.03.28 是我在超音速人工智能科技股份有限公司(833753) 职务作品&#xff0c;第一发明人是董事长夫妇&#xff0c;第二发明人是我。 ** 注意** &#xff1a; 内容比较多&#xff0c;还有流程图、界面等。请到 专利指定页面…

SSL/TLS协议信息泄露漏洞(CVE-2016-2183)解法

1.运行gpedit.msc&#xff0c;进入本地组策略编辑器。 2. 本地组策略编辑器-->计算机配置-->管理模板-->网络-->SSL配置设置-->启用“SSL密码套件顺序”。 3. 将原有的密码套件值清空&#xff0c;拷入下面的值&#xff0c;保存设置&#xff0c;并重启服务器即…

AI时代的网络安全战:以智取胜,守护数字安宁

在数字化浪潮的推动下&#xff0c;我们的生活和工作日益离不开互联网。然而&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;网络安全问题也日益凸显。美国联邦调查局&#xff08;FBI&#xff09;的一则警报如同一记重锤&#xff0c;敲响了我们对…

CANopen NWT,SDO,HeartBeat报文协议

什么是CANopen&#xff1f; CANopen是一个基于CAN总线的“高层协议”&#xff0c;这意味着CAN总线&#xff08;ISO 11898&#xff09;就像集装箱的卡车一般作为CANopen信息的“运输工具”。 CAN只是实现了带有11位CAN ID、远程传输&#xff08;RTR&#xff09;位和64个数据位&…

【VUE.js】前端框架——未完成

基于脚手架创建前端工程 环境 当安装node.js时&#xff0c;它本身就携带有npm命令。&#xff08;-v 查版本号&#xff09;安装VUE CLI npm i vue/cli -g&#xff08;全局&#xff09; 创建 vue create 【project name】 镜像源解决方案 输入创建命令后&#xff0c;提示检查更…

论文阅读记录--关于水文系统的传递函数

文章目录 J-schuite的文章,地下水系统的响应的功率谱分析--传递函数1. 什么是冲激响应函数与传递函数?2. 地下水流系统中传递函数的求解3. J-schuite文章中传递函数的复现J-schuite的文章,地下水系统的响应的功率谱分析–传递函数 1. 什么是冲激响应函数与传递函数? 在信号…

PingCAP 戴涛:构建面向未来的金融核心系统

作者&#xff1a;戴涛 导读 近日&#xff0c;平凯星辰解决方案技术部总经理戴涛在 2024 数据技术嘉年华活动中&#xff0c;做了主题为“构建面向未来的金融核心系统”的分享&#xff0c;本文为戴涛演讲实录的全文。 文章分析了中国金融行业的发展趋势&#xff0c;并且基于这…

集合系列(二十五) -二叉树、平衡二叉树、红黑树性能总结

一、摘要 二叉树&#xff0c;作为一种数据结构&#xff0c;在实际开发中&#xff0c;有着非常广泛的应用&#xff0c;尤其是以平衡二叉树、红黑树为代表&#xff0c;在前几篇文章中&#xff0c;我们详细的介绍了BST、AVL、RBT的算法以及代码实践&#xff0c;下面简要概括描述一…

nginx目录枚举修复手册

nginx目录枚举修复手册 漏洞背景 修复方式: ssh zujian2 sudo vi /data/apps/nginx/conf/conf.d/default.conf server {

免费的GPT4终于要来了!OpenAI直播发布会详细解读!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

简单易懂的HashMap使用指南:从入门到精通

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

Wifi——Wifi断连问题分析

一、iperf测试wifi断连 1.信号强度差 -36表示非常强&#xff1b;但网络质量依然非常差。 可以分析出四个原因&#xff1a; 2.与throughput相关 为什么同一个网络的信号强度估算会有一定差异&#xff1f;&#xff01; 下图是上述log的一些信息&#xff1a;

DTC 2024回顾丨zData X 多元数据库一体机:开创多元数据库时代部署新范式

导语 在2024“数据技术嘉年华”上&#xff0c;云和恩墨数据库一体机产品总经理刘宇在“数据库极致特性”专题论坛发表了题为《打造多元数据库部署新范式&#xff0c;引领一体化资源池创新之路》的演讲。他深入分析了国产数据库面临的挑战&#xff0c;并详细介绍了云和恩墨如何利…

F5G-A万兆光网商用启航,挥动FTTR F50星光之翼,北京联通助力首都家庭飞向全光智慧时代...

2001年&#xff0c;王菲在发行的新歌《光之翼》中唱道&#xff1a;静静地按下电源开关/屏幕的色彩越来越亮/在虚拟的城市/找一个让心灵休息的地方/张开透明翅膀/朝着月亮飞翔/搜寻最美一个现世的天堂…… 将时间拨回千禧年&#xff0c;“看不见的城市”“伊托邦”“网络之城”&…

享元模式详解

享元模式 1 概述 定义&#xff1a; ​ 运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销&#xff0c;从而提高系统资源的利用率。 2 结构 享元&#xff08;Flyweight &#xff09;模式中存…

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

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

2.数据类型与变量(java篇)

目录 数据类型与变量 数据类型 变量 整型变量 长整型变量 短整型变量 字节型变量 浮点型变量 双精度浮点型 单精度浮点型 字符型变量 布尔型变量&#xff08;boolean&#xff09; 类型转换 自动类型转换(隐式) 强制类型转换(显式) 类型提升 字符串类型 数据类…

独立游戏《星尘异变》UE5 C++程序开发日志3——实现一个存存组件

本篇日志中&#xff0c;我将会介绍如何实现一个有格子&#xff0c;每个格子有容量的物品库存&#xff0c;如下图&#xff1a; 一.库存容器 1.储存数据的容器 库存容器最重要的目的就是存储每一种类的物品拥有的数量&#xff0c;这里我用的是哈希表&#xff1a; std::unordere…

“圣诞树图案的打印~C语言”

圣诞树图案的打印~C语言 题目原文&#xff1a;[圣诞树](https://www.nowcoder.com/practice/9a03096ed8ab449e9b10b0466de29eb2?tpId107&rp1&ru/ta/beginner-programmers&qru/ta/beginner-programmers/question-ranking&difficulty&judgeStatus&tags&…

机器学习中的聚类

目录 认识聚类算法 聚类算法API的使用 聚类算法实现流程 聚类算法模型评估 认识聚类算法 聚类算法是一种无监督的机器学习算法。 它将一组数据分成若干个不同的群组&#xff0c;使得每个群组内部的数据点相似度高&#xff0c;而不同群组之间的数据点相似度低。常用的相似…