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.