FORM create_costumer CHANGING is_data TYPE zsds018
es_return TYPE zsds019.
DATA: l_task TYPE bus_ei_smtp_task." VALUE 'I'.
DATA: l_msg TYPE string.
DATA: ls_data TYPE cvis_ei_extern,
lt_data TYPE cvis_ei_extern_t,
lt_return TYPE bapiretm.
DATA: ls_partner TYPE bus_ei_extern, "业务伙伴
ls_customer TYPE cmds_ei_extern. "客户
DATA : lt_functions TYPE cmds_ei_functions_t,
ls_functions TYPE cmds_ei_functions,
lt_sales TYPE cmds_ei_sales_t,
ls_sales TYPE cmds_ei_sales.
DATA : lt_partnerguid_list TYPE bu_partner_guid_t.
DATA : l_bpartnerguid TYPE bu_partner_guid,
lv_kunnr TYPE but000-partner.
DATA : l_check TYPE bus_ei_smtp_task.
* l_utask TYPE bus_ei_smtp_task.
DATA : lt_zsdt019 TYPE TABLE OF zsdt019,
ls_zsdt019 TYPE zsdt019.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = is_data-kunnr
IMPORTING
output = is_data-kunnr.
SELECT SINGLE partner_guid,
partner
FROM but000 AS a
INTO @DATA(ls_but000)
WHERE partner = @is_data-kunnr.
l_bpartnerguid = ls_but000-partner_guid.
lv_kunnr = ls_but000-partner.
IF l_bpartnerguid IS INITIAL.
* l_utask = is_data-zflag.
*****客户数据表头**********************************************
* IF is_data-zflag = 'U'.
* l_task = 'U'.
* l_utask = 'U'.
* ENDIF.
* SELECT COUNT(*) FROM kna1 WHERE kunnr = is_data-kunnr.
* IF sy-subrc = 0.
* l_task = 'U'.
* l_utask = 'U'.
* ENDIF.
* ELSE.
TRY .
l_bpartnerguid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
CATCH cx_uuid_error.
ENDTRY.
ENDIF.
IF is_data-zflag = 'D'.
l_task = 'U'.
ELSE.
l_task = is_data-zflag.
ENDIF.
* 基础数据
l_check = l_task.
* IF l_task = 'I'.
ls_partner-header-object_task = l_task.
* ELSE.
* ls_partner-header-object_task = l_utask.
* ENDIF.
ls_partner-header-object_instance-bpartnerguid = l_bpartnerguid.
*&-----角色
IF is_data-bu_group = 'Z005'.
ls_partner-central_data-role-roles = VALUE #( ( task = l_task data_key = 'FLCU00' ) ( task = l_task data_key = 'TR0600' ) ).
ELSEIF is_data-bu_group = 'Z006'.
ls_partner-central_data-role-roles = VALUE #( ( task = l_task data_key = 'FLCU01' ) ).
ELSE.
ls_partner-central_data-role-roles = VALUE #( ( task = l_task data_key = 'FLCU00' )
( task = l_task data_key = 'FLCU01' ) ).
ENDIF.
*&-----业务合作伙伴数据的中心数据
ls_partner-central_data-common = VALUE #(
data = VALUE #( bp_control = VALUE #( category = '2' "业务伙伴类别
grouping = is_data-bu_group "业务伙伴分组
)
bp_centraldata = VALUE #( title_key = is_data-title_medi "称谓
searchterm1 = is_data-sort1_txt "检索项
searchterm2 = is_data-sort2_txt
* partnerlanguage = is_data-langu "语言
partnerlanguageiso = is_data-langu "语言
* partnerexternal = is_data-zsiskunnr "客户编码
)
bp_organization = VALUE #( name1 = is_data-name_org1 "客户名称
name2 = is_data-name_org2
)
)
datax = VALUE #( bp_centraldata = VALUE #( title_key = abap_true
searchterm1 = abap_true
searchterm2 = abap_true
* partnerlanguage = abap_true
partnerlanguageiso = abap_true
* partnerexternal = abap_true
)
bp_organization = VALUE #( name1 = abap_true
name2 = abap_true
)
)
).
*&-----标识编号
* IF l_check = 'M'.
* l_task = 'U'.
* ENDIF.
IF is_data-idnumber IS NOT INITIAL.
IF l_task = 'U'.
SELECT SINGLE * FROM but0id INTO @DATA(ls_but0id) WHERE partner = @is_data-kunnr AND type = 'BUP009'.
ls_partner-central_data-ident_number-ident_numbers = VALUE #( ( task = 'D'
data_key-identificationcategory = 'BUP009'
data_key-identificationnumber = ls_but0id-idnumber
data-idinstitute = ls_but0id-institute
datax-idinstitute = abap_true
) ).
ENDIF.
ls_partner-central_data-ident_number-ident_numbers = VALUE #( BASE ls_partner-central_data-ident_number-ident_numbers ( task = 'M'
data_key-identificationcategory = 'BUP009'
data_key-identificationnumber = is_data-idnumber
data-idinstitute = is_data-institute
datax-idinstitute = abap_true
) ).
ENDIF.
IF is_data-bankacc IS NOT INITIAL.
ls_partner-central_data-ident_number-ident_numbers = VALUE #( BASE ls_partner-central_data-ident_number-ident_numbers ( task = l_task
data_key-identificationcategory = 'BUP010'
data_key-identificationnumber = is_data-bankacc
* data-idinstitute = is_data-institute
* datax-idinstitute = abap_true
) ).
ENDIF.
*&-----地址信息
IF l_check = 'U'.
* l_task = 'M'.
ls_partner-central_data-address-addresses = VALUE #( ( task = '2'
data = VALUE #( postal = VALUE #( data = VALUE #(
city = is_data-city1 "城市
postl_cod1 = is_data-post_code1 "邮政编码
street = is_data-street "街道/门牌号
str_suppl1 = is_data-str_suppl1
str_suppl2 = is_data-str_suppl2
str_suppl3 = is_data-str_suppl3
country = is_data-country "国家
region = is_data-region "地区(省份)
langu = is_data-langu "语言代码
)
datax = VALUE #( c_o_name = abap_true
city = abap_true
postl_cod1 = abap_true
street = abap_true
str_suppl1 = abap_true
str_suppl2 = abap_true
str_suppl3 = abap_true
country = abap_true
region = abap_true
langu = abap_true
) )
communication-phone-current_state = 'X'
communication-phone-phone = VALUE #( (
contact = VALUE #( task = 'M'
data-telephone = is_data-tel_number
data-extension = is_data-tel_extens
data-tel_no = is_data-mob_number
datax-extension = abap_true
datax-telephone = abap_true
datax-tel_no = abap_true
) ) )
communication-fax-current_state = 'X'
communication-fax-fax = VALUE #( (
contact = VALUE #( task = 'M'
data-fax = is_data-fax_number
data-extension = is_data-fax_extens
datax-fax = abap_true
datax-extension = abap_true
) ) )
communication-smtp-current_state = 'X'
communication-smtp-smtp = VALUE #( (
contact = VALUE #( task = 'U'
data-e_mail = is_data-smtp_addr
datax-e_mail = abap_true
) ) )
) ) ).
ELSE.
ls_partner-central_data-address-addresses = VALUE #( ( task = l_task
data = VALUE #( postal = VALUE #( data = VALUE #(
city = is_data-city1 "城市
postl_cod1 = is_data-post_code1 "邮政编码
street = is_data-street "街道/门牌号
str_suppl1 = is_data-str_suppl1
str_suppl2 = is_data-str_suppl2
str_suppl3 = is_data-str_suppl3
country = is_data-country "国家
region = is_data-region "地区(省份)
langu = is_data-langu "语言代码
)
datax = VALUE #( c_o_name = abap_true
city = abap_true
postl_cod1 = abap_true
street = abap_true
str_suppl1 = abap_true
str_suppl2 = abap_true
str_suppl3 = abap_true
country = abap_true
region = abap_true
langu = abap_true
) )
communication-phone-phone = VALUE #( (
contact = VALUE #( task = l_task
data-telephone = is_data-tel_number
data-extension = is_data-tel_extens
data-tel_no = is_data-mob_number
datax-extension = abap_true
datax-telephone = abap_true
datax-tel_no = abap_true
) ) )
communication-fax-fax = VALUE #( (
contact = VALUE #( task = l_task
data-fax = is_data-fax_number
data-extension = is_data-fax_extens
datax-fax = abap_true
datax-extension = abap_true
) ) )
communication-smtp-smtp = VALUE #( (
contact = VALUE #( task = l_task
data-e_mail = is_data-smtp_addr
datax-e_mail = abap_true
) ) )
) ) ).
ENDIF.
*&------客户中心数据
ls_customer-header-object_task = l_task.
IF l_task = 'I'.
ls_customer-central_data-central = VALUE #(
data-ktokd = is_data-bu_group
data-katr1 = is_data-katr1
data-stcdt = '00'
datax-ktokd = abap_true
datax-stcdt = abap_true
datax-katr1 = abap_true ).
* ELSE.
* ls_customer-header-object_task = l_utask.
ENDIF.
*&------公司代码数据
IF is_data-bu_group NE 'Z006'.
IF is_data-bukrs IS NOT INITIAL.
* ls_customer-company_data-current_state = 'X'.
ls_customer-company_data-company = VALUE #( ( task = l_task
data_key-bukrs = is_data-bukrs
data = VALUE #( akont = '1122000000'
zterm = is_data-zterm1 )
datax = VALUE #( akont = abap_true
zterm = abap_true )
) ).
ENDIF.
ENDIF.
IF is_data-bu_group NE 'Z005'.
IF is_data-bu_group NE 'Z006'.
IF is_data-vkorg IS NOT INITIAL.
ls_customer-sales_data-sales = VALUE #( ( task = l_task
data_key = VALUE #( vkorg = is_data-vkorg
vtweg = is_data-vtweg
spart = is_data-spart )
functions = VALUE #( functions = VALUE #( ( task = l_task
data_key = VALUE #( parvw = 'RE' parza = '000' )
)
( task = l_task
data_key = VALUE #( parvw = 'AG' parza = '000' )
)
( task = l_task
data_key = VALUE #( parvw = 'WE' parza = '000' )
)
( task = l_task
data_key = VALUE #( parvw = 'RG' parza = '000' )
)
) current_state = 'X' )
data = VALUE #(
* vkbur = is_data-vkbur "销售部门
* inco1 = is_data-inco1 "国际贸易条款1
* inco2 = is_data-inco2_l "国际贸易条款2
* vkgrp = is_data-vkgrp "销售组
bzirk = is_data-bzirk "销售区域
* kdgrp = is_data-kdgrp "客户组
waers = is_data-waers "币别
kalks = is_data-kalks "客户定价过程
* vwerk = '1101' "交货工厂
vwerk = is_data-vwerk "交货工厂
ktgrd = is_data-ktgrd "客户科目分配组
vsbed = is_data-vsbed "装运条件
zterm = is_data-zterm2 "付款条件
loevm = is_data-loevm ) "删除标识
datax = VALUE #(
* vkbur = abap_true
* inco1 = abap_true
* inco2 = abap_true
* vkgrp = abap_true
bzirk = abap_true
* kdgrp = abap_true
waers = abap_true
kalks = abap_true
ktgrd = abap_true
kzazu = abap_true
vwerk = abap_true
vsbed = abap_true
zterm = abap_true
loevm = abap_true )
) ).
ENDIF.
ELSEIF is_data-bu_group = 'Z006'.
IF is_data-vkorg IS NOT INITIAL.
ls_customer-sales_data-sales = VALUE #( ( task = l_task
data_key = VALUE #( vkorg = is_data-vkorg
vtweg = is_data-vtweg
spart = is_data-spart )
functions = VALUE #( functions = VALUE #( ( task = l_task
data_key = VALUE #( parvw = 'WE' parza = '000' )
)
) current_state = 'X' )
data = VALUE #(
* vkbur = is_data-vkbur "销售部门
* inco1 = is_data-inco1 "国际贸易条款1
* inco2 = is_data-inco2_l "国际贸易条款2
* vkgrp = is_data-vkgrp "销售组
bzirk = is_data-bzirk "销售区域
* kdgrp = is_data-kdgrp "客户组
waers = is_data-waers "币别
kalks = is_data-kalks "客户定价过程
* vwerk = '1101' "交货工厂
vwerk = is_data-vwerk "交货工厂
ktgrd = is_data-ktgrd "客户科目分配组
vsbed = is_data-vsbed "装运条件
zterm = is_data-zterm2 "付款条件
loevm = is_data-loevm ) "删除标识
datax = VALUE #(
* vkbur = abap_true
* inco1 = abap_true
* inco2 = abap_true
* vkgrp = abap_true
bzirk = abap_true
* kdgrp = abap_true
waers = abap_true
kalks = abap_true
ktgrd = abap_true
kzazu = abap_true
vwerk = abap_true
vsbed = abap_true
zterm = abap_true
loevm = abap_true )
) ).
ENDIF.
ENDIF.
ENDIF.
*&-----税分类
ls_customer-central_data-tax_ind-tax_ind = VALUE #( ( task = l_task
data_key-aland = is_data-country
data_key-tatyp = 'MWST'
data-taxkd = is_data-taxkd
datax-taxkd = abap_true
) ).
ls_customer-central_data-tax_ind-current_state = 'X'.
lt_data = VALUE #( ( partner = ls_partner customer = ls_customer ) ).
CALL FUNCTION 'CVI_EI_INBOUND_MAI
EXPORTING
i_data = lt_data
IMPORTING
e_return = lt_return.
CLEAR: l_msg.
LOOP AT lt_return INTO DATA(ls_return).
LOOP AT ls_return-object_msg INTO DATA(ls_msg) WHERE type CA 'AEX'.
l_msg = l_msg && |{ ls_msg-message };|.
ENDLOOP.
ENDLOOP.
IF l_msg IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true.
APPEND l_bpartnerguid TO lt_partnerguid_list.
* SELECT SINGLE partner FROM but000 INTO LS_CUSTOMERS WHERE partner_guid = ls_return-object_key.
DATA(lt_customers) = cvi_mapper=>get_instance( )->get_assigned_customers_for_bps( i_partner_guids = lt_partnerguid_list ).
IF lt_customers IS NOT INITIAL.
es_return-e_code = 'S'.
es_return-e_partner = |{ lt_customers[ 1 ]-customer ALPHA = OUT }|.
es_return-e_msg = |客户创建/修改成功:{ es_return-e_partner }|.
DATA(lv_kunnrx) = lt_customers[ 1 ]-customer.
UPDATE zsdt020 SET kunnr = lv_kunnrx WHERE zsiskunnr = is_data-zsiskunnr.
IF is_data-kunnr IS NOT INITIAL.
ls_zsdt019-uuid = l_bpartnerguid.
ls_zsdt019-partner = is_data-zsiskunnr.
ls_zsdt019-kunnr = lv_kunnrx.
ls_zsdt019-bukrs = is_data-bukrs.
ls_zsdt019-usnam = sy-uname.
ls_zsdt019-datum = sy-datum.
ls_zsdt019-uzeit = sy-uzeit.
MODIFY zsdt019 FROM ls_zsdt019.
ENDIF.
ELSE.
"可能创建成功了BP,但未创建成功Customer
SELECT SINGLE partner FROM but000 INTO @DATA(lv_customers) WHERE partner_guid = @l_bpartnerguid.
DATA(ls_cvis_error) = cvi_mapper=>get_instance( )->undo_assignments(
i_for_partners = lt_partnerguid_list ).
es_return-e_code = 'E'.
es_return-e_msg = '客户创建/修改出错,客户部分数据出错,请检查是否是BP伙伴功能问题'.
es_return-e_partner = lv_customers.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
es_return-e_code = 'E'.
es_return-e_msg = l_msg.
ENDIF.
ENDFORM.