当前位置:网站首页>SAP ABAP BP 批量维护邮箱地址
SAP ABAP BP 批量维护邮箱地址
2022-07-13 18:03:00 【请输入昵称膨胀的馒头】
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 = '[email protected]'. " 需要维护的 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 = '[email protected]'. " 需要维护的 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.
边栏推荐
猜你喜欢
随机推荐
说一下接口
HeadFirst 状态模式 源码
Three handshakes of TCP
股票买卖问题
Related use of unityc intermediate grammar
线程机制与事件机制
unity2d水果忍者案例
IO多路复用
Dynamic changes based on arrays and nodes (addition, deletion, modification and query)
程序员日常技巧
Gobang (1)
硬件课程设计:基于STM32的多功能播放器之传感器设备
动态开点线段树
Lvalue reference, lvalue reference and parameter passing
LeetCode精讲——676. 实现一个魔法字典(难度:中等)
C#-Mathf
unity3d-MonoBehaviour基类
树状数组+离散化
散列表HashTable分离链接法类模板的实现
Hardware course design: novel reading of multi-function player based on stm32









