• [代码]如何上载图片到SAP数据库并显示


    1, 简介

    整理了一段代码,实现上载本地图片到SAP的数据库表中,并且显示在屏幕上。

    其中用到了一下函数:

    1, GUI_UPLOAD:上载图片文件

    2, SCMS_BINARY_TO_XSTRING:将图片文件转换成xstring

    3, SCMS_XSTRING_TO_BINARY:将图片xstring转换成binary格式保存到内表中

    4, DP_CREATE_URL:创建得到图片的URL

    5, go_pic->load_picture_from_url:根据图片URL导入

    6, go_pic->set_display_mode:显示图片

    2, 完整代码

    REPORT ztest_upload_pic.
    **数据定义部分
    
    TYPES: BEGIN OF ty_pic,
             pic_data(1024) TYPE x,
           END OF ty_pic.
    
    DATA: pic_tab TYPE TABLE OF ty_pic.
    
    DATA: wa_pic TYPE zpictable.
    
    **zpictable为自定义table,设置一个主键字段,再设置一个或者多个RAWSTRING类型的字段存储图片数据
    
    DATA: c_pic TYPE REF TO cl_gui_custom_container,
          go_pic   TYPE REF TO cl_gui_picture.
    
    DATA: len         TYPE i,
          url(256),
          resu        TYPE i VALUE 123,
          path_string TYPE string.
    
    PARAMETERS: p_file LIKE ibipparms-path OBLIGATORY.
    
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
    
      PERFORM select_file USING p_file.
    
    START-OF-SELECTION.
    
      PERFORM upload_pic.
    
      PERFORM show_pic.
    
      CALL SCREEN 100.
    
    FORM select_file USING p_file.
    
      CALL FUNCTION 'F4_FILENAME'
        IMPORTING
          file_name = p_file.
    
    ENDFORM.
    
    FORM upload_pic.
      path_string = p_file.
      DATA lv_content TYPE xstring.
    
    * 上载PIC文件
      CALL FUNCTION 'GUI_UPLOAD'
        EXPORTING
          filename   = path_string
          filetype   = 'BIN'
        IMPORTING
          filelength = len
        TABLES
          data_tab   = pic_tab[].
    
      CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
        EXPORTING
          input_length = len
        IMPORTING
          buffer       = lv_content
        TABLES
          binary_tab   = pic_tab[]
        EXCEPTIONS
          failed       = 1
          OTHERS       = 2.
    
      wa_pic-key1    = '主键字段'.
      wa_pic-field1 = lv_content.
      MODIFY zpictable FROM wa_pic.
    
      IF sy-subrc = 0 .
        MESSAGE '图片已经保存至数据库表' TYPE 'S'.
      ELSE.
      ENDIF.
    ENDFORM.
    
    FORM show_pic.
      CLEAR pic_tab.
    
      SELECT SINGLE *
        INTO wa_pic
        FROM zpictable
        WHERE key1 = '关键字段'.
    
      CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
        EXPORTING
          buffer     = wa_pic-field1
        TABLES
          binary_tab = pic_tab.
    
    * 创建图片URL
      CALL FUNCTION 'DP_CREATE_URL'
        EXPORTING
          type    = 'IMAGE'
          subtype = 'JPG'
        TABLES
          data    = pic_tab
        CHANGING
          url     = url.
    
      CREATE OBJECT c_pic
        EXPORTING
          container_name = 'C_PIC'.
    
      CREATE OBJECT go_pic
        EXPORTING
          parent = c_pic.
    
      CALL METHOD go_pic->load_picture_from_url
        EXPORTING
          url    = url
        IMPORTING
          result = resu.
    * 3,居中显示
      CALL METHOD go_pic->set_display_mode
        EXPORTING
          display_mode = 3.
    
    ENDFORM.
    
    MODULE status_0100 OUTPUT.
      SET PF-STATUS '100'.
    ENDMODULE.
    
    MODULE user_command_0100 INPUT.
      CASE sy-ucomm.
        WHEN 'BACK'.
          CALL METHOD c_pic->free.
    *      (必须释放对象,否则会出现同一屏幕上操作图片无法刷新的情况)
          LEAVE TO SCREEN 0.
        WHEN OTHERS.
      ENDCASE.
    ENDMODULE.

    屏幕100:

    PROCESS BEFORE OUTPUT.
      MODULE status_0100.
    *
    PROCESS AFTER INPUT.
      MODULE user_command_0100.

    在屏幕上创建一个自定义的container:C_PIC

    状态status 100,简单的就设置个BACK按钮

    SE11 创建一个数据库表ZPICTABLE用来保存上载的图片文件,其中field1就是用来保存图片rawstring的字段。

    3, 程序运行

    选择画面输入图片文件路径,然后运行即可

    然后美女就出现了。。。

    以上。

  • 相关阅读:
    如何在windows下安装GIT
    TortoiseGit 安装
    高并发大流量专题---3、前端优化(减少HTTP请求次数)
    高并发大流量专题---2、流量优化(防盗链处理)
    高并发大流量专题---1、高并发大流量解决方案总结
    yii2和laravel比较
    php开发面试题---日常面试题1
    php开发面试题---禁用cookie之后,如何使用session
    剑指offer---4、序列化二叉树
    北风设计模式课程---20、UML类图介绍
  • 原文地址:https://www.cnblogs.com/datie/p/11433913.html
Copyright © 2020-2023  润新知