1、功能说明:
1.1、创建/修改客户主数据
1.2、维护通用/公司代码/销售/信贷视图
2、代码
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(IS_INPUT) TYPE xxx
*" EXPORTING
*" REFERENCE(ES_OUTPUT) TYPE xxx
*"----------------------------------------------------------------------
"根据伙伴GUID号取出客户编号
DATA:lt_partnerguid_list TYPE bu_partner_guid_t,
ls_partnerguid_list LIKE LINE OF lt_partnerguid_list,
lt_cust_list TYPE cvis_cust_link_t,
ls_cust_list TYPE cvi_cust_link.
DATA : lv_str1 TYPE char200,
lv_str2 TYPE char200,
lv_str3 TYPE char20.
DATA : ls_zsmm_009 TYPE zsmm_009 .
DATA :lt_data TYPE cvis_ei_extern_t,
lv_boole TYPE boole_d,
lv_task1 TYPE char1,
lv_task2 TYPE char1.
DATA : lv_kunnr TYPE kunnr,
lv_vkorg TYPE vkorg,
lv_vtweg TYPE vtweg,
lv_spart TYPE spart.
DATA : lt_functions TYPE TABLE OF cmds_ei_functions,
ls_functions TYPE cmds_ei_functions.
DEFINE field_check.
IF &1 IS INITIAL .
es_output-mt_oa057_resp-msg = es_output-mt_oa057_resp-msg && &2 .
ENDIF .
END-OF-DEFINITION.
DATA lv_uuid TYPE but000-partner_guid. "UUID
DATA(ls_basic) = is_input-mt_oa057_req-input-basic_view .
DATA(lt_bank) = is_input-mt_oa057_req-input-bank_view .
DATA(lt_company) = is_input-mt_oa057_req-input-company_view .
DATA(lt_sales) = is_input-mt_oa057_req-input-sales_view .
DATA(ls_umk) = is_input-mt_oa057_req-input-umk_view .
field_check :ls_basic-zflag '操作标识/' .
* field_check :ls_basic-partner_role '角色/' .
field_check :ls_basic-bu_group '客户分组/' .
field_check :ls_basic-name_org1 '客户名称/' .
field_check :ls_basic-bu_sort1 '客户简称/' .
field_check :ls_basic-street '注册地址/' .
field_check :ls_basic-land1 '国家/' .
field_check :ls_basic-region '省份/' .
field_check :ls_basic-ort01 '城市/' .
* field_check :ls_basic-taxtype '税类别/' .
* field_check :ls_basic-taxnumxl '税号/' .
field_check :ls_basic-zoaid 'OA流程编号/' .
IF es_output-mt_oa057_resp-msg IS NOT INITIAL .
es_output-mt_oa057_resp-type = 'E' .
SHIFT es_output-mt_oa057_resp-msg RIGHT DELETING TRAILING '/'.
es_output-mt_oa057_resp-msg = es_output-mt_oa057_resp-msg && '不能为空' .
ELSE .
lv_str1 = ls_basic-name_org1 .
lv_str2 = ls_basic-street .
ls_basic-partner = lv_kunnr = |{ ls_basic-partner ALPHA = IN }|.
CASE ls_basic-zflag.
WHEN '0'.
ls_basic-zflag = 'I' .
WHEN '1'.
ls_basic-zflag = 'U' .
ENDCASE.
CHECK ls_basic-zflag = 'I' OR ls_basic-zflag = 'U' .
CASE ls_basic-zflag.
WHEN 'I'.
lv_task1 = 'I' .
lv_task2 = 'I' .
WHEN 'U'.
lv_task1 = 'M' .
lv_task2 = 'U' .
ENDCASE.
APPEND INITIAL LINE TO lt_data ASSIGNING FIELD-SYMBOL(<fs_data>) .
*---抬头数据
<fs_data>-partner-header-object_task = lv_task1.
IF ls_basic-zflag = 'I' .
TRY .
lv_uuid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
CATCH cx_uuid_error.
ENDTRY.
ELSEIF ls_basic-zflag = 'U' .
SELECT SINGLE partner_guid INTO lv_uuid
FROM but000
WHERE partner = lv_kunnr .
ENDIF .
*---中心数据
" 合作伙伴数据
IF ls_basic-zflag = 'I' .
<fs_data>-partner-central_data-common-data-bp_control-category = '2'. " 业务伙伴类别
<fs_data>-partner-central_data-common-data-bp_control-grouping = ls_basic-bu_group. " 业务伙伴分组
<fs_data>-partner-central_data-role-roles = VALUE #( ( task = 'I' data_key = 'FLCU00' )
( task = 'I' data_key = 'FLCU01' )
( task = 'I' data_key = 'UKM000' ) ).
ELSE .
<fs_data>-partner-header-object_instance-bpartner = |{ ls_basic-partner ALPHA = IN }|.
<fs_data>-partner-header-object = lv_uuid. "GUID
<fs_data>-partner-header-object_instance-bpartnerguid = lv_uuid. "GUID
ENDIF .
<fs_data>-partner-header-object_instance-bpartnerguid = lv_uuid. "GUID
<fs_data>-partner-central_data-common-data-bp_organization-name1 = lv_str1+0(40). " 组织名称1
<fs_data>-partner-central_data-common-data-bp_organization-name2 = lv_str1+40(40). " 组织名称2
<fs_data>-partner-central_data-common-data-bp_organization-name3 = lv_str1+80(40). " 组织名称3
<fs_data>-partner-central_data-common-data-bp_centraldata-searchterm1 = ls_basic-bu_sort1. " 客户简称
<fs_data>-partner-central_data-common-datax-bp_organization-name1 = 'X'. " 组织名称1
<fs_data>-partner-central_data-common-datax-bp_organization-name2 = 'X'. " 组织名称2
<fs_data>-partner-central_data-common-datax-bp_organization-name3 = 'X'. " 组织名称3
<fs_data>-partner-central_data-common-datax-bp_centraldata-searchterm1 = 'X'. " 客户简称
<fs_data>-partner-finserv_data-common-data-fsbp_centrl-group_feature = ls_basic-group_feature. "关联方标识
<fs_data>-partner-finserv_data-common-datax-fsbp_centrl-group_feature = 'X'. "关联方标识
IF ls_basic-remark_1 IS NOT INITIAL .
<fs_data>-partner-finserv_data-common-data-fsbp_centrl-unw_remark = ls_basic-remark_1. "联系人职位
<fs_data>-partner-finserv_data-common-datax-fsbp_centrl-unw_remark = 'X'. "联系人职位
ENDIF .
*---地址数据
IF ls_basic-zflag = 'U' .
SELECT SINGLE address_guid
INTO @DATA(lv_address_guid)
FROM but020
WHERE partner = @ls_basic-partner.
ENDIF .
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = ls_basic-spras
IMPORTING
output = ls_basic-spras
EXCEPTIONS
unknown_language = 1
OTHERS = 2.
APPEND VALUE #( task = lv_task1
data_key-guid = lv_address_guid
data-postal-data-standardaddress = abap_true
data-postal-data-street = lv_str2+0(60) "注册地址
data-postal-data-str_suppl1 = lv_str2+60(40) "注册地址
data-postal-data-country = ls_basic-land1 "国家
data-postal-data-region = ls_basic-region "省份
data-postal-data-city = ls_basic-ort01 "城市
data-postal-data-postl_cod1 = ls_basic-pstlz "邮编
data-postal-data-langu = ls_basic-spras "语言
data-postal-data-c_o_name = ls_basic-name1
data-postal-datax-standardaddress = 'X'
data-postal-datax-street = 'X' "注册地址
data-postal-datax-str_suppl1 = 'X' "注册地址
data-postal-datax-country = 'X' "国家
data-postal-datax-region = 'X' "省份
data-postal-datax-city = 'X' "城市
data-postal-datax-postl_cod1 = 'X' "邮编
data-postal-datax-langu = 'X' "语言
data-postal-datax-c_o_name = 'X' )
TO <fs_data>-partner-central_data-address-addresses .
*---客户联系信息
READ TABLE <fs_data>-partner-central_data-address-addresses ASSIGNING FIELD-SYMBOL(<fs_address>) INDEX 1.
IF ls_basic-telf1_1 IS NOT INITIAL .
APPEND VALUE #( contact-task = lv_task2
contact-data-telephone = ls_basic-telf1_1
contact-data-r_3_user = '3'
contact-datax-telephone = 'X'
contact-datax-r_3_user = 'X' ) "电话号
TO <fs_address>-data-communication-phone-phone .
ENDIF .
IF ls_basic-telf1_2 IS NOT INITIAL .
APPEND VALUE #( contact-task = lv_task2
contact-data-telephone = ls_basic-telf1_2
contact-data-r_3_user = '3'
contact-datax-telephone = 'X'
contact-datax-r_3_user = 'X' ) "电话号
TO <fs_address>-data-communication-phone-phone .
ENDIF .
IF ls_basic-email1 IS NOT INITIAL .
APPEND VALUE #( contact-task = lv_task2
contact-data-e_mail = ls_basic-email1
contact-datax-e_mail = 'X' ) "邮箱
TO <fs_address>-data-communication-smtp-smtp .
ENDIF .
IF ls_basic-email2 IS NOT INITIAL .
APPEND VALUE #( contact-task = lv_task2
contact-data-e_mail = ls_basic-email2
contact-datax-e_mail = 'X' ) "邮箱
TO <fs_address>-data-communication-smtp-smtp .
ENDIF .
*---税号
IF ls_basic-taxnumxl IS NOT INITIAL .
APPEND VALUE #( task = lv_task2
data_key-taxtype = ls_basic-taxtype "税类别
data_key-taxnumber = ls_basic-taxnumxl "税号
data_key-taxnumxl = ls_basic-taxnumxl ) "税号
TO <fs_data>-partner-central_data-taxnumber-taxnumbers .
ENDIF .
*---银行数据
LOOP AT lt_bank INTO DATA(ls_bank) .
lv_str3 = ls_bank-bankn .
APPEND VALUE #( task = 'I'
data_key = |{ ls_bank-bkvid ALPHA = IN }| " 银行明细标识
data-bank_ctry = ls_bank-banks " 银行国家代码
datax-bank_ctry = 'X'
data-bank_key = ls_bank-bankl " 银行代码
datax-bank_key = 'X'
data-bank_acct = lv_str3+0(18) " 银行帐户号码
datax-bank_acct = 'X'
data-bank_ref = lv_str3+18(2) "ls_bank-bkref " 参考细节
datax-bank_ref = 'X' )
TO <fs_data>-partner-central_data-bankdetail-bankdetails .
"如果银行主数据不存在或发生变化,需要做创建或修改银行主数据
MOVE-CORRESPONDING ls_bank TO ls_zsmm_009 .
PERFORM frm_handle_bank USING ls_zsmm_009 CHANGING lv_msg_line.
IF lv_msg_line IS NOT INITIAL.
IF es_output-mt_oa057_resp-msg IS INITIAL.
es_output-mt_oa057_resp-msg = lv_msg_line.
ELSE.
es_output-mt_oa057_resp-msg = es_output-mt_oa057_resp-msg && '|' && lv_msg_line.
ENDIF.
ENDIF.
CLEAR : ls_bank ,lv_str3.
ENDLOOP .
"即是客户又是供应商
IF ls_basic-lifnr IS NOT INITIAL .
<fs_data>-customer-central_data-central-data-lifnr = ls_basic-lifnr .
<fs_data>-customer-central_data-central-datax-lifnr = 'X' .
ENDIF .
*------------------------------------------------------------------
* 客户数据
*------------------------------------------------------------------
*---抬头数据
<fs_data>-customer-header-object_task = lv_task2.
IF ls_basic-zflag = 'I' .
<fs_data>-ensure_create-create_customer = abap_true.
<fs_data>-customer-header-object_task = 'I'.
ELSE .
<fs_data>-customer-header-object_task = 'U'.
<fs_data>-customer-header-object_instance-kunnr = |{ ls_basic-partner ALPHA = IN }| .
ENDIF.
"公司代码数据
IF ls_basic-bu_group <> 'ZC03' .
LOOP AT lt_company INTO DATA(ls_company) .
IF ls_basic-zflag = 'I' .
lv_comp_task = 'I' .
ELSE.
SELECT COUNT(*) FROM knb1 WHERE kunnr = ls_basic-partner AND bukrs = ls_company-bukrs .
IF sy-subrc = 0 ."更新
lv_comp_task = 'U' .
ELSE ."新建
lv_comp_task = 'I' .
ENDIF .
ENDIF .
APPEND VALUE #( task = lv_comp_task
data_key-bukrs = ls_company-bukrs "公司代码
data-akont = |{ ls_company-akont ALPHA = IN }| "统驭科目
datax-akont = 'X' "统驭科目
data-zterm = ls_company-zterm "付款条件
datax-zterm = 'X' ) "付款条件
TO <fs_data>-customer-company_data-company .
CLEAR : ls_company .
ENDLOOP .
ENDIF .
IF ls_basic-bu_group <> 'ZC02' .
LOOP AT lt_sales INTO DATA(ls_sales) .
*---业务伙伴数据
lt_functions = VALUE #( ( data_key-parvw = 'AG' data-defpa = 'X' datax-defpa = 'X' )
( data_key-parvw = 'RE' data-defpa = 'X' datax-defpa = 'X' )
( data_key-parvw = 'RG' data-defpa = 'X' datax-defpa = 'X' )
( data_key-parvw = 'WE' data-defpa = 'X' datax-defpa = 'X' ) ) .
*---销售数据
APPEND VALUE #( task = lv_task2
data_key-vkorg = ls_sales-vkorg
data_key-vtweg = ls_sales-vtweg
data_key-spart = ls_sales-spart
data-waers = ls_sales-waers
data-kalks = '1'
data-vsbed = ls_sales-vsbed
data-inco1 = ls_sales-inco1
data-inco2_l = ls_sales-inco2_l
data-zterm = ls_sales-zterm
data-ktgrd = ls_sales-ktgrd
functions-functions = lt_functions
datax-waers = 'X'
datax-kalks = 'X'
datax-vsbed = 'X'
datax-inco1 = 'X'
datax-inco2_l = 'X'
datax-zterm = 'X'
datax-ktgrd = 'X' )
TO <fs_data>-customer-sales_data-sales .
*---销项税
APPEND VALUE #( task = lv_task2
data_key-aland = 'CN'
data_key-tatyp = 'MWST'
data-taxkd = ls_sales-taxkd
datax-taxkd = 'X' )
TO <fs_data>-customer-central_data-tax_ind-tax_ind .
CLEAR : ls_sales .
ENDLOOP .
ENDIF .
IF es_output-mt_oa057_resp-msg IS INITIAL.
*---客户主数据模拟维护
"若是修改的情况,先删除银行数据在重建
IF ls_basic-zflag = 'U' .
SELECT * INTO TABLE @DATA(lt_but0bk)
FROM but0bk
WHERE partner = @lv_kunnr.
LOOP AT lt_but0bk INTO DATA(ls_but0bk).
CALL FUNCTION 'BUPA_BANKDETAIL_REMOVE'
EXPORTING
iv_partner = ls_but0bk-partner
iv_bkvid = ls_but0bk-bkvid.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
WAIT UP TO '0.5' SECONDS .
ENDLOOP.
ENDIF .
cl_md_bp_maintain=>maintain(
EXPORTING
i_data = lt_data
IMPORTING
e_return = DATA(lt_return) ).
LOOP AT lt_return INTO DATA(ls_return) .
SORT ls_return-object_msg BY id number message.
DELETE ADJACENT DUPLICATES FROM ls_return-object_msg COMPARING id number message.
LOOP AT ls_return-object_msg INTO DATA(ls_error) WHERE type CA 'AEX'.
IF es_output-mt_oa057_resp-msg IS INITIAL.
es_output-mt_oa057_resp-msg = ls_error-message.
ELSE.
CONCATENATE es_output-mt_oa057_resp-msg ls_error-message INTO es_output-mt_oa057_resp-msg SEPARATED BY '|'.
ENDIF.
ENDLOOP.
IF sy-subrc = 0 .
EXIT .
ENDIF .
ENDLOOP .
IF es_output-mt_oa057_resp-msg IS INITIAL .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
WAIT UP TO 1 SECONDS .
"根据UUID获取供应商编码
ls_partnerguid_list = lv_uuid.
APPEND ls_partnerguid_list TO lt_partnerguid_list.
lt_cust_list = cvi_mapper=>get_instance( )->get_assigned_customers_for_bps(
i_partner_guids = lt_partnerguid_list ).
IF lt_cust_list IS NOT INITIAL .
READ TABLE lt_cust_list INTO ls_cust_list INDEX 1.
IF sy-subrc EQ 0.
es_output-mt_oa057_resp-data-kunnr = ls_cust_list-customer.
ENDIF.
ENDIF .
es_output-mt_oa057_resp-type = 'S' .
es_output-mt_oa057_resp-msg = '客户维护成功'.
IF ls_basic-bu_group = 'ZC03' AND ls_basic-zflag = 'I'."更新送货地址
CLEAR : lv_msg_line .
PERFORM frm_change_custom USING lt_sales ls_cust_list-customer lv_kunnr CHANGING lv_msg_line.
IF lv_msg_line IS NOT INITIAL .
es_output-mt_oa057_resp-msg = es_output-mt_oa057_resp-msg && '/送货地址更新失败' && lv_msg_line .
ENDIF .
ENDIF .
IF ls_umk IS NOT INITIAL ."信贷试图维护
CLEAR : lv_msg_line .
PERFORM frm_create_ukmd USING ls_umk ls_cust_list-customer CHANGING lv_msg_line .
IF lv_msg_line IS NOT INITIAL .
es_output-mt_oa057_resp-msg = es_output-mt_oa057_resp-msg && '/信贷视图维护失败失败' && lv_msg_line .
ENDIF .
ENDIF .
IF ls_basic-taxnumxl IS NOT INITIAL .
DO 10 TIMES.
SELECT SINGLE * FROM dfkkbptaxnum INTO @DATA(ls_tax)
WHERE partner EQ @ls_cust_list-customer.
IF sy-subrc EQ 0.
IF ls_tax-taxtype EQ 'CN5'.
CALL FUNCTION 'BAPI_BUPA_TAX_REMOVE'
EXPORTING
businesspartner = ls_cust_list-customer
taxtype = 'CN5'.
CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
EXPORTING
businesspartner = ls_cust_list-customer
taxtype = 'CN0'
taxnumber = CONV char20( ls_basic-taxnumxl ).
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDIF.
EXIT.
ELSE.
WAIT UP TO '0.2' SECONDS.
ENDIF.
ENDDO.
ENDIF .
ELSE .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
es_output-mt_oa057_resp-type = 'E'.
es_output-mt_oa057_resp-msg = '客户创建失败' && es_output-mt_oa057_resp-msg.
ENDIF .
ELSE .
es_output-mt_oa057_resp-type = 'E' .
ENDIF.
ENDIF .
FORM frm_handle_bank USING ps_data TYPE zsmm_009 CHANGING pv_msg TYPE string.
DATA: lv_bank_key TYPE bankk,
ls_return TYPE bapiret2.
SELECT SINGLE * FROM bnka
WHERE banks EQ @ps_data-banks
AND bankl EQ @ps_data-bankl
INTO @DATA(ls_bnka).
IF sy-subrc EQ 0.
IF ls_bnka-banka EQ ps_data-banka.
ELSE. "银行名称发生修改
CALL FUNCTION 'BAPI_BANK_CHANGE'
EXPORTING
bankcountry = ps_data-banks
bankkey = ps_data-bankl
bank_address = VALUE bapi1011_address( bank_name = ps_data-banka )
bank_addressx = VALUE bapi1011_addressx( bank_name = abap_true )
* BANK_DETAIL =
* BANK_DETAILX =
* BANK_ADDRESS1 =
* BANK_ADDRESS1X =
* I_CHECK_BEFORE_SAVE =
IMPORTING
return = ls_return.
IF ls_return-type CA 'AEX'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
IF pv_msg IS INITIAL.
pv_msg = TEXT-006 && ls_return-message.
ELSE.
pv_msg = pv_msg && ',' && ls_return-message.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_BANK_CREATE'
EXPORTING
bank_ctry = ps_data-banks
bank_key = ps_data-bankl
bank_address = VALUE bapi1011_address( bank_name = ps_data-banka )
IMPORTING
return = ls_return
bankkey = lv_bank_key.
IF lv_bank_key IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
IF pv_msg IS INITIAL.
pv_msg = TEXT-005 && ls_return-message.
ELSE.
pv_msg = pv_msg && ',' && ls_return-message.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_change_custom
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_CUST_LIST_CUSTOMER
*& --> LS_BASIC_PARTNER
*& <-- LV_MSG_LINE
*&---------------------------------------------------------------------*
FORM frm_change_custom USING p_lt_input TYPE zpodt_oa057_req_sales_view_tab
p_ls_customer TYPE kunnr
p_ls_kunnr TYPE kunnr
CHANGING p_lv_msg_line TYPE string.
DATA :lt_data TYPE cvis_ei_extern_t,
lv_uuid TYPE but000-partner_guid,
lt_functions TYPE TABLE OF cmds_ei_functions,
ls_functions TYPE cmds_ei_functions.
APPEND INITIAL LINE TO lt_data ASSIGNING FIELD-SYMBOL(<fs_data>) .
<fs_data>-partner-header-object_task = 'M'.
<fs_data>-partner-header-object_instance-bpartner = |{ p_ls_kunnr ALPHA = IN }|.
SELECT SINGLE partner_guid INTO lv_uuid
FROM but000
WHERE partner = <fs_data>-partner-header-object_instance-bpartner.
<fs_data>-partner-header-object = lv_uuid.
<fs_data>-partner-header-object_instance-bpartnerguid = lv_uuid. "GUID
LOOP AT p_lt_input INTO DATA(ls_input) .
lt_functions = VALUE #( ( task = 'I' data_key-parvw = 'WE' data-partner = p_ls_customer datax-partner = 'X' ) ) .
APPEND VALUE #( task = 'M'
data_key-vkorg = ls_input-vkorg
data_key-vtweg = ls_input-vtweg
data_key-spart = ls_input-spart
functions-functions = lt_functions )
TO <fs_data>-customer-sales_data-sales .
ENDLOOP .
cl_md_bp_maintain=>maintain(
EXPORTING
i_data = lt_data
IMPORTING
e_return = DATA(lt_return) ).
LOOP AT lt_return INTO DATA(ls_return) .
SORT ls_return-object_msg BY id number message.
DELETE ADJACENT DUPLICATES FROM ls_return-object_msg COMPARING id number message.
LOOP AT ls_return-object_msg INTO DATA(ls_error) WHERE type CA 'AEX'.
p_lv_msg_line = ls_error-message.
ENDLOOP.
ENDLOOP .
IF p_lv_msg_line IS NOT INITIAL .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_create_ukmd
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LS_UMK
*& --> LS_CUST_LIST_CUSTOMER
*& <-- LV_MSG_LINE
*&---------------------------------------------------------------------*
FORM frm_create_ukmd USING p_ls_umk TYPE zpodt_oa057_req_umk_view
p_ls_cust_list_customer TYPE kunnr
CHANGING p_lv_msg_line TYPE string.
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,
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.
* 创建'MAINTAIN'对象
* io_facade = cl_ukm_facade=>create( i_activity = cl_ukm_cnst_eventing=>bp_maintenance ).
* io_bupa_factory = io_facade->get_bupa_factory( ).
io_bupa_factory = cl_ukm_facade=>create( i_activity = cl_ukm_cnst_eventing=>bp_maintenance )->get_bupa_factory( ).
lv_partner = p_ls_cust_list_customer. "客户代码
lv_credit_sgmnt = p_ls_umk-credit_sgmnt."信用段
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 = p_ls_umk-risk_class. "风险类
lwa_ukm_s_bp_cms-check_rule = p_ls_umk-check_rule. "检查规则
lwa_ukm_s_bp_cms-limit_rule = p_ls_umk-limit_rule. "计分规则
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 = p_ls_umk-credit_limit."信用额度
io_account->set_bp_cms_sgm( EXPORTING is_bp_cms_sgm = lw_bp_credit_sgm ).
io_bupa_factory->save_all( EXPORTING i_upd_task = abap_false
RECEIVING et_return = DATA(c_return) ).
LOOP AT c_return INTO DATA(ls_ret) WHERE msgty CA 'EA' .
p_lv_msg_line = p_lv_msg_line && ls_ret-message .
CLEAR : ls_ret .
ENDLOOP .
ENDFORM.