SAP BP客户主数据基本视图批量修改
BAPI: BUPA_CENTRAL_CI_CHANGE
可以通过以上BAPI对BP主数据基本视图里面的字段进行修改处理
关键处理代码如下:
*&---------------------------------------------------------------------*
*& Form frm_process_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_process_data .
TYPES: BEGIN OF lty_but000,
partner TYPE but000-partner,
partner_guid TYPE but000-partner_guid,
END OF lty_but000.
DATA: lt_but000 TYPE TABLE OF lty_but000,
ls_but000 TYPE lty_but000.
CLEAR: lt_but000,
ls_but000.
FIELD-SYMBOLS: <lfs_upload> TYPE gty_upload.
IF gt_upload IS NOT INITIAL.
LOOP AT gt_upload ASSIGNING <lfs_upload>.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <lfs_upload>-partner
IMPORTING
output = <lfs_upload>-partner.
ENDLOOP.
SELECT partner
partner_guid
INTO TABLE lt_but000
FROM but000
FOR ALL ENTRIES IN gt_upload
WHERE partner = gt_upload-partner.
LOOP AT gt_upload ASSIGNING <lfs_upload>.
READ TABLE lt_but000 INTO ls_but000 WITH KEY partner = <lfs_upload>-partner.
IF sy-subrc = 0.
CLEAR: ls_eewb,
ls_eewb_x,
lt_return,
ls_return,
l_fail.
ls_eewb-partnr_guid = ls_but000-partner_guid.
ls_eewb-zrc_adrc = <lfs_upload>-zrc_adrc.
ls_eewb-zrc_ps = <lfs_upload>-zrc_ps.
ls_eewb-zrc_tel = <lfs_upload>-zrc_tel.
ls_eewb_x-zrc_adrc = 'X'.
ls_eewb_x-zrc_ps = 'X'.
ls_eewb_x-zrc_tel = 'X'.
CALL FUNCTION 'BUPA_CENTRAL_CI_CHANGE'
EXPORTING
is_bus000_eew = ls_eewb
is_bus000_eew_x = ls_eewb_x
IMPORTING
et_return = lt_return.
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A' .
l_fail = 'X'.
ENDLOOP.
IF l_fail = 'X'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
gs_alv-partner = <lfs_upload>-partner.
gs_alv-msg_ty = 'E'.
LOOP AT lt_return INTO ls_return.
CONCATENATE gs_alv-msg_txt ls_return-message INTO gs_alv-msg_txt SEPARATED BY ';'.
ENDLOOP.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
gs_alv-partner = <lfs_upload>-partner.
gs_alv-msg_ty = 'S'.
CONCATENATE '客户编号' <lfs_upload>-partner '已修改.' INTO gs_alv-msg_txt SEPARATED BY space.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
完整代码如下:
*&---------------------------------------------------------------------*
*& Report ZSD2001
*&---------------------------------------------------------------------*
*&客户主数据批量修改(运输细节)
*&---------------------------------------------------------------------*
REPORT zsd2001.
TYPES: BEGIN OF gty_upload,
partner TYPE but000-partner,
zrc_adrc TYPE but000-zrc_adrc,
zrc_ps TYPE but000-zrc_ps,
zrc_tel TYPE but000-zrc_tel,
END OF gty_upload,
BEGIN OF gty_alv,
partner TYPE but000-partner,
msg_ty TYPE c, "消息类型
msg_txt TYPE string, "消息
END OF gty_alv.
DATA: ls_eewb TYPE bus000_eew,
ls_eewb_x TYPE bus000_eew_x,
lv_partner_guid TYPE bu_partner_guid,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2,
l_fail TYPE c,
gt_upload TYPE TABLE OF gty_upload,
gs_upload TYPE gty_upload,
gt_alv TYPE TABLE OF gty_alv,
gs_alv TYPE gty_alv,
gs_layout TYPE slis_layout_alv,
gt_fieldcat TYPE TABLE OF slis_fieldcat_alv,
gs_fieldcat TYPE slis_fieldcat_alv,
gv_objid TYPE w3objid.
*--------------------------------------------------------------------*
*选择屏幕
*--------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_file TYPE rlgrap-filename. "选择导入文件
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE TEXT-002.
SELECTION-SCREEN PUSHBUTTON /1(10) button USER-COMMAND cli1 MODIF ID m02.
SELECTION-SCREEN END OF BLOCK blk2.
*--------------------------------------------------------------------*
*INITIALIZATION
*--------------------------------------------------------------------*
INITIALIZATION.
PERFORM frm_init.
*--------------------------------------------------------------------*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR
*--------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM frm_select_path."选择路径
*--------------------------------------------------------------------*
*AT SELECTION-SCREEN
*--------------------------------------------------------------------*
AT SELECTION-SCREEN.
IF sy-ucomm = 'CLI1'.
PERFORM frm_download_file USING gv_objid.
ENDIF.
*--------------------------------------------------------------------*
*START-OF-SELECTION
*--------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM frm_upload_data."数据导入
PERFORM frm_process_data. "处理数据
*--------------------------------------------------------------------*
*END-OF-SELECTION
*--------------------------------------------------------------------*
END-OF-SELECTION.
PERFORM frm_display_alv.
*&---------------------------------------------------------------------*
*& Form frm_init
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_init .
CLEAR: lv_partner_guid,
ls_eewb_x,
ls_eewb,
lt_return,
ls_return,
l_fail,
gt_upload,
gs_upload,
gt_alv,
gs_alv,
gs_layout,
gt_fieldcat,
gs_fieldcat.
gv_objid = 'ZSD2001'.
button = '下载'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_select_path
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_select_path .
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
mask = ',*.* ,*.*.'
mode = '0'
title = '请选择要上传的信息文件'
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
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.
*&---------------------------------------------------------------------*
*& Form frm_upload_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
*&--- 导入内表
*&---EXCEL导入内表
DATA : lt_excel LIKE TABLE OF alsmex_tabline.
DATA : ls_excel TYPE alsmex_tabline, "excel structure
ls_upload LIKE LINE OF gt_upload.
FIELD-SYMBOLS : <field>.
*&---读取EXCEL到内表
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 2
i_end_col = 14
i_end_row = 30000
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* MESSAGE 'EXCEL导入错误或文件路径错误' TYPE 'E'.
ENDIF.
LOOP AT lt_excel INTO ls_excel.
ASSIGN COMPONENT ls_excel-col OF STRUCTURE ls_upload TO <field>.
<field> = ls_excel-value.
AT END OF row.
APPEND ls_upload TO gt_upload.
CLEAR : ls_upload.
ENDAT.
CLEAR : ls_excel.
ENDLOOP.
SORT gt_upload BY partner.
DELETE ADJACENT DUPLICATES FROM gt_upload COMPARING ALL FIELDS.
FREE : lt_excel.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_process_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_process_data .
TYPES: BEGIN OF lty_but000,
partner TYPE but000-partner,
partner_guid TYPE but000-partner_guid,
END OF lty_but000.
DATA: lt_but000 TYPE TABLE OF lty_but000,
ls_but000 TYPE lty_but000.
CLEAR: lt_but000,
ls_but000.
FIELD-SYMBOLS: <lfs_upload> TYPE gty_upload.
IF gt_upload IS NOT INITIAL.
LOOP AT gt_upload ASSIGNING <lfs_upload>.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <lfs_upload>-partner
IMPORTING
output = <lfs_upload>-partner.
ENDLOOP.
SELECT partner
partner_guid
INTO TABLE lt_but000
FROM but000
FOR ALL ENTRIES IN gt_upload
WHERE partner = gt_upload-partner.
LOOP AT gt_upload ASSIGNING <lfs_upload>.
READ TABLE lt_but000 INTO ls_but000 WITH KEY partner = <lfs_upload>-partner.
IF sy-subrc = 0.
CLEAR: ls_eewb,
ls_eewb_x,
lt_return,
ls_return,
l_fail.
ls_eewb-partnr_guid = ls_but000-partner_guid.
ls_eewb-zrc_adrc = <lfs_upload>-zrc_adrc.
ls_eewb-zrc_ps = <lfs_upload>-zrc_ps.
ls_eewb-zrc_tel = <lfs_upload>-zrc_tel.
ls_eewb_x-zrc_adrc = 'X'.
ls_eewb_x-zrc_ps = 'X'.
ls_eewb_x-zrc_tel = 'X'.
CALL FUNCTION 'BUPA_CENTRAL_CI_CHANGE'
EXPORTING
is_bus000_eew = ls_eewb
is_bus000_eew_x = ls_eewb_x
IMPORTING
et_return = lt_return.
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A' .
l_fail = 'X'.
ENDLOOP.
IF l_fail = 'X'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
gs_alv-partner = <lfs_upload>-partner.
gs_alv-msg_ty = 'E'.
LOOP AT lt_return INTO ls_return.
CONCATENATE gs_alv-msg_txt ls_return-message INTO gs_alv-msg_txt SEPARATED BY ';'.
ENDLOOP.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
gs_alv-partner = <lfs_upload>-partner.
gs_alv-msg_ty = 'S'.
CONCATENATE '客户编号' <lfs_upload>-partner '已修改.' INTO gs_alv-msg_txt SEPARATED BY space.
APPEND gs_alv TO gt_alv.
CLEAR: gs_alv.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_alv .
DATA: lv_pos TYPE i.
CLEAR: lv_pos.
gs_layout-zebra = 'X'.
gs_layout-colwidth_optimize = 'X'.
DEFINE d1.
lv_pos = lv_pos + 1.
gs_fieldcat-col_pos = lv_pos.
gs_fieldcat-fieldname = &1.
gs_fieldcat-seltext_l = &2.
gs_fieldcat-seltext_m = &2.
gs_fieldcat-seltext_s = &2.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
END-OF-DEFINITION.
d1: 'PARTNER' '客户编号',
'MSG_TY' '消息类型',
'MSG_TXT' '消息'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout = gs_layout
it_fieldcat = gt_fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* O_PREVIOUS_SRAL_HANDLER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*调用模板
FORM frm_download_file USING p_gv_objid.
DATA: lv_filename TYPE string,
lv_path TYPE string,
lv_fullpath TYPE string,
lv_user_action TYPE i,
lv_destination LIKE rlgrap-filename,
ls_objdata LIKE wwwdatatab,
lv_objid TYPE wwwdatatab-objid,
lv_rc TYPE sy-subrc.
IF sy-ucomm = 'CLI1'.
lv_filename = '客户主数据批量修改模板 - 运输细节'.
CONCATENATE sy-datum
'_'
sy-uzeit
'_'
lv_filename
INTO lv_filename.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = 'XLSX'
default_file_name = lv_filename
initial_directory = lv_path
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
user_action = lv_user_action
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 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.
ELSE.
CLEAR: lv_destination.
lv_destination = lv_fullpath.
ENDIF.
CHECK lv_user_action <> 9.
SELECT SINGLE relid objid
FROM wwwdata
INTO CORRESPONDING FIELDS OF ls_objdata
WHERE srtf2 = 0
AND objid = p_gv_objid
AND relid = 'MI'.
IF sy-subrc = 0.
CLEAR: lv_rc.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' "#EC *
EXPORTING
key = ls_objdata
destination = lv_destination
IMPORTING
rc = lv_rc.
IF lv_rc NE 0.
MESSAGE '该数据模板不存在!' TYPE 'E'.
ELSE.
MESSAGE '模板下载成功' TYPE 'S'.
ENDIF.
ELSE.
MESSAGE '该数据模板不存在!' TYPE 'E'.
ENDIF.
ENDIF.
CLEAR sy-ucomm.
ENDFORM.
post SAP-Garson
原文链接:https://blog.csdn.net/weixin_37949164/article/details/120886935文章来自于网络,如果侵犯了您的权益,请联系站长删除!