Starten von SAP GUI über einen Browser

Ich habe diesen Artikel zuerst in meinem geschrieben Blog, um später nicht noch einmal suchen und sich erinnern zu müssen, aber da niemand den Blog liest, wollte ich diese Informationen mit allen teilen, falls jemand sie nützlich findet.

Während ich an der Idee eines Passwort-Reset-Dienstes in SAP R/3-Systemen arbeitete, stellte sich die Frage: Wie kann man SAP GUI mit den notwendigen Parametern über den Browser starten? Da diese Idee die Verwendung eines Webdienstes implizierte, musste zunächst auf eine SOAP-Anfrage von der SAP GUI geantwortet und eine E-Mail mit einem Link zu einer Webseite mit einem Skript zum Zurücksetzen des Kennworts auf das ursprüngliche Kennwort gesendet und dann dem Benutzer angezeigt werden eine Meldung über das erfolgreiche Zurücksetzen des Passworts und die Anzeige dieses allerersten Passworts, dann möchte ich, dass diese Seite auch einen Link zum Starten von SAP GUI enthält. Darüber hinaus sollte dieser Link das gewünschte System öffnen, und zwar vorzugsweise mit gleichzeitig ausgefüllten Login- und Passwortfeldern: Der Benutzer müsste das produktive Passwort nur zweimal eingeben.

Der Start von SAP Logon war für unseren Zweck nicht interessant, und beim Ausführen von sapgui.exe war es nicht möglich, den Client- und Benutzernamen anzugeben, aber es war möglich, ein System zu starten, das nicht in SAP Logon definiert war. Andererseits war der Start von SAP GUI mit beliebigen Serverparametern nicht besonders relevant: Wenn wir das Problem des Zurücksetzens des Kennworts eines Benutzers lösen, verfügt er höchstwahrscheinlich bereits über die erforderliche Zeile in SAP Logon mit den von ihm benötigten Einstellungen und ist dort vorhanden Es ist nicht nötig, sich mit seinen eigenen herumzuschlagen. Die genannten Anforderungen wurden jedoch durch die SAP GUI Shortcut-Technologie und das Programm sapshcut.exe selbst erfüllt, das es ermöglichte, die SAP GUI über eine bestimmte „Verknüpfung“ zu starten.

Das Problem direkt lösen: sapshcut.exe direkt aus dem Browser über ein ActiveX-Objekt starten:

function openSAPGui(sid, client, user, password) {
var shell = new ActiveXObject("WScript.Shell");
shell.run('sapshcut.exe -system="'+sid+'" -client='+client+' -user="'+user+'" -pw="'+password+'" -language=RU');
}

Die Lösung ist schlecht: Erstens funktioniert es nur im Internet Explorer, zweitens erfordert es entsprechende Sicherheitseinstellungen im Browser, die in einer Organisation auf Domänenebene möglicherweise verboten sind, und selbst wenn dies zulässig ist, zeigt der Browser ein erschreckendes Fenster an Warnung an den Benutzer:

Starten von SAP GUI über einen Browser

Lösung Nr. 2 habe ich im Internet gefunden: Erstellen Sie Ihr eigenes Webprotokoll. Ermöglicht uns, die benötigte Anwendung über einen Link zu starten, der das Protokoll angibt, das wir selbst in Windows in der Registrierung im Abschnitt HKEY_CLASSES_ROOT registrieren. Da SAP GUI Shortcut in diesem Abschnitt über einen eigenen Unterabschnitt verfügt, können Sie dort den URL-Protokoll-String-Parameter mit einem leeren Wert hinzufügen:

Starten von SAP GUI über einen Browser

Dieses Protokoll startet sapgui.exe mit Parameter /ABKÜRZUNG, das ist genau das, was wir brauchen:

Starten von SAP GUI über einen Browser

Nun, oder wenn wir ein völlig beliebiges Protokoll erstellen wollen (z. B. sapshcut), dann können Sie es mit der folgenden Reg-Datei registrieren:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOTsapshcut]
@="sapshcut Handler"
"URL Protocol"=""
[HKEY_CLASSES_ROOTsapshcutDefaultIcon]
@="sapshcut.exe"
[HKEY_CLASSES_ROOTsapshcutshell]
[HKEY_CLASSES_ROOTsapshcutshellopen]
[HKEY_CLASSES_ROOTsapshcutshellopencommand]
@="sapshcut.exe "%1""

Wenn wir nun auf einer Webseite einen Link erstellen, der das Protokoll angibt Sapgui.Shortcut.File Auf eine ähnliche Art und Weise:

<a href='Sapgui.Shortcut.File: -system=SID -client=200'>SID200</a>

Wir sollten ein Fenster wie dieses sehen:

Starten von SAP GUI über einen Browser

Und alles scheint großartig zu sein, aber wenn Sie auf die Schaltfläche „Zulassen“ klicken, sehen wir:

Starten von SAP GUI über einen Browser

Hoppla, der Browser hat die Leertaste in %20 umgewandelt. Nun, auch andere Zeichen werden mit einem Prozentzeichen in ihren eigenen Zahlencode kodiert. Und das Unangenehmste ist, dass hier auf Browserebene nichts gemacht werden kann (hier wird alles nach dem Standard gemacht) - der Browser mag solche Zeichen nicht und der Windows-Befehlsinterpreter funktioniert nicht mit solchen codierten Werten. Und noch ein Minus: Die gesamte Zeichenfolge wird als Parameter übergeben, einschließlich des Protokollnamens und sogar des Doppelpunkts (sapgui.shortcut.file:). Darüber hinaus, obwohl das Gleiche sapshcut.exe kann alles verwerfen, was kein Parameter dafür ist (beginnt mit dem Symbol „-“, dann der Name, „=“ und der Wert), d. h. eine Zeile wie „sapgui.shortcut.file: -system=SID„Es wird immer noch funktionieren, dann ohne Leerzeichen“sapgui.shortcut.file:-system=SID"funktioniert nicht mehr.

Es zeigt sich, dass es grundsätzlich zwei Möglichkeiten gibt, das URI-Protokoll zu nutzen:

  1. Verwendung ohne Parameter: Wir erstellen eine ganze Reihe von Protokollen für alle unsere Systeme dieser Art SIDMANDTTyp AAA200, BBB200 usw. Wenn Sie nur das gewünschte System starten müssen, ist die Option durchaus machbar, in unserem Fall jedoch nicht geeignet, da Sie zumindest die Benutzeranmeldung übertragen möchten, dies aber auf diese Weise nicht möglich ist.
  2. Verwenden eines Wrapper-Programms zum Aufrufen sapshcut.exe oder sapgui.exe. Die Essenz dieses Programms ist einfach: Es muss die Zeichenfolge, die der Browser ihm über das Webprotokoll übermittelt, in die Darstellung umwandeln, die Windows empfängt, d. h. Wandelt alle Zeichencodes wieder in Zeichen um (parst den String vielleicht sogar nach Parametern) und ruft bereits SAP GUI mit einem garantiert korrekten Befehl auf. In unserem Fall ist es auch nicht ganz geeignet (deshalb habe ich es auch gar nicht geschrieben), weil es uns nicht reicht, das Protokoll auf allen Benutzer-PCs hinzuzufügen (innerhalb einer Domäne ist das immer noch in Ordnung, obwohl es auch besser ist). Vermeiden Sie diese Vorgehensweise), aber hier müssen wir das Programm auf dem PC platzieren und außerdem ständig sicherstellen, dass es nicht verschwindet, wenn die Software auf dem PC neu installiert wird.

Diese. Auch diese Option verwerfen wir als für uns ungeeignet.

Zu diesem Zeitpunkt begann ich bereits darüber nachzudenken, dass ich mich von der Idee verabschieden müsste, SAP GUI mit den erforderlichen Parametern aus dem Browser heraus zu starten, aber dann kam mir die Idee, dass man in SAP Logon und eine Verknüpfung erstellen kann Kopieren Sie es auf Ihren Desktop. Ich habe diese Methode einmal verwendet, aber vorher habe ich mir die Verknüpfungsdatei nicht speziell angesehen. Und es stellte sich heraus, dass es sich bei dieser Verknüpfung um eine normale Textdatei mit der Erweiterung handelt .Saft. Und wenn Sie es unter Windows ausführen, wird SAP GUI mit den in dieser Datei angegebenen Parametern gestartet. "Bingo!"

Das Format dieser Datei ist ungefähr das folgende (möglicherweise wird beim Start auch eine Transaktion gestartet, aber ich habe sie weggelassen):

[System]
Name=SID
Client=200
[User]
Name=
Language=RU
Password=
[Function]
Title=
[Configuration]
GuiSize=Maximized
[Options]
Reuse=0

Es scheint, dass alles vorhanden ist, was benötigt wird: eine Systemkennung, ein Client, ein Benutzername und sogar ein Passwort. Und noch zusätzliche Parameter: Titel - Fenstertitel, GuiSize — Größe des laufenden Fensters (Vollbild oder nicht) und Wiederverwendung: — ob es notwendig ist, ein neues Fenster zu öffnen oder ein bereits geöffnetes Fenster mit demselben System zu verwenden. Doch sofort tauchte eine Nuance auf – es stellte sich heraus, dass das Passwort in SAP Logon nicht gesetzt werden konnte, die Leitung war gesperrt. Es stellte sich heraus, dass dies aus Sicherheitsgründen geschah: Alle in SAP Logon erstellten Verknüpfungen werden in einer Datei gespeichert sapshortcut.ini (neben an saplogon.ini im Windows-Benutzerprofil) und dort zwar verschlüsselt, aber nicht zu stark verschlüsselt und können auf Wunsch entschlüsselt werden. Sie können dieses Problem jedoch beheben, indem Sie den Wert eines Parameters in der Registrierung ändern (der Standardwert ist 0):

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity]
"EnablePassword"="1"

Dadurch wird das Feld „Passwort“ für die Eingabe im Verknüpfungserstellungsformular in SAP Logon entsperrt:

Starten von SAP GUI über einen Browser

Und wenn Sie in dieses Feld ein Passwort eingeben, wird es in die entsprechende Zeile eingefügt
sapshortcut.ini, aber wenn Sie eine Verknüpfung auf den Desktop ziehen, wird sie dort nicht angezeigt – Sie können sie dort jedoch manuell hinzufügen. Das Passwort ist verschlüsselt, für 111111 lautet es wie folgt: PW_49B02219D1F6, für 222222 - PW_4AB3211AD2F5. Uns interessiert jedoch mehr die Tatsache, dass dieses Passwort auf eine Weise verschlüsselt wird, unabhängig vom jeweiligen PC, und wenn wir das Passwort auf das ursprüngliche Passwort zurücksetzen, können wir in diesem Feld einen vorbekannten Wert verwenden. Nun, wenn wir ein zufällig erstelltes Passwort verwenden wollen, müssen wir den Algorithmus dieser Chiffre verstehen. Aber den gegebenen Beispielen nach zu urteilen, wird dies nicht schwer sein. In SAP GUI 7.40 ist dieses Feld übrigens komplett aus dem Formular verschwunden, es akzeptiert aber korrekt eine Datei mit ausgefülltem Passwort.

Das heißt, es stellt sich heraus, dass Sie im Browser nur auf den Link zu einer Datei mit der Erweiterung .sap und dem gewünschten Format klicken müssen – und schon wird angeboten, sie als Datei wie SAP GUI Shortcut zu öffnen (natürlich auf einem PC). mit installiertem SAP GUI) und öffnet ein SAP GUI-Fenster mit den angegebenen Parametern (sofern sich das SID- und Client-Paar in der SAP-Anmeldeliste auf diesem PC befindet).

Es ist jedoch klar, dass niemand Dateien einfach im Voraus erstellen und auf der Website speichern wird – sie müssen basierend auf den erforderlichen Parametern generiert werden. Sie können beispielsweise ein PHP-Skript erstellen, um Verknüpfungen zu generieren (sapshcut.php):

<?php
$queries = array();
parse_str($_SERVER['QUERY_STRING'], $queries);
$Title = $queries['Title'];
$Size = $queries['Size'];
$SID = $queries['SID'];
$Client = $queries['Client'];
if($Client == '') { $Client=200; };
$Lang = $queries['Language'];
if($Lang=='') { $Lang = 'RU'; };
$User = $queries['Username'];
if($User<>'') { $Password = $queries['Password']; };
$filename = $SID.$Client.'.sap';
header('Content-disposition: attachment; filename='.$filename);
header('Content-type: application/sap');
echo "[System]rn";
echo "Name=".$SID."rn";
echo "Client=".$Client."rn";
echo "[User]rn";
echo "Name=".$Username."rn";
echo "Language=".$Lang."rn";
if($Password<>'') echo "Password=".$Password."rn";
echo "[Function]rn";
if($Title<>'') {echo "Title=".$Title."rn";} else {echo "Title=Вход в системуrn";};
echo "[Configuration]rn";
if($Size=='max') { echo "GuiSize=Maximizedrn"; };
echo "[Options]rn";
echo "Reuse=0rn";
?>

Wenn Sie keinen Benutzernamen und kein Passwort angeben, wird das folgende Fenster angezeigt, in dem Sie nach Login und Passwort gefragt werden:

Starten von SAP GUI über einen Browser

Wenn Sie nur das Login übergeben, wird das Login-Feld ausgefüllt und das Passwortfeld leer sein. Wenn wir dem Benutzer sowohl einen Benutzernamen als auch ein Kennwort geben, der Benutzer auf dem PC jedoch den EnablePassword-Schlüssel in der Registrierung im Abschnitt [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] auf 0 gesetzt hat, erhalten wir dasselbe. Und nur wenn dieser Schlüssel auf 1 gesetzt ist und wir sowohl den Namen als auch das Initialpasswort übergeben, fordert das System Sie sofort zweimal auf, ein neues permanentes Passwort einzugeben. Das ist es, was wir brauchen.

Als Ergebnis haben wir die folgenden Optionen in Betracht gezogen, um alle oben genannten Punkte zu veranschaulichen:

<html>
<head>
<script>
function openSAPGui(sid, client, user, password) {
var shell = new ActiveXObject("WScript.Shell");
shell.run('sapshcut.exe -system="'+sid+'" -client='+client+' -user="'+user+'" -pw="'+password+'" -language=RU');
}
</script>
</head>
<body>
<a href='' onclick="javascript:openSAPGui('SID', '200', 'test', '');"/>Example 1: Execute sapshcut.exe (ActiveX)<br>
<a href='Sapgui.Shortcut.File: -system=SID -client=200'>Example 2: Open sapshcut.exe (URI)</a><br>
<a href='sapshcut.php?SID=SID&Client=200&User=test'>Example 3: Open file .sap (SAP GUI Shortcut)</a><br>
</body>
</html>

Die letzte Option hat mir gefallen. Anstatt jedoch SAP-Verknüpfungen zu generieren, können Sie beispielsweise auch CMD-Dateien generieren, die beim Öffnen über einen Browser auch das SAP-GUI-Fenster für Sie öffnen. Unten finden Sie ein Beispiel (sapguicmd.php) Starten Sie die SAP GUI direkt mit der vollständigen Verbindungszeichenfolge, ohne dass SAP Logon konfiguriert werden muss:

<?php
$queries = array();
parse_str($_SERVER['QUERY_STRING'], $queries);
$Title = $queries['Title'];
$ROUTER = $queries['ROUTER'];
$ROUTERPORT = $queries['ROUTERPORT'];
$HOST = $queries['HOST'];
$PORT = $queries['PORT'];
$MESS = $queries['MESS'];
$LG = $queries['LG'];
$filename = 'SAPGUI_';
if($MESS<>'') $filename = $filename.$MESS;
if($HOST<>'') $filename = $filename.$HOST;
if($PORT<>'') $filename = $filename.'_'.$PORT;
$filename = $filename.'.cmd';
header('Content-disposition: attachment; filename='.$filename);
header('Content-type: application/cmd');
echo "@echo offrn";
echo "chcp 1251rn";
echo "echo Вход в ".$Title."rn";
echo "set SAP_CODEPAGE=1504rn";
echo 'if exist "%ProgramFiles(x86)%SAPFrontEndSapGuisapgui.exe" set gui=%ProgramFiles(x86)%SAPFrontEndSapGuisapgui.exe'."rn";
echo 'if exist "%ProgramFiles%SAPFrontEndSapGuisapgui.exe" set gui=%ProgramFiles%SAPFrontEndSapGuisapgui.exe'."rn";
echo "set logon=";
if($ROUTER<>'') echo "/H/".$ROUTER;
if($ROUTERPORT<>'') echo "/S/".$ROUTERPORT;
if($MESS<>'') echo "/M/".$MESS;
if($HOST<>'') echo "/H/".$HOST;
if($PORT<>'') echo "/S/".$PORT;
if($LG<>'') echo "/G/".$LG;
echo "rn";
echo '"%gui%" %logon%'."rn";
?>

Source: habr.com

Kommentar hinzufügen