SAP Gui über Link aufrufen (nicht SAP Gui HTML!)
Dieses Thema taucht gefühlt immer mal wieder auf. Häufig soll aus einem anderen Programm in das SAP abgesprungen und direkt eine Transaktion mit entsprechenden Parametern aufgerufen werden. Der Absprung per Hyperlink stellt in den meisten Fällen den einfachsten Weg dar, allerdings findet man im Internet nur Informationen darüber wie man dann den SAP Gui HTML im Browser öffnet.
In manchen Fällen mag das die Lösung sein, in vielen ist es nicht gewünscht, da die SAP Gui verwendet werden soll.
Wie also kann man die SAP Gui über einen Link mit Parametern öffnen? Ich habe dazu im Internet keine Informationen gefunden und daher selbst eine Lösung entwickelt.
Gleich Vorweg: Diese Lösung funktioniert, ist aber je nach Anwendungsfall nicht sehr komfortabel. Im vorliegenden Fall sollte sie für ein IT-Team genutzt werden, wodurch Themen wie Administratorrechte (auf Windows-Ebene) uninteressant waren.
Nun also zu den einzelnen Schritten die zur Umsetzung der Lösung nötig waren.
SAP Gui per Kommandozeile aufrufen mit sapshcut.exe
Dieser Schritt bildet die Grundlage für den Aufruf der SAP Gui über einen Hyperlink. Dazu gibt es das Tool “sapshcut.exe” welches sich im Installationspfad der SAP Gui befindet. Dieses Tool bietet die Möglichkeit ein SAP Fenster über die Kommandozeile zu öffnen. Beispielsweise würde der folgende Befehl das System “PRO” mit dem Mandanten “100”, der Sprache “DE” öffnen und dort die Transaktion “IE03” aufrufen, die Equipmentnummer “4711” in das entsprechende Feld einfügen und dann direkt in dieses Equipment springen.
Dieser Befehl kann in der Kommandozeile (“cmd”) oder bei Ausführen (Windowstaste + R, bzw. “run”) genutzt werden.
sapshcut.exe -system=PRO -client=100 -language=DE -reuse=1 -command="*IE03 RM63E-EQUNR=4711;"
Aber Achtung: im SAP Logon muss ein Eintrag mit diesem System hinterlegt sein, ansonsten funktioniert der Aufruf nicht.
Dies war der erste Schritt, nun geht es daran diesen Befehl irgendwie mit einem Hyperlink zu verknüpfen. Da man den Befehl für sapshcut.exe nicht über einen Hyperlink ausführen kann, muss ein Programm zwischengeschaltet werden, welches den Aufruf durchführt. Die Idee ist folgende: Der Benutzer klickt auf einen Link. Dieser startet eine lokale Anwendung und übergibt dieser die Equipmentnummer. Diese führt den Befehl für sapshcut.exe aus und öffnet somit einen neuen SAP Modus mit dem Equipment.
Anwendung zum Aufruf in C#
Der erste wichtige Punkt ist eine kleine Kommandozeilenanwendung die den Befehl ausführt. Diese habe ich schnell mit C# geschrieben. Diese Anwendung nimmt beim Aufruf einen Parameter entgegen. Im Parameter ist die Equipmentnummer enthalten, diese wird vom Rest getrennt und dann in die Parameter für den Aufruf von sapshcut.exe eingefügt. Danach wird der Aufruf gestartet.
using System;
using System.Diagnostics;
namespace CALLSAP
{
class Program
{
static void Main(string[] args)
{
string[] CommandLineArgs = Environment.GetCommandLineArgs();
//CommandLineArgs[0]: Immer der Dateipfad, [1] damit das übergebene Argument aus dem Aufruf
if (CommandLineArgs.Length > 1)
{
string args_equi = CommandLineArgs[1].ToString(); //erstmal komplett auslesen. Da ist aber noch der Programmaufruf "callsap:" dabei
string equi = args_equi.Replace("callsap:", "") ; //Daher hier das "callsap:" entfernen um die Equipmentnummer zu erhalten
string prg = "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\sapshcut.exe"; //Aufzurufendes Programm
string parameter = "/C -system=PRO -client=100 -language=DE -reuse=1 -command=\"*IE03 RM63E-EQUNR=" + equi + ";\""; //Parameter für das Programm.
System.Diagnostics.Process.Start(prg, parameter); //und go
}
}
}
}
Zum Test aufrufen kann man das Programm mit folgender Anweisung:
callsap.exe callsap:1001601
Aber auch dieses Programm muss jetzt irgendwie über einen Hyperlink aufgerufen werden. Dazu ist ein weiterer Schritt nötig.
CALLSAP als Protokoll in Registry registrieren
Diese Funktion hat wohl jeder schon einmal im Internet gesehen. Man klickt auf einen Link und es öffnet sich eine lokal installierte Software um darin etwas zu tun, z.B. das Mailprogramm beim Aufruf eines Links der mit “mailto:” beginnt. Das gleiche machen wir jetzt mit der CALLSAP Software. Der Eintrag kann entweder manuell in der Registry hinzugefügt werden oder man nutzt eine Textdatei mit der Endung “.reg” und den folgenden Inhalt:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\somsap]
@="URL:callsap Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\callsap\shell\open\command]
@="\"D:\\CALLSAP.exe\" \"%1\""
Hier ist der Pfad zur Callsap.exe wichtig. Nachdem man diese Datei einmal ausgeführt und den Eintrag in der Registry somit hinzugefügt hat, kann man nun mit “callsap:4711” das Programm aufrufen.
Als Link würde das dann wie folgt aussehen:
Je nach Browser muss man noch bestätigen, dass man das Programm wirklich ausführen möchte, da dies ein Sicherheitsrisiko sein kann.
Hier noch einmal ein grober Ablaufplan wie das ganze funktioniert:
Das ist die gesamte Lösung im ersten Entwurf. Hier gibt es sicherlich noch viele Möglichkeiten zum Ausbau und sie ist auch nur intern im Unternehmen verfügbar, aber immerhin ein Weg.
Ich freue mich allerdings über jeden neuen noch einfacheren Weg um die SAP-Gui aus einer anderen Anwendung oder per Hyperlink aufzurufen. Wenn ihr also etwas habt, ab in die Kommentare damit 😉
Vielen Dank für den Blog post!
Ich hab mich schon krumm gegoogelt einmal was verständliches zu finden.
Ich werde die Lösung ausprobieren und mein Feedback zum Prozess hier kommentieren.
Ich bin gespannt 🙂
Es ist zwar keine schöne Lösung und viel gebastelt, aber es funktioniert und ist immerhin eine Lösung bis etwas besseres da ist 😉
Bisher die beste Anleitung, die ich zu dem Thema gefunden habe, vielen Dank!
Könnte man nicht auch gleich sapshcut als Protokoll in der Registry registrieren? Dann könnte man doch dieselbe Syntax wie bei Verwendung der WebGui verwenden und potentiell jede Transaktion mit den jeweils benötigten Parametern aufrufen?
Das könnte eventuell auch funktionieren. Habe ich so nicht probiert. Aber schon richtig, damit hätte man es in einigen Fällen leichter, in anderen Fällen, wenn es um individuelle Funktionen geht jedoch wieder schwerer 🙂
Kommt wohl letztendlich auf den konkreten Anwendungsfall an.