Starta SAP GUI frÄn en webblÀsare

Jag skrev först den hÀr artikeln i min blogg, för att inte söka och komma ihÄg igen senare, men eftersom ingen lÀser bloggen sÄ ville jag dela denna information med alla, ifall nÄgon tycker att den Àr anvÀndbar.

Under arbetet med idén om en lösenordsÄterstÀllningstjÀnst i SAP R/3-system uppstod en frÄga - hur man startar SAP GUI med nödvÀndiga parametrar frÄn webblÀsaren? Eftersom denna idé innebar anvÀndningen av en webbtjÀnst, först svara pÄ en SOAP-förfrÄgan frÄn SAP GUI och skicka ett e-postmeddelande med en lÀnk till en webbsida med ett skript för att ÄterstÀlla lösenordet till det ursprungliga, och sedan visa det för anvÀndaren ett meddelande om lyckad lösenordsÄterstÀllning och visning av detta allra första lösenord, sÄ vill jag att den hÀr sidan ocksÄ ska ha en lÀnk för att starta SAP GUI. Dessutom bör denna lÀnk öppna det önskade systemet, och helst med inloggnings- och lösenordsfÀlten ifyllda pÄ en gÄng: anvÀndaren skulle bara behöva fylla i det produktiva lösenordet tvÄ gÄnger.

Att starta SAP Logon var inte intressant för vĂ„rt syfte, och nĂ€r man körde sapgui.exe var det omöjligt att ange klient och anvĂ€ndarnamn, men det var möjligt att starta ett system som inte definierades i SAP Logon. Å andra sidan var det inte sĂ€rskilt relevant att starta SAP GUI med godtyckliga serverparametrar: om vi löser problemet med att Ă„terstĂ€lla en anvĂ€ndares lösenord, sĂ„ har han troligen redan den nödvĂ€ndiga raden i SAP Logon, med de instĂ€llningar han behöver, och dĂ€r behöver inte brĂ„ka med sin egen. Men de specificerade kraven uppfylldes av SAP GUI-genvĂ€gstekniken och sjĂ€lva programmet sapshcut.exe, vilket gjorde det möjligt att starta SAP GUI med en specifik "genvĂ€g".

Att lösa problemet direkt: starta sapshcut.exe direkt frÄn webblÀsaren med ett 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');
}

Lösningen Àr dÄlig: för det första fungerar det bara i Internet Explorer, för det andra krÀver det lÀmpliga sÀkerhetsinstÀllningar i webblÀsaren, vilket i en organisation kan vara förbjudet pÄ domÀnnivÄ, och Àven om det Àr tillÄtet visar webblÀsaren ett fönster med ett skrÀmmande varning till anvÀndaren:

Starta SAP GUI frÄn en webblÀsare

Jag hittade lösning #2 pÄ Internet: skapa ditt eget webbprotokollLÄter oss starta den applikation vi behöver med hjÀlp av en lÀnk som anger det protokoll vi registrerar oss i. Windows I registret, under HKEY_CLASSES_ROOT. Eftersom SAP GUI Shortcut har en egen undernyckel i det hÀr avsnittet kan du lÀgga till strÀngparametern URL Protocol med ett tomt vÀrde:

Starta SAP GUI frÄn en webblÀsare

Detta protokoll startar sapgui.exe med parameter /GENVÄG, vilket Ă€r precis vad vi behöver:

Starta SAP GUI frÄn en webblÀsare

Tja, eller om vi vill göra ett helt godtyckligt protokoll (t.ex. sapshcut), dÄ kan du registrera den med följande reg-fil:

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

Nu, om vi gör en lÀnk pÄ en webbsida som anger protokollet Sapgui.Shortcut.File PÄ ett liknande sÀtt:

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

Vi borde se ett fönster sÄ hÀr:

Starta SAP GUI frÄn en webblÀsare

Och allt verkar bra, men nÀr du klickar pÄ "TillÄt"-knappen ser vi:

Starta SAP GUI frÄn en webblÀsare

Oj, webblĂ€saren gjorde om mellanslaget till %20. Och andra tecken kommer ocksĂ„ att kodas till sin egen numeriska kod med procenttecknet. Och det vĂ€rsta Ă€r att det inte finns nĂ„got du kan göra Ă„t det pĂ„ webblĂ€sarnivĂ„ (allt Ă€r standard hĂ€r) – webblĂ€saren gillar inte sĂ„dana tecken, och kommandotolken gör det inte. Windows fungerar inte med sĂ„dana kodade vĂ€rden. Och en annan nackdel Ă€r att hela strĂ€ngen skickas som en parameter, inklusive protokollnamnet och till och med kolon (sapgui.shortcut.file:). Dessutom, Ă€ven om det Ă€r samma sapshcut.exe kan kassera allt som inte Ă€r en parameter för det (börjar med symbolen "-", sedan namnet, "=" och vĂ€rde), d.v.s. en rad som "sapgui.shortcut.file: -system=SID"det kommer fortfarande att fungera, dĂ„ utan ett mellanslag"sapgui.shortcut.file:-system=SID"fungerar inte lĂ€ngre.

Det visar sig att det i princip finns tvÄ alternativ för att anvÀnda URI-protokollet:

  1. AnvÀndning utan parametrar: Vi skapar en hel massa protokoll för alla vÄra system av denna typ SIDMANDT, typ AAA200, BBB200 och sÄ vidare. Om du bara behöver starta det önskade systemet Àr alternativet ganska fungerande, men i vÄrt fall Àr det inte lÀmpligt, eftersom du Ätminstone skulle vilja överföra anvÀndarinloggningen, men det kan inte göras pÄ detta sÀtt.
  2. AnvĂ€nder ett omslagsprogram för att ringa sapshcut.exe eller sapgui.exeKĂ€rnan i det hĂ€r programmet Ă€r enkel – det ska ta strĂ€ngen som webblĂ€saren skickar till det via webbprotokollet och konvertera den till den representation som accepteras. Windows, d.v.s. den konverterar all teckenkod tillbaka till tecken (kanske till och med analyserar strĂ€ngen med parametrar) och anropar sedan SAP GUI med ett kommando som garanterat Ă€r korrekt. Detta Ă€r inte helt lĂ€mpligt för vĂ„rt fall (vilket Ă€r anledningen till att jag inte ens brydde mig om att skriva det), eftersom det inte rĂ€cker med att lĂ€gga till protokollet till alla anvĂ€ndardatorer (det Ă€r fortfarande okej inom en domĂ€n, Ă€ven om det ocksĂ„ Ă€r bĂ€st att undvika denna praxis). Vi mĂ„ste ocksĂ„ installera programmet pĂ„ datorn och stĂ€ndigt övervaka det för att sĂ€kerstĂ€lla att det finns kvar nĂ€r vi installerar om programvara pĂ„ datorn.

De dÀr. Vi förkastar ocksÄ detta alternativ som olÀmpligt för oss.

Vid det hĂ€r laget började jag redan tĂ€nka att jag skulle behöva sĂ€ga adjö till idĂ©n att lansera SAP GUI med de nödvĂ€ndiga parametrarna frĂ„n webblĂ€saren, men dĂ„ kom tanken upp för mig att du kan göra en genvĂ€g i SAP Logon och kopiera den till ditt skrivbord. Jag anvĂ€nde den hĂ€r metoden en gĂ„ng, men innan dess tittade jag inte specifikt pĂ„ genvĂ€gsfilen. Och det visade sig att den hĂ€r genvĂ€gen Ă€r en vanlig textfil med tillĂ€gget .savOch om du kör den i Windows — SAP GUI startar med de parametrar som anges i den hĂ€r filen. "Bingo!"

Formatet för den hÀr filen Àr ungefÀr följande (det kan ocksÄ finnas en transaktion som startas vid start, men jag har utelÀmnat den):

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

Det verkar som att allt som behövs: en systemidentifierare, en klient, ett anvĂ€ndarnamn och till och med ett lösenord. Och Ă€ven ytterligare parametrar: Titel - fönstertitel, GuiSize — storleken pĂ„ det löpande fönstret (helskĂ€rm eller inte) och ÅteranvĂ€ndning — om det Ă€r nödvĂ€ndigt att öppna ett nytt fönster eller anvĂ€nda ett redan öppet med samma system. Men en nyans uppstod omedelbart - det visade sig att lösenordet i SAP Logon inte kunde stĂ€llas in, linjen var blockerad. Det visade sig att detta gjordes av sĂ€kerhetsskĂ€l: det lagrar alla genvĂ€gar som skapats i SAP Logon i en fil sapshortcut.ini (NĂ€ra saplogon.ini i anvĂ€ndarprofilen Windows) och Ă€ven om de Ă€r krypterade dĂ€r, Ă€r de inte alltför kraftigt krypterade och kan dekrypteras om du verkligen vill. Men du kan ocksĂ„ lösa detta genom att Ă€ndra vĂ€rdet pĂ„ en parameter i registret (standardvĂ€rdet Ă€r 0):

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

Detta lÄser upp fÀltet Lösenord för inmatning i formulÀret för att skapa genvÀgar i SAP Logon:

Starta SAP GUI frÄn en webblÀsare

Och nÀr du anger ett lösenord i det hÀr fÀltet kommer det att placeras pÄ motsvarande rad
sapshortcut.ini, men nĂ€r du drar en genvĂ€g till skrivbordet visas den inte dĂ€r – men du kan lĂ€gga till den dĂ€r manuellt. Lösenordet Ă€r krypterat, för 111111 blir det som följer: PW_49B02219D1F6, för 222222 - PW_4AB3211AD2F5. Men vi Ă€r mer intresserade av det faktum att detta lösenord Ă€r krypterat pĂ„ ett sĂ€tt, oberoende av den specifika datorn, och om vi Ă„terstĂ€ller lösenordet till det ursprungliga, kan vi anvĂ€nda ett förkĂ€nt vĂ€rde i det hĂ€r fĂ€ltet. Tja, om vi vill anvĂ€nda ett slumpmĂ€ssigt skapat lösenord mĂ„ste vi förstĂ„ algoritmen för detta chiffer. Men att döma av de exempel som ges kommer detta inte att vara svĂ„rt att göra. Förresten, i SAP GUI 7.40 försvann detta fĂ€lt helt frĂ„n formulĂ€ret, men det accepterar korrekt en fil med ett ifyllt lösenord.

Det vill sÀga, det visar sig att i webblÀsaren behöver du bara klicka pÄ lÀnken till en fil med filtillÀgget .sap och det önskade formatet - och det kommer att erbjudas att öppna den som en fil som SAP GUI Shortcut (naturligtvis pÄ en PC med SAP GUI installerat) och öppnar ett SAP GUI-fönster med de angivna parametrarna (om SID och klientpar finns i SAP-inloggningslistan pÄ denna PC).

Men det Àr klart att ingen helt enkelt kommer att skapa filer i förvÀg och lagra dem pÄ webbplatsen - de mÄste genereras baserat pÄ nödvÀndiga parametrar. Till exempel kan du skapa ett PHP-skript för att generera genvÀgar (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";
?>

Om du inte anger ett anvÀndarnamn och lösenord kommer du att fÄ följande fönster som ber om inloggning och lösenord:

Starta SAP GUI frÄn en webblÀsare

Om du bara klarar inloggningen kommer inloggningsfĂ€ltet att fyllas i och lösenordsfĂ€ltet kommer att vara tomt. Om vi ​​ger anvĂ€ndaren bĂ„de en inloggning och ett lösenord, men anvĂ€ndaren pĂ„ PC:n har EnablePassword-nyckeln i registret i avsnittet [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] satt till 0, sĂ„ fĂ„r vi samma sak. Och bara om denna nyckel Ă€r instĂ€lld pĂ„ 1 och vi skickar bĂ„de namnet och det ursprungliga lösenordet, kommer systemet omedelbart att uppmana dig att ange ett nytt permanent lösenord tvĂ„ gĂ„nger. Det var vad vi behövde fĂ„.

Som ett resultat har vi följande uppsÀttning övervÀgda alternativ som en illustration av allt ovan:

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

Det sista alternativet passade mig. Men istÀllet för att generera SAP-genvÀgar kan du ocksÄ anvÀnda till exempel att generera CMD-filer, som nÀr de öppnas frÄn en webblÀsare ocksÄ öppnar SAP GUI-fönstret för dig. Nedan Àr ett exempel (sapguicmd.php) starta SAP GUI direkt med den fullstÀndiga anslutningsstrÀngen, utan att behöva ha SAP Logon konfigurerad:

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

KĂ€lla: will.com

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster