如何修改SAP BCS代码实现向多用户发送邮件?
多用户邮件发送的SAP代码修改方案
- 遍历所有选中用户:不要仅取范围字段
s_inbox的第一个条目s_inbox-low,而是循环遍历s_inbox内表的每一行,逐个处理每个用户。 - 提前校验用户有效性:在创建收件人对象前,先检查用户是否存在且有效,避免触发“收件人未知”错误。
- 正确添加多个收件人:为每个有效用户创建独立的收件人对象,再添加到BCS邮件实例中。
示例代码片段:
DATA: lo_bcs TYPE REF TO cl_bcs, lo_email TYPE REF TO cl_document_bcs, lo_recipient TYPE REF TO if_recipient_bcs, lv_subject TYPE so_obj_des, lv_body TYPE string, lv_sent_to_all TYPE os_boolean. * 初始化BCS邮件对象 lo_bcs = cl_bcs=>create_persistent( ). * 构建邮件内容 lv_subject = '批量通知邮件'. lv_body = '这是发送给多个SAP用户的测试邮件内容'. lo_email = cl_document_bcs=>create_document( i_type = 'RAW' i_subject = lv_subject i_text = lv_body ). * 将邮件内容关联到BCS对象 lo_bcs->set_document( lo_email ). * 循环处理所有选中用户 LOOP AT s_inbox INTO DATA(ls_inbox). * 校验用户是否有效 CALL FUNCTION 'USER_CHECK' EXPORTING user_name = ls_inbox-low EXCEPTIONS user_not_exist = 1 OTHERS = 2. IF sy-subrc = 0. * 创建SAP用户收件人实例 lo_recipient = cl_sapuser_bcs=>create( ls_inbox-low ). * 添加收件人到邮件(可根据需求修改为抄送人/密送人) lo_bcs->add_recipient( i_recipient = lo_recipient i_express = abap_true ). ELSE. * 可选:记录无效用户用于后续提示 WRITE: / '用户', ls_inbox-low, '不存在或无效,已跳过发送'. ENDIF. ENDLOOP. * 执行邮件发送 lv_sent_to_all = lo_bcs->send( i_with_error_screen = abap_true ). COMMIT WORK. * 输出发送结果 IF lv_sent_to_all = abap_true. WRITE: / '邮件已成功发送给所有有效用户'. ELSE. WRITE: / '部分用户邮件发送失败,请检查错误信息'. ENDIF.
- 关键注意点:
- 通过
USER_CHECK函数提前过滤无效用户,从根源避免“收件人未知”的报错。 - 每个用户需单独创建
cl_sapuser_bcs对象,再调用add_recipient方法添加,不能复用同一个收件人实例。 - 发送邮件后必须执行
COMMIT WORK,确保邮件提交到SAP的发送队列。
- 通过
内容的提问来源于stack exchange,提问作者Bigflatfoot
相关产品推荐
相关产品推荐

