SAP GUI aus engem Browser starten

Ech geschriwwen éischt dësem Artikel a mengem блог, fir net méi spéit ze sichen an ze erënneren, awer well keen de Blog liest, wollt ech dës Informatioun mat jidderengem deelen, wann een se nëtzlech fënnt.

Wärend un der Iddi vun engem Passwuert zréckgesat Service an SAP R / 3 Systemer geschafft, eng Fro opgestan - wéi SAP GUI mat den néideg Parameteren aus dem Browser ze starten? Well dës Iddi d'Benotzung vun engem Webservice implizéiert, als éischt op eng SOAP-Ufro vun der SAP GUI äntweren an e Bréif mat engem Link op eng Websäit mat engem Skript schécken fir d'Passwuert op dat initialt zréckzesetzen, an dann dem Benotzer ze weisen e Message iwwer déi erfollegräich Passwuert zréckgesat an dëst ganz initial Passwuert ze weisen, da géif ech gär datt dës Säit och e Link huet fir SAP GUI ze starten. Ausserdeem soll dëse Link de gewënschten System opmaachen, an am léifsten mat de Login- a Passwuertfelder gläichzäiteg ausgefëllt: de Benotzer muss dat produktivt Passwuert nëmmen zweemol ausfëllen.

De Start vum SAP Logon war net interessant fir eisen Zweck, a wann Dir sapgui.exe leeft, war et onméiglech de Client an de Benotzernumm ze spezifizéieren, awer et war méiglech e System ze starten deen net am SAP Logon definéiert ass. Op der anerer Säit, d'Start vun SAP GUI mat arbiträrer Serverparameter war net besonnesch relevant: wa mir de Problem léisen fir e Benotzerpasswuert zréckzesetzen, dann huet hien héchstwahrscheinlech schonn déi néideg Linn am SAP Logon, mat den Astellungen déi hien brauch, an do ass net néideg mat sengem eegenen ze mess. Awer déi spezifizéiert Ufuerderunge goufen vun der SAP GUI Shortcut Technologie an dem sapshcut.exe Programm selwer erfëllt, wat et méiglech gemaach huet d'SAP GUI mat enger spezifescher "Ofkierzung" ze starten.

De Problem direkt léisen: Start sapshcut.exe direkt vum Browser mat engem ActiveX Objet:

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');
}

D'Léisung ass schlecht: éischtens, et funktionnéiert nëmmen am Internet Explorer, zweetens, et erfuerdert entspriechend Sécherheetsastellungen am Browser, déi an enger Organisatioun um Domainniveau verbuede kënne sinn, an och wann et erlaabt ass, weist de Browser eng Fënster mat engem erschreckend Warnung fir de Benotzer:

SAP GUI aus engem Browser starten

Ech hunn Léisung #2 um Internet fonnt: Ären eegene Webprotokoll erstellen. Erlaabt eis d'Applikatioun ze starten déi mir brauchen mat engem Link deen de Protokoll uginn, dee mir selwer a Windows registréieren an der Registry an der HKEY_CLASSES_ROOT Sektioun. Zënter SAP GUI Ofkierzung huet seng eege Ënnersektioun an dëser Sektioun, kënnt Dir den URL Protokoll Stringparameter mat engem eidele Wäert do addéieren:

SAP GUI aus engem Browser starten

Dëse Protokoll fänkt un sapgui.exe mat Parameter / SHORTCUT, dat ass genau wat mir brauchen:

SAP GUI aus engem Browser starten

Gutt, oder wa mir e komplett arbiträre Protokoll maache wëllen (zum Beispill, sapschcut), da kënnt Dir et mat der folgender Reg Datei registréieren:

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""

Elo, wa mir e Link op enger Websäit maachen, déi de Protokoll uginn Sapgui.Shortcut.File Op eng ähnlech Manéier:

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

Mir sollten eng Fënster wéi dës gesinn:

SAP GUI aus engem Browser starten

An alles schéngt super, awer wann Dir op de "Allow" Knäppchen klickt, gesi mir:

SAP GUI aus engem Browser starten

Oops, de Browser huet d'Spacebar an %20 ëmgewandelt. Gutt, aner Charaktere ginn och an hiren eegene numeresche Code mat engem Prozentsymbol kodéiert. An déi onangenehmst Saach ass datt näischt hei am Browserniveau ka gemaach ginn (alles hei gëtt no der Norm gemaach) - de Browser huet esou Zeechen net gär, an de Windows Kommando Dolmetscher funktionnéiert net mat sou kodéierte Wäerter. An nach ee Minus - de ganze String gëtt als Parameter passéiert, inklusiv de Protokollnumm a souguer de Colon (sapgui.shortcut.file:). Ausserdeem, obwuel d'selwecht sapshcut.exe kann alles ofwerfen wat net e Parameter dofir ass (fänkt mat dem Symbol "-", dann den Numm, "=" a Wäert), d.h. eng Linn wéi "sapgui.shortcut.file: -system=SID"et funktionnéiert nach ëmmer, dann ouni Plaz"sapgui.shortcut.file:-system=SID" funktionnéiert net méi.

Et stellt sech eraus datt et am Prinzip zwou Méiglechkeeten fir den URI Protokoll ze benotzen:

  1. Benotzt ouni Parameteren: Mir kreéieren eng ganz Rëtsch vu Protokoller fir all eis Systemer vum Typ SIDMANDT, Typ AAA200, BBB200 a sou weider. Wann Dir just de gewënschte System unzefänken, dann ass d'Optioun ganz funktionéierbar, awer an eisem Fall ass et net gëeegent, well op d'mannst Dir wëllt de Benotzer Login transferéieren, awer dëst kann net esou gemaach ginn.
  2. Benotzt e Wrapper Programm fir ze ruffen sapshcut.exe oder sapgui.exe. D'Essenz vun dësem Programm ass einfach - et muss de String huelen, deen de Browser iwwer de Webprotokoll iwwerdréit an et an d'Representatioun ëmsetzen, déi Windows kritt, d.h. verwandelt all Zeechecodes zréck an Zeechen (vläicht parséiert souguer d'String no Parameteren) a rifft scho SAP GUI mat engem garantéierte korrekte Kommando. An eisem Fall ass et och net ganz gëeegent (dofir hunn ech et net emol geschriwwen), well et geet net duer fir de Protokoll op all Benotzer-PCen derbäi ze setzen (an engem Domain ass dat nach ëmmer an der Rei, obwuel et och besser ass vermeit dës Praxis), awer hei brauche mir méi de Programm um PC ze setzen, an och dauernd sécherzestellen datt et net fortgeet wann d'Software um PC nei installéiert gëtt.

Déi. Mir verwerfen dës Optioun och als net gëeegent fir eis.

Zu dësem Zäitpunkt hunn ech scho ugefaang ze denken datt ech Äddi musse soen fir d'Iddi fir SAP GUI mat den néidege Parameteren aus dem Browser ze lancéieren, awer dunn ass d'Iddi opkomm datt Dir am SAP Logon eng Ofkiirzung maache kënnt an kopéiert et op Ärem Desktop. Ech hunn dës Method eemol benotzt, awer virdrun hunn ech net spezifesch op d'Ofkiirzungsdatei gekuckt. An et huet sech erausgestallt datt dës Ofkiirzung eng regulär Textdatei mat der Extensioun ass .sap. A wann Dir et op Windows leeft, fänkt SAP GUI mat de Parameteren un, déi an dëser Datei spezifizéiert sinn. "Bingo!"

D'Format vun dëser Datei ass ongeféier déi folgend (et kann och eng Transaktioun gestart ginn beim Start, awer ech hunn et ausgelooss):

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

Et schéngt, datt alles wat néideg ass: e System Identifizéierer, e Client, e Benotzernumm a souguer e Passwuert. An och zousätzlech Parameteren: title - Fënster Titel, GuiSize - Gréisst vun der Lafen Fënster (Vollbildschierm oder net) an Widderhuelend - ob et néideg ass eng nei Fënster opzemaachen oder eng schonn opgemaachte mam selwechte System ze benotzen. Awer eng Nuance ass direkt entstanen - et huet sech erausgestallt datt d'Passwuert am SAP Logon net gesat ka ginn, d'Linn war blockéiert. Et huet sech erausgestallt datt dëst aus Sécherheetsgrënn gemaach gouf: et späichert all Ofkiirzungen, déi am SAP Logon erstallt goufen, an enger Datei sapshortcut.ini (Nop saplogon.ini am Windows Benotzerprofil) an do, obwuel se verschlësselt sinn, si se net ze staark verschlësselt an, wann Dir wëllt, kënne se entschlësselt ginn. Awer Dir kënnt dëst léisen andeems Dir de Wäert vun engem Parameter an der Registry ännert (de Standardwäert ass 0):

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

Dëst späert d'Passwuertfeld fir d'Entrée op der Ofkiirzungsformular am SAP Logon op:

SAP GUI aus engem Browser starten

A wann Dir e Passwuert an dësem Feld gitt, gëtt et an der entspriechender Linn gesat
sapshortcut.ini, awer wann Dir eng Ofkiirzung op den Desktop zitt, da schéngt se net do - awer Dir kënnt se do manuell addéieren. D'Passwuert ass verschlësselte, fir 111111 ass et wéi follegt: PW_49B02219D1F6, fir 222222 - PW_4AB3211AD2F5. Awer mir si méi interesséiert an der Tatsaach datt dëst Passwuert op eng Manéier verschlësselt ass, onofhängeg vum spezifesche PC, a wa mir d'Passwuert op den initialen zrécksetzen, da kënne mir e virbekannte Wäert an dësem Beräich benotzen. Gutt, wa mir e zoufälleg erstallt Passwuert benotze wëllen, musse mir den Algorithmus vun dësem Chiffer verstoen. Awer no de Beispiller beurteelen, wäert dëst net schwéier sinn ze maachen. Iwwregens, am SAP GUI 7.40 ass dëst Feld komplett aus der Form verschwonnen, awer et akzeptéiert korrekt e Fichier mat engem ausgefëllte Passwuert.

Dat ass, et stellt sech eraus datt Dir am Browser just op de Link op eng Datei mat der .sap Extensioun an dem gewënschten Format klickt musst - an et bitt Iech als Datei opzemaachen wéi SAP GUI Shortcut (natierlech op engem PC) mat SAP GUI installéiert) a wäert eng SAP GUI Fënster opmaachen mat de spezifizéierte Parameteren (wann d'SID a Client Pair an der SAP Logon Lëscht op dësem PC sinn).

Awer et ass kloer datt keen einfach Dateien am Viraus erstellt an se um Site späichert - se musse generéiert ginn op Basis vun den néidege Parameteren. Zum Beispill kënnt Dir e PHP Skript erstellen fir Ofkiirzungen ze generéieren (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";
?>

Wann Dir kee Benotzernumm a Passwuert uginn hutt, kritt Dir déi folgend Fënster fir Login a Passwuert ze froen:

SAP GUI aus engem Browser starten

Wann Dir nëmmen de Login passéiert, gëtt de Loginfeld ausgefëllt an d'Passwuertfeld wäert eidel sinn. Wa mir de Benotzer souwuel e Login wéi och e Passwuert ginn, awer de Benotzer um PC huet den EnablePassword Schlëssel an der Registry an der [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] Sektioun op 0 gesat, da kréie mir datselwecht. A nëmmen wann dëse Schlëssel op 1 gesat ass a mir souwuel den Numm wéi och dat initialt Passwuert passéieren, freet de System Iech direkt zweemol en neit permanent Passwuert anzeginn. Dat ass wat mir brauchen ze kréien.

Als Resultat hu mir déi folgend Set vu betruechten Optiounen als Illustratioun vun all uewendriwwer:

<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>

Déi lescht Optioun huet mir gepasst. Awer amplaz SAP Ofkiirzungen ze generéieren, kënnt Dir och zum Beispill CMD-Dateien generéieren, déi, wann se aus engem Browser opgemaach ginn, och d'SAP GUI-Fënster fir Iech opmaachen. Drënner ass e Beispill (sapguicmd.php) lancéiert direkt de SAP GUI mat der voller Verbindungsstring, ouni datt de SAP Logon konfiguréiert ass:

<?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: will.com

Setzt e Commentaire