SAP:对STMS传输做增强,实现与企业微信的通讯(一)
前言
最近遇到一个需求,需要对SAP传输请求号的tcode做增强,以实现当传输请求时通过企业微信将请求结果发送给部门经理及相关负责人,但是通过查询,没有找到有相应的出口或者BADI,只能另辟蹊径想着找找看通过隐式增强实现。
一、什么是隐式增强?
隐式增强是第四代增强Enhancement-Point的一种,由于在某些业务上三代增强并不能满足我们的需求,所以在三代增强的基础上,SAP开发了第四代增强- Enhancement-Point,只有在User Exit与BADI都无法实现时才用到。而Enhancement-Point分为2种,显示增强和隐示增强。显式增强就是手动加入到程序中的Enhancement options,隐式增强就是系统内置的Enhancement options。
本次我们用到的就是隐式增强。
二、实现步骤
1.寻找所需要修改的程序或Function
通过DEBUG,发现STMS所对应的函数组为TMSU_IQ,包括以下程式,经过debug发现
include文件中的LTMSU_IQF03 负责传输请求号的作业,其中的function TMS_UI_IMPORT_TR_QUEUE负责传输请求号的UI变化,再次追入function内部,可发现实际的传输function为TMS_MGR_IMPORT_TR_QUEUE,为了防止增强对UI造成影响,最终决定在TMS_UI_IMPORT_TR_QUEUE内部做增强,而不是TMS_MGR_IMPORT_TR_QUEUE。
2.寻找隐式增强点
隐式增强一般在每个form或function或method的第一行和form或function或method的最后一行,需要如下操作才可以发现:TCODE SE37或SE38 进入源代码后,点击上面菜单里的编辑->增强操作->显示隐式增强。
然后点击界面上的隐式增强即可看到系统的隐式增强点,在隐式增强点创建增强实施,选择为code,就创建好了一个隐式增强的实施。
3.写入增强代码
代码如下(本示例以发送邮件为目的):
ENHANCEMENT 1 ZTMS_SEND_MAIL. "active version
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(3) Function Module TMS_UI_IMPORT_TR_REQUEST, End, Enhancement ZTMS_SEND_MAIL, Start A
DATA: MAILSUBJECT TYPE SODOCCHGI1.
"正文
DATA:lt_mailtxt TYPE STANDARD TABLE OF SOLI WITH HEADER LINE.
DATA:ls_mailtxt TYPE String.
"收件人
DATA:T_RECEIVERS TYPE TABLE OF SOMLRECI1 WITH HEADER LINE.
"设置邮件主题,描述
MAILSUBJECT-OBJ_NAME = 'SAPRPT'.
MAILSUBJECT-OBJ_LANGU = SY-LANGU.
MAILSUBJECT-SKIP_SCREN = 'X'. "直接发送,不弹出窗口
MAILSUBJECT-OBJ_DESCR = '測試郵件發送'.
"設置收件人
CLEAR T_RECEIVERS.
T_RECEIVERS-receiver = 'XXX@163.com'. "郵件地址
T_RECEIVERS-rec_type = 'U'.
T_RECEIVERS-com_type = 'INT'.
T_RECEIVERS-notif_del = 'X'.
T_RECEIVERS-notif_ndel = 'X'.
APPEND T_RECEIVERS.
"設置正文
DATA :ls_tp_import LIKE LINE OF lt_tp_import,
is_requests like line of it_requests.
CLEAR : ls_mailtxt, lt_mailtxt.
ls_mailtxt = '<HTML><BODY>'.
APPEND ls_mailtxt TO lt_mailtxt.
CLEAR : ls_mailtxt.
ls_mailtxt = '<table border="1">'.
APPEND ls_mailtxt TO lt_mailtxt.
CLEAR : ls_mailtxt.
ls_mailtxt = '<tr><th>请求号</th><th>状态</th><th>OWNER</th><th>描述</th><th>目标端口号</th><th>操作人</th></tr>'.
APPEND ls_mailtxt TO lt_mailtxt.
loop at lt_tp_import INTO ls_tp_import.
CLEAR : ls_mailtxt.
CONCATENATE '<tr><td>' ls_tp_import-request-TRKORR '</td>' INTO ls_mailtxt.
APPEND ls_mailtxt TO lt_mailtxt.
CLEAR : ls_mailtxt.
CONCATENATE '<td>' ls_tp_import-tp_ret_code '</td>' INTO ls_mailtxt.
APPEND ls_mailtxt TO lt_mailtxt.
CLEAR : ls_mailtxt.
CONCATENATE '<td>' ls_tp_import-request-OWNER '</td>' INTO ls_mailtxt.
APPEND ls_mailtxt TO lt_mailtxt.
READ TABLE it_requests INTO is_requests WITH KEY TRKORR = ls_tp_import-request-TRKORR.
if sy-subrc = 0.
CLEAR : ls_mailtxt.
CONCATENATE '<td>' is_requests-TEXT '</td>' INTO ls_mailtxt.
APPEND ls_mailtxt TO lt_mailtxt.
endif.
CLEAR : ls_mailtxt.
CONCATENATE '<td>' Ls_TP_IMPORT-REQUEST-TARCLI '</td>' INTO ls_mailtxt.
APPEND ls_mailtxt TO lt_mailtxt.
CLEAR : ls_mailtxt.
CONCATENATE '<td>' SY-UNAME '</td></tr>' INTO ls_mailtxt.
APPEND ls_mailtxt TO lt_mailtxt.
endloop.
CLEAR : ls_mailtxt.
ls_mailtxt = '</table>'.
APPEND ls_mailtxt TO lt_mailtxt.
CLEAR : ls_mailtxt.
ls_mailtxt = '</BODY></HTML>'.
APPEND ls_mailtxt TO lt_mailtxt.
"发送邮件
CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
EXPORTING
DOCUMENT_DATA = MAILSUBJECT
document_type = 'HTM'
COMMIT_WORK = 'X'
TABLES
OBJECT_CONTENT = lt_mailtxt
RECEIVERS = T_RECEIVERS.
IF sy-subrc = 0.
"立即发送,会将所有SOST,邮件任务队列中邮件发送
* SUBMIT rsconn01 WITH mode = 'INT'.
ENDIF.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(4) Function Module TMS_UI_IMPORT_TR_REQUEST, End, Enhancement ZTMS_SEND_MAIL, End A
ENDENHANCEMENT.
总结
隐式增强可以针对实现无法找到出口或者BADI的程式进行增强,但是由于隐式增强可以直接在源代码里面写增强代码,所以有可能会对原有标准程式造成影响,建议谨慎使用!
文章来自于网络,如果侵犯了您的权益,请联系站长删除!