FUNCTION zsd_091_new.
*"----------------------------------------------------------------------
*"*"本地接口:
*" TABLES
*" T_INPUT STRUCTURE ZSD091
*" T_RETURN STRUCTURE BAPIRETC OPTIONAL
*"----------------------------------------------------------------------
CONSTANTS:
g_object_task_i TYPE bus_ei_object_task VALUE 'I'.
DATA:
lt_data TYPE cvis_ei_extern_t,
ls_data TYPE cvis_ei_extern,
lt_return TYPE bapiretm,
ls_return TYPE bapireti,
ls_partner TYPE bus_ei_extern,
ls_customer TYPE cmds_ei_extern,
lt_roles TYPE bus_ei_bupa_roles_t,
ls_roles TYPE bus_ei_bupa_roles,
lt_addresses TYPE bus_ei_bupa_address_t,
ls_addresses TYPE bus_ei_bupa_address,
lt_phone TYPE bus_ei_bupa_telephone_t,
ls_phone TYPE bus_ei_bupa_telephone,
lv_partner_guid TYPE bu_partner_guid,
lt_tb003i TYPE TABLE OF tb003i,
ls_tb003i TYPE tb003i,
lv_error TYPE c,
ls_cvis_error TYPE cvis_error,
lt_partnerguid_list TYPE bu_partner_guid_t,
ls_partnerguid_list TYPE bu_partner_guid,
lt_customer_list TYPE cvis_cust_link_t,
ls_customer_list TYPE cvi_cust_link,
lt_n_ukmbp_cms TYPE TABLE OF ukm_s_bp_cms_upd,
lt_n_ukmbp_cms_sgm TYPE TABLE OF ukm_s_bp_cms_sgm_upd,
lt_ukm_chck_rule TYPE TABLE OF ukm_chck_rule,
lt_ukm_limit_rules TYPE TABLE OF ukm_limit_rules.
SELECT *
INTO TABLE lt_tb003i
FROM tb003i
WHERE rltgr LIKE 'Z%'.
SELECT *
INTO TABLE lt_ukm_chck_rule
FROM ukm_chck_rule.
SELECT *
INTO TABLE lt_ukm_limit_rules
FROM ukm_limit_rules.
LOOP AT t_input.
* t_input-BU_GROUP = 'ZC01' .
* t_input-ROLE = 'ZC01' .
* t_input-SORTL = '有效' .
* t_input-LAND1 = 'CN' .
* t_input-SPRAS = '1' .
* t_input-KUKLA = '10' .
* t_input-KATR1 = '1A' .
* t_input-KATR2 = '2D' .
* t_input-KATR3 = '3L' .
* t_input-KATR4 = '4J' .
* t_input-KATR5 = '5A' .
* t_input-LIMIT_RULE = 'B2B-EXIST' .
* t_input-RISK_CLASS = 'E' .
* t_input-CHECK_RULE = '01' .
* t_input-BUKRS = '1000' .
* t_input-AKONT = '1122010200'.
* t_input-ZUAWA = '001' .
* t_input-ZTERM = 'Z000' .
* t_input-VKORG = 1000 .
* t_input-VTWEG = '00' .
* t_input-SPART = '00' .
* t_input-BZIRK = '000002' .
* t_input-KALKS = 5 .
* t_input-WAERS = 'CNY' .
* t_input-VWERK = '1000' .
* t_input-VSBED = '01' .
* t_input-ZTERM1 = 'Z000' .
* t_input-KTGRD = '01' .
* t_input-TAXKD = 1 .
* t_input-INCO1 = 'CFR' .
* t_input-INCO2_L = 'SKG条款' .
CLEAR:
ls_data,
lt_data,
lv_error.
if t_input-BU_GROUP = 'ZC01' .
* SELECT MAX( kunnr ) INTO @DATA(lv_partner) FROM kna1 WHERE kunnr LIKE '000001%' .
SELECT MAX( partner )
INTO @DATA(lv_partner)
FROM but000
WHERE partner LIKE '000001%' .
ELSEIF t_input-BU_GROUP = 'ZC02' .
SELECT MAX( kunnr ) INTO lv_partner FROM kna1 WHERE kunnr LIKE '000002%' .
ELSEIF t_input-BU_GROUP = 'ZC04' .
SELECT MAX( kunnr ) INTO lv_partner FROM kna1 WHERE kunnr LIKE '000003%' .
ELSEIF t_input-BU_GROUP = 'ZC05' .
SELECT MAX( kunnr ) INTO lv_partner FROM kna1 WHERE kunnr LIKE '000005%' .
ELSEIF t_input-BU_GROUP = 'ZC06' .
SELECT MAX( kunnr ) INTO lv_partner FROM kna1 WHERE kunnr LIKE '000009%' .
endif.
" 10001~19999
"20001~29999
"公司编码
"3001~39999
"50001~59999
"900000
IF t_input-BU_GROUP <> 'ZC03' .
t_input-partner = lv_partner + 1 .
ENDIF.
ls_partner-header-object_instance-bpartner = t_input-partner.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_partner-header-object_instance-bpartner
IMPORTING
output = ls_partner-header-object_instance-bpartner.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = t_input-kunnr
IMPORTING
output = t_input-kunnr.
* SELECT SINGLE but000~partner
* INTO @lv_partner
* FROM but000
* WHERE partner = @t_input-partner .
SELECT SINGLE but000~partner
INTO @lv_partner
FROM but000
WHERE partner = @ls_partner-header-object_instance-bpartner .
IF sy-subrc = 0 .
t_return-type = 'E'.
t_return-message = '此经销商' && t_input-partner && '已存在!'.
APPEND t_return.
CONTINUE.
ENDIF.
IF t_input-limit_rule IS INITIAL.
t_return-type = 'E'.
t_return-message = '信贷限额的规则不能为空!'.
APPEND t_return.
CONTINUE.
ELSE.
READ TABLE lt_ukm_limit_rules WITH KEY limit_rule = t_input-limit_rule
TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
t_return-type = 'E'.
t_return-message = '信贷限额的规则' && t_input-limit_rule && '不存在!'.
APPEND t_return.
CONTINUE.
ENDIF.
ENDIF.
IF t_input-check_rule IS NOT INITIAL.
READ TABLE lt_ukm_chck_rule WITH KEY check_rule = t_input-check_rule
TRANSPORTING NO FIELDS .
IF sy-subrc <> 0.
t_return-type = 'E'.
t_return-message = '信用检查的规则' && t_input-check_rule && '不存在!'.
APPEND t_return.
CONTINUE.
ENDIF.
ENDIF.
"基本信息
TRY .
lv_partner_guid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
* IF lines( t_return ) > 0.
* t_return-MESSAGE_V2 = t_input-partner .
* MODIFY t_return .
* endif.
CATCH cx_uuid_error.
"返回消息
ENDTRY.
ls_partner-header-object_task = g_object_task_i.
ls_partner-header-object_instance-bpartnerguid = lv_partner_guid.
****业务合作伙伴数据的中心数据***********************************
ls_partner-central_data-common-data-bp_control-category = 2. "业务伙伴类别
ls_partner-central_data-common-data-bp_control-grouping = t_input-bu_group. "业务伙伴分组
* ls_partner-central_data-common-data-bp_centraldata-partnerexternal = t_input-adext.
ls_partner-central_data-common-data-bp_centraldata-title_key = '0003'. "称谓
ls_partner-central_data-common-data-bp_centraldata-searchterm1 = t_input-sortl. "检索项
ls_partner-central_data-common-datax-bp_centraldata-searchterm1 = abap_true.
ls_partner-central_data-common-data-bp_organization-name1 = t_input-name1. "名称
ls_partner-central_data-common-datax-bp_organization-name1 = abap_true.
CLEAR:lt_roles.
READ TABLE lt_tb003i WITH KEY rltgr = t_input-role
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
LOOP AT lt_tb003i INTO ls_tb003i WHERE rltgr = t_input-role.
CLEAR ls_roles.
ls_roles-task = g_object_task_i.
ls_roles-data_key = ls_tb003i-role.
APPEND ls_roles TO lt_roles.
ENDLOOP.
ELSE.
ls_roles-task = g_object_task_i.
ls_roles-data_key = t_input-role.
APPEND ls_roles TO lt_roles.
ENDIF.
ls_partner-central_data-role-roles = lt_roles.
"地址信息
CLEAR lt_addresses.
ls_addresses-task = g_object_task_i.
ls_addresses-data-postal-data-city = t_input-ort01.
ls_addresses-data-postal-data-street = t_input-stras. "街道
ls_addresses-data-postal-data-country = t_input-land1. "国家
ls_addresses-data-postal-data-langu = t_input-spras. "语言
ls_addresses-data-postal-data-extaddressnumber = t_input-adext.
ls_addresses-data-postal-data-region = t_input-regio.
ls_addresses-data-postal-datax-city = abap_true.
ls_addresses-data-postal-datax-street = abap_true.
ls_addresses-data-postal-datax-country = abap_true.
ls_addresses-data-postal-datax-langu = abap_true.
ls_addresses-data-postal-datax-extaddressnumber = abap_true.
ls_addresses-data-postal-datax-region = abap_true.
"电话
CLEAR lt_phone.
ls_phone-contact-task = g_object_task_i.
ls_phone-contact-data-telephone = t_input-telf1. "电话1
ls_phone-contact-datax-telephone = abap_true.
ls_phone-contact-datax-r_3_user = abap_true.
ls_phone-contact-datax-tel_no = abap_true.
APPEND ls_phone TO lt_phone.
"移动电话
CLEAR lt_phone.
ls_phone-contact-task = g_object_task_i.
ls_phone-contact-data-telephone = t_input-mob_number. "电话1
ls_phone-contact-data-r_3_user = '3'. "移动电话
ls_phone-contact-datax-telephone = abap_true.
ls_phone-contact-datax-r_3_user = abap_true.
APPEND ls_phone TO lt_phone.
ls_addresses-data-communication-phone-phone = lt_phone.
APPEND ls_addresses TO lt_addresses.
ls_partner-central_data-address-addresses = lt_addresses.
****客户的通用数据***********************************
ls_customer-header-object_task = g_object_task_i.
ls_customer-header-object_instance-kunnr = ls_partner-header-object_instance-bpartner.
ls_customer-central_data-central = VALUE #( data-kukla = t_input-kukla
data-bahns = t_input-bahns
data-bahne = t_input-bahne
data-katr1 = t_input-katr1
data-katr2 = t_input-katr2
data-katr3 = t_input-katr3
data-katr4 = t_input-katr4
data-katr5 = t_input-katr5
datax-kukla = abap_true
datax-bahns = abap_true
datax-bahne = abap_true
datax-katr1 = abap_true
datax-katr2 = abap_true
datax-katr3 = abap_true
datax-katr4 = abap_true
datax-katr5 = abap_true
).
****税率数据************************************************
ls_customer-central_data-tax_ind-tax_ind = VALUE #( ( task = g_object_task_i
data_key-aland = 'CN'
data_key-tatyp = 'MWST'
data-taxkd = t_input-taxkd
datax-taxkd = abap_true )
).
****公司代码数据************************************************
ls_customer-company_data-company = VALUE #( ( task = g_object_task_i
data_key-bukrs = t_input-bukrs
data-akont = t_input-akont
data-zuawa = t_input-zuawa
data-zterm = t_input-zterm
datax-akont = abap_true
datax-zuawa = abap_true
datax-zterm = abap_true )
).
****销售数据************************************************
ls_customer-sales_data-sales = VALUE #( ( task = g_object_task_i
data_key-vkorg = t_input-vkorg
data_key-spart = t_input-spart
data_key-vtweg = t_input-vtweg
data-bzirk = t_input-bzirk
data-konda = t_input-konda
data-kalks = t_input-kalks
data-vsbed = t_input-vsbed
data-zterm = t_input-zterm1
data-waers = t_input-waers
data-ktgrd = t_input-ktgrd
data-inco1 = t_input-inco1
data-inco2_l = t_input-inco2_l
data-vwerk = t_input-vwerk
datax-bzirk = abap_true
datax-konda = abap_true
datax-kalks = abap_true
datax-vsbed = abap_true
datax-zterm = abap_true
datax-waers = abap_true
datax-ktgrd = abap_true
datax-inco1 = abap_true
datax-inco2_l = abap_true
datax-vwerk = abap_true
functions-functions = VALUE #( ( task = g_object_task_i
data_key-parvw = 'Z1'
data-partner = t_input-kunnr
datax-partner = abap_true )
"默认以下合作伙伴功能,必须全部传入。。。否则客户相关数据创建失败
( task = g_object_task_i
data_key-parvw = 'AG'
datax-partner = abap_true )
( task = g_object_task_i
data_key-parvw = 'RE'
datax-partner = abap_true )
( task = g_object_task_i
data_key-parvw = 'RG'
datax-partner = abap_true )
( task = g_object_task_i
data_key-parvw = 'WE'
datax-partner = abap_true ) )
)
).
ls_data-partner = ls_partner.
ls_data-customer = ls_customer.
ls_data-ensure_create-create_customer = abap_true.
APPEND ls_data TO lt_data.
cl_md_bp_maintain=>maintain(
EXPORTING
i_data = lt_data
IMPORTING
e_return = lt_return ).
LOOP AT lt_return INTO ls_return.
LOOP AT ls_return-object_msg INTO t_return WHERE type = 'E' OR type = 'A'.
lv_error = abap_true.
APPEND t_return.
ENDLOOP.
ENDLOOP.
IF lv_error = space.
CLEAR t_return.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
* 根据伙伴GUID取出客户编号
CLEAR:
lt_partnerguid_list,
lt_customer_list.
ls_partnerguid_list = ls_partner-header-object_instance-bpartnerguid.
APPEND ls_partnerguid_list TO lt_partnerguid_list.
lt_customer_list = cvi_mapper=>get_instance( )->get_assigned_customers_for_bps(
i_partner_guids = lt_partnerguid_list ).
READ TABLE lt_customer_list INDEX 1 TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
CONCATENATE '经销商客户' t_input-partner '创建成功!' INTO t_return-message.
t_return-type = 'S'.
t_return-id = t_input-partner.
* OUT_RETURN-type = 'S'.
"创建客户信贷数据
lt_n_ukmbp_cms = VALUE #( ( partner = ls_partner-header-object_instance-bpartner
check_rule = t_input-check_rule
limit_rule = t_input-limit_rule
risk_class = t_input-risk_class
risk_class_chgdt = sy-datum
change_id = g_object_task_i
)
).
lt_n_ukmbp_cms_sgm = VALUE #( ( partner = ls_partner-header-object_instance-bpartner
credit_limit = t_input-credit_limit
limit_chg_date = sy-datum
change_id = g_object_task_i
)
).
CALL FUNCTION 'UKM_DB_UKMBP_CMS_EXECUTE'
TABLES
n_ukmbp_cms = lt_n_ukmbp_cms
n_ukmbp_cms_sgm = lt_n_ukmbp_cms_sgm
EXCEPTIONS
error_message = 1.
IF sy-subrc <> 0.
t_return-message = t_return-message && '经销商客户创建信贷出错!'.
* OUT_RETURN-message = OUT_RETURN-message && '网点客户创建信贷出错!'.
ENDIF.
ELSE.
"可能创建成功了BP,但未创建成功Customer
ls_cvis_error = cvi_mapper=>get_instance( )->undo_assignments(
i_for_partners = lt_partnerguid_list ).
t_return-message = '经销商客户创建出错,经销商客户部分数据出错,请检查是否是BP伙伴功能问题'.
t_return-type = 'E'.
* OUT_RETURN-message = '网点客户创建出错,网点客户部分数据出错,请检查是否是BP伙伴功能问题'.
* OUT_RETURN-type = 'S'.
ENDIF.
APPEND t_return.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ENDLOOP.
ENDFUNCTION.
*"----------------------------------------------------------------------
*"*"本地接口:
*" TABLES
*" T_INPUT STRUCTURE ZSD091
*" T_RETURN STRUCTURE BAPIRETC OPTIONAL
*"----------------------------------------------------------------------
CONSTANTS:
g_object_task_i TYPE bus_ei_object_task VALUE 'I'.
DATA:
lt_data TYPE cvis_ei_extern_t,
ls_data TYPE cvis_ei_extern,
lt_return TYPE bapiretm,
ls_return TYPE bapireti,
ls_partner TYPE bus_ei_extern,
ls_customer TYPE cmds_ei_extern,
lt_roles TYPE bus_ei_bupa_roles_t,
ls_roles TYPE bus_ei_bupa_roles,
lt_addresses TYPE bus_ei_bupa_address_t,
ls_addresses TYPE bus_ei_bupa_address,
lt_phone TYPE bus_ei_bupa_telephone_t,
ls_phone TYPE bus_ei_bupa_telephone,
lv_partner_guid TYPE bu_partner_guid,
lt_tb003i TYPE TABLE OF tb003i,
ls_tb003i TYPE tb003i,
lv_error TYPE c,
ls_cvis_error TYPE cvis_error,
lt_partnerguid_list TYPE bu_partner_guid_t,
ls_partnerguid_list TYPE bu_partner_guid,
lt_customer_list TYPE cvis_cust_link_t,
ls_customer_list TYPE cvi_cust_link,
lt_n_ukmbp_cms TYPE TABLE OF ukm_s_bp_cms_upd,
lt_n_ukmbp_cms_sgm TYPE TABLE OF ukm_s_bp_cms_sgm_upd,
lt_ukm_chck_rule TYPE TABLE OF ukm_chck_rule,
lt_ukm_limit_rules TYPE TABLE OF ukm_limit_rules.
SELECT *
INTO TABLE lt_tb003i
FROM tb003i
WHERE rltgr LIKE 'Z%'.
SELECT *
INTO TABLE lt_ukm_chck_rule
FROM ukm_chck_rule.
SELECT *
INTO TABLE lt_ukm_limit_rules
FROM ukm_limit_rules.
LOOP AT t_input.
* t_input-BU_GROUP = 'ZC01' .
* t_input-ROLE = 'ZC01' .
* t_input-SORTL = '有效' .
* t_input-LAND1 = 'CN' .
* t_input-SPRAS = '1' .
* t_input-KUKLA = '10' .
* t_input-KATR1 = '1A' .
* t_input-KATR2 = '2D' .
* t_input-KATR3 = '3L' .
* t_input-KATR4 = '4J' .
* t_input-KATR5 = '5A' .
* t_input-LIMIT_RULE = 'B2B-EXIST' .
* t_input-RISK_CLASS = 'E' .
* t_input-CHECK_RULE = '01' .
* t_input-BUKRS = '1000' .
* t_input-AKONT = '1122010200'.
* t_input-ZUAWA = '001' .
* t_input-ZTERM = 'Z000' .
* t_input-VKORG = 1000 .
* t_input-VTWEG = '00' .
* t_input-SPART = '00' .
* t_input-BZIRK = '000002' .
* t_input-KALKS = 5 .
* t_input-WAERS = 'CNY' .
* t_input-VWERK = '1000' .
* t_input-VSBED = '01' .
* t_input-ZTERM1 = 'Z000' .
* t_input-KTGRD = '01' .
* t_input-TAXKD = 1 .
* t_input-INCO1 = 'CFR' .
* t_input-INCO2_L = 'SKG条款' .
CLEAR:
ls_data,
lt_data,
lv_error.
if t_input-BU_GROUP = 'ZC01' .
* SELECT MAX( kunnr ) INTO @DATA(lv_partner) FROM kna1 WHERE kunnr LIKE '000001%' .
SELECT MAX( partner )
INTO @DATA(lv_partner)
FROM but000
WHERE partner LIKE '000001%' .
ELSEIF t_input-BU_GROUP = 'ZC02' .
SELECT MAX( kunnr ) INTO lv_partner FROM kna1 WHERE kunnr LIKE '000002%' .
ELSEIF t_input-BU_GROUP = 'ZC04' .
SELECT MAX( kunnr ) INTO lv_partner FROM kna1 WHERE kunnr LIKE '000003%' .
ELSEIF t_input-BU_GROUP = 'ZC05' .
SELECT MAX( kunnr ) INTO lv_partner FROM kna1 WHERE kunnr LIKE '000005%' .
ELSEIF t_input-BU_GROUP = 'ZC06' .
SELECT MAX( kunnr ) INTO lv_partner FROM kna1 WHERE kunnr LIKE '000009%' .
endif.
" 10001~19999
"20001~29999
"公司编码
"3001~39999
"50001~59999
"900000
IF t_input-BU_GROUP <> 'ZC03' .
t_input-partner = lv_partner + 1 .
ENDIF.
ls_partner-header-object_instance-bpartner = t_input-partner.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_partner-header-object_instance-bpartner
IMPORTING
output = ls_partner-header-object_instance-bpartner.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = t_input-kunnr
IMPORTING
output = t_input-kunnr.
* SELECT SINGLE but000~partner
* INTO @lv_partner
* FROM but000
* WHERE partner = @t_input-partner .
SELECT SINGLE but000~partner
INTO @lv_partner
FROM but000
WHERE partner = @ls_partner-header-object_instance-bpartner .
IF sy-subrc = 0 .
t_return-type = 'E'.
t_return-message = '此经销商' && t_input-partner && '已存在!'.
APPEND t_return.
CONTINUE.
ENDIF.
IF t_input-limit_rule IS INITIAL.
t_return-type = 'E'.
t_return-message = '信贷限额的规则不能为空!'.
APPEND t_return.
CONTINUE.
ELSE.
READ TABLE lt_ukm_limit_rules WITH KEY limit_rule = t_input-limit_rule
TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
t_return-type = 'E'.
t_return-message = '信贷限额的规则' && t_input-limit_rule && '不存在!'.
APPEND t_return.
CONTINUE.
ENDIF.
ENDIF.
IF t_input-check_rule IS NOT INITIAL.
READ TABLE lt_ukm_chck_rule WITH KEY check_rule = t_input-check_rule
TRANSPORTING NO FIELDS .
IF sy-subrc <> 0.
t_return-type = 'E'.
t_return-message = '信用检查的规则' && t_input-check_rule && '不存在!'.
APPEND t_return.
CONTINUE.
ENDIF.
ENDIF.
"基本信息
TRY .
lv_partner_guid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
* IF lines( t_return ) > 0.
* t_return-MESSAGE_V2 = t_input-partner .
* MODIFY t_return .
* endif.
CATCH cx_uuid_error.
"返回消息
ENDTRY.
ls_partner-header-object_task = g_object_task_i.
ls_partner-header-object_instance-bpartnerguid = lv_partner_guid.
****业务合作伙伴数据的中心数据***********************************
ls_partner-central_data-common-data-bp_control-category = 2. "业务伙伴类别
ls_partner-central_data-common-data-bp_control-grouping = t_input-bu_group. "业务伙伴分组
* ls_partner-central_data-common-data-bp_centraldata-partnerexternal = t_input-adext.
ls_partner-central_data-common-data-bp_centraldata-title_key = '0003'. "称谓
ls_partner-central_data-common-data-bp_centraldata-searchterm1 = t_input-sortl. "检索项
ls_partner-central_data-common-datax-bp_centraldata-searchterm1 = abap_true.
ls_partner-central_data-common-data-bp_organization-name1 = t_input-name1. "名称
ls_partner-central_data-common-datax-bp_organization-name1 = abap_true.
CLEAR:lt_roles.
READ TABLE lt_tb003i WITH KEY rltgr = t_input-role
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
LOOP AT lt_tb003i INTO ls_tb003i WHERE rltgr = t_input-role.
CLEAR ls_roles.
ls_roles-task = g_object_task_i.
ls_roles-data_key = ls_tb003i-role.
APPEND ls_roles TO lt_roles.
ENDLOOP.
ELSE.
ls_roles-task = g_object_task_i.
ls_roles-data_key = t_input-role.
APPEND ls_roles TO lt_roles.
ENDIF.
ls_partner-central_data-role-roles = lt_roles.
"地址信息
CLEAR lt_addresses.
ls_addresses-task = g_object_task_i.
ls_addresses-data-postal-data-city = t_input-ort01.
ls_addresses-data-postal-data-street = t_input-stras. "街道
ls_addresses-data-postal-data-country = t_input-land1. "国家
ls_addresses-data-postal-data-langu = t_input-spras. "语言
ls_addresses-data-postal-data-extaddressnumber = t_input-adext.
ls_addresses-data-postal-data-region = t_input-regio.
ls_addresses-data-postal-datax-city = abap_true.
ls_addresses-data-postal-datax-street = abap_true.
ls_addresses-data-postal-datax-country = abap_true.
ls_addresses-data-postal-datax-langu = abap_true.
ls_addresses-data-postal-datax-extaddressnumber = abap_true.
ls_addresses-data-postal-datax-region = abap_true.
"电话
CLEAR lt_phone.
ls_phone-contact-task = g_object_task_i.
ls_phone-contact-data-telephone = t_input-telf1. "电话1
ls_phone-contact-datax-telephone = abap_true.
ls_phone-contact-datax-r_3_user = abap_true.
ls_phone-contact-datax-tel_no = abap_true.
APPEND ls_phone TO lt_phone.
"移动电话
CLEAR lt_phone.
ls_phone-contact-task = g_object_task_i.
ls_phone-contact-data-telephone = t_input-mob_number. "电话1
ls_phone-contact-data-r_3_user = '3'. "移动电话
ls_phone-contact-datax-telephone = abap_true.
ls_phone-contact-datax-r_3_user = abap_true.
APPEND ls_phone TO lt_phone.
ls_addresses-data-communication-phone-phone = lt_phone.
APPEND ls_addresses TO lt_addresses.
ls_partner-central_data-address-addresses = lt_addresses.
****客户的通用数据***********************************
ls_customer-header-object_task = g_object_task_i.
ls_customer-header-object_instance-kunnr = ls_partner-header-object_instance-bpartner.
ls_customer-central_data-central = VALUE #( data-kukla = t_input-kukla
data-bahns = t_input-bahns
data-bahne = t_input-bahne
data-katr1 = t_input-katr1
data-katr2 = t_input-katr2
data-katr3 = t_input-katr3
data-katr4 = t_input-katr4
data-katr5 = t_input-katr5
datax-kukla = abap_true
datax-bahns = abap_true
datax-bahne = abap_true
datax-katr1 = abap_true
datax-katr2 = abap_true
datax-katr3 = abap_true
datax-katr4 = abap_true
datax-katr5 = abap_true
).
****税率数据************************************************
ls_customer-central_data-tax_ind-tax_ind = VALUE #( ( task = g_object_task_i
data_key-aland = 'CN'
data_key-tatyp = 'MWST'
data-taxkd = t_input-taxkd
datax-taxkd = abap_true )
).
****公司代码数据************************************************
ls_customer-company_data-company = VALUE #( ( task = g_object_task_i
data_key-bukrs = t_input-bukrs
data-akont = t_input-akont
data-zuawa = t_input-zuawa
data-zterm = t_input-zterm
datax-akont = abap_true
datax-zuawa = abap_true
datax-zterm = abap_true )
).
****销售数据************************************************
ls_customer-sales_data-sales = VALUE #( ( task = g_object_task_i
data_key-vkorg = t_input-vkorg
data_key-spart = t_input-spart
data_key-vtweg = t_input-vtweg
data-bzirk = t_input-bzirk
data-konda = t_input-konda
data-kalks = t_input-kalks
data-vsbed = t_input-vsbed
data-zterm = t_input-zterm1
data-waers = t_input-waers
data-ktgrd = t_input-ktgrd
data-inco1 = t_input-inco1
data-inco2_l = t_input-inco2_l
data-vwerk = t_input-vwerk
datax-bzirk = abap_true
datax-konda = abap_true
datax-kalks = abap_true
datax-vsbed = abap_true
datax-zterm = abap_true
datax-waers = abap_true
datax-ktgrd = abap_true
datax-inco1 = abap_true
datax-inco2_l = abap_true
datax-vwerk = abap_true
functions-functions = VALUE #( ( task = g_object_task_i
data_key-parvw = 'Z1'
data-partner = t_input-kunnr
datax-partner = abap_true )
"默认以下合作伙伴功能,必须全部传入。。。否则客户相关数据创建失败
( task = g_object_task_i
data_key-parvw = 'AG'
datax-partner = abap_true )
( task = g_object_task_i
data_key-parvw = 'RE'
datax-partner = abap_true )
( task = g_object_task_i
data_key-parvw = 'RG'
datax-partner = abap_true )
( task = g_object_task_i
data_key-parvw = 'WE'
datax-partner = abap_true ) )
)
).
ls_data-partner = ls_partner.
ls_data-customer = ls_customer.
ls_data-ensure_create-create_customer = abap_true.
APPEND ls_data TO lt_data.
cl_md_bp_maintain=>maintain(
EXPORTING
i_data = lt_data
IMPORTING
e_return = lt_return ).
LOOP AT lt_return INTO ls_return.
LOOP AT ls_return-object_msg INTO t_return WHERE type = 'E' OR type = 'A'.
lv_error = abap_true.
APPEND t_return.
ENDLOOP.
ENDLOOP.
IF lv_error = space.
CLEAR t_return.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
* 根据伙伴GUID取出客户编号
CLEAR:
lt_partnerguid_list,
lt_customer_list.
ls_partnerguid_list = ls_partner-header-object_instance-bpartnerguid.
APPEND ls_partnerguid_list TO lt_partnerguid_list.
lt_customer_list = cvi_mapper=>get_instance( )->get_assigned_customers_for_bps(
i_partner_guids = lt_partnerguid_list ).
READ TABLE lt_customer_list INDEX 1 TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
CONCATENATE '经销商客户' t_input-partner '创建成功!' INTO t_return-message.
t_return-type = 'S'.
t_return-id = t_input-partner.
* OUT_RETURN-type = 'S'.
"创建客户信贷数据
lt_n_ukmbp_cms = VALUE #( ( partner = ls_partner-header-object_instance-bpartner
check_rule = t_input-check_rule
limit_rule = t_input-limit_rule
risk_class = t_input-risk_class
risk_class_chgdt = sy-datum
change_id = g_object_task_i
)
).
lt_n_ukmbp_cms_sgm = VALUE #( ( partner = ls_partner-header-object_instance-bpartner
credit_limit = t_input-credit_limit
limit_chg_date = sy-datum
change_id = g_object_task_i
)
).
CALL FUNCTION 'UKM_DB_UKMBP_CMS_EXECUTE'
TABLES
n_ukmbp_cms = lt_n_ukmbp_cms
n_ukmbp_cms_sgm = lt_n_ukmbp_cms_sgm
EXCEPTIONS
error_message = 1.
IF sy-subrc <> 0.
t_return-message = t_return-message && '经销商客户创建信贷出错!'.
* OUT_RETURN-message = OUT_RETURN-message && '网点客户创建信贷出错!'.
ENDIF.
ELSE.
"可能创建成功了BP,但未创建成功Customer
ls_cvis_error = cvi_mapper=>get_instance( )->undo_assignments(
i_for_partners = lt_partnerguid_list ).
t_return-message = '经销商客户创建出错,经销商客户部分数据出错,请检查是否是BP伙伴功能问题'.
t_return-type = 'E'.
* OUT_RETURN-message = '网点客户创建出错,网点客户部分数据出错,请检查是否是BP伙伴功能问题'.
* OUT_RETURN-type = 'S'.
ENDIF.
APPEND t_return.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ENDLOOP.
ENDFUNCTION.