Starten der SAP-GUI über einen Browser

Ich habe diesen Artikel zuerst in meinem Blog geschrieben , damit ich später nicht mehr hinschaue und mich daran erinnere, aber da niemand das Blog liest, wollte ich diese Informationen mit allen teilen, plötzlich konnte ich sie verwenden.

Bei der Arbeit an der Idee eines Service zum Zurücksetzen von Passwörtern in SAP R / 3-Systemen stellte sich die Frage, wie die SAP-GUI mit den erforderlichen Parametern über den Browser gestartet werden kann. Da diese Idee die Verwendung eines Webdienstes implizierte, der zuerst eine SOAP-Anforderung von der SAP-GUI erfüllt und eine E-Mail mit einem Link zu einer Webseite mit einem Skript zum Zurücksetzen des Kennworts an das ursprüngliche sendet, zeigt er dem Benutzer eine Nachricht über ein erfolgreiches Zurücksetzen des Kennworts an und zeigt dieses sehr anfängliche Kennwort an , dann möchte ich, dass es auf dieser Seite auch einen Link zum Starten der SAP GUI gab. Damit dieser Link das gewünschte System öffnet, und vorzugsweise sogar sofort mit den ausgefüllten Anmelde- und Kennwortfeldern: Der Benutzer müsste nur zweimal ein produktives Kennwort ausfüllen.

Das Starten von SAP Logon war für unseren Zweck nicht interessant, und beim Starten von sapgui.exe war es unmöglich, den Client und den Benutzernamen anzugeben, aber es war möglich, das System zu starten, das nicht in SAP Logon definiert ist. Andererseits war das Starten der SAP-GUI mit beliebigen Serverparametern nicht besonders relevant: Wenn wir das Problem des Zurücksetzens des Benutzerkennworts lösen, hat er höchstwahrscheinlich bereits die richtige Zeile in SAP Logon mit den Einstellungen, die er benötigt, und muss sich nicht um seine eigenen kümmern. Andererseits erfüllten die SAP GUI Shortcut-Technologie und das Programm sapshcut.exe selbst, die es ermöglichten, die SAP GUI mit einer bestimmten „Verknüpfung“ zu starten, die angegebenen Anforderungen.

Die Lösung für das Problem in der Stirn: Ausführen von sapshcut.exe direkt vom Browser aus mit dem ActiveX-Objekt:

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 in Internet Explorer, und zweitens sind entsprechende Sicherheitseinstellungen im Browser erforderlich, die auf Domänenebene in der Organisation verboten werden können. Selbst wenn diese Option aktiviert ist, gibt der Browser dem Benutzer ein Fenster mit einer erschreckenden Warnung:



Ich habe die Lösung Nr. 2 im Internet ausgegraben: mein eigenes Webprotokoll erstellen . Sie können die benötigte Anwendung über den Link ausführen, der das Protokoll angibt, das wir selbst in Windows in der Registrierung im Abschnitt HKEY_CLASSES_ROOT registrieren. Da die SAP-GUI-Verknüpfung in diesem Abschnitt einen eigenen Unterabschnitt hat, können Sie den URL-Protokoll-Zeichenfolgenparameter mit einem leeren Wert hinzufügen:



Dieses Protokoll startet sapgui.exe mit dem Parameter / SHORTCUT , den wir benötigen:



Nun, oder wenn wir ein beliebiges Protokoll im Allgemeinen erstellen möchten (z. B. sapshcut ), können Sie es mithilfe der folgenden Registrierungsdatei registrieren:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\sapshcut]
@="sapshcut Handler"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\sapshcut\DefaultIcon]
@="sapshcut.exe"
[HKEY_CLASSES_ROOT\sapshcut\shell]
[HKEY_CLASSES_ROOT\sapshcut\shell\open]
[HKEY_CLASSES_ROOT\sapshcut\shell\open\command]
@="sapshcut.exe \"%1\""

Wenn wir nun auf der Webseite einen Link erstellen , der das Sapgui.Shortcut.File- Protokoll auf ähnliche Weise angibt :

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

wir sollten ein Fenster sehen wie:



Und alles scheint in Ordnung zu sein, aber wenn Sie auf die Schaltfläche "Zulassen" klicken, sehen wir:



Hoppla, der Browser hat den Speicherplatz in% 20 umgewandelt. Nun, andere Zeichen werden ebenfalls in ihrem numerischen Code mit einem Prozentzeichen codiert. Und das Unangenehmste ist, dass hier auf Browserebene nichts getan werden kann (alles erfolgt nach dem Standard) - der Browser mag solche Zeichen nicht und die Windows-Shell funktioniert nicht mit solchen codierten Werten. Und noch ein Minus - die gesamte Zeichenfolge wird als Parameter übergeben, einschließlich des Namens des Protokolls und sogar des Doppelpunkts ( sapgui.shortcut.file :) . Obwohl dieselbe sapshcut.exe alles verwerfen kann, was kein Parameter für sie ist (sie beginnt mit dem Symbol "-", dann dem Namen "=" und dem Wert), d. H. Eine Zeile der Form " sapgui.shortcut.file: -system = SID " rollt immer noch, dann funktioniert " sapgui.shortcut.file: -system = SID " ohne Leerzeichen nicht mehr.

Es stellt sich heraus, dass es im Prinzip zwei Möglichkeiten gibt, das URI-Protokoll zu verwenden:

  1. Verwendung ohne Parameter: Wir erstellen eine ganze Reihe von Protokollen für alle unsere Systeme vom Typ SIDMANDT , wie z. B. AAA200 , BBB200 usw. Wenn Sie nur das gewünschte System starten müssen, funktioniert die Option recht gut. In unserem Fall funktioniert sie jedoch nicht, da Sie zumindest auch die Anmeldung des Benutzers übertragen möchten, dies jedoch nicht auf diese Weise tun können.
  2. Verwenden eines Wrappers zum Aufrufen von sapshcut.exe oder sapgui.exe . Das Wesentliche dieses Programms ist einfach: Es sollte die Zeile übernehmen, die der Browser über das Webprotokoll an das Programm sendet, und es in die Darstellung umwandeln, die Windows akzeptiert, d. H. back wandelt alle Zeichencodes in Zeichen um (analysiert möglicherweise sogar die Zeichenfolge nach Parametern) und ruft bereits die SAP-GUI auf, die durch den richtigen Befehl garantiert wird. In unserem Fall passt es auch nicht ganz (daher habe ich es nicht einmal geschrieben), da es nicht ausreicht, auf allen Benutzer-PCs ein Protokoll hinzuzufügen (innerhalb der Domäne ging dies immer noch nirgendwo hin, obwohl es besser ist, diese Praxis zu vermeiden), aber hier ist es zusätzlich erforderlich Platzieren Sie das Programm auf einem PC und überwachen Sie es sogar ständig, damit es bei der Neuinstallation der Software auf einem PC nicht verschwindet.

Das heißt, Diese Option wird auch als für uns nicht geeignet verworfen.

Dann begann ich zu denken, dass ich mich von der Idee verabschieden müsste, die SAP-GUI mit den erforderlichen Parametern über den Browser zu starten, aber dann kam mir die Idee, dass Sie eine Verknüpfung in SAP Logon erstellen und auf den Desktop kopieren können. Ich habe diese Methode einmal verwendet, aber zuvor habe ich mir die Verknüpfungsdatei nicht speziell angesehen. Und es stellte sich heraus, dass diese Verknüpfung eine einfache Textdatei mit der Erweiterung .sap ist . Wenn Sie es unter Windows ausführen, wird die SAP-GUI mit den in dieser Datei angegebenen Parametern gestartet. "Bingo!"

Das Format dieser Datei ist ungefähr wie folgt (möglicherweise wird beim Start noch 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 alles zu sein, was benötigt wird: eine Systemkennung, ein Client, ein Benutzername und sogar ein Passwort. Und noch zusätzliche Parameter: Titel - der Titel des Fensters, GuiSize - die Größe des gestarteten Fensters (Vollbild oder nicht) und Wiederverwendung - ob ein neues Fenster geöffnet oder ein bereits geöffnetes mit demselben System verwendet werden soll. Aber sofort kam eine Nuance heraus - es stellte sich heraus, dass es unmöglich war, ein Passwort in SAP Logon festzulegen, die Leitung wurde blockiert. Es stellte sich heraus, dass dies aus Sicherheitsgründen geschah: Er speichert alle in SAP Logon erstellten Verknüpfungen in der Datei sapshortcut.ini (neben saplogon.ini im Windows-Benutzerprofil) und obwohl sie dort verschlüsselt sind, können sie zu stark und auf Wunsch verschlüsselt werden. dekodieren. Sie können dies jedoch auch beheben, indem Sie den Wert eines Parameters in der Registrierung ändern (der Standardwert ist 0 ):

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\SAP\SAPShortcut\Security]
"EnablePassword"="1"

Dadurch wird das Feld Kennwort im Verknüpfungsformular in SAP Logon entsperrt, um Folgendes einzugeben:



Wenn Sie ein Passwort in dieses Feld 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 hat es die folgende Form: PW_49B02219D1F6, für 222222 - PW_4AB3211AD2F5. Wir sind jedoch mehr an der Tatsache interessiert, dass dieses Passwort auf eine Weise verschlüsselt wird, die vom jeweiligen PC unabhängig ist. Wenn wir das Passwort auf das ursprüngliche zurücksetzen, können wir einen zuvor bekannten Wert in diesem Feld verwenden. Wenn wir ein zufällig generiertes Passwort verwenden möchten, müssen wir den Algorithmus dieser Chiffre verstehen. Nach den obigen Beispielen zu urteilen, wird dies jedoch nicht schwierig sein. Übrigens ist dieses Feld in SAP GUI 7.40 im Allgemeinen aus dem Formular verschwunden, aber es erkennt die Datei mit dem ausgefüllten Kennwort korrekt.

Das heißt, es stellt sich heraus, dass es im Browser ausreicht, auf den Link zur Datei mit der Erweiterung .sap und dem gewünschten Format zu klicken - und er bietet an, sie als Datei vom Typ SAP GUI Shortcut (natürlich auf einem PC mit installierter SAP GUI) zu öffnen und das SAP GUI-Fenster mit der angegebenen zu öffnen Parameter (wenn sich die SID und das Client-Paar in der SAP-Anmeldeliste auf diesem PC befinden).

Es ist jedoch klar, dass niemand einfach vorher Dateien auf der Website erstellen und speichern wird - sie müssen basierend auf den erforderlichen Parametern generiert werden. Sie können beispielsweise ein Skript in PHP 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]\r\n"; echo "Name=".$SID."\r\n"; echo "Client=".$Client."\r\n"; echo "[User]\r\n"; echo "Name=".$Username."\r\n"; echo "Language=".$Lang."\r\n"; if($Password<>'') echo "Password=".$Password."\r\n"; echo "[Function]\r\n"; if($Title<>'') {echo "Title=".$Title."\r\n";} else {echo "Title=  \r\n";}; echo "[Configuration]\r\n"; if($Size=='max') { echo "GuiSize=Maximized\r\n"; }; echo "[Options]\r\n"; echo "Reuse=0\r\n"; ?> 

Wenn Sie keinen Benutzernamen und kein Passwort angeben, wird in den Eingabeaufforderungen für Anmeldung und Passwort das folgende Fenster angezeigt:



Wenn Sie nur die Anmeldung übertragen, wird das Anmeldefeld ausgefüllt und das Kennwortfeld ist leer. Wenn wir dem Benutzer sowohl den Benutzernamen als auch das Kennwort geben, aber der EnablePassword-Schlüssel des Benutzers im Abschnitt [HKEY_CURRENT_USER \ Software \ SAP \ SAPShortcut \ Security] auf dem PC des Benutzers auf 0 gesetzt ist, erhalten wir dasselbe. Und nur wenn dieser Schlüssel auf 1 gesetzt ist und wir sowohl den Namen als auch das ursprüngliche Passwort übertragen, werden Sie vom System sofort aufgefordert, das neue permanente Passwort zweimal einzugeben. Was war erforderlich, um zu erhalten.

Infolgedessen haben wir die folgenden Optionen zur Veranschaulichung aller oben genannten Punkte:

 <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 kam auf mich zu. Anstatt SAP-Verknüpfungen zu generieren, können Sie beispielsweise auch CMD-Dateien generieren, die beim Öffnen über einen Browser auch das SAP-GUI-Fenster öffnen. Das folgende Beispiel ( sapguicmd.php ) zeigt das direkte Starten der SAP-GUI mit der vollständigen Verbindungszeichenfolge, ohne dass die SAP-Anmeldung 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 off\r\n"; echo "chcp 1251\r\n"; echo "echo   ".$Title."\r\n"; echo "set SAP_CODEPAGE=1504\r\n"; echo 'if exist "%ProgramFiles(x86)%\SAP\FrontEnd\SapGui\sapgui.exe" set gui=%ProgramFiles(x86)%\SAP\FrontEnd\SapGui\sapgui.exe'."\r\n"; echo 'if exist "%ProgramFiles%\SAP\FrontEnd\SapGui\sapgui.exe" set gui=%ProgramFiles%\SAP\FrontEnd\SapGui\sapgui.exe'."\r\n"; 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 "\r\n"; echo '"%gui%" %logon%'."\r\n"; ?> 

Source: https://habr.com/ru/post/de446998/


All Articles