SAP ABAP BP 批量维护邮箱地址

25 篇文章 7 订阅

SAP ABAP BP 批量维护邮箱地址

前言

业务情况是需要给我们的业务伙伴们发送邮件,所以需要维护各业务伙伴们的邮箱

手工维护效率太低

于是编写程序进行批量维护

示例代码总览

以下为馒头摘取的代码,对特殊部分进行了修改

关键代码处写有详尽注释

DATA:   wa_data   TYPE  cvis_ei_extern,
        it_data   TYPE  cvis_ei_extern_t,
        it_return TYPE  bapiretm,
        wa_return TYPE  bapireti.

DATA:   wa_partner  TYPE bus_ei_extern.

DATA:   v_task         TYPE vmd_ei_object_task,  " I 创建,U 修改,C 现有状态
        v_partner      TYPE bu_partner,
        v_smtp_task    TYPE cvi_ei_smtp_task,
        v_remarks_task TYPE bus_ei_comrem_task.

DATA:   it_smtp TYPE bus_ei_bupa_smtp_t,
        wa_smtp TYPE bus_ei_bupa_smtp.

DATA:   it_remarks TYPE bus_ei_bupa_comrem_t,
        wa_remarks TYPE bus_ei_bupa_comrem.

DATA:   it_addresses TYPE bus_ei_bupa_address_t,
        wa_address   TYPE bus_ei_bupa_address.

v_partner = 'bp number'.                        " 业务伙伴编号
v_task = 'U'.                                   " 这里为 U 是因为我们默认该BP已经存在,只是更新邮箱

wa_partner-header-object_task = v_task.

v_smtp_task = '2'.
wa_smtp-contact-task = v_smtp_task.
wa_smtp-contact-data-e_mail = 'xxx@xxx'. " 需要维护的 e-mail
wa_smtp-contact-datax-e_mail = 'X'.

v_remarks_task = '2'.
wa_remarks-task = v_remarks_task.
wa_remarks-data-comm_notes = 'remark'. " 注释 - 相当于备注邮件所属信息
wa_remarks-datax-comm_notes = 'X'.
wa_remarks-data-langu = sy-langu.
wa_remarks-datax-langu = 'X'.
APPEND wa_remarks TO it_remarks.
wa_smtp-remark-remarks = it_remarks.
wa_smtp-remark-current_state = 'X'.
APPEND wa_smtp TO it_smtp.

wa_address-task = '5'.                          " 这里为 5 代表着逻辑代码修改,类似标识 M 的效果
                                                " 这里必须为 5 才会生效
wa_address-data-communication-smtp-current_state = 'X'.
wa_address-data-communication-smtp-smtp = it_smtp.
APPEND wa_address TO it_addresses.

wa_partner-header-object_instance-bpartner = v_partner.
wa_partner-central_data-address-addresses = it_addresses.
wa_data-partner = wa_partner.
APPEND wa_data TO it_data.

REFRESH:it_return.
CLEAR:wa_return.
CALL FUNCTION 'CVI_EI_INBOUND_MAIN'             " 现在的bp创建或修改一般都用这个 FM
EXPORTING
    i_data   = it_data
IMPORTING
    e_return = it_return.

LOOP AT it_return INTO wa_return.
    LOOP AT wa_return-object_msg INTO DATA(wa_object_msg) WHERE type = 'E' OR type = 'A'.
        CONCATENATE v_msg wa_object_msg-message INTO DATA(v_msg).
    ENDLOOP.
ENDLOOP.

IF v_msg IS INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
        wait = abap_true.
* 'S'.
* '维护成功'.

ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
* 'E'.
* v_msg.
ENDIF.

关键代码解析

变量定义

it_data wa_data 是 FM “CVI_EI_INBOUND_MAIN” 的入参 这个类型包含了业务伙伴的各种信息

it_return wa_return 是 FM “CVI_EI_INBOUND_MAIN” 的出参 这里将包含函数执行完成后的信息

v_task v_partner t_smtp_task v_remarks_task 这些变量是用来控制逻辑的参数(插入、修改、删除等)

it_smtp wa_smtp it_remarks wa_remarks it_addresses wa_address 这些是地址信息


DATA:   wa_data   TYPE  cvis_ei_extern,
        it_data   TYPE  cvis_ei_extern_t,
        it_return TYPE  bapiretm,
        wa_return TYPE  bapireti.

DATA:   wa_partner  TYPE bus_ei_extern.

DATA:   v_task         TYPE vmd_ei_object_task,  " I 创建,U 修改,C 现有状态
        v_partner      TYPE bu_partner,
        v_smtp_task    TYPE cvi_ei_smtp_task,
        v_remarks_task TYPE bus_ei_comrem_task.

DATA:   it_smtp TYPE bus_ei_bupa_smtp_t,
        wa_smtp TYPE bus_ei_bupa_smtp.

DATA:   it_remarks TYPE bus_ei_bupa_comrem_t,
        wa_remarks TYPE bus_ei_bupa_comrem.

DATA:   it_addresses TYPE bus_ei_bupa_address_t,
        wa_address   TYPE bus_ei_bupa_address.

赋值区段一

需要待修改的业务伙伴(BP)编号

设置 object_task 为 U 即更新该 BP


v_partner = 'bp number'.                        " 业务伙伴编号
v_task = 'U'.                                   " 这里为 U 是因为我们默认该BP已经存在,只是更新邮箱
wa_partner-header-object_task = v_task.

赋值区段二

需要维护的邮箱和描述

都加入到 smtp 这个结构表里


v_smtp_task = '2'.
wa_smtp-contact-task = v_smtp_task.
wa_smtp-contact-data-e_mail = 'xxx@xxx'. " 需要维护的 e-mail
wa_smtp-contact-datax-e_mail = 'X'.
v_remarks_task = '2'.
wa_remarks-task = v_remarks_task.
wa_remarks-data-comm_notes = 'remark'. " 注释 - 相当于备注邮件所属信息
wa_remarks-datax-comm_notes = 'X'.
wa_remarks-data-langu = sy-langu.
wa_remarks-datax-langu = 'X'.
APPEND wa_remarks TO it_remarks.
wa_smtp-remark-remarks = it_remarks.
wa_smtp-remark-current_state = 'X'.
APPEND wa_smtp TO it_smtp.

赋值区段三

task 设置为 5 => SAP 给的描述是 5代表逻辑代码修改 => 馒头试验下来只有 5 能得到想要的结果

紧接着就是把 smtp 和 bp 添加到 data 这个入参里


wa_address-task = '5'.                          " 这里为 5 代表着逻辑代码修改,类似标识 M 的效果
                                                " 这里必须为 5 才会生效
wa_address-data-communication-smtp-current_state = 'X'.
wa_address-data-communication-smtp-smtp = it_smtp.
APPEND wa_address TO it_addresses.
wa_partner-header-object_instance-bpartner = v_partner.
wa_partner-central_data-address-addresses = it_addresses.
wa_data-partner = wa_partner.
APPEND wa_data TO it_data.

调用 FM 并获取返回值

调用 CVI_EI_INBOUND_MAIN

现在馒头做 bp 的创建和修改都用这个 FM

这个FM包含的内容比较全

最后获取返回消息

成功或失败,失败则获取失败消息


REFRESH:it_return.
CLEAR:wa_return.
CALL FUNCTION 'CVI_EI_INBOUND_MAIN'             " 现在的bp创建或修改一般都用这个 FM
EXPORTING
    i_data   = it_data
IMPORTING
    e_return = it_return.

LOOP AT it_return INTO wa_return.
    LOOP AT wa_return-object_msg INTO DATA(wa_object_msg) WHERE type = 'E' OR type = 'A'.
        CONCATENATE v_msg wa_object_msg-message INTO DATA(v_msg).
    ENDLOOP.
ENDLOOP.

IF v_msg IS INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
        wait = abap_true.
    wa_msg-mtype = 'S'.
    wa_msg-mtext = '维护成功'.

ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    wa_msg-mtype = 'E'.
    wa_msg-mtext = v_msg.
ENDIF.
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值