S4 HANA中BP客户主数据信用数据批量修改
修改的关键性代码:
LOOP AT gt_upload INTO gs_upload.
*--------------------------------------------------------------------*
*修改BP客户主数据信用数据
*--------------------------------------------------------------------*
CLEAR: lv_fail.
gs_alv-partner = gs_upload-partner.
gs_alv-risk_class = gs_upload-risk_class.
io_facade = cl_ukm_facade=>create( i_activity = cl_ukm_cnst_eventing=>bp_maintenance ).
io_bupa_factory = io_facade->get_bupa_factory( ).
IF gs_upload-partner IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_upload-partner
IMPORTING
output = gs_upload-partner.
ENDIF.
io_partner = io_bupa_factory->get_business_partner( gs_upload-partner ).
io_partner->get_bp_cms( IMPORTING es_bp_cms = lwa_ukm_s_bp_cms ).
lwa_ukm_s_bp_cms-risk_class = gs_upload-risk_class.
io_partner->set_bp_cms( lwa_ukm_s_bp_cms ).
io_bupa_factory->save_all( EXPORTING i_upd_task = abap_false
RECEIVING et_return = c_return ).
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
gs_alv-msg_ty = 'S'.
CONCATENATE '业务伙伴' gs_alv-partner '修改成功.' INTO gs_alv-msg_txt SEPARATED BY space.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
gs_alv-msg_ty = 'E'.
CONCATENATE '业务伙伴' gs_alv-partner '修改失败.' INTO gs_alv-msg_txt SEPARATED BY space.
ENDIF.
COLLECT gs_alv INTO gt_alv.
CLEAR: gs_alv, gs_upload.
ENDLOOP.
详细完整代码:
*&---------------------------------------------------------------------*
*& Report ZSD2012
*&---------------------------------------------------------------------*
*&BP客户主数据信用数据批量修改
*&---------------------------------------------------------------------*
REPORT zsd2012.
*--------------------------------------------------------------------*
*变量定义
*--------------------------------------------------------------------*
TYPES: BEGIN OF gty_upload,
partner TYPE ukmbp_cms-partner,
risk_class TYPE ukmbp_cms-risk_class,
END OF gty_upload,
BEGIN OF gty_alv,
partner TYPE ukmbp_cms-partner,
risk_class TYPE ukmbp_cms-risk_class,
msg_ty TYPE c, "消息类型
msg_txt TYPE string, "消息
END OF gty_alv.
DATA: 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: gt_upload,
gs_upload,
gt_alv,
gs_alv,
gs_layout,
gt_fieldcat,
gs_fieldcat.
gv_objid = 'ZSD2012'.
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 = 2
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 .
DATA: lv_fail TYPE c.
DATA: io_facade TYPE REF TO cl_ukm_facade,
io_partner TYPE REF TO cl_ukm_business_partner,
io_bupa_factory TYPE REF TO cl_ukm_bupa_factory,
io_account TYPE REF TO cl_ukm_account,
lw_bp_credit_sgm TYPE ukm_s_bp_cms_sgm,
c_return TYPE ukm_t_monitor_return.
DATA: lwa_ukm_s_bp_cms TYPE ukm_s_bp_cms.
FIELD-SYMBOLS: <lfs_alv> TYPE gty_alv.
CLEAR: gt_alv,
gs_alv,
lv_fail.
LOOP AT gt_upload INTO gs_upload.
*--------------------------------------------------------------------*
*修改BP客户主数据信用数据
*--------------------------------------------------------------------*
CLEAR: lv_fail.
gs_alv-partner = gs_upload-partner.
gs_alv-risk_class = gs_upload-risk_class.
io_facade = cl_ukm_facade=>create( i_activity = cl_ukm_cnst_eventing=>bp_maintenance ).
io_bupa_factory = io_facade->get_bupa_factory( ).
IF gs_upload-partner IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_upload-partner
IMPORTING
output = gs_upload-partner.
ENDIF.
io_partner = io_bupa_factory->get_business_partner( gs_upload-partner ).
io_partner->get_bp_cms( IMPORTING es_bp_cms = lwa_ukm_s_bp_cms ).
lwa_ukm_s_bp_cms-risk_class = gs_upload-risk_class.
io_partner->set_bp_cms( lwa_ukm_s_bp_cms ).
io_bupa_factory->save_all( EXPORTING i_upd_task = abap_false
RECEIVING et_return = c_return ).
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
gs_alv-msg_ty = 'S'.
CONCATENATE '业务伙伴' gs_alv-partner '修改成功.' INTO gs_alv-msg_txt SEPARATED BY space.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
gs_alv-msg_ty = 'E'.
CONCATENATE '业务伙伴' gs_alv-partner '修改失败.' INTO gs_alv-msg_txt SEPARATED BY space.
ENDIF.
COLLECT gs_alv INTO gt_alv.
CLEAR: gs_alv, gs_upload.
ENDLOOP.
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' '业务伙伴',
'RISK_CLASS' '风险类',
'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 = 'BP业务伙伴信用数据批量修改模板'.
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.