* ====================================================================== * Stefanos Moschidis - SAP Certified Technical Consultant * ====================================================================== * ====================================================================== * This Program is an example of Business Document Service : * There are 3 options on the selection screen : * 1 START NAVIGATOR * 2 SHOW SINGLE FILE FROM URL * 3 DOWNLOAD A FILE TO A LOCAL DISK PATH * ---------------------------------------------------------------------- * Note : The Single File to be shown or downloaded is selected * according to Keyword criteria given on the selection screen * ====================================================================== REPORT Z_EXAMPLE_BUSINESS_DOC_SRV_NAV . * ====================================================================== * DATA DECLARATIONS * ====================================================================== data : o_document type ref to cl_bds_document_set . data : viewer type ref to i_oi_document_viewer . data : my_container type ref to cl_gui_custom_container . DATA : EXCLUDING Type SBDST_EXCLUDING WITH HEADER LINE . DATA : I_SIGNATURE LIKE BAPISIGNAT OCCURS 1 WITH HEADER LINE. DATA : I_FILES LIKE BAPIFILES OCCURS 1 WITH HEADER LINE . DATA : I_QUERY LIKE bapiquery OCCURS 1 WITH HEADER LINE . DATA : I_URIS LIKE bapiURI OCCURS 1 WITH HEADER LINE . DATA : EDURL(2048). DATA : OK_CODE LIKE SY-UCOMM , SAVE_OK LIKE SY-UCOMM . CONSTANTS : BUTTONSELECTED VALUE 'X' . * ====================================================================== * SELECTION SCREEN DEFAULT * ====================================================================== * ------------------------------------------------------------------- * Frame of Program Options ; TEXT-002 = 'Program Options' . * ------------------------------------------------------------------- SELECTION-SCREEN BEGIN OF BLOCK ACTION_A WITH FRAME title TEXT-002 . SELECTION-SCREEN BEGIN OF line . PARAMETERS : NAVIGATO RADIOBUTTON GROUP NAVS DEFAULT 'X' . SELECTION-SCREEN COMMENT 5(25) T_navi. SELECTION-SCREEN ENd OF line . SELECTION-SCREEN BEGIN OF line . PARAMETERS : GET_URL RADIOBUTTON GROUP NAVS . SELECTION-SCREEN COMMENT 5(25) T_url. SELECTION-SCREEN ENd OF line . SELECTION-SCREEN BEGIN OF line . PARAMETERS : DOWNSNGL RADIOBUTTON GROUP NAVS . SELECTION-SCREEN COMMENT 5(25) T_single. SELECTION-SCREEN ENd OF line . SELECTION-SCREEN END OF BLOCK ACTION_A . * ------------------------------------------------------------------- * FRAME OF KEYWORDS ; TEXT-003 = 'KEYWORDS'. * ------------------------------------------------------------------- SELECTION-SCREEN BEGIN OF BLOCK KEY_WORDS WITH FRAME TITLE TEXT-003. PARAMETERS: KEY_1 LIKE BAPIBDS01-KEY_WORD memory id key1, KEY_2 LIKE BAPIBDS01-KEY_WORD memory id key2, KEY_3 LIKE BAPIBDS01-KEY_WORD memory id key3, KEY_4 LIKE BAPIBDS01-KEY_WORD memory id key4, KEY_5 LIKE BAPIBDS01-KEY_WORD memory id key5. SELECTION-SCREEN END OF BLOCK KEY_WORDS. * ====================================================================== INITIALIZATION . * ====================================================================== T_NAVI = '1 Start Navigator' . T_URL = '2 Show from URL' . T_SINGLE = '3 Download single File' . * ====================================================================== START-OF-SELECTION . * ====================================================================== CREATE OBJECT O_DOCUMENT . CASE BUTTONSELECTED . * -------> SHOW DOCUMENTS IN BUSINESS DOCUMENT NAVIGATOR <------------ WHEN NAVIGATO . PERFORM BUILD_EXCLUDING . PERFORM BUILD_KEYWORD_CRITERIA . CALL METHOD O_DOCUMENT->CALL_NAVIGATOR EXPORTING CLASSNAME = 'ZTESTCLASS' CLASSTYPE = 'OT' CHANGING EXCLUDING = EXCLUDING[] SIGNATURE = I_SIGNATURE[] . * -------> DOWNLOAD A FILE ACCORDING TO KEYWORD CRITERIA <---------- WHEN DOWNSNGL . PERFORM BUILD_KEYWORD_QUERY . CHECK NOT I_QUERY[] IS INITIAL . CALL METHOD O_DOCUMENT->QUERY_DOCUMENTS EXPORTING CLASSNAME = 'ZTESTCLASS' CLASSTYPE = 'OT' QUERY = I_QUERY[] CHANGING SIGNATURE = I_SIGNATURE[] . CHECK NOT I_SIGNATURE[] IS INITIAL . PERFORM BUILD_FILES_CRITER . CALL METHOD O_DOCUMENT->GET_WITH_FILES EXPORTING CLASSNAME = 'ZTESTCLASS' CLASSTYPE = 'OT' CHANGING FILES = I_FILES[] SIGNATURE = I_SIGNATURE[] 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 I398(00) WITH 'ERROR DOWNLOADING FILE' SY-SUBRC . ENDIF . * -------> FIND A FILE SHOW INPLACE FROM SAP R3 URL <---------- WHEN GET_URL . PERFORM BUILD_KEYWORD_QUERY . CHECK NOT I_QUERY[] IS INITIAL . CALL METHOD O_DOCUMENT->QUERY_DOCUMENTS EXPORTING CLASSNAME = 'ZTESTCLASS' CLASSTYPE = 'OT' QUERY = I_QUERY[] CHANGING SIGNATURE = I_SIGNATURE[] . CHECK NOT I_SIGNATURE[] IS INITIAL . * PERFORM BUILD_FILES_CRITER . CALL METHOD O_DOCUMENT->GET_WITH_URL EXPORTING CLASSNAME = 'ZTESTCLASS' CLASSTYPE = 'OT' URL_LIFETIME = 'T' CHANGING URIS = I_URIS[] SIGNATURE = I_SIGNATURE[] . call screen 100 . * ---------------------------------------------------------------- * THE SCREEN 100 HAS A CUSTOM CONTAINER CALLED MCONTAINER AND THE * FOLLOWING FLOW LOGIC * ---------------------------------------------------------------- * PROCESS BEFORE OUTPUT. * * MODULE STATUS_0100. * * module prepare_controls . * * PROCESS AFTER INPUT. * * MODULE USER_COMMAND_0100. * * ---------------------------------------------------------------- * (Off course not commented out in the real flow logic) * ---------------------------------------------------------------- ENDCASE . * ====================================================================== * CALL_NAVIGATOR method * of class cl_bds_document_set has following parameters * ====================================================================== * LOGICAL_SYSTEM Importing Type SBDST_LOGICAL_SY * CLASSNAME Importing Type SBDST_CLASSNAME * CLASSTYPE Importing Type SBDST_CLASSTYPE * CLIENT Importing Type SBDST_CLIENT * DISPLAY_SINGLE_DOC Importing Type BDS_X * DISPLAY_DOC Importing Type BDN_CON * OBJKEY Changing Type SBDST_OBJECT_KEY * SIGNATURE Changing Type SBDST_SIGNATURE * EXCLUDING Changing Type SBDST_EXCLUDING * FIXED_ATTRIBUTES Changing Type SBDST_PROPERTIES * ====================================================================== * GET_WITH_FILES method * of class cl_bds_document_set has following parameters * ====================================================================== * LOGICAL_SYSTEM Importing Type SBDST_LOGICAL_SY * CLASSNAME Importing Type SBDST_CLASSNAME OBLI * CLASSTYPE Importing Type SBDST_CLASSTYPE OBLI * CLIENT Importing Type SBDST_CLIENT * OBJECT_KEY Importing Type SBDST_OBJECT_KEY * FILES Changing Type SBDST_FILES OBLI * SIGNATURE Changing Type SBDST_SIGNATURE *&---------------------------------------------------------------------* *& Form BUILD_EXCLUDING *&---------------------------------------------------------------------* FORM BUILD_EXCLUDING. CLEAR : EXCLUDING , EXCLUDING[] . * ---------------------------------------------------------------------- EXCLUDING = 'NO_MODIFY' . " No modifying of document APPEND EXCLUDING . EXCLUDING = 'NO_DELETE' . " No deleting of document APPEND EXCLUDING . * EXCLUDING = 'NO_TRANSPORT' . " No transporting of document * APPEND EXCLUDING . EXCLUDING = 'NO_CREATE' . " No creating documents APPEND EXCLUDING . * EXCLUDING = 'NO_STANDARD_DOCS' . " No standard document types * APPEND EXCLUDING . EXCLUDING = 'NO_MODIFY_ATTRIS' . " No modifying attributes/keywords APPEND EXCLUDING . EXCLUDING = 'NO_COPY' . " No copying documents APPEND EXCLUDING . * EXCLUDING = 'NO_USER_OPTIONS' . " No user-specific settings * APPEND EXCLUDING . * EXCLUDING = 'NO_KEYWORDS' . " No keywords for documents * APPEND EXCLUDING . EXCLUDING = 'NO_DOCINFO' . " No document information APPEND EXCLUDING . * EXCLUDING = 'NO_DISPLAY' . " No displaying of documents * APPEND EXCLUDING . * EXCLUDING = 'NO_EXPORT' . " No exporting of documents to frontend * APPEND EXCLUDING . * EXCLUDING = 'NO_NOTE' . " No note functions * APPEND EXCLUDING . EXCLUDING = 'NO_EAI_TOOLS' . " No annotations APPEND EXCLUDING . EXCLUDING = 'NO_EAI_FILE_DROP' . " No Drag and Drop in the EAI viewer APPEND EXCLUDING . EXCLUDING = 'NO_OBJ_DISPLAY' . " No displaying of BOR objects APPEND EXCLUDING . EXCLUDING = 'NO_DRAG_DROP' . " No Drag and Drop for documents APPEND EXCLUDING . * --------------------------------------------------------------------- ENDFORM. " BUILD_EXCLUDING *&---------------------------------------------------------------------* *& Form BUILD_KEYWORD_CRITERIA *&---------------------------------------------------------------------* FORM BUILD_KEYWORD_CRITERIA. IF KEY_1 NE SPACE. MOVE: 'BDS_KEYWORD' TO I_SIGNATURE-PROP_NAME, KEY_1 TO I_SIGNATURE-PROP_VALUE. APPEND I_SIGNATURE. ENDIF. IF KEY_2 NE SPACE. MOVE: 'BDS_KEYWORD' TO I_SIGNATURE-PROP_NAME, KEY_2 TO I_SIGNATURE-PROP_VALUE. APPEND I_SIGNATURE. ENDIF. IF KEY_3 NE SPACE. MOVE: 'BDS_KEYWORD' TO I_SIGNATURE-PROP_NAME, KEY_3 TO I_SIGNATURE-PROP_VALUE. APPEND I_SIGNATURE. ENDIF. IF KEY_4 NE SPACE. MOVE: 'BDS_KEYWORD' TO I_SIGNATURE-PROP_NAME, KEY_4 TO I_SIGNATURE-PROP_VALUE. APPEND I_SIGNATURE. ENDIF. IF KEY_5 NE SPACE. MOVE: 'BDS_KEYWORD' TO I_SIGNATURE-PROP_NAME, KEY_5 TO I_SIGNATURE-PROP_VALUE. APPEND I_SIGNATURE. ENDIF. ENDFORM. " BUILD_KEYWORD_CRITERIA *&---------------------------------------------------------------------* *& Form BUILD_FILES_CRITER *&---------------------------------------------------------------------* FORM BUILD_FILES_CRITER. DATA : BEGIN OF URLELEMENTS OCCURS 0 , MYFILENAME(60) TYPE C . DATA : END OF URLELEMENTS . DATA : MLINES TYPE I . CALL METHOD O_DOCUMENT->GET_WITH_URL EXPORTING CLASSNAME = 'ZTESTCLASS' CLASSTYPE = 'OT' URL_LIFETIME = 'T' CHANGING URIS = I_URIS[] SIGNATURE = I_SIGNATURE[] . CLEAR : I_FILES , I_FILES[] . SORT I_URIS BY URI_COUNT DESCENDING . READ TABLE I_URIS INDEX 1 . IF SY-SUBRC = 0 . EDURL = I_URIS-URI . ENDIF . CLEAR : URLELEMENTS , URLELEMENTS[] . SPLIT EDURL AT '/' INTO TABLE URLELEMENTS . DESCRIBE TABLE URLELEMENTS LINES MLINES . READ TABLE URLELEMENTS INDEX MLINES . IF SY-SUBRC = 0 . I_FILES-FILENAME = URLELEMENTS-MYFILENAME . ENDIF . I_FILES-DIRECTORY = 'C:\Stefanos\TEST' . APPEND I_FILES . ENDFORM. " BUILD_FILES_CRITER *&---------------------------------------------------------------------* *& Form BUILD_KEYWORD_QUERY *&---------------------------------------------------------------------* FORM BUILD_KEYWORD_QUERY. IF KEY_1 NE SPACE. MOVE: 'BDS_KEYWORD' TO I_QUERY-PROP_NAME, KEY_1 TO I_QUERY-LOW, 'I' to I_QUERY-SIGN , 'EQ' to I_QUERY-OPTION . APPEND I_QUERY. ENDIF. IF KEY_2 NE SPACE. MOVE: 'BDS_KEYWORD' TO I_QUERY-PROP_NAME, KEY_2 TO I_QUERY-LOW, 'I' to I_QUERY-SIGN , 'EQ' to I_QUERY-OPTION . APPEND I_QUERY. ENDIF. IF KEY_3 NE SPACE. MOVE: 'BDS_KEYWORD' TO I_QUERY-PROP_NAME, KEY_3 TO I_QUERY-LOW, 'I' to I_QUERY-SIGN , 'EQ' to I_QUERY-OPTION . APPEND I_QUERY. ENDIF. IF KEY_4 NE SPACE. MOVE: 'BDS_KEYWORD' TO I_QUERY-PROP_NAME, KEY_4 TO I_QUERY-LOW, 'I' to I_QUERY-SIGN , 'EQ' to I_QUERY-OPTION . APPEND I_QUERY. ENDIF. IF KEY_5 NE SPACE. MOVE: 'BDS_KEYWORD' TO I_QUERY-PROP_NAME, KEY_5 TO I_QUERY-LOW, 'I' to I_QUERY-SIGN , 'EQ' to I_QUERY-OPTION . APPEND I_QUERY. ENDIF. ENDFORM. " BUILD_KEYWORD_QUERY *&---------------------------------------------------------------------* *& Module STATUS_0100 OUTPUT *&---------------------------------------------------------------------* * The PF STATUS STATUS100 called from the module below, has on the * Standard toolbar the buttons BACK , EXIT and CANCEL . * These buttons are provided with function code = 'EXIT' * ------------------------------------------------------------------- MODULE STATUS_0100 OUTPUT. SET PF-STATUS 'STATUS100'. SET TITLEBAR 'TITLEBAR100'. ENDMODULE. " STATUS_0100 OUTPUT *&---------------------------------------------------------------------* *& Module prepare_controls OUTPUT *&---------------------------------------------------------------------* MODULE prepare_controls OUTPUT. IF MY_CONTAINER IS INITIAL. CREATE OBJECT MY_CONTAINER EXPORTING CONTAINER_NAME = 'MCONTAINER' EXCEPTIONS OTHERS = 1. CASE SY-SUBRC. WHEN 0. WHEN OTHERS. RAISE CNTL_ERROR. ENDCASE. 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 I398(00) WITH 'Unknown error'. ENDIF. CALL METHOD VIEWER->INIT_VIEWER EXPORTING PARENT = MY_CONTAINER EXCEPTIONS CNTL_ERROR = 1 CNTL_INSTALL_ERROR = 2 DP_INSTALL_ERROR = 3 DP_ERROR = 4. IF SY-SUBRC NE 0. MESSAGE I398(00) WITH 'Unknown error'. ENDIF. ENDIF. CLEAR EDURL. SORT I_URIS BY URI_COUNT DESCENDING . READ TABLE I_URIS INDEX 1 . IF SY-SUBRC = 0 . EDURL = I_URIS-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 I398(00) WITH 'Unknown error'. ENDIF. ENDIF. ENDMODULE. " prepare_controls OUTPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* * The following module checks the User Command and ends the program * with Document Viewer GUI Control * ---------------------------------------------------------------------- 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 INPUT