Вы находитесь на странице: 1из 6

Вызов транзакции SAP из писем в MS Outlook

В этой статье описана техническая реализация одного из вариантов вызова SAP транзакции из
письма в почтовом клиенте Outlook с передачей параметров. Понимаю, что возможны множество
вариантов реализаций, я выбрал этот, но, конечно, хотел бы узнать о других.
Первым шагом  в рассылке писем из SAP является настройка соединения с SMTP сервером в
транзакции SCOT (Рис.1).

Рис.1 Соединение с SMTP сервером


Далее необходимо заставить Windows реагировать на ссылки т.е. вызывать именно SAPGui. Здесь
следует воспользоваться командами реестра. Его можно запустить сочетанием клавиш Win+R и
вводом команды “Regedit” (Рис.2).

Рис.2 Вызов редактор реестра


Можно добавить свою команду, например “sapxxx:”, где xxx – идентификатор системы, которую
мы будем вызывать.
Рис.3 Путь к командам в реестре
Не вдаваясь в структуру реестра (Рис.4) остановимся на ветке “command”.

Рис.4 Структура реестра


В команде прописывается короткая ссылка к запускаемому приложению, а также параметры,
которые этому приложению передаются.
Рис.5 Ссылка для запуска SAP
Ссылка на моем компьютере выглядит следующим образом:
C:\Program Files (x86)\SAP\FrontEnd\SAPgui\sapshcut.exe -language=ru -system=E11 -u=PATELEPKO -
client=020 -GuiSize=Maximized -command=*ZEXECUTOR EVENT=%1
Здесь ZEXECUTOR это транзакция, которая вызывается при нажатии на ссылку. Через Event будут
передаваться параметры в неё.
Для того чтобы сформировать этот реестр я использую VBS(Visual Basic Script). Интеграция с ним
описана в моей предыдущей статье. Можно использовать и другие скриптовые языки, например
JS(Java Script) и т.д. Предполагаю, что это возможно из Abap.
В зависимости от версии Windows короткий путь к SAPGui может быть разный. В продуктивной
реализации это должно учитываться. В моем тестовом примере я пропишу путь константой.
Abap код ниже:
  METHOD set_registr.
    DATA: vb_script TYPE ole2_object,
          lv_module TYPE string,
          lv_sys    TYPE string,
          lv_cln    TYPE string,
          lv_uname  TYPE string.
 
    DEFINE vb.
      concatenate lv_module &1 CL_ABAP_CHAR_UTILITIES=>CR_LF into lv_module.
    END-OF-DEFINITION.
 
    DEFINE vb2.
      concatenate lv_module &1 &2 CL_ABAP_CHAR_UTILITIES=>CR_LF into lv_module.
    END-OF-DEFINITION.
 
    CREATE OBJECT vb_script 'MSScriptControl.ScriptControl'.
 
    SET PROPERTY OF vb_script 'AllowUI' = 1.
    SET PROPERTY OF vb_script 'Language' = 'VBScript'.
 
    vb 'function RegSystem(System, Client, UserName)'.
    vb 'Set WshShell = CreateObject("WScript.Shell")'.
    vb 'WshShell.RegWrite "HKCU\Software\Classes\saptst\", "URL:sapevent Protocol", "REG_SZ"'.
    vb 'WshShell.RegWrite "HKCU\Software\Classes\saptst\URL Protocol","", "REG_SZ"'.
    vb 'WshShell.RegWrite "HKCU\Software\Classes\saptst\DefaultIcon\", "C:\Program Files (x86)\SAP\
FrontEnd\SAPgui\sapshcut.exe 0", "REG_SZ"'.
    vb2 'WshShell.RegWrite "HKCU\Software\Classes\saptst\shell\open\command\", "C:\Program Files (x
86)\SAP\FrontEnd\SAPgui\sapshcut.exe -'
       'language=ru -system=" + System + " -u=" + UserName + " -client=" + Client + " -GuiSize=Maximized -
command=*ZEXECUTOR EVENT=%1", "REG_SZ"'.
    vb 'Set WshShell = Nothing'.
    vb 'End function'.
 
    CALL METHOD OF vb_script 'AddCode' EXPORTING #1 = lv_module.
 
    lv_sys = sy-sysid.
    lv_cln = sy-mandt.
    lv_uname = sy-uname.
 
    CALL METHOD OF vb_script 'Run'
      EXPORTING
        #1 = 'RegSystem'
        #2 = lv_sys
        #3 = lv_cln
        #4 = lv_uname.
 
    CALL METHOD cl_gui_cfw=>flush.
  ENDMETHOD.
Для того, чтобы отправить письмо использую класс CL_BSC, обернутый в ФМ ZUTL_SEND_MAIL.
  METHOD set_html_mail.
 
    DATA: lt_recip TYPE bcsy_smtpa,
          ls_recip LIKE LINE OF lt_recip,
          lv_html  type string.
 
    lv_html = '<HTML> <a href="' && 'saptst:' && 'fm;COMM=ZTST_OPEN;P1=' && 'PARAM1' && '">Start 
SAP</a> </HTML>'.
 
    ls_recip = 'telepkop@mail.ru'.
    APPEND ls_recip TO lt_recip.
 
    CALL FUNCTION 'ZUTL_SEND_MAIL'
      EXPORTING
        iv_sender     = 'support@sap.dev'
        it_recipients = lt_recip
        iv_header     = 'Test mail'
        iv_html       = lv_html
      EXCEPTIONS
        unknown_error = 1
        OTHERS        = 2.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.
 
  ENDMETHOD.
В этом методе я формирую ссылку  в HTML. В ссылке следует прописать необходимые параметры.
Собственно здесь COMM, P1 это параметры транзакции ZEXECUTOR с рис.5. Код этой программы
ниже:
REPORT zexecutor.
 
PARAMETERS: event TYPE text255,
            p1    TYPE text132,
            comm  TYPE text132.
 
BREAK-POINT.
Для того, чтобы получить программу рассылки сообщений вызовите описанные выше методы и
настройте фоновое задание (можно и вручную) рассылки писем в транзакции SCOT.
                После выполнения моего тестового примера приходит письмо (Рис.6 )

Рис.6 Письмо со ссылкой


При нажатии на неё запускается SAPGui и если система не запущена, то он «честно» спросит к ней
пароль (Рис.7):

Рис.7 Запуск SAPGui


В результате, теперь по переданным параметрам я могу запустить в Gui всё, что угодно (Рис.8):
Рис.8 Результат

Вам также может понравиться