SAP GUI indítása böngészőből

Ezt a cikket először a sajátomban írtam blog, hogy később ne keresgéljek és emlékezzek újra, de mivel senki nem olvassa a blogot, szerettem volna mindenkivel megosztani ezt az információt, hátha valaki hasznosnak találja.

Az SAP R/3 rendszerekben a jelszó-visszaállítási szolgáltatás ötletén dolgozva felmerült egy kérdés - hogyan lehet elindítani az SAP GUI-t a szükséges paraméterekkel a böngészőből? Mivel ez az ötlet egy webszolgáltatás használatát feltételezte, először válaszolni kell az SAP grafikus felhasználói felületről érkező SOAP-kérésre, és egy weboldalra mutató hivatkozást tartalmazó levelet küldeni egy szkripttel, amely visszaállítja a jelszót az eredeti jelszóra, majd megjeleníti a felhasználónak. üzenetet a sikeres jelszó-visszaállításról és ennek a kezdeti jelszónak a megjelenítéséről , akkor szeretném, ha ezen az oldalon is szerepelne egy hivatkozás az SAP GUI elindításához. Ezen túlmenően ez a hivatkozás nyitja meg a kívánt rendszert, és lehetőleg egyszerre töltse ki a bejelentkezési és jelszó mezőket: a felhasználónak mindössze kétszer kell kitöltenie a produktív jelszót.

Az SAP Logon indítása nem volt érdekes a célunknak, a sapgui.exe indításakor pedig nem lehetett megadni a klienst és a felhasználónevet, viszont az SAP Logonban nem definiált rendszert igen. Másrészt az SAP GUI tetszőleges szerverparaméterekkel történő elindítása nem volt különösebben releváns: ha a felhasználó jelszavának visszaállításának problémáját oldjuk meg, akkor valószínűleg már megvan a szükséges sor az SAP Logonban, a szükséges beállításokkal, és ott nem kell a sajátjával vacakolni. De a megadott követelményeknek megfelelt az SAP GUI Shortcut technológia és maga a sapshcut.exe program, amely lehetővé tette az SAP GUI elindítását egy adott „parancsikon” használatával.

A probléma megoldása közvetlenül: a sapshcut.exe indítása közvetlenül a böngészőből egy ActiveX objektum segítségével:

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

A megoldás rossz: egyrészt csak Internet Explorerben működik, másrészt megfelelő biztonsági beállításokat igényel a böngészőben, ami egy szervezetben domain szinten tiltott lehet, sőt, ha engedélyezik is, a böngésző egy ijesztő ablakot jelenít meg. figyelmeztetés a felhasználónak:

SAP GUI indítása böngészőből

Találtam a 2-es megoldást az interneten: saját webprotokoll létrehozásaLehetővé teszi számunkra, hogy elindítsuk a szükséges alkalmazást egy hivatkozás használatával, amely megadja azt a protokollt, amelyben regisztráljuk magunkat. Windows A beállításjegyzékben, a HKEY_CLASSES_ROOT alatt. Mivel az SAP GUI Shortcut saját alkulccsal rendelkezik ebben a szakaszban, hozzáadhatja az URL Protocol karakterlánc paramétert üres értékkel:

SAP GUI indítása böngészőből

Ez a protokoll elindul sapgui.exe paraméterrel /PARANCSIKON, amire pontosan szükségünk van:

SAP GUI indítása böngészőből

Nos, vagy ha teljesen önkényes protokollt akarunk készíteni (pl. sapshcut), akkor regisztrálhatja a következő reg fájl segítségével:

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

Most, ha egy weboldalra teszünk egy hivatkozást, amely jelzi a protokollt Sapgui.Shortcut.File Hasonló módon:

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

Egy ilyen ablakot kell látnunk:

SAP GUI indítása böngészőből

És minden nagyszerűnek tűnik, de amikor az „Engedélyezés” gombra kattint, azt látjuk:

SAP GUI indítása böngészőből

Hoppá, a böngésző a szóközt %20-ra alakította. És más karaktereket is saját numerikus kóddá kódol a százalékjellel. És a legrosszabb az egészben, hogy böngésző szinten semmit sem lehet tenni ez ellen (itt minden szabványos) – a böngésző nem szereti az ilyen karaktereket, és a parancsértelmező sem. Windows nem működik ilyen kódolt értékekkel. Egy másik hátránya, hogy a teljes karakterlánc paraméterként kerül átadásra, beleértve a protokoll nevét és még a kettőspontot is (sapgui.shortcut.file:). Sőt, bár ugyanaz sapshcut.exe mindent el tud vetni, ami nem paraméter neki ("-" jellel kezdődik, majd a név, "=" és érték), pl. egy olyan sor, mint "sapgui.shortcut.file: -system=SID"még működni fog, szóköz nélkül"sapgui.shortcut.file:-system=SID"már nem működik.

Kiderült, hogy elvileg két lehetőség van az URI protokoll használatára:

  1. Paraméterek nélküli használat: Egy csomó protokollt készítünk az összes ilyen típusú rendszerünkhöz SIDMANT, mint AAA200, BBB200 stb. Ha csak el kell indítani a kívánt rendszert, akkor az opció teljesen működőképes, de esetünkben nem megfelelő, mivel legalább a felhasználói bejelentkezést átvinnéd, de ezt így nem lehet megtenni.
  2. Burkolóprogram használata a híváshoz sapshcut.exe vagy sapgui.exeA program lényege egyszerű - a böngésző által a webprotokollon keresztül küldött karakterláncot kell átvennie az elfogadott reprezentációvá. Windows, azaz az összes karakterkódot visszaalakítja karakterekké (talán még paraméterek alapján elemzi a karakterláncot), majd meghívja az SAP grafikus felhasználói felületét egy garantáltan helyes paranccsal. Ez nem teljesen alkalmas a mi esetünkre (ezért nem is fáradtam a megírásával), mert a protokollt az összes felhasználói PC-hez hozzáadni nem elég (egy tartományon belül még mindig rendben van, bár ezt a gyakorlatot is a legjobb elkerülni). A programot a PC-re is telepítenünk kell, és folyamatosan figyelnünk kell, hogy a helyén maradjon, amikor újratelepítünk szoftvereket a PC-re.

Azok. Ezt az opciót is elvetjük, mivel számunkra nem megfelelő.

Ekkor már kezdtem azon gondolkodni, hogy búcsút kell mondanom az ötletnek, hogy elindítom az SAP GUI-t a szükséges paraméterekkel a böngészőből, de aztán eszembe jutott, hogy az SAP Logonban lehet parancsikont csinálni és másolja az asztalra. Egyszer használtam ezt a módszert, de előtte nem néztem ki konkrétan a parancsikon fájlt. És kiderült, hogy ez a parancsikon egy szokásos szöveges fájl kiterjesztéssel .nedvÉs ha befuttatod Windows — az SAP grafikus felhasználói felülete elindul a fájlban megadott paraméterekkel. "Bingó!"

Ennek a fájlnak a formátuma hozzávetőlegesen a következő (lehet, hogy az indításkor elindult egy tranzakció, de kihagytam):

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

Úgy tűnik, minden, ami kell: rendszerazonosító, kliens, felhasználónév és még jelszó is. És még további paraméterek: Cím - ablak címe, GuiSize — a futó ablak mérete (teljes képernyő vagy nem) és újrafelhasználás — szükséges-e új ablakot nyitni, vagy egy már nyitott ablakot kell használni ugyanazzal a rendszerrel. De azonnal feltűnt egy árnyalat - kiderült, hogy az SAP Logonban nem lehet beállítani a jelszót, a vonal le van tiltva. Kiderült, hogy ez biztonsági okokból történt: az SAP Logonban létrehozott összes parancsikont egy fájlban tárolja sapshortcut.ini (Közel saplogon.ini a felhasználói profilban Windows), és bár ott titkosítva vannak, nem túl erősen titkosítottak, és visszafejthetők, ha nagyon akarod. De ezt úgy is megoldhatod, hogy megváltoztatod az egyik paraméter értékét a beállításjegyzékben (az alapértelmezett érték a 0):

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

Ez feloldja a Jelszó mezőt az SAP bejelentkezés parancsikon létrehozási űrlapján való bevitelhez:

SAP GUI indítása böngészőből

És amikor beír egy jelszót ebbe a mezőbe, az a megfelelő sorba kerül
sapshortcut.ini, de amikor egy parancsikont az asztalra húz, az ott nem jelenik meg - de manuálisan hozzáadhatja. A jelszó titkosított, 111111 esetén a következő lesz: PW_49B02219D1F6, 222222 esetén - PW_4AB3211AD2F5. De minket inkább az érdekel, hogy ez a jelszó egyféle módon van titkosítva, függetlenül az adott PC-től, és ha visszaállítjuk a jelszót az eredetire, akkor ebben a mezőben egy előre ismert értéket használhatunk. Nos, ha véletlenszerűen létrehozott jelszót akarunk használni, meg kell értenünk ennek a rejtjelnek az algoritmusát. De a megadott példák alapján ezt nem lesz nehéz megtenni. Egyébként az SAP GUI 7.40-ben ez a mező teljesen eltűnt az űrlapról, de helyesen fogadja el a kitöltött jelszóval ellátott fájlt.

Vagyis kiderül, hogy a böngészőben csak egy .sap kiterjesztésű és a kívánt formátumú fájl hivatkozására kell kattintania - és felajánlja annak megnyitását olyan fájlként, mint az SAP GUI Shortcut (természetesen számítógépen telepített SAP GUI-val), és megnyit egy SAP GUI ablakot a megadott paraméterekkel (ha a SID és a kliens pár szerepel az SAP bejelentkezési listában ezen a számítógépen).

Nyilvánvaló azonban, hogy senki sem fog egyszerűen előzetesen fájlokat létrehozni és a webhelyen tárolni – ezeket a szükséges paraméterek alapján kell előállítani. Például létrehozhat egy PHP-szkriptet parancsikonok létrehozásához (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";
?>

Ha nem ad meg felhasználónevet és jelszót, a következő ablak jelenik meg, amely bejelentkezési nevet és jelszót kér:

SAP GUI indítása böngészőből

Ha csak a bejelentkezést adja át, akkor a bejelentkezési mező kitöltésre kerül, a jelszó mező pedig üres lesz. Ha a felhasználónak bejelentkezési nevet és jelszót is adunk, de a számítógépen a [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] szakaszban az EnablePassword kulcs 0-ra van állítva, akkor ugyanazt kapjuk. És csak akkor, ha ez a kulcs 1-re van állítva, és mind a nevet, mind a kezdeti jelszót átadjuk, a rendszer azonnal kéri, hogy kétszer adjon meg új állandó jelszót. Ez az, amit meg kellett szereznünk.

Ennek eredményeként az alábbi lehetőségek állnak rendelkezésünkre a fentiek szemléltetésére:

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

Nekem az utolsó lehetőség felelt meg. De SAP parancsikonok generálása helyett használhatunk például CMD fájlok generálását is, amelyek böngészőből megnyitva egyben az SAP GUI ablakot is megnyitják Önnek. Az alábbiakban egy példa (sapguicmd.php) közvetlenül indítsa el az SAP GUI-t a teljes kapcsolati karakterlánccal, anélkül, hogy be kellene állítania az SAP bejelentkezést:

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

Forrás: will.com

Vásároljon megbízható tárhelyet DDoS védelemmel, VPS VDS szerverekkel rendelkező webhelyekhez 🔥 Vásároljon megbízható weboldal tárhelyet DDoS védelemmel, VPS VDS szerverekkel | ProHoster