Here is a requirement need to update the BP credit data by batch job, usually, we have 3 ways to do it:
- BAPI, it is our 1st choice, but unfortunately we can't find it in this case.
- FM, we couldn't find it either, actually we do find some related FMs, they just don't work.
- BDC, we hate it, but sometimes it is our only choice.
I really don't want to choose BDC, after research for a while, finally, we found the 4th way to do it by code - using standard class, we can found a series classes related TCODE UKM_BP named CL_UKM*, all these classes are controled byCL_UKM_BUPA_FACTORY.
below is example code to update a risk class and credit limit for a BP:
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.
DATA: lwa_ukm_s_bp_cms TYPE ukm_s_bp_cms.
DATA: lv_partner TYPE bu_partner,
lv_credit_sgmnt TYPE ukm_credit_sgmnt.
io_facade = cl_ukm_facade=>create( i_activity = cl_ukm_cnst_eventing=>bp_maintenance ).
io_bupa_factory = io_facade->get_bupa_factory( ).
lv_partner = '0006000021'.
lv_credit_sgmnt = '0000'.
io_partner = io_bupa_factory->get_business_partner( lv_partner ).
io_partner->get_bp_cms( IMPORTING es_bp_cms = lwa_ukm_s_bp_cms ).
lwa_ukm_s_bp_cms-risk_class = 'ZXX'.
io_partner->set_bp_cms( lwa_ukm_s_bp_cms ).
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 = lw_bp_credit_sgm ).
lw_bp_credit_sgm-credit_limit = '1.00'.
lw_bp_credit_sgm-xcritical = 'X'.
lw_bp_credit_sgm-limit_chg_date = sy-datum.
io_account->set_bp_cms_sgm( EXPORTING is_bp_cms_sgm = lw_bp_credit_sgm ).
io_bupa_factory->save_all( ).