SAP GUI käivitamine brauserist

Kirjutasin selle artikli esimest korda oma blog, et mitte hiljem uuesti otsida ja meelde jätta, aga kuna keegi blogi ei loe, siis tahtsin seda infot kõigiga jagada, juhuks kui kellelgi sellest kasu peaks olema.

SAP R/3 süsteemides parooli lähtestamise teenuse idee kallal töötades tekkis küsimus - kuidas käivitada brauserist vajalike parameetritega SAP GUI? Kuna see idee eeldas veebiteenuse kasutamist, tuleb esmalt vastata SAP GUI-lt saadud SOAP-päringule ja saata e-kiri lingiga veebilehele koos skriptiga algse parooli lähtestamiseks ja seejärel kasutajale kuvamiseks. teade eduka parooli lähtestamise ja selle algse parooli kuvamise kohta , siis soovin, et sellel lehel oleks ka link SAP GUI käivitamiseks. Veelgi enam, see link peaks avama soovitud süsteemi ja soovitavalt korraga täidetud sisselogimis- ja parooliväljadega: kasutajal tuleks produktiivne parool sisestada vaid kaks korda.

SAP sisselogimise käivitamine ei olnud meie eesmärgi jaoks huvitav ja sapgui.exe käivitamisel oli võimatu määrata klienti ja kasutajanime, kuid oli võimalik käivitada süsteem, mida SAP Logon ei määratlenud. Teisest küljest ei olnud SAP GUI käivitamine suvaliste serveriparameetritega eriti asjakohane: kui lahendame kasutaja parooli lähtestamise probleemi, siis tõenäoliselt on tal SAP sisselogimises juba vajalik rida koos vajalike sätetega ja seal pole vaja omadega jamada. Kuid täpsustatud nõuded täitsid SAP GUI otsetee tehnoloogia ja programm sapshcut.exe ise, mis võimaldas käivitada SAP GUI konkreetse otsetee abil.

Probleemi lahendamine otse: sapshcut.exe käivitamine otse brauserist, kasutades ActiveX-objekti:

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

Lahendus on halb: esiteks töötab see ainult Internet Exploreris, teiseks nõuab see brauseris vastavaid turvaseadeid, mis organisatsioonis võivad olla domeeni tasemel keelatud ja isegi lubamise korral kuvab brauser akna, millel on hirmutav hoiatus kasutajale:

SAP GUI käivitamine brauserist

Leidsin Internetist lahenduse nr 2: luua oma veebiprotokolli. Võimaldab meil käivitada vajaliku rakenduse, kasutades protokolli tähistavat linki, mille me ise Windowsis registreerime registris jaotises HKEY_CLASSES_ROOT. Kuna SAP GUI otseteel on selles jaotises oma alamjaotis, saate sinna lisada tühja väärtusega stringi parameetri URL Protocol:

SAP GUI käivitamine brauserist

See protokoll käivitub sapgui.exe parameetriga /OTSEJUHEND, mis on täpselt see, mida me vajame:

SAP GUI käivitamine brauserist

Noh, või kui tahame teha täiesti suvalise protokolli (näiteks sapshcut), saate selle registreerida järgmise reg-faili abil:

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

Nüüd, kui teeme veebilehele lingi, mis näitab protokolli Sapgui.Otsetee.Fail Sarnasel viisil:

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

Peaksime nägema sellist akent:

SAP GUI käivitamine brauserist

Ja kõik tundub suurepärane, kuid kui klõpsate nupul "Luba", näeme:

SAP GUI käivitamine brauserist

Vabandust, brauser muutis tühikuklahvi %20-ks. Noh, ka teised märgid kodeeritakse oma numbrikoodiks koos protsendi sümboliga. Ja kõige ebameeldivam on see, et siin ei saa brauseri tasemel midagi teha (siin tehakse kõik vastavalt standardile) - brauserile ei meeldi sellised märgid ja Windowsi käsutõlk ei tööta selliste kodeeritud väärtustega. Ja veel üks miinus - parameetrina edastatakse kogu string, sealhulgas protokolli nimi ja isegi koolon (sapgui.shortcut.file:). Pealegi, kuigi sama sapshcut.exe võib ära visata kõik, mis ei ole tema jaoks parameeter (algab sümboliga “-”, seejärel nimi, “=” ja väärtus), st. rida nagu "sapgui.shortcut.file: -system=SID"see töötab ikka, siis ilma tühikuta"sapgui.shortcut.file:-system=SID"ei tööta enam.

Selgub, et põhimõtteliselt on URI-protokolli kasutamiseks kaks võimalust:

  1. Kasutamine ilma parameetriteta: loome kõigi meie seda tüüpi süsteemide jaoks terve hulga protokolle SIDMANT, nagu AAA200, BBB200 ja nii edasi. Kui peate lihtsalt soovitud süsteemi käivitama, on see valik üsna toimiv, kuid meie puhul see ei sobi, kuna soovite vähemalt kasutaja sisselogimist üle kanda, kuid seda ei saa nii teha.
  2. Ümbrisprogrammi kasutamine helistamiseks sapshcut.exe või sapgui.exe. Selle programmi olemus on lihtne – ta peab võtma stringi, mille brauser talle veebiprotokolli kaudu edastab, ja muutma selle esituseks, mille Windows vastu võtab, s.t. muudab kõik märgikoodid tagasi tähemärkideks (võib-olla isegi parsib stringi parameetrite järgi) ja juba kutsub SAP GUI garanteeritud õige käsuga. Meie puhul pole see ka päris sobiv (sellepärast ma seda isegi ei kirjutanud), sest ei piisa sellest, et me lisame protokolli kõikidele kasutajaarvutitele (domeeni piires on see siiski kõik korras, kuigi parem on ka vältige seda praktikat), kuid siin on vaja programmi rohkem arvutisse paigutada ja pidevalt tagada, et see ei kaoks tarkvara arvutisse uuesti installimisel.

Need. Samuti loobume sellest valikust, kuna see on meile sobimatu.

Siinkohal hakkasin juba mõtlema, et pean hüvasti jätma mõttega käivitada brauserist vajalike parameetritega SAP GUI, kuid siis tekkis mõte, et SAP Logonis saab teha otsetee ja kopeerige see oma töölauale. Ma kasutasin seda meetodit üks kord, kuid enne seda ma otseteefaili konkreetselt ei vaadanud. Ja selgus, et see otsetee on tavaline laiendiga tekstifail .sap. Ja kui käivitate selle Windowsis, käivitub SAP GUI selles failis määratud parameetritega. "Bingo!"

Selle faili vorming on ligikaudu järgmine (käivitamisel võib olla ka tehing, kuid ma jätsin selle välja):

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

Tundub, et kõik vajalik: süsteemi identifikaator, klient, kasutajanimi ja isegi parool. Ja isegi täiendavad parameetrid: Kapslid - akna pealkiri, GuiSize — jooksva akna suurus (täisekraan või mitte) ja Taaskasutamine — kas on vaja avada uus aken või kasutada sama süsteemiga juba avatud akent. Kuid kohe ilmnes nüanss - selgus, et SAP Logonis ei saanud parooli määrata, liin oli blokeeritud. Selgus, et seda tehti turvakaalutlustel: see salvestab kõik SAP Logonis loodud otseteed faili sapshortcut.ini (Lähedal saplogon.ini Windowsi kasutajaprofiilis) ja seal, kuigi need on krüptitud, ei ole need liiga tugevalt krüptitud ja soovi korral saab neid dekrüpteerida. Kuid saate selle lahendada, muutes registris ühe parameetri väärtust (vaikeväärtus on 0):

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

See avab välja Parooli, et sisestada SAP-i sisselogimise otsetee loomise vormi:

SAP GUI käivitamine brauserist

Ja kui sisestate sellele väljale parooli, asetatakse see vastavale reale
sapshortcut.ini, kuid kui lohistate otsetee töölauale, siis seda seal ei kuvata – aga saate selle sinna käsitsi lisada. Parool on krüptitud, 111111 jaoks on see järgmine: PW_49B02219D1F6, 222222 jaoks - PW_4AB3211AD2F5. Kuid meid huvitab rohkem see, et see parool on konkreetsest arvutist sõltumatult ühel viisil krüptitud ja kui lähtestame parooli algsele, siis saame sellel väljal kasutada ühte eelnevalt teadaolevat väärtust. Noh, kui tahame kasutada juhuslikult loodud parooli, peame mõistma selle šifri algoritmi. Kuid antud näidete põhjal otsustades pole seda raske teha. Muide, SAP GUI 7.40-s kadus see väli vormist täielikult, kuid see aktsepteerib õigesti täidetud parooliga faili.

See tähendab, et selgub, et brauseris peate lihtsalt klõpsama .sap-laiendi ja soovitud vorminguga faili lingil - ja see pakub võimalust avada see failina nagu SAP GUI otsetee (loomulikult arvutis installitud SAP GUI-ga) ja avab SAP GUI akna määratud parameetritega (kui SID ja kliendi paar on selle arvuti SAP-i sisselogimise loendis).

Kuid on selge, et keegi lihtsalt ei loo faile ette ja salvesta neid saidile – need tuleb genereerida vajalike parameetrite alusel. Näiteks saate otseteede loomiseks luua PHP skripti (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";
?>

Kui te kasutajanime ja parooli ei määra, kuvatakse järgmine aken, mis küsib sisselogimist ja parooli:

SAP GUI käivitamine brauserist

Kui edastate ainult sisselogimise, täidetakse sisselogimisväli ja parooliväli jääb tühjaks. Kui anname kasutajale nii sisselogimise kui ka parooli, kuid arvuti kasutajal on registris jaotises [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] võti EnablePassword seatud väärtusele 0, siis saame sama asja. Ja ainult siis, kui see võti on seatud väärtusele 1 ja edastame nii nime kui ka esialgse parooli, palub süsteem teil kohe kaks korda sisestada uus püsiparool. See on see, mida me pidime saama.

Selle tulemusel on meil kõik ülalnimetatu illustratsiooniks järgmised kaalutud valikud.

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

Mulle sobis viimane variant. Kuid SAP otseteede genereerimise asemel võid kasutada ka näiteks CMD-failide genereerimist, mis brauserist avades avavad sulle ka SAP GUI akna. Allpool on näide (sapguicmd.php) käivitage SAP GUI otse kogu ühenduse stringiga, ilma et oleks vaja SAP sisselogimist konfigureerida:

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

Allikas: www.habr.com

Lisa kommentaar