获取已发送电子邮件的 SOST 数据库 ID

Get SOST database ID of sent emails

我有一个发送电子邮件的 ABAP 程序。已发送的电子邮件存储在 SOOD table 中。发送电子邮件后,我想获取电子邮件的一些 ID,以便稍后检查其状态(在 SOST table 中)。我看到更多 functions/methods 发送电子邮件(例如 cl_bcs/send、SO_NEW_DOCUMENT_SEND_API1),但其中 none returns 任何 ID。有没有可靠的方法来获得它?

功能模块 SO_NEW_DOCUMENT_SEND_API1 为每条发送的新消息创建并导出一个新的 OBJECT_ID,正如您在此处看到的 -

NEW_OBJECT_ID 存储在 BCST_SR table 的 SCOM_KEY 字段中。从 BCST_SR table 你必须得到 DOC_OID,使用 DOC_OID 你可以从 SOODtable。 (SOOD 中的参考字段是 - IF_DOC_BCS )然后使用对象编号 OBJNO[=22 中获取详细信息=]table.

您也可以参考t-code SBWP来查看您的邮件状态。

对于classCL_BCS,可以查看send_request对象的方法doc_wrapper_id。这将 return sood 构造器。

其他两个答案为我提供了完成它的宝贵线索 (+1)。但是两者都遗漏了一些准确性和代码片段,所以我在我的回答中总结了所有内容。

使用cl_bcs

DATA gr_send_request  TYPE REF TO cl_bcs.
DATA emailid LIKE soodk.
gr_send_request = cl_bcs=>create_persistent( ).

" ...

CALL METHOD gr_send_request->send(EXPORTING i_with_error_screen = 'X'
                                  RECEIVING result = gv_sent_to_all ).

IF gv_sent_to_all = 'X'.
  emailid = gr_send_request->send_request->doc_wrapper_id( ).
ENDIF.

SOODK(不是 sood)是包含三个组件(OBJTPOBJYROBJNO)的结构,它们一起构成 SOOD 中的键 table.

使用SO_NEW_DOCUMENT_SEND_API1

DATA LT_OBJECTID TYPE SOFOLENTI1-OBJECT_ID.

CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
  EXPORTING
    DOCUMENT_DATA              = LT_MAILSUBJECT
    DOCUMENT_TYPE              = 'HTM'
  IMPORTING
    new_object_id              = lt_objectid
" ...

lt_objectid (SOFOLENTI1-OBJECT_ID) 是 char(17),包含串联的 SOODK 结构 OBJTP+OBJYR+OBJNO。拆分后,可以用来查找SOODKtable中的一条记录。 (我在BCST_SR-SCOM_KEY里没找到,不过没必要。)