我有一个发送电子邮件的ABAP程序。已发送的电子邮件存储在SOOD表中。发送电子邮件后,我想获得一些电子邮件ID,以便稍后检查其状态(在SOST表中)。我看到了更多发送电子邮件的函数/方法(例如cl_bcs / send,SO_NEW_DOCUMENT_SEND_API1),但它们都没有返回任何ID。有可靠的方法来获得它吗?
答案 0 :(得分:4)
功能模块SO_NEW_DOCUMENT_SEND_API1
为每个发送的新邮件创建并导出新的OBJECT_ID
,正如您在此处所见 -
此NEW_OBJECT_ID
存储在BCST_SR
字段中的 SCOM_KEY
表中。在 BCST_SR
表中,您可以DOC_OID
使用DOC_OID
获取 SOOD
的详细信息表。 ( SOOD
中的参考字段为 - IF_DOC_BCS
)然后使用对象编号OBJNO
从 SOST
表。
您也可以参考代码 SBWP
来检查您的邮件状态。
答案 1 :(得分:1)
答案 2 :(得分:1)
另外两个答案给了我一些有价值的线索来完成它(+1)。但是两者都错过了一些准确性和代码片段,所以我总结了我的答案。
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)是包含三个组件(OBJTP
,OBJYR
,OBJNO
)的结构,它们是SOOD
表中的键。< / p>
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
。当划分为部分时,它可用于查找SOODK
表中的记录。 (我没有在BCST_SR-SCOM_KEY
中找到它,但没有必要。)