SAP GUI paleidimas iš naršyklės

Pirmą kartą šį straipsnį parašiau savo dienoraštis, kad vėliau vėl nereikėtų ieškoti ir prisiminti, bet kadangi tinklaraščio niekas neskaito, tai norėjau šia informacija pasidalinti su visais, jei kam nors tai bus naudinga.

Dirbant su slaptažodžio nustatymo iš naujo paslauga SAP R/3 sistemose, iškilo klausimas - kaip paleisti SAP GUI su reikalingais parametrais iš naršyklės? Kadangi ši idėja numatė žiniatinklio paslaugos naudojimą, pirmiausia reikia atsakyti į SOAP užklausą iš SAP GUI ir išsiųsti el. laišką su nuoroda į tinklalapį su scenarijumi, skirtu slaptažodžiui atkurti į pradinį, o tada rodyti vartotojui. pranešimą apie sėkmingą slaptažodžio nustatymą iš naujo ir šio paties pradinio slaptažodžio rodymą , tada norėčiau, kad šiame puslapyje taip pat būtų nuoroda į SAP GUI paleidimą. Be to, ši nuoroda turėtų atverti norimą sistemą ir, pageidautina, iš karto užpildžius prisijungimo ir slaptažodžio laukus: vartotojui tektų tik du kartus užpildyti produktyvų slaptažodį.

SAP Logon paleidimas mūsų tikslui nebuvo įdomus, o paleidus sapgui.exe buvo neįmanoma nurodyti kliento ir vartotojo vardo, tačiau buvo galima paleisti sistemą, kuri neapibrėžta SAP Logon. Kita vertus, SAP GUI paleidimas su savavališkais serverio parametrais nebuvo itin aktualus: jei sprendžiame vartotojo slaptažodžio nustatymo iš naujo problemą, greičiausiai jis jau turi reikiamą eilutę SAP Logon su jam reikalingais parametrais ir ten. nereikia maišytis su savo. Tačiau nurodytus reikalavimus atitiko SAP GUI Shortcut technologija ir pati sapshcut.exe programa, kuri leido paleisti SAP GUI naudojant tam tikrą „nuorodą“.

Išspręskite problemą tiesiai: paleiskite sapshcut.exe tiesiai iš naršyklės naudojant 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');
}

Sprendimas blogas: pirma, veikia tik Internet Explorer naršyklėje, antra, reikia atitinkamų naršyklės saugumo nustatymų, kurie organizacijoje gali būti uždrausti domeno lygmeniu, o net ir leidžiant naršyklėje rodomas langas su bauginančiu įspėjimas vartotojui:

SAP GUI paleidimas iš naršyklės

Internete radau 2 sprendimą: sukurti savo interneto protokolą. Leidžia paleisti reikalingą programą naudojant nuorodą, nurodančią protokolą, kurį mes patys registruojame „Windows“ registro skyriuje HKEY_CLASSES_ROOT. Kadangi SAP GUI nuoroda turi savo poskyrį šioje skiltyje, galite pridėti URL protokolo eilutės parametrą su tuščia reikšme:

SAP GUI paleidimas iš naršyklės

Šis protokolas paleidžiamas sapgui.exe su parametru /TRUMPESNIS KELIAS, tai yra būtent tai, ko mums reikia:

SAP GUI paleidimas iš naršyklės

Na, arba jei norime sudaryti visiškai savavališką protokolą (pvz. sapshcut), galite jį užregistruoti naudodami šį reg failą:

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

Dabar, jei tinklalapyje sukursime nuorodą, nurodydami protokolą Sapgui.Shortcut.File Panašiu būdu:

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

Turėtume pamatyti tokį langą:

SAP GUI paleidimas iš naršyklės

Ir viskas atrodo puiku, bet spustelėjus mygtuką „Leisti“ matome:

SAP GUI paleidimas iš naršyklės

Oi, naršyklė tarpo klavišą pavertė %20. Na, kiti simboliai taip pat bus užkoduoti į savo skaitmeninį kodą su procento simboliu. O pats nemaloniausias dalykas yra tai, kad naršyklės lygiu čia nieko negalima padaryti (viskas čia daroma pagal standartą) - naršyklė nemėgsta tokių simbolių, o Windows komandų interpretatorius neveikia su tokiomis užkoduotomis reikšmėmis. Ir dar vienas minusas - visa eilutė perduodama kaip parametras, įskaitant protokolo pavadinimą ir net dvitaškį (sapgui.shortcut.file:). Be to, nors ir tas pats sapshcut.exe gali išmesti viską, kas jam nėra parametras (pradeda simboliu „-“, tada pavadinimas, „=“ ir reikšmė), t.y. tokia eilutė kaip "sapgui.shortcut.file: -system=SID"vis tiek veiks, tada be tarpo"sapgui.shortcut.file:-system=SID"nebeveikia.

Pasirodo, iš esmės yra dvi galimybės naudoti URI protokolą:

  1. Naudojimas be parametrų: sukuriame visą krūvą protokolų visoms tokio tipo sistemoms SIDMANTAS, Kaip AAA200, BBB200 ir taip toliau. Jei jums tiesiog reikia paleisti norimą sistemą, tada parinktis yra gana veiksminga, tačiau mūsų atveju ji netinka, nes bent jau norėtumėte perkelti vartotojo prisijungimą, tačiau to negalima padaryti.
  2. Skambinant naudojant įvyniojimo programą sapshcut.exe arba sapgui.exe. Šios programos esmė paprasta – ji turi paimti eilutę, kurią naršyklė jai perduoda žiniatinklio protokolu, ir paversti ją reprezentacija, kurią gauna Windows, t.y. visus simbolių kodus paverčia atgal į simbolius (gal net išanalizuoja eilutę pagal parametrus) ir jau iškviečia SAP GUI su garantuotai teisinga komanda. Mūsų atveju jis taip pat ne visai tinkamas (todėl net neparašiau), nes mums neužtenka pridėti protokolą visuose vartotojų kompiuteriuose (domeno viduje vis tiek viskas gerai, nors taip pat geriau venkite šios praktikos), tačiau čia mums reikės daugiau įdėti programą į kompiuterį ir taip pat nuolat užtikrinti, kad ji neišnyks, kai programinė įranga bus iš naujo įdiegta kompiuteryje.

Tie. Šią parinktį taip pat atmetame kaip mums netinkamą.

Šiuo metu jau pradėjau galvoti, kad teks atsisveikinti su mintimi paleisti SAP GUI su reikiamais parametrais iš naršyklės, bet tada man kilo mintis, kad galite padaryti nuorodą SAP Logon ir nukopijuokite jį į darbalaukį. Šį metodą naudojau vieną kartą, bet prieš tai specialiai nežiūrėjau į nuorodų failą. Ir paaiškėjo, kad šis spartusis klavišas yra įprastas tekstinis failas su plėtiniu .sap. Ir jei paleisite jį sistemoje Windows, SAP GUI bus paleista su parametrais, nurodytais šiame faile. "Bingo!"

Šio failo formatas yra maždaug toks (paleidžiant gali būti ir operacija, bet aš jos praleidau):

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

Atrodo, kad viskas, ko reikia: sistemos identifikatorius, klientas, vartotojo vardas ir net slaptažodis. Ir net papildomi parametrai: pavadinimas - lango pavadinimas, GuiSize — veikiančio lango dydis (visas ekranas ar ne) ir Pakartotinis naudojimas — ar reikia atidaryti naują langą, ar naudoti jau atidarytą su ta pačia sistema. Tačiau iš karto išryškėjo niuansas – paaiškėjo, kad slaptažodžio SAP Logon nepavyko nustatyti, linija buvo užblokuota. Paaiškėjo, kad tai buvo padaryta saugumo sumetimais: saugo visus SAP Logon sukurtus sparčiuosius klavišus faile sapshortcut.ini (Netoli salogon.ini „Windows“ vartotojo profilyje) ir ten, nors jie yra užšifruoti, jie nėra per stipriai užšifruoti ir, jei pageidaujama, gali būti iššifruoti. Bet jūs galite tai išspręsti pakeisdami vieno parametro reikšmę registre (numatytoji vertė yra 0):

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

Taip atrakinamas slaptažodžio laukas, skirtas įvesti sparčiojo klavišo kūrimo formoje SAP prisijungime:

SAP GUI paleidimas iš naršyklės

Ir kai įvesite slaptažodį į šį lauką, jis bus patalpintas atitinkamoje eilutėje
sapshortcut.ini, bet nuvilkus nuorodą į darbalaukį, jis ten nerodomas – bet galite pridėti jį rankiniu būdu. Slaptažodis yra užšifruotas, 111111 jis bus toks: PW_49B02219D1F6, 222222 - PW_4AB3211AD2F5. Tačiau mus labiau domina tai, kad šis slaptažodis būtų užšifruotas vienu būdu, nepriklausomai nuo konkretaus kompiuterio, o jei iš naujo nustatysime slaptažodį į pradinį, tada šiame lauke galime naudoti vieną iš anksto žinomą reikšmę. Na, o jei norime naudoti atsitiktinai sukurtą slaptažodį, turėsime suprasti šio šifro algoritmą. Tačiau sprendžiant iš pateiktų pavyzdžių, tai padaryti nebus sunku. Beje, SAP GUI 7.40 šis laukas visiškai išnyko iš formos, tačiau jis teisingai priima failą su užpildytu slaptažodžiu.

Tai yra, pasirodo, kad naršyklėje tereikia spustelėti nuorodą į failą su plėtiniu .sap ir norimu formatu – ir ji pasiūlys jį atidaryti kaip SAP GUI Shortcut tipo failą (natūralu kompiuteryje su įdiegta SAP GUI) ir atidarys SAP GUI langą su nurodytais parametrais (jei SID ir kliento pora yra šio kompiuterio SAP prisijungimo sąraše).

Tačiau aišku, kad niekas paprasčiausiai nesukurs failų iš anksto ir neišsaugos jų svetainėje – jie turi būti sugeneruoti pagal reikiamus parametrus. Pavyzdžiui, galite sukurti PHP scenarijų, kad sukurtumėte nuorodas (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";
?>

Jei nenurodysite vartotojo vardo ir slaptažodžio, pamatysite šį langą, kuriame bus prašoma įvesti prisijungimo vardą ir slaptažodį:

SAP GUI paleidimas iš naršyklės

Jei perduodate tik prisijungimą, prisijungimo laukas bus užpildytas, o slaptažodžio laukas bus tuščias. Jei suteikiame vartotojui ir prisijungimo vardą, ir slaptažodį, bet kompiuterio naudotojo EnablePassword raktas registre [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] yra nustatytas į 0, gauname tą patį. Ir tik tuo atveju, jei šis raktas yra 1 ir mes perduodame vardą ir pradinį slaptažodį, sistema iškart paragins du kartus įvesti naują nuolatinį slaptažodį. Štai ką mums reikėjo gauti.

Todėl turime toliau pateiktą svarstomų parinkčių rinkinį, kaip visų pirmiau minėtų dalykų iliustraciją:

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

Paskutinis variantas man tiko. Tačiau vietoj SAP sparčiųjų klavišų generavimo galite naudoti, pavyzdžiui, CMD failų generavimą, kuriuos atidarius iš naršyklės, jums bus atidarytas ir SAP GUI langas. Žemiau yra pavyzdys (sapguicmd.php) tiesiogiai paleiskite SAP GUI su visa ryšio eilute, nereikia sukonfigūruoti SAP prisijungimo:

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

Šaltinis: www.habr.com

Добавить комментарий