BP客户创建成功后维护信用段数据

  METHOD _process_business_logic.

    DATA lv_partner TYPE but000-partner.
    DATA lv_message TYPE string.
    DATA:lv_credit_limit1    TYPE char18.
    "信用相关信息
    DATA:
      io_facade        TYPE REF TO cl_ukm_facade,
      io_bupa_factory  TYPE REF TO cl_ukm_bupa_factory,
      io_partner       TYPE REF TO cl_ukm_business_partner,
      io_account       TYPE REF TO cl_ukm_account,
      ls_bp_credit_sgm TYPE ukm_s_bp_cms_sgm,
      ls_ukm_s_bp_cms  TYPE ukm_s_bp_cms,
      lv_credit_sgmnt  TYPE ukm_credit_sgmnt,
      lt_return        TYPE ukm_t_monitor_return,
      ls_return        TYPE ukm_s_monitor_return,
      io_calculator    TYPE REF TO if_ukm_calculator.

    "判断S4中客户是否存在
    lv_partner = is_input-data-kunnr.
    lv_partner = |{ lv_partner ALPHA = IN }|.
    SELECT COUNT(*)
      FROM kna1
      WHERE kunnr = @lv_partner.
    IF sy-subrc NE 0.
      es_output-status  = 'E'.
*该客户不存在
*      MESSAGE s037(zsd200) INTO es_output-message.
      RAISE EXCEPTION TYPE zcx_if_exception MESSAGE s037(zsd200). "该客户不存在
    ENDIF.

    "信用额度处理
    lv_credit_limit1  = is_input-data-credit_limit.
    IF lv_credit_limit1 CS ','.
      REPLACE ALL OCCURRENCES OF ',' IN lv_credit_limit1 WITH space.
      CONDENSE lv_credit_limit1 NO-GAPS.
    ENDIF.

*客户创建成功后维护信用段数据
    io_facade  = cl_ukm_facade=>create( i_activity = cl_ukm_cnst_eventing=>bp_maintenance ).
    io_calculator = io_facade->get_calculator( ).
    io_bupa_factory = io_facade->get_bupa_factory( ).

    lv_credit_sgmnt = 'SGEU'. "信用段 默认值
    io_partner = io_bupa_factory->get_business_partner( lv_partner ).

    CALL METHOD io_bupa_factory->get_credit_account
      EXPORTING
        i_partner         = lv_partner
        i_credit_sgmnt    = lv_credit_sgmnt
      RECEIVING
        ro_credit_account = io_account.

    io_account->get_bp_cms_sgm( IMPORTING es_bp_cms_sgm = ls_bp_credit_sgm ).
    ls_bp_credit_sgm-credit_limit   = lv_credit_limit1."信用额度
    ls_bp_credit_sgm-limit_valid_date = is_input-data-limit_valid_date.

    io_account->set_bp_cms_sgm( EXPORTING is_bp_cms_sgm = ls_bp_credit_sgm ).

    io_bupa_factory->save_all( EXPORTING i_upd_task = abap_false
                               RECEIVING et_return  = lt_return ).

    LOOP AT lt_return INTO ls_return WHERE msgty = 'E' OR msgty = 'A'.
      CONCATENATE lv_message ls_return-message INTO lv_message SEPARATED BY space.
    ENDLOOP.

    IF lv_message IS INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = abap_true.

      es_output-status  = 'S'.
*客户信用额度更新成功
      MESSAGE s038(zsd200) INTO es_output-message.
    ELSE.
      es_output-status = 'E'.
*      MESSAGE e020(ztrd_sd01) INTO es_output-message.
      RAISE EXCEPTION TYPE zcx_if_exception MESSAGE e020(ztrd_sd01) WITH is_input-data-kunnr. "客户&1临时信用额度更新失败!
*      RAISE EXCEPTION TYPE zcx_if_exception MESSAGE e067(zbc001). "执行失败
    ENDIF.

  ENDMETHOD.

 

posted @ 2026-08-28 10:45  Lan_dev  阅读(7)  评论(0)    收藏  举报