2017-01-16 10 views
1

Я хотел бы создать «поле ввода» в SAP, которое использует переданное значение в сценарии vb. Чтобы дать конкретный пример, я хотел бы открыть FBL5n, минуя счет-фактуру в поле и просмотреть счет-фактуру в VF03. Скрипт для этого готов и работает для жестко заданного значения счета-фактуры или через VBA.SAP GUIXT - скрипт пересылки и запуска сценария

Вот часть

inputfield (2,35) "inv" (2,45) size=10 name="V_inv" 
pushbutton (toolbar) "print_inv" process="InvoiceScript.txt" 
using MYINV = "V_inv" 

GUI сценарий Теперь, я не знаю, что делать для inputscript части. Я хотел бы помочь вам в этом вопросе. Вот моя первая попытка:

Screen SAPLSLVC.0500 
ApplyGuiScript template="VF03INV.vbs" 
Enter 

Спасибо за вашу помощь и дайте мне знать, если вам нужна точность. Вот мои источники вдохновения, чтобы получить код выше: http://www.synactive.com/tutor_e/lessonia03.html http://www.synactive.com/docu_e/docia_process2.html

***, если его можно иметь версию, которая считывает значение в буфере обмена, что было бы еще лучше.

ответ

0

В скрипте VB с параметром «шаблон» вы можете обратиться к переменной GuiXT следующим образом.

, например:

msgbox "&V[V_inv]" 
+0

Спасибо Scriptman! Мне удалось добраться туда, где я хотел, чтобы передать переменную из SAP в скрипт. Однако он не работал как шарм, сценарий не работает безупречно, как раньше. Во-первых, я не могу заставить его работать на других сеансах. Следующий код все равно откроет его в том же окне (Set session = connection.Children (2)). Во-вторых, я получаю в конце скрипта «не могу найти по идентификатору, хотя скрипт работал как надо». Все, что вы могли бы сделать по этому поводу. Я могу поместить мой скрипт здесь, если необходимо. Thx. – OGERWOLF

+0

OGERWOLF, Спасибо за очень Интеллектуальное решение! Я узнал что-то снова сегодня. Следующие команды необходимы только при запуске скрипта VB с командой «Пуск» GuiXT: Set SapGuiAuto = GetObject («SAPGUI») Установить приложение = SapGuiAuto.GetScriptingEngine Установить соединение = приложение. Дети (0) set session = application.ActiveSession С помощью команды «ApplyGuiScript» это фактически не нужно. Спасибо еще раз! – ScriptMan

2

После многих попыток здесь является решением:

сценария (SAPLSLVC.0500.txt):

inputfield (2,35) "inv" (2,45) size=10 name="V_inv" 
pushbutton (toolbar) "script" "/OVF03" process="startvf03.txt" 
using INV = [V_inv] ' need this when opening new screen 

InputScript (startvf03.txt):

parameter INV 
Screen SAPMV60A.0101 'this is the VF03 screen 
SET F[VBRK-VBELN] "&U[INV]" 'pass invoice # parameter 
ApplyGuiScript "C:\guiXT\scripts\VF03INV.vbs" 

VBScript (VF03INV.vbs):

inv = session.findById("wnd[0]/usr/ctxtVBRK-VBELN").text 
session.findById("wnd[0]/mbar/menu[0]/menu[11]").Select 
session.findById("wnd[1]/tbar[0]/btn[37]").press 
session.findById("wnd[0]/tbar[0]/okcd").Text = "pdf!" 
session.findById("wnd[0]").sendVKey 0 

'with some little extra here on how to save a pdf in SAP 

'get new strings for locations (specific to my situation) 
abc = session.findById("wnd[1]/usr/cntlHTML/shellcont/shell").Browserhandle.locationURL 
beg = instr(abc,"C:") 
cde = mid(abc,beg,9999) 
dest = "C:\111\invoices\" & inv & ".pdf" 

'changing from temp to a specific folder 
Set FSO = CreateObject("Scripting.FileSystemObject") 
FSO.copyfile cde, dest 

'close the open file 
session.findById("wnd[1]").close 
session.findById("wnd[0]").close 
Set fso = nothing 

* нескольких, If Not IsObject(application) Then вы обычно видите не было необходимости, но не мешало бы иметь их.

Я надеюсь, что это поможет каждому узнать Guixt