SAPABAPDMS文档管理开发.doc
SAP ABAP DMS文档开发1. 用到的BAPI:BAPI_DOCUMENT_CREATE2 ,ZBAPI_DOCUMENT_CHECKOUTVIEW2,BAPI_DOCUMENT_DELETE_DIRECT2. 其中ZBAPI_DOCUMENT_CHECKOUTVIEW2是从标准的BAPI_DOCUMENT_CHECKOUTVIEW2改写(标准的在导出文档时,会自定义一个文档名称);改动代码如下:a) 新增函数组ZMM_CVBAPIb) 将LCVBAPITOP的定义对象拷贝到LZMM_CVBAPITOPc) 在LZMM_CVBAPITOP最后添加如下:INCLUDE lcvbapif01.INCLUDE lcvbapif02.INCLUDE lcvbapif03.INCLUDE lcvbapif04.INCLUDE lcvbapif05.INCLUDE lcvbapif06.INCLUDE lcvbapif07.d) 拷贝函数BAPI_DOCUMENT_CHECKOUTVIEW2到新ZBAPI_DOCUMENT_CHECKOUTVIEW2,添加IMPORT参ORFILENAME,并修改代码。3. 以下为参考代码:* 文档类型CONSTANTS: con_dokar(3) VALUE 'ZQX'.* 存储类别CONSTANTS: con_storage_cat(10) VALUE 'DMS_C1_ST'.FORM frm_creat_file. DATA: lv_rc TYPE i, lt_filetable TYPE filetable WITH HEADER LINE. DATA: lv_filename TYPE filep, lv_path TYPE filep. DATA: lv_docnumber TYPE bapi_doc_aux-docnumber. DATA: ls_documentdata TYPE bapi_doc_draw2, ls_documentdatax TYPE bapi_doc_drawx2, "bapi_doc_draw2x, lt_objectlinks TYPE TABLE OF bapi_doc_drad WITH HEADER LINE, lt_documentfiles TYPE TABLE OF bapi_doc_files2 WITH HEADER LINE, ls_return TYPE bapiret2. DATA: t_tdwp TYPE TABLE OF tdwp WITH HEADER LINE. DATA: name TYPE draw-filep, ext(64) TYPE c. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING window_title = '选择文件' default_extension = '*' CHANGING file_table = lt_filetable rc = lv_rc EXCEPTIONS file_open_dialog_failed = 1 tl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 9. IF lt_filetable IS INITIAL. EXIT. ENDIF. READ TABLE lt_filetable INDEX 1.*解析路径文件 PERFORM frm_split_path_file USING lt_filetable-filename CHANGING lv_filename lv_path. name = lv_filename. WHILE name CA '.'. SPLIT name AT '.' INTO ext name. ENDWHILE. CONCATENATE '.' name INTO name. TRANSLATE name TO LOWER CASE. CALL FUNCTION 'CV120_DOC_GET_APPL' EXPORTING pf_file = name TABLES ptx_tdwp = t_tdwp. IF t_tdwp IS INITIAL. MESSAGE s001 WITH '不支持此类型文件'. ENDIF. READ TABLE t_tdwp INDEX 1. ls_documentdata-documenttype = con_dokar. ls_documentdata-documentversion = '00'. ls_documentdata-documentpart = '000'. ls_documentdata-description = '凭证描述'. ls_documentdata-username = sy-uname.* ls_documentdata-ecnumber = '123'. READ TABLE t_tdwp INDEX 1. lt_documentfiles-documenttype = 'ZQX'. lt_documentfiles-storagecategory = con_storage_cat. lt_documentfiles-wsapplication = t_tdwp-dappl. lt_documentfiles-docpath = lv_path. lt_documentfiles-docfile = lv_filename. lt_documentfiles-checkedin = 'X'. APPEND lt_documentfiles. CALL FUNCTION 'BAPI_DOCUMENT_CREATE2' EXPORTING documentdata = ls_documentdata IMPORTING documentnumber = lv_docnumber return = ls_return TABLES objectlinks = lt_objectlinks documentfiles = lt_documentfiles. IF ls_return-type = 'E' OR lv_docnumber IS INITIAL.* MESSAGE e001 WITH '上传文件出错,请联系管理员'. MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. MESSAGE s001 WITH '上传成功'. ENDIF. wa_file-doc_id = lv_docnumber. wa_file-dname = lv_filename. wa_file-yk_planno = wa_xqjh_h-yk_planno. wa_file-dtype = name. wa_file-credat = sy-datum. wa_file-ctime = sy-uzeit. wa_file-cname = sy-uname. APPEND wa_file TO it_file. IF wa_xqjh_h-yk_planno IS NOT INITIAL. MODIFY ztmm_xqjh_file FROM wa_file. COMMIT WORK AND WAIT. ENDIF.ENDFORM. " FRM_UPLOAD_FILE*&-*& Form frm_split_path_file*&-* text拆分路径和文档名*-* -> p1 text* <- p2 text*-*FORM frm_split_path_file USING uv_fullname CHANGING cv_filename cv_pathname. DATA: lt_match TYPE match_result_tab, ls_match LIKE LINE OF lt_match. FIND ALL OCCURRENCES OF '' IN uv_fullname IN CHARACTER MODE RESULTS lt_match. IF NOT lt_match IS INITIAL. LOOP AT lt_match INTO ls_match. ENDLOOP. ADD 1 TO ls_match-offset. cv_pathname = uv_fullname(ls_match-offset). cv_filename = uv_fullname+ls_match-offset. ENDIF.ENDFORM.*&-*& Form FRM_READ_FILE*&-* text*-* -> p1 text* <- p2 text*-*FORM frm_read_file . DATA: lv_file TYPE string VALUE 'C:XQJH1'. DATA: lv_path TYPE string. DATA: lv_result TYPE abap_bool. DATA: lv_rc TYPE i. DATA: lv_line TYPE i. DATA: lv_originalpath TYPE bapi_doc_aux-filename, lv_orfilename TYPE bapi_doc_aux-filename. DATA: ls_documentfile TYPE bapi_doc_files2, ls_return TYPE bapiret2. lv_result = cl_gui_frontend_services=>directory_exist( directory = lv_file ). IF lv_result <> 'X'. CALL METHOD cl_gui_frontend_services=>directory_create EXPORTING directory = lv_file CHANGING rc = lv_rc EXCEPTIONS directory_create_failed = 1 tl_error = 2 error_no_gui = 3 directory_access_denied = 4 directory_already_exists = 5 path_not_found = 6 unknown_error = 7 not_supported_by_gui = 8 wrong_parameter = 9 OTHERS = 10. IF lv_rc <> 0 OR sy-subrc <> 0. MESSAGE e001 WITH '文件路径拒绝访问'. ENDIF. ENDIF. GET CURSOR LINE lv_line. READ TABLE it_file INTO wa_file INDEX lv_line. CONCATENATE lv_file '' INTO lv_originalpath. lv_orfilename = wa_file-dname. CALL FUNCTION 'ZBAPI_DOCUMENT_CHECKOUTVIEW2' EXPORTING documenttype = con_dokar documentnumber = wa_file-doc_id documentpart = '000' documentversion = '00' documentfile = ls_documentfile originalpath = lv_originalpath orfilename = lv_orfilename IMPORTING return = ls_return. IF ls_return IS NOT INITIAL. MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4. ENDIF. CONCATENATE lv_originalpath lv_orfilename INTO lv_path. CALL METHOD cl_gui_frontend_services=>execute EXPORTING document = lv_path synchronous = 'X' EXCEPTIONS tl_error = 1 error_no_gui = 2 bad_parameter = 3 file_not_found = 4 path_not_found = 5 file_extension_unknown = 6 error_execute_failed = 7 synchronous_failed = 8 not_supported_by_gui = 9 OTHERS = 10. IF sy-subrc <> 0.* Implement suitable error handling here MESSAGE s001 WITH '打开文档失败' DISPLAY LIKE 'E'. ENDIF.ENDFORM. " FRM_READ_FILE*&-*& Form FRM_DOWN_FILE*&-* text*-* -> p1 text* <- p2 text*-*FORM frm_down_file . DATA: lv_filename TYPE string. DATA: lv_path TYPE string. DATA: lv_path_c(100) TYPE c. DATA: lv_fullpath TYPE string. DATA: lv_result TYPE abap_bool. DATA: lv_rc TYPE i. DATA: lv_line TYPE i. DATA: lv_originalpath TYPE bapi_doc_aux-filename, lv_orfilename TYPE bapi_doc_aux-filename. DATA: ls_documentfile TYPE bapi_doc_files2, ls_return TYPE bapiret2. GET CURSOR LINE lv_line. READ TABLE it_file INTO wa_file INDEX lv_line. lv_filename = wa_file-dname. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = '选择位置'* default_extension = default_file_name = lv_filename* with_encoding =* file_filter =* initial_directory =* prompt_on_overwrite = 'X' CHANGING filename = lv_filename path = lv_path fullpath = lv_fullpath EXCEPTIONS tl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 invalid_default_file_name = 4 OTHERS = 5. IF sy-subrc <> 0. EXIT. ENDIF. lv_result = cl_gui_frontend_services=>directory_exist( directory = lv_path ). IF lv_result <> 'X'. MESSAGE e001 WITH '文件路径不存在'. ENDIF. lv_originalpath = lv_path. lv_orfilename = lv_filename. CALL FUNCTION 'ZBAPI_DOCUMENT_CHECKOUTVIEW2' EXPORTING documenttype = con_dokar documentnumber = wa_file-doc_id documentpart = '000' documentversion = '00' documentfile = ls_documentfile originalpath = lv_originalpath orfilename = lv_orfilename IMPORTING return = ls_return. IF ls_return IS NOT INITIAL. MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4. ELSE. MESSAGE s001 WITH '下载成功'. ENDIF.ENDFORM. " FRM_DOWN_FILE*&-*& Form FRM_DELETE_FILE*&-* text*-* -> p1 text* <- p2 text*-*FORM frm_delete_file . DATA: lv_line TYPE i, ls_return TYPE bapiret2. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = '消息提示' text_question = '是否删除文档' text_button_1 = '是' text_button_2 = '否' default_button = '1' display_cancel_button = '' start_column = 25 start_row = 6* popup_type = 'ICON_MESSAGE_ERROR' IMPORTING answer = lv_answer EXCEPTIONS text_not_found = 1 OTHERS = 2. IF lv_answer <> '1'. MESSAGE s001 WITH '用户取消操作' DISPLAY LIKE 'E'. EXIT. ENDIF. GET CURSOR LINE lv_line. READ TABLE it_file INTO wa_file INDEX lv_line. CALL FUNCTION 'BAPI_DOCUMENT_ENQUEUE' EXPORTING documenttype = con_dokar documentnumber = wa_file-doc_id documentpart = '000' documentversion = '00' IMPORTING return = ls_return. IF ls_return IS NOT INITIAL. MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4. ENDIF. CALL FUNCTION 'BAPI_DOCUMENT_DELETE_DIRECT' EXPORTING documenttype = con_dokar documentnumber = wa_file-doc_id documentpart = '000' documentversion = '00' IMPORTING return = ls_return. CALL FUNCTION 'BAPI_DOCUMENT_DEQUEUE' EXPORTING documenttype = con_dokar documentnumber = wa_file-doc_id documentpart = '000' documentversion = '00'. IF ls_return-type <> 'E'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. DELETE it_file INDEX lv_line. DELETE FROM ztmm_xqjh_file WHERE doc_id = wa_file-doc_id. MESSAGE s001 WITH '删除成功'. ELSE. MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4. ENDIF.ENDFORM. " FRM_DELETE_FILE*&-*& Form FRM_DOUBLE_CLICK*&-* text*-* -> p1 text* <- p2 text*-*FORM frm_double_click . DATA: filed TYPE char20. GET CURSOR FIELD filed. IF filed = 'IT_FILE-DOC_ID'. GET CURSOR LINE line. READ TABLE it_file INDEX line. SET PARAMETER ID 'CV1' FIELD it_file-doc_id. SET PARAMETER ID 'CV2' FIELD con_dokar. SET PARAMETER ID 'CV3' FIELD '00'. SET PARAMETER ID 'CV4' FIELD '000'. CALL TRANSACTION 'CV03N' AND SKIP FIRST SCREEN. ENDIF.ENDFORM. " FRM_DOUBLE_CLICK