BP客户主数据信用数据批量修改

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.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值