Dëshironi SAP GUI nga shfletuesi

Ky artikull e kam shkruar së pari për veten time blog, në mënyrë që të mos e kërkoj përsëri dhe të mos e harroj, por pasi blogu nuk lexon askush, vendosa ta ndaja këtë informacion me të gjithë, ndoshta do t'u vijë në ndihmë.

Gjatë punës mbi ideen e shërbimit për rivendosjen e fjalëkalimit në sistemet SAP R/3, shpërtheu pyetja — si të hapim SAP GUI me parametrat e nevojshëm nga shfletuesi? Duke pasur parasysh se kjo ide përfshinte përdorimin e një shërbimi uebi, fillimisht duke punuar në bazë të një kërkese SOAP nga SAP GUI dhe duke dërguar një email me një lidhje në faqen e internetit me skriptin për rivendosjen e fjalëkalimit në inicialin, dhe më pas duke shfaqur një mesazh përdoruesit për rivendosjen e suksesshme të fjalëkalimit dhe shfaqjen e këtij fjalëkalimi iniçial, do të dëshiroja që në këtë faqe të kishte gjithashtu një lidhje për të hapur SAP GUI. Për më tepër, që kjo lidhje të hapte sistemin e duhur, dhe, preferohet, menjëherë me fushat e login dhe fjalëkalimit të mbushura: përdoruesit do t'u duhej vetëm të mbushnin fjalëkalimin produktiv dy herë.

Fillimi i SAP Logon - për qëllimin tonë nuk ishte i interesant, dhe gjatë fillimit të sapgui.exe nuk ishte e mundur të përcaktohej mandati dhe emri i përdoruesit, por mund të fillohet sistemi që nuk ishte përcaktuar në SAP Logon. Nga ana tjetër, fillimi i SAP GUI me parametra të rastësishëm të serverit nuk ishte shumë aktual: nëse ne po zgjidhim problemin e rivendosjes së fjalëkalimit të përdoruesit, do të thotë se ai tashmë në SAP Logon ka rreshtin përkatës, me cilësimet e tij dhe nuk ka nevojë të ndërhyjmë me të tonat. Megjithatë, teknologjia SAP GUI Shortcut dhe vetë programi sapshcut.exe plotësonin kërkesat e vendosura, të cilat ofronin mundësinë për të filluar SAP GUI duke përdorur një 'shkurtore' të caktuar.

Zgjidhja e problemit në mënyrë direkte: ekzekutimi i sapshcut.exe direkt nga shfletuesi me ndihmën e objekteve ActiveX:

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

Zgjidhja e keqe: së pari, funksionon vetëm në Internet Explorer, së dyti, kërkon cilësime të përshtatshme sigurie në shfletues, të cilat mund të jenë të ndaluara në nivelin e domain-it në organizatë, dhe madje edhe nëse janë të lejuara, shfletuesi i jep përdoruesit një dritare paralajmërimi qetësues:

Dëshironi SAP GUI nga shfletuesi

Zgjidhja e numër 2 e gjej përmes internetit: krijimi i një protokolli të vet. Lejon të nisë aplikacionin tonë të nevojshëm përmes një lidhjeje duke specifikuar protokollin, të cilin e regjistrojmë vetë në Windows në regjistrin në seksionin HKEY_CLASSES_ROOT. Duke pasur parasysh që SAP GUI Shortcut ka nënseksionin e saj në këtë seksion, mund të shtojmë parametrin e vargut URL Protocol me vlerë të zbrazët:

Dëshironi SAP GUI nga shfletuesi

Ky protokoll nis sapgui.exe me parametrin /SHORTCUT, që është pikërisht ajo që na nevojitet:

Dëshironi SAP GUI nga shfletuesi

Ose nëse duam të bëjmë një protokoll të rastësishëm (për shembull, sapshcut), atëherë mund ta regjistrojmë atë me ndihmën e skedarit reg të mëposhtëm:

Versioni e Redaktorit të Regjistrit të Windows 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""

Tani, nëse ne në faqe interneti krijojmë një lidhje duke specifikuar protokollin Sapgui.Shortcut.File në këtë mënyrë:

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

duhet të na shfaqet një dritare si kjo:

Dëshironi SAP GUI nga shfletuesi

Dhe duket se gjithçka është e shkëlqyer, por kur klikojmë butonin "Lejo" shohim:

Dëshironi SAP GUI nga shfletuesi

Ups, shfletuesi i internetit e shndërroi hapësirën në . Edhe simbole të tjera do të kodohen në kodin e tyre numerik me simbolin e përqindjes. Dhe e vetmja gjë e pakëndshme është se nuk ka asgjë për të bërë në nivelin e shfletuesit (këtu gjithçka është bërë sipas standardit) — shfletuesi nuk i pëlqen këto simbole, dhe interpreti i komandave të Windows nuk punon me këto vlera të koduara. Një tjetër minus është se e gjithë kjo varg kalon si parameter, duke përfshirë emrin e protokollit dhe madje edhe dy pika.sapgui.shortcut.file:) Në fakt, megjithatë, i njëjti sapshcut.exe mund të heqë gjithçka që nuk është një parametr për të (fillon me simbolin "-", pastaj emri, "=" dhe vlera), pra një string në formën "sapgui.shortcut.file: -system=SID" do të funksionojë, por pa hapësirë "sapgui.shortcut.file:-system=SID" nuk funksionon më.

Duket se, në parim, ka dy mundësi për të përdorur protokollin URI:

  1. Përdorimi pa parametra: Krijojmë një mori protokollesh për të gjitha sistemet tona të tipit SIDMANDT, si AAA200, BBB200 etj. Nëse thjesht duhet të nisni sistemin e nevojshëm, kjo mundësi është mjaft funksionale, por në rastin tonë nuk përshtatet, sepse duam të dërgojmë të paktën logarinë e përdoruesit, dhe kjo nuk mund të realizohet kështu.
  2. Përdorimi i një programi mbështjellës për thirrje sapshcut.exe ose sapgui.exe. Dija e këtij programi është e thjeshtë — ai duhet të marrë atë varg që i dërgon shfletuesi përmes protokollit web dhe ta kthejë në atë paraqitje që pranon Windows, pra, e kthyen prapa të gjitha kodet e simboleve në simbole (madje ndoshta e analizon vargun sipas parametrave) dhe më pas thërret SAP GUI me komandën e saktë. Frenkisht, ky rast nuk është gjithashtu krejt i përshtatshëm (prandaj nuk e shkruajta fare), sepse na duhet më shumë sesa të shtojmë protokollin në të gjitha kompjuterët e përdoruesve (në kuadër të domeneve është ndonjëherë e pranueshme, megjithatë është më mirë të shmangim një praktikë të tillë), po këtu do të ketë nevojë të vendosim gjithashtu një program në kompjuter, dhe madje tëMonitorojmë vazhdimisht që ai të mos zhduket gjatë risistemimit të programeve në kompjuter.

Pra, ky variant po e heqim gjithashtu si të pa vlefshëm për ne.

Këtu unë tashmë fillova të mendoj se ideja për të nisur SAP GUI me parametrat e nevojshëm nga shfletuesi do të duhet të heq dorë, por pastaj më erdhi në mendje se në SAP Logon mund të krijosh një shkurtore dhe të kopjosh atë në desktop. Kam përdorur një mënyrë të tillë dikur, por deri tani nuk e kisha parë skedarin e shkurtoreve me vëmendje. Dhe rezultoi se kjo shkurtore është një skedar i zakonshëm tekstual me zgjerimin .sap. Dhe nëse e nis në Windows — SAP GUI do të niset me parametrat që janë të specifikuar në këtë skedar. "Bingo!"

Formati i këtij skedari është përafërsisht si më poshtë (mund të ketë edhe një transaksion të nisur në fillim, por unë e kam lënë jashtë):

[System]
Emri=SID
Klienti=200
[User]
Emri=
Gjuha=SQ
Fjalkalimi=
[Function]
Titulli=
[Configuration]
MadhësiaGui=Maximized
[Options]
Përdorimi=0

Duket se ka gjithçka të nevojshme: identifikuesin e sistemit, mandantin, emrin e përdoruesit dhe madje fjalëkalimin. Dhe madje edhe parametra shtesë: Titulli — titulli i dritares, GuiSize — madhësia e dritares së nisur (në ekran të plotë apo jo) dhe Rishfrytëzim — a duhen hapni një dritare të re apo të përdoren të njëjtat me këtë sistem. Por menjëherë doli një nuancë — në SAP Logon rezultoi se nuk mund të vendosësh një fjalëkalim, linja ishte e bllokuar. U zbulua se kjo është bërë për arsye sigurie: të gjitha ikonat e krijuara në SAP Logon ruhen në një skedar sapshortcut.ini (pranë saplogon.ini në profilin e përdoruesit të Windows) dhe aty, ndonëse janë të enkriptuara, nuk janë shumë të forta dhe me dëshirë të madhe mund të dekodohen. Por gjithashtu mund të lejohet kjo duke ndryshuar vlerën e një parametri në regjistrin e sistemit (me default, vlera 0):

Versioni e Redaktorit të Regjistrit të Windows 5.00
[HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity]
"EnablePassword"="1"

Kjo do të çblokojë fushën 'Fjalëkalimi' në formularin e krijimit të shkurtes në SAP Logon:

Dëshironi SAP GUI nga shfletuesi

Dhe kur të jepni fjalëkalimin në këtë fushë, ai do të vendoset në rreshtin përkatës
sapshortcut.ini, por sjelljen e shenjës në desktop, ajo nuk shfaqet atje — por mund ta shtojmë dorazi. Fjalëkalimi është i koduar, për 111111 do të ketë këtë format: PW_49B02219D1F6, për 222222 — PW_4AB3211AD2F5. Por ajo që na intereson më shumë është se ky fjalëkalim kodifikohet në një mënyrë që nuk varet nga PC specifik dhe, nëse do të rikthejmë fjalëkalimin në fillim, mund të përdorim një vlerë të njohur paraprakisht në këtë fushë. Ndërsa, nëse dëshirojmë të përdorim një fjalëkalim të krijuar rastësisht, do të duhet të kuptojmë algoritmin e këtij kodi. Por, sipas shembujve të dhënë, do të jetë e lehtë ta bësh këtë. Për më tepër, në SAP GUI 7.40, kjo fushë në fakt ka humbur nga forma, por skedari me fjalëkalimin e plotësuar e pranon atë siç duhet.

Pra, rezulton se në shfletues mjafton të Klikoni mbi lidhjen e skedarit me prapashtesën .sap dhe me formatin e duhur — dhe ai do të ofrojë ta hapë si skedar të tipit SAP GUI Shortcut (natyrisht në PC-në me SAP GUI të instaluar) dhe do të na hapë një dritare SAP GUI me parametrat e caktuar (nëse çifti SID dhe mandant është në listën SAP Logon në këtë PC).

Natyrisht, askush nuk do të krijojë dhe ruajë skedarë paraprakisht në faqe — ato duhet të gjenerohen sipas parametrave të nevojshëm. Për shembull, mund të krijojmë një skritp në PHP për gjenerimin e ikonave (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=Access to the systemrn";};
echo "[Configuration]rn";
if($Size=='max') { echo "GuiSize=Maximizedrn"; };
echo "[Options]rn";
echo "Reuse=0rn";
?>

Nëse nuk caktohet emri i përdoruesit dhe fjalëkalimi, do të marrim dritaren e mëposhtme për kërkesën e identifikimit dhe fjalëkalimit:

Dëshironi SAP GUI nga shfletuesi

Nëse kalojmë vetëm përdoruesin — fusha e përdoruesit do të mbushet, ndërsa fusha e fjalëkalimit do të mbetet e zbrazët. Nëse ne kalojmë si përdoruesin ashtu edhe fjalëkalimin, por çelësi EnablePassword në regjistrin e PC-së së përdoruesit në [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] është vendosur në 0, atëherë do të kemi të njëjtën situatë. Vetëm nëse ky çelës është vendosur në 1 dhe ne kalojmë emrin dhe fjalëkalimin fillestar, sistemi do të kërkojë menjëherë të futet dy herë fjalëkalimi i ri dhe të përhershëm. Kjo është ajo që duhej të arrihej.

Si rezultat, kemi setin e mëposhtëm të opsioneve të shqyrtuara si një ilustrim të gjithçkaje të thënë më parë:

<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', '');"/>Shembulli 1: Ekzekuto sapshcut.exe (ActiveX)<br>
<a href='Sapgui.Shortcut.File: -system=SID -client=200'>Shembulli 2: Hap sapshcut.exe (URI)</a><br>
<a href='/sq/sapshcut.php/?SID=SID&Client=200&User=test'>Shembulli 3: Hap skedarin .sap (Këputja e SAP GUI)</a><br>
</body>
</html>

Më arriti opsioni i fundit. Por gjithashtu mund të përdorim në vend të gjenerimit të ikona SAP, për shembull, gjenerimin e skedarëve CMD, të cilat gjithashtu, kur hapen nga shfletuesi, do t'ju hapin dritaren SAP GUI. Më poshtë është një shembull (sapguicmd.php) për lançimin e drejtpërdrejtë të SAP GUI me specifikimin e linjës së plotë të lidhjes, pa pasur nevojë për një SAP Logon të konfiguruar:

<?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 Hyrje në ".$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";
?>

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster