SAP ABAP DMS文档管理开发.docx
《SAP ABAP DMS文档管理开发.docx》由会员分享,可在线阅读,更多相关《SAP ABAP DMS文档管理开发.docx(14页珍藏版)》请在冰豆网上搜索。
SAPABAPDMS文档管理开发
SAPABAPDMS文档开发
1.用到的BAPI:
BAPI_DOCUMENT_CREATE2,ZBAPI_DOCUMENT_CHECKOUTVIEW2,BAPI_DOCUMENT_DELETE_DIRECT
2.其中ZBAPI_DOCUMENT_CHECKOUTVIEW2是从标准的
BAPI_DOCUMENT_CHECKOUTVIEW2改写(标准的在导出文档时,会自定义一个文档名称);改动代码如下:
a)新增函数组ZMM_CVBAPI
b)将LCVBAPITOP的定义对象拷贝到LZMM_CVBAPITOP
c)在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
cntl_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
cntl_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
cntl_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
cntl_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_