SAP修改客户KNVP伙伴功能程序

有时候需要使用程序修改客户的销售组织中的伙伴功能,比如送达方,售达方等。经过摸索,现将代码分享出来。创建接口的参数如下图所示  入参:

SAP修改客户KNVP伙伴功能程序

出参:

SAP修改客户KNVP伙伴功能程序

代码如下图所示:

FUNCTION zfmsd0004.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IV_PARTNER1) TYPE  BU_PARTNER
*"     VALUE(IV_PARTNER2) TYPE  BU_PARTNER
*"     VALUE(IS_SALES) TYPE  CMDS_EI_SALES_KEY
*"     VALUE(IV_PARVW) TYPE  PARVW
*"     VALUE(IV_MODE) TYPE  CMD_EI_SALES_TASK
*"  EXPORTING
*"     REFERENCE(ES_RETURN) TYPE  BAPIRET2
*"----------------------------------------------------------------------
  IF iv_partner1 IS INITIAL.
    es_return-type = 'E'.
    es_return-message = '请输入客户编号'.
    RETURN.
  ENDIF.
  IF iv_partner2 IS INITIAL.
    es_return-type = 'E'.
    es_return-message = '请输入合作伙伴编号'.
    RETURN.
  ENDIF.
  IF is_sales IS INITIAL.
    es_return-type = 'E'.
    es_return-message = '请输入销售范围'.
    RETURN.
  ENDIF.
  IF iv_parvw IS INITIAL.
    es_return-type = 'E'.
    es_return-message = '请输入合作伙伴职能'.
    RETURN.
  ENDIF.
  IF iv_mode IS INITIAL.
    es_return-type = 'E'.
    es_return-message = '请输入模式'.
    RETURN.
  ENDIF.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = iv_partner1
    IMPORTING
      output = iv_partner1.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = iv_partner2
    IMPORTING
      output = iv_partner2.

  "对合作伙伴职能进行转换
  CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
    EXPORTING
      input  = iv_parvw
    IMPORTING
      output = iv_parvw.

  "对销售范围进行处理
  IF is_sales-vtweg IS INITIAL."销售渠道
    is_sales-vtweg = 'Z0'."默认为Z0
  ENDIF.
  IF is_sales-spart IS INITIAL."产品组
    is_sales-spart = 'Y0'.
  ENDIF.

  "创建客户主数据的参数
  DATA:ls_master_datas TYPE cmds_ei_main,
       ls_master_data  TYPE cmds_ei_extern.

  "销售数据
  DATA:lt_sales TYPE cmds_ei_sales_t,
       ls_sales TYPE cmds_ei_sales.
  DATA:lt_functions TYPE cmds_ei_functions_t,
       ls_functions TYPE cmds_ei_functions.

  ls_master_data-header-object_task = 'U'."创建/更改
  ls_master_data-header-object_instance-kunnr = iv_partner1.

  CLEAR:ls_functions,lt_functions.
  ls_functions-task = iv_mode.
  ls_functions-data_key-parvw = iv_parvw.
  ls_functions-data_key-parza = 1.
  ls_functions-data-partner = iv_partner2.
  ls_functions-datax-partner = 'X'.
  APPEND ls_functions TO lt_functions.

  ls_sales-task = 'M'.
  ls_sales-data_key-vkorg = is_sales-vkorg.
  ls_sales-data_key-vtweg = is_sales-vtweg.
  ls_sales-data_key-spart = is_sales-spart.
  ls_sales-functions-functions = lt_functions.
  APPEND ls_sales TO lt_sales.

  ls_master_data-sales_data-sales = lt_sales.
  APPEND ls_master_data TO ls_master_datas-customers.

  "定义调用类方法的变量
  DATA:ls_correct           TYPE cmds_ei_main,
       ls_message_correct   TYPE cvis_message,
       ls_defective         TYPE cmds_ei_main,
       ls_message_defective TYPE cvis_message.
  CLEAR:ls_correct,ls_message_correct,
  ls_defective,ls_message_defective.
  DATA:lt_return TYPE TABLE OF bapiret2,
       ls_return TYPE bapiret2.

  cmd_ei_api=>initialize( ).
  CALL METHOD cmd_ei_api=>maintain_bapi
    EXPORTING
      "           iv_test_run              = SPACE
      iv_collect_messages      = 'X'
      is_master_data           = ls_master_datas
    IMPORTING
      es_master_data_correct   = ls_correct
      es_message_correct       = ls_message_correct
      es_master_data_defective = ls_defective
      es_message_defective     = ls_message_defective.
  lt_return = ls_message_defective-messages.
  READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
  IF sy-subrc = 0.
    es_return-type = 'E'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    LOOP AT lt_return INTO ls_return.
      IF sy-tabix = 1.
        es_return-message = ls_return-message.
      ELSE.
        es_return-message = es_return-message && ';' && ls_return-message.
      ENDIF.
    ENDLOOP.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
    es_return-type = 'S'.
    es_return-message = '操作成功'.
  ENDIF.

ENDFUNCTION.