Вызов транзакции SAP из писем в MS Outlook
В этой статье описана техническая реализация одного из вариантов вызова SAP транзакции из письма в почтовом клиенте 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 (x86)\SAP\FrontEnd\SAPgui\sapshcut.exe -'
'language=ru -system=" + System + " -u=" + UserName + " -client=" + Client + " -GuiSize=Maximized -command=*ZEXECUTOR EVENT=%1", "REG_SZ"'.
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти
Обсуждения 2
Комментарий от
Андрей Алхимченков
| 22 апреля 2015, 11:04
Гораздо проще высылать ярлык SAP Logon транзакции для запуска из Outlook.
Для создания ярлыка используется ФМ "SWN_CREATE_SHORTCUT".
Потом добавляете для в ATTACH для рассылки и пользователь вызывает необходимую транзакцию.
Комментарий от
Павел Телепко
| 22 апреля 2015, 11:20
Андрей Алхимченков 22 апреля 2015, 11:04
Все это как-то сложно.
Гораздо проще высылать ярлык SAP Logon транзакции для запуска из Outlook.
Для создания ярлыка используется ФМ "SWN_CREATE_SHORTCUT".
Потом добавляете для в ATTACH для рассылки и пользователь вызывает необходимую транзакцию.
Да и сложность немного падает, если запись в регистр делать через метод CL_GUI_FRONTEND_SERVICES=>REGISTRY_SET_VALUE.
Есть минус в описанном методе в том, что пользователю нужно заранее сделать запись в реестр. А так мне кажется у обоих способов есть свои плюсы и минусы...