Use BDS to Store Files Like
Excel JPG
BDS or MIME Repository to keep EXECL JPGs etc
inside SAP
* Program yjncMimeTest shows how easy it is to
use Interface IF_MR_API
*================================================================================ * yjncBDStest is a Simple Maintenance of BDS * Idea is to use BDS to store files like Excel JPG * I prefer this now over CLUSTER & IMPORT/EXPORT * as with BDN(Tcode OAOR) it is possible to transport BDS content * Based on http://smoschid.tripod.com/APPL_SAP_SOURCE_CODE/Z_BUSINESS_DOC_SERVICE.TXT * by Stefanos Moschidis - SAP Certified Technical Consultant * create a screen 100 with a container MCONTAINER * GuiTitle TITLEBAR100 * GuiStatus STATUS100 weith 1 EXIT button * SAP Desktop Office Integration Using ABAP Objects * http://www.intelligententerprise.com/channels/applications/feature/archive/ehre.jhtml * SAP BDS & BDN: Integrated Document Management * http://www.intelligententerprise.com/channels/applications/feature/archive/schulze.jhtml * Good ready code of BDS+DOI * http://www.sappro.com/download03.cfm?session= * http://help.sap.com/printdocu/core/Print46c/en/data/pdf/BCSRVBDS/BDS_STRUCTURE.pdf * there could be situations where you want BDS integration *================================================================================ * Author Jayanta Narayan Choudhuri * Flat 302 * 395 Jodhpur Park * Kolkata 700 068 * Email sss@cal.vsnl.net.in * URL: http://www.geocities.com/ojnc *================================================================================ REPORT yjncMimeTest. " the MIME way DATA: o_mr_api TYPE REF TO if_mr_api. DATA: BEGIN OF graphic_table OCCURS 0, line(255) TYPE x, END OF graphic_table. DATA: graphic_size TYPE i. DATA : mycontainer TYPE REF TO cl_gui_custom_container . DATA : ok_code LIKE sy-ucomm , save_ok LIKE sy-ucomm . DATA: graphic_url(255). DATA: image TYPE REF TO cl_gui_picture. DATA: l_graphic_xstr TYPE xstring, l_graphic_conv TYPE i, l_graphic_offs TYPE i. START-OF-SELECTION. IF o_mr_api IS INITIAL. o_mr_api = cl_mime_repository_api=>if_mr_api~get_api( ). ENDIF. CALL METHOD o_mr_api->get EXPORTING i_url = 'sap/public/zjnc/jbln.jpg' IMPORTING e_content = l_graphic_xstr EXCEPTIONS parameter_missing = 1 error_occured = 2 not_found = 3 permission_failure = 4 OTHERS = 5. * current will hold the image in a XSTRING var CLEAR graphic_url. graphic_size = XSTRLEN( l_graphic_xstr ). CHECK graphic_size > 0. l_graphic_conv = graphic_size. l_graphic_offs = 0. WHILE l_graphic_conv > 255. graphic_table-line = l_graphic_xstr+l_graphic_offs(255). APPEND graphic_table. l_graphic_offs = l_graphic_offs + 255. l_graphic_conv = l_graphic_conv - 255. ENDWHILE. graphic_table-line = l_graphic_xstr+l_graphic_offs(l_graphic_conv). APPEND graphic_table. CALL FUNCTION 'DP_CREATE_URL' EXPORTING type = 'IMAGE' subtype = 'GIF' TABLES data = graphic_table[] CHANGING url = graphic_url EXCEPTIONS dp_invalid_parameter = 1 dp_error_put_table = 2 dp_error_general = 3 OTHERS = 4. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. EXIT. ENDIF. * PERFORM f_download_blob. CALL SCREEN 100 . *&;---------------------------------------------------------------------* *&; Module STATUS_0100 OUTPUT *&;---------------------------------------------------------------------* MODULE status_0100 OUTPUT. SET PF-STATUS 'STATUS100'. SET TITLEBAR 'TITLEBAR100'. ENDMODULE. " STATUS_0100 OUTPUT *&;---------------------------------------------------------------------* *&; Module prepare_controls OUTPUT *&;---------------------------------------------------------------------* MODULE prepare_controls OUTPUT. IF mycontainer IS INITIAL. CREATE OBJECT mycontainer EXPORTING container_name = 'MCONTAINER' EXCEPTIONS OTHERS = 1. CASE sy-subrc. WHEN 0. WHEN OTHERS. RAISE cntl_error. ENDCASE. ENDIF. IF graphic_url IS NOT INITIAL AND image IS INITIAL. PERFORM f_pic_display. EXIT. ENDIF. ENDMODULE. " prepare_controls OUTPUT *&;---------------------------------------------------------------------* *&; Module USER_COMMAND_0100 INPUT *&;---------------------------------------------------------------------* MODULE user_command_0100 INPUT. save_ok = ok_code . CLEAR ok_code . IF save_ok = 'EXIT' . LEAVE TO SCREEN 0. ENDIF . ENDMODULE. " USER_COMMAND_0100 *&---------------------------------------------------------------------* *& Form f_pic_display *&---------------------------------------------------------------------* FORM f_pic_display. CREATE OBJECT image EXPORTING parent = mycontainer. CALL METHOD image->load_picture_from_url EXPORTING url = graphic_url. image->set_display_mode( image->display_mode_normal_center ). cl_gui_cfw=>flush( ). cl_gui_cfw=>update_view( ). ENDFORM. "f_pic_display *================================================================================ REPORT yjncbdstest. " the BDS way TYPE-POOLS: sbdst, abap. * ====================================================================== * DATA DECLARATIONS * ====================================================================== DATA : viewer TYPE REF TO i_oi_document_viewer . DATA : mycontainer TYPE REF TO cl_gui_custom_container . DATA : edurl(2048). CONSTANTS : buttonselected VALUE 'X' . DATA : ok_code LIKE sy-ucomm , save_ok LIKE sy-ucomm . * For uploading Files to BDS DATA: BEGIN OF itab OCCURS 0, raw TYPE sdok_sdatx, END OF itab. DATA: filesize TYPE i, filename TYPE string, myext TYPE string. DATA: myclassname TYPE sbdst_classname, myclasstype TYPE sbdst_classtype, mymimetype TYPE bapicompon-mimetype, mycomponents TYPE sbdst_components WITH HEADER LINE, myfiles TYPE sbdst_files WITH HEADER LINE, mysignature TYPE sbdst_signature WITH HEADER LINE, excluding TYPE sbdst_excluding WITH HEADER LINE, myquery TYPE sbdst_query WITH HEADER LINE, myuris TYPE sbdst_uri WITH HEADER LINE. DATA: graphic_url(255). DATA: image TYPE REF TO cl_gui_picture. DATA: len TYPE i, offset TYPE i, wlen TYPE i, woff TYPE i. * ------------------------------------------------------------------- * 2 KEYWORDS * ------------------------------------------------------------------- DATA: key_1 LIKE bapibds01-key_word, key_2 LIKE bapibds01-key_word. * ====================================================================== * SELECTION SCREEN DEFAULT * ====================================================================== * ------------------------------------------------------------------- * Frame of Program Options ; TEXT-002 = 'Program Options' . * ------------------------------------------------------------------- SELECTION-SCREEN BEGIN OF BLOCK action_a WITH FRAME TITLE text-002 . PARAMETERS: upload RADIOBUTTON GROUP navs DEFAULT 'X', get_url RADIOBUTTON GROUP navs, downsngl RADIOBUTTON GROUP navs, navigato RADIOBUTTON GROUP navs, showimg RADIOBUTTON GROUP navs. SELECTION-SCREEN END OF BLOCK action_a . SELECTION-SCREEN BEGIN OF BLOCK action_b WITH FRAME TITLE text-002 . PARAMETERS: p_file TYPE rlgrap-filename, p_mime TYPE bapicompon-mimetype, p_class TYPE sbdst_classname. SELECTION-SCREEN END OF BLOCK action_b. * ====================================================================== INITIALIZATION . * ====================================================================== * t_upload = '1 Upload File to BDS' . * t_url = '2 Show from URL' . * t_single = '3 Download File from BDS' . * t_navi = '4 Show Navigator' . * t_show = '5 Show Image' . * At selection screen AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. CALL FUNCTION 'F4_FILENAME' EXPORTING field_name = 'P_FILE' IMPORTING file_name = p_file. * ====================================================================== START-OF-SELECTION . * ====================================================================== MOVE p_class TO: myclassname, key_1. MOVE 'OT' TO myclasstype. CLEAR myfiles. MOVE '1' TO: myfiles-doc_count, myfiles-comp_count. MOVE p_file TO filename. COMPUTE len = STRLEN( filename ). DO len TIMES. offset = len - sy-index. IF filename+offset(1) = '.'. woff = offset + 1. wlen = len - woff. MOVE filename+woff(wlen) TO myext. ENDIF. IF filename+offset(1) = '\' OR filename+offset(1) = '/'. woff = offset + 1. wlen = len - woff. MOVE filename+woff(wlen) TO myfiles-filename. wlen = offset. MOVE filename+0(wlen) TO myfiles-directory. EXIT. ENDIF. ENDDO. TRANSLATE myext TO UPPER CASE. * http://www.w3schools.com/media/media_mimeref.asp CASE myext. WHEN 'XLS'. MOVE 'application/vnd.ms-excel' TO mymimetype. WHEN 'DOC'. MOVE 'application/msword' TO mymimetype. WHEN 'PPT'. MOVE 'application/vnd.ms-powerpoint' TO mymimetype. WHEN 'PDF'. MOVE 'application/pdf' TO mymimetype. WHEN 'JPG'. MOVE 'image/jpeg' TO mymimetype. WHEN 'GIF'. MOVE 'image/gif' TO mymimetype. WHEN 'BMP'. MOVE 'image/bmp' TO mymimetype. WHEN 'TIF'. MOVE 'image/tiff' TO mymimetype. WHEN 'ZIP'. MOVE 'application/zip' TO mymimetype. WHEN 'RTF'. MOVE 'application/rtf' TO mymimetype. WHEN 'TXT'. MOVE 'text/plain' TO mymimetype. ENDCASE. IF mymimetype IS INITIAL. MOVE p_mime TO mymimetype. ENDIF. MOVE mymimetype TO: myfiles-mimetype, key_2. IF myfiles-filename IS NOT INITIAL. IF myfiles-directory IS INITIAL. MOVE '/' TO myfiles-directory. ENDIF. APPEND myfiles. ENDIF. CASE buttonselected . * -------> UPLOAD DOCUMENT IN BUSINESS DOCUMENT NAVIGATOR <------------ WHEN upload. PERFORM build_keyword_criteria . IF myfiles-filename IS INITIAL. MESSAGE e999(zmsgs) WITH 'File Name is Mandatory'. ENDIF. IF mymimetype IS INITIAL. MESSAGE e999(zmsgs) WITH 'Mime Type is Mandatory'. ENDIF. CALL METHOD cl_bds_document_set=>create_with_files EXPORTING classname = myclassname classtype = myclasstype CHANGING files = myfiles[] signature = mysignature[] EXCEPTIONS internal_error = 1 error_kpro = 2 parameter_error = 3 not_allowed = 4 not_authorized = 5 nothing_found = 6 OTHERS = 7. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. MESSAGE i999(zmsgs) WITH 'Upload Successful'. * -------> Display Image ACCORDING TO KEYWORD CRITERIA <---------- WHEN downsngl . PERFORM build_keyword_criteria . IF myfiles-filename IS INITIAL. MESSAGE e999(zmsgs) WITH 'File Name is Mandatory'. ENDIF. CALL METHOD cl_bds_document_set=>get_with_url EXPORTING classname = myclassname classtype = myclasstype url_lifetime = 'T' CHANGING uris = myuris[] signature = mysignature[]. CALL METHOD cl_bds_document_set=>get_with_files EXPORTING classname = myclassname classtype = myclasstype CHANGING files = myfiles[] signature = mysignature[] EXCEPTIONS nothing_found = 1 error_kpro = 2 internal_error = 3 parameter_error = 4 not_authorized = 5 not_allowed = 6. IF sy-subrc NE 0 . MESSAGE i999(zmsgs) WITH 'ERROR DOWNLOADING FILE' sy-subrc . ENDIF . * -------> FIND A FILE SHOW INPLACE FROM SAP R3 URL <---------- WHEN get_url . PERFORM build_keyword_criteria. CALL METHOD cl_bds_document_set=>get_with_url EXPORTING classname = myclassname classtype = myclasstype url_lifetime = 'T' CHANGING uris = myuris[] signature = mysignature[]. CALL SCREEN 100 . * -------> SHOW DOCUMENTS IN BUSINESS DOCUMENT NAVIGATOR <------------ WHEN navigato . PERFORM build_keyword_criteria. CALL METHOD cl_bds_document_set=>call_navigator EXPORTING classname = myclassname classtype = myclasstype CHANGING excluding = excluding[] signature = mysignature[]. * -------> SHOW IMAGE if image/jpeg <------ WHEN showimg . PERFORM build_keyword_criteria. CALL METHOD cl_bds_document_set=>get_with_table EXPORTING classname = myclassname classtype = myclasstype CHANGING content = itab[] EXCEPTIONS error_kpro = 1 internal_error = 2 nothing_found = 3 no_content = 4 parameter_error = 5 not_authorized = 6 not_allowed = 7 OTHERS = 8. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. PERFORM f_display_pic. ENDCASE . *&;---------------------------------------------------------------------* *&; Form BUILD_KEYWORD_CRITERIA *&;---------------------------------------------------------------------* FORM build_keyword_criteria. MOVE '1' TO: mysignature-doc_count, mysignature-comp_count. MOVE: 'BDS_KEYWORD' TO mysignature-prop_name, key_1 TO mysignature-prop_value. APPEND mysignature. MOVE '1' TO: mysignature-doc_count, mysignature-comp_count. MOVE: 'BDS_KEYWORD' TO mysignature-prop_name, key_2 TO mysignature-prop_value. APPEND mysignature. ENDFORM. " BUILD_KEYWORD_CRITERIA *&;---------------------------------------------------------------------* *&; Module STATUS_0100 OUTPUT *&;---------------------------------------------------------------------* MODULE status_0100 OUTPUT. SET PF-STATUS 'STATUS100'. SET TITLEBAR 'TITLEBAR100'. ENDMODULE. " STATUS_0100 OUTPUT *&;---------------------------------------------------------------------* *&; Module prepare_controls OUTPUT *&;---------------------------------------------------------------------* MODULE prepare_controls OUTPUT. IF mycontainer IS INITIAL. CREATE OBJECT mycontainer EXPORTING container_name = 'MCONTAINER' EXCEPTIONS OTHERS = 1. CASE sy-subrc. WHEN 0. WHEN OTHERS. RAISE cntl_error. ENDCASE. ENDIF. IF graphic_url IS NOT INITIAL AND image IS INITIAL. PERFORM f_pic_display. EXIT. ENDIF. IF viewer IS INITIAL. CALL METHOD c_oi_container_control_creator=>get_document_viewer IMPORTING viewer = viewer EXCEPTIONS unsupported_platform = 1. IF sy-subrc NE 0. MESSAGE i999(zmsg) WITH 'Unknown error'. ENDIF. CALL METHOD viewer->init_viewer EXPORTING parent = mycontainer EXCEPTIONS cntl_error = 1 cntl_install_error = 2 dp_install_error = 3 dp_error = 4. IF sy-subrc NE 0. MESSAGE i999(zmsgs) WITH 'Unknown error'. ENDIF. ENDIF. CLEAR edurl. SORT myuris BY uri_count DESCENDING . READ TABLE myuris INDEX 1 . IF sy-subrc = 0 . edurl = myuris-uri . ENDIF . IF NOT edurl IS INITIAL. CALL METHOD viewer->view_document_from_url EXPORTING document_url = edurl show_inplace = 'X' EXCEPTIONS cntl_error = 1 not_initialized = 2 dp_error_general = 3 invalid_parameter = 4. IF sy-subrc NE 0. MESSAGE i999(zmsgs) WITH 'Unknown error'. ENDIF. ENDIF. ENDMODULE. " prepare_controls OUTPUT *&;---------------------------------------------------------------------* *&; Module USER_COMMAND_0100 INPUT *&;---------------------------------------------------------------------* MODULE user_command_0100 INPUT. save_ok = ok_code . CLEAR ok_code . IF save_ok = 'EXIT' . LEAVE TO SCREEN 0. ENDIF . ENDMODULE. " USER_COMMAND_0100 *&---------------------------------------------------------------------* *& Form F_upload_blob *&---------------------------------------------------------------------* FORM f_upload_blob. MOVE p_file TO filename. CALL FUNCTION 'GUI_UPLOAD' EXPORTING filetype = 'BIN' filename = filename IMPORTING filelength = filesize TABLES data_tab = itab EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 OTHERS = 17. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. " F_upload_blob *&---------------------------------------------------------------------* *& Form F_download_blob *&---------------------------------------------------------------------* FORM f_download_blob. MOVE p_file TO filename. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filetype = 'BIN' filename = filename IMPORTING filelength = filesize TABLES data_tab = itab EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 OTHERS = 22. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. " F_download_blob *&---------------------------------------------------------------------* *& Form f_display_pic *&---------------------------------------------------------------------* FORM f_display_pic. CLEAR graphic_url. CALL FUNCTION 'DP_CREATE_URL' EXPORTING type = 'IMAGE' subtype = 'GIF' TABLES data = itab[] CHANGING url = graphic_url EXCEPTIONS dp_invalid_parameter = 1 dp_error_put_table = 2 dp_error_general = 3 OTHERS = 4. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. EXIT. ENDIF. * PERFORM f_download_blob. CALL SCREEN 100 . ENDFORM. "f_display_pic *&---------------------------------------------------------------------* *& Form f_pic_display *&---------------------------------------------------------------------* FORM f_pic_display. CREATE OBJECT image EXPORTING parent = mycontainer. CALL METHOD image->load_picture_from_url EXPORTING url = graphic_url. image->set_display_mode( image->display_mode_normal_center ). cl_gui_cfw=>flush( ). cl_gui_cfw=>update_view( ). ENDFORM. "f_pic_display * CREATE FROM TABLE *================== * PERFORM build_keyword_criteria . * * PERFORM f_upload_blob. * * MOVE 1 TO mycomponents-doc_count. * MOVE 1 TO mycomponents-comp_count. * MOVE mymimetype TO mycomponents-mimetype. * APPEND mycomponents. * * CALL METHOD cl_bds_document_set=>create_with_table * EXPORTING * classname = myclassname * classtype = myclasstype * components = mycomponents[] * content = itab[] * CHANGING * signature = mysignature[] * EXCEPTIONS * internal_error = 1 * error_kpro = 2 * parameter_error = 3 * not_authorized = 4 * not_allowed = 5 * nothing_found = 6 * OTHERS = 7. * * IF sy-subrc <> 0. * MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno * WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. * ENDIF. Get help for your ABAP problems
ABAP Tips
Best regards,
All the site contents are Copyright © www.erpgreat.com
and the content authors. All rights reserved.
|