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.

客户主数据创建接口示例相关推荐

  1. SAP RFC_CVI_EI_INBOUND_MAIN BP主数据创建/修改示例(仅演示客户)

    ==> 此函数在指定ERP版本中已经废弃,请自行评估 2506041 - S4TWL - API RFC_CVI_EI_INBOUND_MAIN is not supported from th ...

  2. SAP ABAP 客户主数据的 查询-创建-修改-锁定 API或BAPI

    文章目录 前言 范例代码 总结 前言 采用BDC创建客商主数据复用性低,且时常发生错误,比如字段必输性调整造成报错等 现通过API或BAPI去查询,创建,修改,锁定 以下为实际做的一个RFC接口 范例 ...

  3. SAP系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据

    这是Jerry 2020年的第84篇文章,也是汪子熙公众号总共第266篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 系列目录 (1) 微信开发 ...

  4. 公众号向特定用户主动推送消息_SAP系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据...

    这是Jerry 2020年的第84篇文章,也是汪子熙公众号总共第266篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上: https://blogs ...

  5. 第三方外部 Saas提供商如何跟使用 SAP 系统的客户进行对接接口集成

    最近收到一位朋友的咨询: 作为第三方外部 Saas提供商,想要跟使用 SAP 系统的客户进行对接接口集成,需要了解哪些 SAP 的版本?和常见对接技术语言,方式,协议,注意事项? 首先这个问题范畴确实 ...

  6. sap客户主数据bapi_SAP SD实施笔记-客户主数据(一)

    做实施项目,SD模块的静态主数据主要是客户主数据和价格主数据,这篇主要记录项目过程中关于客户主数据遇到的一些问题和看法. 业务 在HANA系统里,客户主数据和供应商主数据的创建.修改.查看都是用的T ...

  7. SAP Cloud for Customer客户主数据的重复检查-Levenshtein算法

    SAP C4C的客户主数据创建时的重复检查,基于底层HANA数据库的模糊查找功能,根据扫描数据库中已有的数据检测出当前正在创建的客户主数据是否和数据库中记录有重复. 在系统里开启重复检查的配置: 在此 ...

  8. sap客户主数据bapi_【SD系列】SAP SD模块-创建供应商主数据BAPI

    公众号:matinal 本文作者:matinal 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 关于创建供应商主数据BAPI:SD_CUSTOMER_MAINTAIN_ ...

  9. SAP创建客户主数据事务码和透明表

    XK01与MK01的关系 问: 我最开始使用mk01创建供应商,开始就一直很奇怪为何不能创建"公司"级别的数据,还以为是可以为多个公司供货,在流程中输入公司就可以了.也就没有管它, ...

最新文章

  1. Rectangular inference 矩形推理
  2. IntelliJ IDEA 的安装、配置与使用
  3. “亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 (K L题解)
  4. 趣味编程:C#中Specification模式的实现
  5. 中关键字 表示空类型_C语言数据类型
  6. python利用opencv去除图片logo_利用python和opencv批量去掉图片黑边
  7. Could not load oracle/sql/converter_xcharset/lx20354.glb.
  8. JavaScript学习之ES6学习之Promise
  9. ad如何设置pcb板子形状_FAQ031:如何将Altium的PCB板子导入CST
  10. linux下iconv命令转换字符编码
  11. lopatkin俄大神精简Windows 10 Pro 19042.487 20H2 PreRelease x86-x64 ZH-CN BIZ(2020-09-01)
  12. 卓有成效的管理者(笔记)——如何发挥人的长处
  13. 计算机思维在英语专业的应用,英语专业在计算机科学中的重要性
  14. 挖个大坑:挑战用纯micropython写一个nes模拟器(一)
  15. 宇宙APP简单的性能测试
  16. UCOS 杂项 笔记
  17. 装机大师无法发现linux硬盘,如何解决PE无法识别硬盘的问题
  18. git 常用的命令行
  19. 遗传算法之扇贝的进化(python代码实现)
  20. Java工作4年来应聘要16K最后没要,细节如下。。。

热门文章

  1. 新一届ACM图灵奖得主以及其贡献
  2. cobol - 字符串操作
  3. 计算机毕业优秀作品展观后感,优秀作业展的观后感(精选6篇)
  4. 风口里的美团:王兴和他的团队
  5. 【电子发文】在OA发布电子公文的过程与细节
  6. 辩论赛计算机软件更重要论据,高三班会课《第一周辩论赛(网络使人更亲近还是更疏远)》辩论赛 反方论据...
  7. MATLAB画梯形并标注坐标点
  8. 金蝶K3 SQL报表系列-供应商科目余额表
  9. 赛迪:AI+工业互联网正当时
  10. 软件测试入行6年,我的经历值得你借鉴