当前位置:柠檬动态 >> 经验分享

SAP Hybris Cloud for Customer接口:批量创建或更新客户主数据

发布日期:2017-5-17 15:48:57 访问次数:4724

SAP Hybris Cloud for Customer接口:批量创建或更新客户主数据

SAP Hybris Cloud for Customer,是SAP未来主推的CRM云产品。

本接口可用于SAP CRM项目或SAP外网wofacaidafa888手机版调用,柠檬版权所有转载请注明

SAP批量创建客户主数据所用的标准BAPI:SD_CUSTOMER_MAINTAIN_ALL

函数原理:通过封装客户主数据所用内表检查条件,调用CUSTOMER_UPDATE进行创建更新。

函数注意:XKNVD - YKNVD,X开始的内表用于创建(KZ字段要打上标示为"I"),更新 (KZ字段要打上标示为"U")。

                                             Y开始的内表用于删除(KZ字段标示为""),刚创建的主数据可以为删除,但已经有业务数据的客户最好冻结(打上删除标示)。





FUNCTION ZCRM_CREATE_CUSTOMER.

*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(I_KUNNR) TYPE  KNA1-KUNNR OPTIONAL
*"     VALUE(I_INPUT) LIKE  ZCRM_INPUT STRUCTURE  ZCRM_INPUT
*"  EXPORTING
*"     REFERENCE(E_KUNNR) TYPE  KNA1-KUNNR
*"     REFERENCE(E_RESULT) TYPE  CHAR100
*"  TABLES
*"      T_KNVP STRUCTURE  FKNVP OPTIONAL
*"----------------------------------------------------------------------
  DATA: WK_KNA1 TYPE KNA1,
        WK_KNB1 TYPE KNB1, “客户主数据 (公司代码)
        WK_KNVV TYPE KNVV, ”客户主记录销售数据
        WK_ADRC TYPE BAPIADDR1, ”客户地址数据
        WK_KNVD TYPE FKNVD, “客户主记录销售查询表
        IT_KNVD TYPE STANDARD TABLE OF FKNVD,
        WK_KNVI TYPE FKNVI, ”客户主税收标识
        IT_KNVI TYPE STANDARD TABLE OF FKNVI,
        WK_KNVP TYPE FKNVP, “客户主记录伙伴功能
        IT_KNVP TYPE STANDARD TABLE OF FKNVP.

* 客户基本属性数据
  WK_ADRC-TITLE = I_INPUT-ANRED.
  WK_ADRC-NAME = I_INPUT-NAME1.
  WK_ADRC-SORT1 = I_INPUT-SORTL.
  WK_ADRC-CITY = I_INPUT-CITY.
  WK_ADRC-STREET = I_INPUT-STREET.
  WK_ADRC-POSTL_COD1 = I_INPUT-PSTLZ.
  WK_ADRC-COUNTRY = I_INPUT-LAND1.
  WK_ADRC-LANGU = I_INPUT-SPRAS.

  CLEAR WK_KNA1.
  MOVE-CORRESPONDING I_INPUT TO WK_KNA1.
  WK_KNA1-KUNNR = I_KUNNR.
  CLEAR WK_KNB1.
  MOVE-CORRESPONDING I_INPUT TO WK_KNB1.
  WK_KNB1-KUNNR = I_KUNNR.
  WK_KNB1-XZVER = 'X'.
  CLEAR WK_KNVV.
  MOVE-CORRESPONDING I_INPUT TO WK_KNVV.
  WK_KNVV-KUNNR = I_KUNNR.
  WK_KNVV-AWAHR = 100.

  REFRESH: IT_KNVD[],IT_KNVI.
* 判断客户销售数据是否存在
  SELECT COUNT(*)
    FROM KNVV
   WHERE KUNNR = I_KUNNR
     AND VKORG = I_INPUT-VKORG
     AND VTWEG = I_INPUT-VTWEG
     AND SPART = I_INPUT-SPART.
* 新增
  IF SY-SUBRC <> 0.
*   客户必填数据
    CLEAR WK_KNVD.
    MOVE-CORRESPONDING I_INPUT TO WK_KNVD.
    WK_KNVD-KUNNR = I_KUNNR.
    WK_KNVD-KZ = 'I'.
    APPEND WK_KNVD TO IT_KNVD.
    CLEAR WK_KNVI.
    WK_KNVI-KUNNR = I_KUNNR.
    WK_KNVI-ALAND = I_INPUT-LAND1.
    WK_KNVI-TATYP = 'MWST'.
    WK_KNVI-TAXKD = I_INPUT-TAXKD.
    WK_KNVI-KZ = 'I'.
    APPEND WK_KNVI TO IT_KNVI.
*   合作伙伴维护
    LOOP AT T_KNVP INTO WK_KNVP WHERE KUNNR IS NOT INITIAL.
      WK_KNVP-KZ = 'I'.
      MODIFY T_KNVP FROM WK_KNVP TRANSPORTING KZ.
    ENDLOOP.
*   调用客户函数。
    CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
      EXPORTING
        I_KNA1                              = WK_KNA1
        I_KNB1                              = WK_KNB1
        I_KNVV                              = WK_KNVV
        I_BAPIADDR1                   = WK_ADRC   "有此记录代表从此处维护公司代码标题,地址数据
        I_MAINTAIN_ADDRESS_BY_KNA1          = 'X'
        PI_POSTFLAG                         = 'X'
        I_FROM_CUSTOMERMASTER               = 'X'
      IMPORTING
        E_KUNNR                             = E_KUNNR
      TABLES
        T_XKNVD                            = IT_KNVD  ‘’创建主数据需要带上XKNVD内表
        T_XKNVI                             = IT_KNVI
        T_XKNVP                            = T_KNVP
      EXCEPTIONS
        CLIENT_ERROR                        = 1
        KNA1_INCOMPLETE                     = 2
        KNB1_INCOMPLETE                     = 3
        KNB5_INCOMPLETE                     = 4
        KNVV_INCOMPLETE                     = 5
        KUNNR_NOT_UNIQUE                    = 6
        SALES_AREA_NOT_UNIQUE               = 7
        SALES_AREA_NOT_VALID                = 8
        INSERT_UPDATE_CONFLICT              = 9
        NUMBER_ASSIGNMENT_ERROR             = 10
        NUMBER_NOT_IN_RANGE                 = 11
        NUMBER_RANGE_NOT_EXTERN             = 12
        NUMBER_RANGE_NOT_INTERN             = 13
        ACCOUNT_GROUP_NOT_VALID             = 14
        PARNR_INVALID                       = 15
        BANK_ADDRESS_INVALID                = 16
        TAX_DATA_NOT_VALID                  = 17
        NO_AUTHORITY                        = 18
        COMPANY_CODE_NOT_UNIQUE             = 19
        DUNNING_DATA_NOT_VALID              = 20
        KNB1_REFERENCE_INVALID              = 21
        CAM_ERROR                           = 22
        OTHERS                              23.
    IF SY-SUBRC <> 0.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
       MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
               INTO E_RESULT.
    ELSEIF I_KUNNR IS NOT INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
       EXPORTING
         WAIT          'X'.
      CONCATENATE I_KUNNR '数据新增成功!' INTO E_RESULT.
    ENDIF.
* 修改
  ELSE.
*   客户必填数据
    CLEAR WK_KNVD.
    MOVE-CORRESPONDING I_INPUT TO WK_KNVD.
    WK_KNVD-KUNNR = I_KUNNR.
    WK_KNVD-KZ = 'U'.
    APPEND WK_KNVD TO IT_KNVD.
    CLEAR WK_KNVI.
    WK_KNVI-KUNNR = I_KUNNR.
    WK_KNVI-ALAND = I_INPUT-LAND1.
    WK_KNVI-TATYP = 'MWST'.
    WK_KNVI-TAXKD = I_INPUT-TAXKD.
    WK_KNVI-KZ = 'U'.
    APPEND WK_KNVI TO IT_KNVI.
*   合作伙伴维护列表
    LOOP AT T_KNVP INTO WK_KNVP WHERE KUNNR IS NOT INITIAL.
      WK_KNVP-KZ = 'U'.
      MODIFY T_KNVP FROM WK_KNVP TRANSPORTING KZ.
    ENDLOOP.

*  合作伙伴在后台会有一个对比原数据逻辑:根据传入合作伙伴判断是否只更新当前合作伙伴,避免覆盖所有合作伙伴数据。
    IF T_KNVP IS NOT INITIAL.
      REFRESH IT_KNVP.
      SELECT *
        INTO CORRESPONDING FIELDS OF TABLE IT_KNVP
        FROM KNVP
        FOR ALL ENTRIES IN T_KNVP
       WHERE KUNNR = T_KNVP-KUNNR
         AND VKORG = T_KNVP-VKORG
         AND VTWEG = T_KNVP-VTWEG
         AND SPART = T_KNVP-SPART
         AND PARVW = T_KNVP-PARVW
         AND PARZA = T_KNVP-PARZA.
    ENDIF.
*   调用客户函数: 更新客户主数据,有些内表要对比原有数据选择性修改。
    CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
      EXPORTING
        I_KNA1                              = WK_KNA1
        I_KNB1                              = WK_KNB1
        I_KNVV                              = WK_KNVV
        I_BAPIADDR1                         = WK_ADRC
        I_MAINTAIN_ADDRESS_BY_KNA1          = 'X'
        PI_POSTFLAG                         = 'X'
        I_FROM_CUSTOMERMASTER               = 'X'
      IMPORTING
        E_KUNNR                             = E_KUNNR
      TABLES
        T_XKNVI                             = IT_KNVI  “税率代码维护
        T_XKNVP                             = T_KNVP "要更新的合作伙伴
        T_YKNVP                             = IT_KNVP "原有合作伙伴数据
      EXCEPTIONS
        CLIENT_ERROR                        = 1
        KNA1_INCOMPLETE                     = 2
        KNB1_INCOMPLETE                     = 3
        KNB5_INCOMPLETE                     = 4
        KNVV_INCOMPLETE                     = 5
        KUNNR_NOT_UNIQUE                    = 6
        SALES_AREA_NOT_UNIQUE               = 7
        SALES_AREA_NOT_VALID                = 8
        INSERT_UPDATE_CONFLICT              = 9
        NUMBER_ASSIGNMENT_ERROR             = 10
        NUMBER_NOT_IN_RANGE                 = 11
        NUMBER_RANGE_NOT_EXTERN             = 12
        NUMBER_RANGE_NOT_INTERN             = 13
        ACCOUNT_GROUP_NOT_VALID             = 14
        PARNR_INVALID                       = 15
        BANK_ADDRESS_INVALID                = 16
        TAX_DATA_NOT_VALID                  = 17
        NO_AUTHORITY                        = 18
        COMPANY_CODE_NOT_UNIQUE             = 19
        DUNNING_DATA_NOT_VALID              = 20
        KNB1_REFERENCE_INVALID              = 21
        CAM_ERROR                           = 22
        OTHERS                              23.
    IF SY-SUBRC <> 0.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
       MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
               INTO E_RESULT.
    ELSEIF I_KUNNR IS NOT INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
       EXPORTING
         WAIT          'X'.
      CONCATENATE I_KUNNR '数据修改成功!' INTO E_RESULT.
    ENDIF.
  ENDIF.
ENDFUNCTION.


接口测试:成功返回SAP客户代码,失败返回失败信息,修改成功,返回客户代码+成功信息。

SAP外围wofacaidafa888手机版传入参数:如CRM,.NETdafabet登录wofacaidafa888手机版等。

SAP正式数据检验:柠檬和你一起收获成果,有任何疑问欢迎联系我们的SAP技术顾问:龙工 QQ:654563691。

佛山大发888黄金娱乐手机版定制工作室,是一家SAPdafabet登录实力强大的工作室,欢迎同行指正,有疑问请联系我们。

Tel: 18620850523 , QQ:654563691 转载请注明:柠檬原创。

扩展延伸:

http://www.cnblogs.com/zfswff/p/5691966.html BAPI用法

http://blog.sina.com.cn/s/blog_4c66402b0100xawj.html SD BAPI接口

http://blog.csdn.net/zhongguomao/article/details/9668597 客户冻结









工作时间

早9:00 - 晚18:00

周六日休息

18620850523
<友情连结> qy8千亿国际/ 龙8娱乐国际/ 乐天堂娱乐场网址/ 1.76大极品发布网/ 韩版中变传奇/