摘要:我在的事務碼里為維護圖片文件作為附件通過如下簡單的代碼即可將圖片文件的二進制內容讀取出來然后我把這段代碼封裝到一個里,在代碼里消費這個,把返回的二進制內容存成本地圖片文件。
我在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" EXPORTING input = lv_id IMPORTING output = 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(). ls_key-atta_id = -atta_id. ls_key-atta_cat = -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 block e.printStackTrace(); } }
其中把ABAP的類型為RAWSTRING的字段保存成本地文件的代碼封裝于方法storeLocalFile里:
static private void storeLocalFile(JCoTable codes){ InputStream is = codes.getBinaryStream("FILECONTENT"); try { File file = new File("c: emp" + 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的原創技術文章,請關注公眾號"汪子熙".
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71326.html
摘要:在以下簡稱和以下簡稱開發團隊都工作過,這篇文章給出這兩款產品一些技術層面的比較。標準開發方式和的雖然看起來都是風格,但實現技術不同。而的標準則是基于和協作而成的。 如果您對SAP S/4HANA for Customer Management(以下簡稱S4CRM)和SAP Cloud for Customer(以下簡稱C4C)不甚熟悉,那我建議您可以先瀏覽我之前寫的這兩篇微信公眾號文章...
摘要:在以下簡稱和以下簡稱開發團隊都工作過,這篇文章給出這兩款產品一些技術層面的比較。標準開發方式和的雖然看起來都是風格,但實現技術不同。而的標準則是基于和協作而成的。 如果您對SAP S/4HANA for Customer Management(以下簡稱S4CRM)和SAP Cloud for Customer(以下簡稱C4C)不甚熟悉,那我建議您可以先瀏覽我之前寫的這兩篇微信公眾號文章...
摘要:本文里提到的所有都是基于版本的,這使得我又一次被鄙視了使用的程序猿鄙視使用的程序猿。因此這些事物碼本身也是可以通過進行增強的。 在Google上根據關鍵字程序員鄙視鏈搜索,會得到68多萬條結果。 showImg(https://segmentfault.com/img/remote/1460000014000687); 玲瑯滿目的搜索結果里是眾多不同維度劃分的鄙視鏈。 其中有一個維度,...
摘要:本文里提到的所有都是基于版本的,這使得我又一次被鄙視了使用的程序猿鄙視使用的程序猿。因此這些事物碼本身也是可以通過進行增強的。 在Google上根據關鍵字程序員鄙視鏈搜索,會得到68多萬條結果。 showImg(https://segmentfault.com/img/remote/1460000014000687); 玲瑯滿目的搜索結果里是眾多不同維度劃分的鄙視鏈。 其中有一個維度,...
閱讀 1299·2021-11-15 11:37
閱讀 3495·2021-11-11 16:55
閱讀 1741·2021-08-25 09:39
閱讀 3206·2019-08-30 15:44
閱讀 1728·2019-08-29 12:52
閱讀 1397·2019-08-29 11:10
閱讀 3230·2019-08-26 11:32
閱讀 3215·2019-08-26 10:16