ABAP 客户主数据创建、修改
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.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)