You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:36:18