• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Интеграция Lotus и Sap R3

AGLevchenko

Member
19.12.2018
13
0
BIT
6
Добрый день!
Поступила задача от заказчика, стукнуться из Lotus в SAP и достать оттуда данные.
Сапом был сгенерирован 111.VBS выполняющий необходимую операцию.

Visual Basic:
If Not IsObject(application) Then
   Set SapGuiAuto  = GetObject("SAPGUI")
   Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
   Set connection = application.Children(0)
End If
If Not IsObject(session) Then
   Set session    = connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject session,     "on"
   WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize
'############################################################
'Вызов транзакции Реестр ЕСВД
'############################################################
session.findById("wnd[0]/tbar[0]/okcd").text = "ZSVD_REESTR"
session.findById("wnd[0]").sendVKey 0

'############################################################
'Заполнение параметров запроса для формирования списка ДД
'############################################################
'Раздел Данные организационого уровня
session.findById("wnd[0]/usr/ctxtS_BUKRS-LOW").text = "****"'БЕ
session.findById("wnd[0]/usr/ctxtS_DEPCOD-LOW").text = "****" 'Код подразделения

'Раздел Статус визирования
session.findById("wnd[0]/usr/btn%_S_DOKST_%_APP_%-VALU_PUSH").press'Многократный выбор Статус документа
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL-SLOW_I[1,0]").text = "ZB"'Статус Подписан
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL-SLOW_I[1,1]").text = "ZH"'Статус Условно подписан
session.findById("wnd[1]/tbar[0]/btn[8]").press

'Раздел Данные договора
'Дата подписания ДД
session.findById("wnd[0]/usr/ctxtS_DOS-LOW").text = "01.06.2022"'Дата с
session.findById("wnd[0]/usr/ctxtS_DOS-HIGH").text = "09.07.2022"'Дата по
session.findById("wnd[0]/tbar[1]/btn[8]").press

'############################################################
'Выгрузка формуляра
'############################################################
session.findById("wnd[0]/usr/cntlCONTAINER_GRID_0100/shellcont/shell").selectAll'Выбор всех договоров
session.findById("wnd[0]/tbar[1]/btn[19]").press'Выгрузка формуляра
session.findById("wnd[1]/usr/sub:SAPLSPO4:0300/ctxtSVALD-VALUE[0,21]").text = "D:\test"'Путь для выгрузки формуляра
session.findById("wnd[1]/usr/sub:SAPLSPO4:0300/ctxtSVALD-VALUE[0,21]").caretPosition = 7

'############################################################
'Выход в основное меню
'############################################################
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/tbar[0]/btn[15]").press
session.findById("wnd[0]/tbar[0]/btn[15]").press

Попытки адаптировать данный VBA под LS не увенчались успехом.
На строке Set SapGuiAuto = Createobject("SAPGUI")
Выдает ошибку "cannot create automation object"

Если данную 111.vbs запустить
Код:
Returncode = wshell.run({"c:\Temp\111.vbs"}, 1, True)
Всё отрабатывает.

Как вариант можно аналогичную vbs с необходимыми параметрами создавать Lotus Script-ом, а потом Шелом его запускать, но хотелось бы сделать изящно.

Кто-нибудь сталкивался с таким? Может есть какая библиотечка которую можно использовать?
 

AGLevchenko

Member
19.12.2018
13
0
BIT
6
Всё, нашел. Сначала надо вызвать Враппер.

Код:
    Dim objWrapper As Variant
    Set objWrapper = CreateObject("SapROTWr.SapROTWrapper")
    'Get sap GUI using wrapper
    Set SapGuiAuto = objWrapper.GetROTEntry("SAPGUI")
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!