SAP Jobsuche bei DV-Treff
newgui
  • newgui
  • SAP Forum - Experte Thema Starter
vor 11 Jahre
Hallo Forumsgemeinde,

komme einfach nicht weiter. Würde gerne den Inhalt eines guixt inputfields an gui scripting (vbs) übergeben.

Das Inputfield heißt X_Auftrag

Die Übergabe der Variable innerhalb Guixt würde ja folgendermaßen aussehen: "&V[X_Auftrag]"

session.findById("wnd[0]/usr/txtGuiXT_X_Auftrag").text = ??Guixt Variable??

session.findById("wnd[0]/usr/txtGuiXT_X_Auftrag").caretPosition = 10

session.findById("wnd[0]/usr/btnGuiXT_PB_~0001~").press

session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]").sendVKey 0

Danke im Voraus für eure Hilfe.

lg newgui

ScriptMan
vor 11 Jahre
Hallo newgui,

mir sind lediglich 2 Verfahren bekannt:

1. mit einer asynchronen Verarbeitung über den Befehl

z.B.

ApplyGuiScript template="c:\tmp\myVBScript.vbs"

2. mit einer synchronen Verarbeitung über den Befehl

z.B.

start "c:\tmp\myVBScript.vbs" parameters="&V[X_Auftrag]"

Im ersten Fall könnte das VB-Skript wie folgt aussehen:

session.findById("wnd[0]/usr/txtGuiXT_X_Auftrag").text = "&V[X_Auftrag]"

. . .

Bevor dieses Skript ausgeführt wird, werden alle GuiXT-Variablen durch aktuell gültige Inhalte getauscht und erst danach ausgeführt.

Im zweiten Fall müsste das VB-Skript wie folgt aussehen:

session.findById("wnd[0]/usr/txtGuiXT_X_Auftrag").text = wscript.arguments(0)

. . .

Ich wünsche dir viel Spaß beim Testen!

Freundliche Grüße

ScriptMan

newgui
  • newgui
  • SAP Forum - Experte Thema Starter
vor 11 Jahre
Hallo scriptman,

danke wieder mal für deine rasche Hilfe.

intuitiv habe ich mich jetzt mal für die 2. Variante entschieden. Die funktioniert einwandfrei.

Die 1. Variante habe ich auch probiert. Da funktioniert allerdings etwas nicht. Möchte dich und mich aber auch nicht damit aufhalten, da ja bereits die andere Variante das gewünschte Ergebnis bringt.

lg newgui

ScriptMan
vor 11 Jahre
Hallo newgui,

es ist beruhigend zu wissen, wenn wenigstens eine Variante lauffähig ist. Man muss nur bei der 2. Variante selbst dafür sorgen, dass diese auch tatsächlich in jedem SAP-Modus läuft. Dass könnte man damit erreichen, wenn man statt der ersten 14 Zeilen aufgezeichnet vom SAP GUI Scriptrecorder folgende 8 behält / einsetzt:

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

set session = application.ActiveSession

session.findById("wnd[0]/usr/txtGuiXT_X_Auftrag").text = wscript.arguments(0)

. . .

Die 1. Variante hat dieses Problem nicht, da GuiXT selbst dafür sorgt, dass der aktuelle SAP-Modus ausgewählt wird. Sie muss aber u.U. noch um folgende Befehle ergänzt werden:

screen *

session.findById("wnd[0]/usr/txtGuiXT_X_Auftrag").text = "&V[X_Auftrag]"

. . .

enter

Freundliche Grüße

ScriptMan

newgui
  • newgui
  • SAP Forum - Experte Thema Starter
vor 10 Jahre
Hallo zusammen,

muss den Thread jetzt nochmals aufwärmen. Das mit der Übergabe einer Variable funktioniert ja ganz gut.

guixt

inputfield (1,1) name="X_Material" size="17" "-nolabel"

script

start "c:\tmp\myVBScript.vbs"" parameters="&V[X_Material]"

scripting

X_Material = wscript.arguments(0)

session.findById(.../ctxtRM61R-MATNR").text = X_Material

Aber jetzt möchte ich mehrere Variablen übergeben. Einerseits aus einem Input Field, andererseits über Radiobuttons.

guixt

inputfield (1,1) name="X_Material" size="17" "-nolabel"

radiobutton (1,30) "MD04" name="Transaktion" value="MD04"

radiobutton (1,20) "Werk1" name="Dispobereich" value="Werk1"

script

(wie kann man hier weitere Variablen anhängen - hab einiges probiert aber ohne Erfolg)

start "c:\tmp\myVBScript.vbs"" parameters="&V[X_Material]" ????????

scripting

X_Material = wscript.arguments(0)

Transaktion = wscript.arguments(1)??????

Dispobereich = wscript.arguments(2) ??????

session.findById("wnd[0]/tbar[0]/okcd").text = Transaktion

session.findById(.../ctxtRM61R-MATNR").text = X_Material

session.findById(.../ctxtRM61R-BERID").text = Dispobereich

Hintergrund dazu. Habe mir eine kleine Box in guixt gebaut mit der ich einerseits eine Materialnr. eingeben kann und andererseits über Radiobuttons das Werk und die Transaktion auswählen kann.

Hoffe mir kann einer von euch helfen. Danke.

mfg

newgui

jonny2014
vor 10 Jahre
Hallo Zusammen, 😕 😕 😕

wo gerade das Thema nochmal aufkommt bräuchte ich auch noch Hilfe

irgendwie ist mir das noch nicht so ganz klar wie die übergabe genau Funktioniert

Ich habe bis jetzt alles mit den Scripts erledigen können

session.findById("wnd[0]/usr/...").text

session.findById("wnd[0]/usr/...").text = "yyy"

...

wenn ich jetzt mit GUIXT einen Button einfüge

Pushbutton (Zeile,Spalte) "Text auf Pushbutton" "FCode" Process="..."

könnte ich diesen Button doch mit kann CallVBS test2 belegen ?

jetzt erstelle ich einen VBS mit dem Script

im Synact... Programm lege ich mein VBS Ordner fest

meine vbsDatei nenne ich auch test2

Wie muss ich hier weiter fortfahren ?

um dem Script ausführen zu können ?

irgendwie hab ich das nicht so ganz kapiert ^.^

__________test.vbs________

'Initialisieren SAP

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]/usr/...").text

...

...

...

...

_______Ende_______

Vielen Dank für Feedback

das Thema GUIXT ist komplett neu....

ScriptMan
vor 10 Jahre
Hallo newgui,

das war schon nicht schlecht. Probiere es mal, wie folgt:

script

(wie kann man hier weitere Variablen anhängen - hab einiges probiert aber ohne Erfolg)

start "c:\tmp\myVBScript.vbs"" parameters="&V[X_Material]" ????????

start "c:\tmp\myVBScript.vbs"" parameters="&V[X_Material] &V[Transaktion] &V[Dispobereich]"

scripting

X_Material = wscript.arguments(0)

Transaktion = wscript.arguments(1)??????

Dispobereich = wscript.arguments(2) ??????

X_Material = wscript.arguments(0)

Transaktion = wscript.arguments(1)

Dispobereich = wscript.arguments(2)

Falls aber die Variablen selbst u.U. ein Leerzeichen aufweisen sollten, müsste man tiefer in die Trickkiste greifen. 😉

Grüße,

ScriptMan

ScriptMan
vor 10 Jahre
Hallo jonny2014,

wir haben bei uns keine Lizenz für GuiXT Controls. Wie man es ohne realisieren kann, sieht man oben. Mit Controls könnte es u.U. wie folgt funktionieren:

1. Pushbutton (Zeile,Spalte) "Text auf Pushbutton" "FCode" Process="myScript.txt"

2. myScript.txt:

set V[myVariable] "yyy"

CallVBS test2

3. test2.vbs:

session.findById("wnd[0]/usr/...").text = guixt.get("myVariable")

Grüße,

ScriptMan

newgui
  • newgui
  • SAP Forum - Experte Thema Starter
vor 10 Jahre
Hallo scriptman,

danke wieder mal für deine Hilfe. War ja schon ganz knapp dran hatte bei der Übergabe der Variablen nur keine Leerzeichen gelassen. Habs dann noch mit parameters1 und 2 usw. probiert. Aber knapp daneben ist eben auch vorbei 😁

Noch eine andere Frage. Wir sind gerade dabei zu eroieren wo eigentlich der große Vorteil bei den Lizenzen für guixt (Input Assistent) liegt. Der einzige Nachteil ohne Lizent ist aus meiner Sicht ja, dass man immer beim Einsteigen Profile-Ok-Refresh drücken muss und dazu das Guixt Fenster nicht geschlossen werden darf. Kennst du auch noch weitere Vorteile /Unterschiede mit den Lizenzen (ich möchte die Lizenzen ja gerne haben, weil mich das Refreshen nervt und ich denke, dass wir guixt noch weiter ausbreiten könnten, aber es kommen halt immer wieder diese Frage 🤬).

Ich möchte auch noch gerne den Designer und ev. Controlls, wobei ich mir noch nicht ganz sicher bin wo wir Controlls tatsächlich einsetzen könnten.

mfg

newgui

ScriptMan
vor 10 Jahre
Hallo newgui,

wir haben auch so angefangen, wie du es geschildert hast. Mit der Zeit aber stellt man fest, dass es so nicht bleiben kann. Die Beweggründe dazu waren bei uns diese:

1. Eine saubere Position gegenüber einem EDV-Prüfer.

2. Die Nichtzumutbarkeit der erforderlichen Schritte, um dieses zu umgehen, bei mehr als 50 Usern gleichzeitig.

3. Das GuiXT-Fenster lässt sich dann an einem Server, wo nur normale User arbeiten, vollkommen ausblenden.

4. Bei komplexen InputScripten hängt sich das SAP-System nicht mehr auf.

5. Das 1. Jahr nach dem Kauf hat man eine kostenlose Hotline bei Synactive. Eine freiwillige Verlängerung ist möglich.

6. Der Workaround muss nicht unbedingt in jeder weiteren GuiXT-Version noch möglich sein, aber die neue Version wird u.U. gebraucht, weil hier neue interessante Funktionen angeboten werden.

Die GuiXT - Controls gab es vor 5 Jahren noch nicht. Man musste es selbst irgendwie lösen. Wenn es die aber zu dem Zeitpunkt gegeben hätte, würde ich sie eher in Betracht ziehen als Designer oder Viewer. Man kann aber zuerst ohne Controls anfangen und erst später, wenn man genügend Anwendungsfälle hat, die man nicht anders lösen kann, diese dazu kaufen.

Grüße,

ScriptMan

newgui
  • newgui
  • SAP Forum - Experte Thema Starter
vor 10 Jahre
Hallo scriptman,

danke für deine Antwort. Hoffe, dass wir das ganze irgendwie durchbekommen. Ist bei uns leider nicht so einfach. Fachbereich vs. IT 😢

Rechnen würde es sich allemal. Hab beispielhaft nur mal 3 Prozessvereinfachungen herausgenommen und komme da schon auf ein Einsparungspotential von 10.000 Euro / Jahr. Gemacht hab ich aber schon einiges mehr.

Na schau ma mal. 😕

mfg

newgui