我在S/4HANA的事务码MM02里为Material维护图片文件作为附件:

通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来:

REPORT zgos_api.DATA ls_appl_object     TYPE gos_s_obj.
DATA lo_gos_api         TYPE REF TO cl_gos_api.
DATA lt_attachment_list TYPE gos_t_atta.
DATA lt_role_filter     TYPE gos_t_rol.DATA: lv_id  TYPE matnr VALUE '16',lt_att TYPE TABLE OF sibflporb.CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGinput  = lv_idIMPORTINGoutput = lv_id.
ls_appl_object-typeid = 'BUS1001006'.
ls_appl_object-instid = lv_id.
ls_appl_object-catid  = 'BO'.START-OF-SELECTION.TRY.lo_gos_api = cl_gos_api=>create_instance( ls_appl_object ).APPEND cl_gos_api=>c_attachment TO lt_role_filter.lt_attachment_list = lo_gos_api->get_atta_list( lt_role_filter ).CATCH cx_gos_api INTO DATA(error).WRITE:/ error->get_text( ).RETURN.ENDTRY.DATA: ls_key TYPE gos_s_attkey,lv_base64 type string.LOOP AT lt_attachment_list ASSIGNING FIELD-SYMBOL(<id>).ls_key-atta_id = <id>-atta_id.ls_key-atta_cat = <id>-atta_cat.DATA(ls) = lo_gos_api->get_al_item( ls_key ).BREAK-POINT.ENDLOOP.

然后我把这段代码封装到一个Function moduleZDIS_GET_MATERIAL_IMAGES里,在Java代码里消费这个function module,把S/4HANA返回的二进制内容存成本地图片文件。在ABAP系统里图片二进制文件内容的类型为RAWSTRING,如何在Java里使用它?


使用JCO在Java里消费ABAP function module的代码:

static private void getProductImageTest(){JCoDestination destination = null;try {destination = JCoDestinationManager.getDestination(DESTINATION_NAME);JCoRepository repo = destination.getRepository();JCoFunction stfcConnection = repo.getFunction("ZDIS_GET_MATERIAL_IMAGES");JCoParameterList imports = stfcConnection.getImportParameterList();String materialID = "16";imports.setValue("IV_MATERIAL_ID", materialID);stfcConnection.execute(destination);JCoParameterList exports = stfcConnection.getExportParameterList();int abapDuration = exports.getInt("EV_DURATION");StringBuilder sb = new StringBuilder();sb.append("{ \"" + ABAP_DURATION + "\": " + abapDuration + ",");sb.append("\"" + UPSELL_PRODUCT + "\":[");JCoTable codes = exports.getTable("ET_IMAGES");int row = codes.getNumRows();System.out.println("Total rows: " + row);System.out.println("ABAP duration: " + abapDuration);for( int i = 0; i < row; i++){codes.setRow(i);sb.append("{\"" + FILE_ID + "\":" + codes.getString("FILEID") + ","+ "\"" + FILE_OWNER + "\":\"" + codes.getString("OWNER") + "\"" + ",");sb.append("{\"" + FILE_CDATE + "\":" + codes.getString("CREATION_DATE") + ","+ "\"" + FILE_NAME + "\":\"" + codes.getString("FILENAME") + "\""); storeLocalFile(codes);if( i < row - 1){sb.append("},");}else{sb.append("}");}}sb.append("]}");System.out.println("Final json: " + sb.toString());} catch (JCoException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

其中把ABAP的类型为RAWSTRING的字段保存成本地文件的代码封装于方法storeLocalFile里:


static private void storeLocalFile(JCoTable codes){InputStream is = codes.getBinaryStream("FILECONTENT");try {File file = new File("c:\\temp\\" + codes.getString("FILENAME"));byte[] bytes = new byte[is.available()];is.read(bytes);OutputStream output = new FileOutputStream(file);BufferedOutputStream bufferedOutput = new BufferedOutputStream(output);bufferedOutput.write(bytes);bufferedOutput.close();is.close();} catch (IOException e) {e.printStackTrace();}}

执行Java代码后,在本地C盘temp目录下能够看到S/4HANA里Material ID为16的两个附件图片:

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

如何将S/4HANA系统存储的图片文件用Java程序保存到本地相关推荐

  1. java提供图片链接,提取网页的图片链接的Java程序

    提取网页的图片链接的Java程序 输入网页文件名,和资源列表文件名 输出资源列表文件供迅雷下载. 适用于批量下载图片. 由两个文件组成. 没有提供网页下载功能,因为我没有时间写,相关的代码以后再贴. ...

  2. 爬虫实战5:爬取全部穿越火线武器的图片以武器名称命名保存到本地文件

    申明:资料来源于网络及书本,通过理解.实践.整理成学习笔记. 文章目录 穿越火线官网 完整代码 运行结果 穿越火线官网 完整代码 import requests# 循环33次,官网武器库展示有33页 ...

  3. Windows系统 Prefetch目录 *.pf 文件解析 -- 探索程序运行记录、保护隐私

    一.前言 1.本文说明 如果喜欢打开XX软件看XX视频等,看了多少次,什么时候看的,都会被记录下来,用软件来查看一下,全部的隐私都没有了. 家里的小孩玩的啥游戏,玩了多少次,也都可以看得一清二楚. 查 ...

  4. java 将图片转成二进制文件bin_java 问题:怎样把一个bin二进制图片文件用java代码打开?求解!...

    展开全部 Java中可以用java.awt.Toolkit类打开gif,jpg,png三种类型的二进制图片文件,如果是62616964757a686964616fe59b9ee7ad943133333 ...

  5. 如何在mac上编写java程序_在mac系统上安装Eclipse,编写java程序

    第一步:安装java jre(java 运行环境). 如图所示: 登陆Oralce官网,点击Download选项,找到如图所示界面: 选择Java Runtime Environment(JRE),打 ...

  6. mysql blob 读取 图片_mysql中以blob形式存储的图片文件 通过ajax方式传输 在js中设置成img控件的src...

    第一步,读取blob数据, 第二步,将blob数据转换成byte数组 第三步,将byte数据进行base64加密转换成字符串并回传 第四步,接收字符串 第五步,将img控件的src设置成"d ...

  7. 使用html2Canvas将页面转化为canvas图片,最后长按保存到本地,史上最全 html2canvas 使用 踏坑之旅,没有之一

    最近工作中遇到一个需求,类似这样 点击商品二维码,生成一张带有商品图片.标题.描述.二维码等信息的图片,用户长按进行保存. 在使用html2canvas进行项目开发的时候,遇到很多的问题,主要为一下方 ...

  8. 将图片文件以二进制方式保存和恢复

    /** * 将图片转换成二进制 * * @return */ static String getImageBinary() { BASE64Encoder encoder = new sun.misc ...

  9. java提供图片链接,提取网页图片链接的JAVA程序

    输入网页文件名,和资源列表文件名 输出资源列表文件供迅雷下载. 适用于批量下载图片. 由两个文件组成. 1// AnalizeIMG.java 2 3 // 主程序 4 5 import java.i ...

最新文章

  1. code forces 436 C. Bus
  2. 新手tiktok怎么做?海外tiktok怎么赚钱!
  3. 什么是单反相机?什么叫数码相机?
  4. 虚拟机系统克隆到服务器上,迁移虚拟机
  5. IE8无法取得客户端完整路径的解决办法
  6. js简单实现切换图片上一张下一张功能
  7. 破解WMV格式电影的许可证
  8. 文献管理工具EndNote X8 破解版,Windows版
  9. 【短链接】——自己实现一个短网址服务
  10. 【Linux命令】mergecap命令的用法
  11. 使用BeautifulSoup,解释器报错‘lxml‘
  12. inflate方法的用法
  13. js eval Uncaught SyntaxError: unexpected token: ‘:‘
  14. 计算机连接网络被限制,电脑连接wifi出现网络受限的解决方法
  15. BeautyGAN图片的高精度美颜
  16. GameOff2022参与有感
  17. Microsoft 解决方案框架版本 3.0 概述
  18. mysql登录框万能密码_Sqli-LABS通关笔录-11[sql注入之万能密码以及登录框报错注入]...
  19. 大话Ceph--RBD那点事儿
  20. java蘑菇岛种子_比蘑菇岛更稀有的“蘑菇陆地”见过么?输入MC种子即可找到

热门文章

  1. android平台使用java动态生成公私钥,并导出证书文件
  2. HIVE入门之数据模型
  3. 保研计算机辅助翻译,本科2013级推免生寄语
  4. 通过 SAP UI5 的 TypeScript 开发环境,来学习什么是 DefinitelyTyped
  5. 什么是 JavaScript 世界的 UMD
  6. Angular Component 实现类,先执行字段初始化,再调用构造函数
  7. 为什么 OAuth 里除了 Access Token 之外,还需要 Refresh Token?
  8. SAP ABAP 编程语言里允许哪些特殊字符作为变量名的一部分?
  9. SAP Spartacus B2B 列表页面的 (i) icon popover Component 的声明位置
  10. fixture.detectChange如何通过Angular zone执行其异步逻辑的