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ása. Lehetővé teszi a szükséges alkalmazás elindítását a protokollt jelző hivatkozás segítségével, amelyet mi magunk regisztrálunk a Windows rendszerleíró adatbázisában a HKEY_CLASSES_ROOT részben. Mivel az SAP GUI Shortcutnak saját alszakasza van ebben a szakaszban, hozzáadhatja az URL Protocol karakterlánc paraméterét ü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öz billentyűt %20-ra változtatta. Nos, más karakterek is a saját numerikus kódjukba lesznek kódolva százalékjellel. És a legkellemetlenebb, hogy itt böngésző szinten semmit nem lehet tenni (itt minden a szabvány szerint történik) - a böngésző nem szereti az ilyen karaktereket, és a Windows parancsértelmező sem működik ilyen kódolt értékekkel. És még egy mínusz - 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.exe. Ennek a programnak a lényege egyszerű - meg kell vennie a karakterláncot, amelyet a böngésző továbbít neki a webprotokollon keresztül, és át kell alakítania a Windows által kapott reprezentációvá, azaz. minden karakterkódot visszafordít karakterekké (talán még a karakterláncot is elemzi a paraméterek szerint), és máris hívja az SAP GUI-t egy garantáltan helyes paranccsal. A mi esetünkben szintén nem teljesen megfelelő (ezért nem is írtam), mert nem elég, ha minden felhasználói PC-n hozzáadjuk a protokollt (tartományon belül ez még így is rendben van, bár az is jobb, ha kerülje el ezt a gyakorlatot), de itt több helyen kell elhelyeznünk a programot a számítógépen, és folyamatosan ügyelnünk kell arra, hogy ne tűnjön el, amikor a szoftvert újratelepítik a számítógépre.

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 Windows rendszeren futtatja, az SAP GUI az ebben a fájlban megadott paraméterekkel indul el. "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 Windows felhasználói profilban) és ott, bár titkosítottak, nem túl erősen titkosítottak, és ha szükséges, visszafejthetők. De ezt megoldhatja, ha megváltoztatja egy paraméter értékét a rendszerleíró adatbázisban (az alapértelmezett érték: 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

Hozzászólás