Nisja e SAP GUI nga një shfletues

Unë së pari e shkrova këtë artikull në faqen time blog, për të mos kërkuar dhe kujtuar më vonë, por duke qenë se askush nuk e lexon blogun, doja ta ndaja këtë informacion me të gjithë, në rast se dikush e gjen të dobishëm.

Ndërsa punoni për idenë e një shërbimi të rivendosjes së fjalëkalimit në sistemet SAP R/3, u ngrit një pyetje - si të nisni SAP GUI me parametrat e nevojshëm nga shfletuesi? Meqenëse kjo ide nënkuptonte përdorimin e një shërbimi në internet, fillimisht duke iu përgjigjur një kërkese SOAP nga SAP GUI dhe duke dërguar një email me një lidhje në një faqe interneti me një skript për rivendosjen e fjalëkalimit në atë fillestar, dhe më pas shfaqja te përdoruesi një mesazh në lidhje me rivendosjen e suksesshme të fjalëkalimit dhe shfaqjen e këtij fjalëkalimi shumë fillestar, atëherë do të doja që kjo faqe të kishte gjithashtu një lidhje për të nisur SAP GUI. Për më tepër, kjo lidhje duhet të hapë sistemin e dëshiruar dhe, mundësisht, me fushat e hyrjes dhe fjalëkalimit të plotësuara menjëherë: përdoruesi do të duhet të plotësojë vetëm dy herë fjalëkalimin produktiv.

Nisja e SAP Logon nuk ishte interesante për qëllimin tonë, dhe gjatë ekzekutimit të sapgui.exe ishte e pamundur të specifikohej emri i klientit dhe përdoruesi, por ishte e mundur të hapej një sistem i papërcaktuar në SAP Logon. Nga ana tjetër, nisja e SAP GUI me parametra arbitrare të serverit nuk ishte veçanërisht e rëndësishme: nëse po zgjidhim problemin e rivendosjes së fjalëkalimit të një përdoruesi, atëherë ka shumë të ngjarë që ai tashmë ka linjën e nevojshme në SAP Logon, me cilësimet që i nevojiten, dhe atje nuk ka nevojë të ngatërrohet me të tijat. Por kërkesat e specifikuara u plotësuan nga teknologjia SAP GUI Shortcut dhe vetë programi sapshcut.exe, i cili bëri të mundur nisjen e SAP GUI duke përdorur një "shkurtore" specifike.

Zgjidhja e problemit drejtpërdrejt: nisja e sapshcut.exe direkt nga shfletuesi duke përdorur një objekt 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 është e keqe: së pari, funksionon vetëm në Internet Explorer, së dyti, kërkon cilësime të përshtatshme sigurie në shfletues, të cilat në një organizatë mund të ndalohen në nivelin e domenit, dhe edhe nëse lejohet, shfletuesi shfaq një dritare me një dritare të frikshme. paralajmërim për përdoruesit:

Nisja e SAP GUI nga një shfletues

Kam gjetur zgjidhjen numër 2 në internet: duke krijuar protokollin tuaj të internetit. Na lejon të hapim aplikacionin që na nevojitet duke përdorur një lidhje që tregon protokollin, të cilin ne vetë e regjistrojmë në Windows në regjistrin në seksionin HKEY_CLASSES_ROOT. Meqenëse Shkurtorja SAP GUI ka nënseksionin e vet në këtë seksion, mund të shtoni parametrin e vargut të Protokollit URL me një vlerë boshe atje:

Nisja e SAP GUI nga një shfletues

Ky protokoll fillon sapgui.exe me parametër /SHKURTËR, e cila është pikërisht ajo që na nevojitet:

Nisja e SAP GUI nga një shfletues

Epo, ose nëse duam të bëjmë një protokoll krejtësisht arbitrar (për shembull, sapshcut), atëherë mund ta regjistroni duke përdorur skedarin e mëposhtëm reg:

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

Tani, nëse bëjmë një lidhje në një faqe interneti që tregon protokollin Sapgui.Shortcut.File Në mënyrë të ngjashme:

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

Ne duhet të shohim një dritare si kjo:

Nisja e SAP GUI nga një shfletues

Dhe gjithçka duket e mrekullueshme, por kur klikoni në butonin "Lejo", shohim:

Nisja e SAP GUI nga një shfletues

Mos, shfletuesi e ktheu shiritin e hapësirës në %20. Epo, karakteret e tjera gjithashtu do të kodohen në kodin e tyre numerik me një simbol përqindjeje. Dhe gjëja më e pakëndshme është se asgjë nuk mund të bëhet këtu në nivelin e shfletuesit (gjithçka këtu bëhet sipas standardit) - shfletuesi nuk i pëlqen karaktere të tilla, dhe interpretuesi i komandës Windows nuk funksionon me vlera të tilla të koduara. Dhe një minus më shumë - i gjithë vargu kalon si parametër, duke përfshirë emrin e protokollit dhe madje edhe dy pika (sapgui.shortcut.file:). Për më tepër, edhe pse e njëjta gjë sapshcut.exe mund të heqë çdo gjë që nuk është parametër për të (fillon me simbolin "-", pastaj emrin, "=" dhe vlerën), d.m.th. një rresht si "sapgui.shortcut.file: -system=SID"do të funksionojë akoma, atëherë pa hapësirë"sapgui.shortcut.file:-system=SID"nuk funksionon më.

Rezulton se, në parim, ekzistojnë dy mundësi për përdorimin e protokollit URI:

  1. Përdorimi pa parametra: Ne krijojmë një grup të tërë protokollesh për të gjitha sistemet tona të llojit SIDMANDT, lloji AAA200, BBB200 e kështu me radhë. Nëse thjesht duhet të filloni sistemin e dëshiruar, atëherë opsioni është mjaft i zbatueshëm, por në rastin tonë nuk është i përshtatshëm, pasi të paktën dëshironi të transferoni hyrjen e përdoruesit, por kjo nuk mund të bëhet në këtë mënyrë.
  2. Përdorimi i një programi mbështjellës për të thirrur sapshcut.exe ose sapgui.exe. Thelbi i këtij programi është i thjeshtë - ai duhet të marrë vargun që shfletuesi i transmeton atij nëpërmjet protokollit të internetit dhe ta kthejë atë në përfaqësimin që merr Windows, d.m.th. i kthen të gjitha kodet e karaktereve përsëri në karaktere (ndoshta edhe analizon vargun sipas parametrave) dhe tashmë thërret SAP GUI me një komandë të saktë të garantuar. Në rastin tonë, gjithashtu nuk është plotësisht i përshtatshëm (prandaj as nuk e kam shkruar), sepse nuk mjafton që ne të shtojmë protokollin në të gjithë PC-të e përdoruesve (brenda një domeni kjo është ende në rregull, megjithëse është gjithashtu më mirë të shmangni këtë praktikë), por këtu do të na duhet më shumë ta vendosim programin në PC, dhe gjithashtu vazhdimisht të sigurohemi që ai të mos zhduket kur softueri të riinstalohet në PC.

Ato. Ne gjithashtu e hedhim poshtë këtë opsion si të papërshtatshëm për ne.

Në këtë pikë, unë tashmë kisha filluar të mendoja se do të më duhej t'i them lamtumirë idesë për të lëshuar SAP GUI me parametrat e nevojshëm nga shfletuesi, por më pas më lindi ideja që mund të bësh një shkurtore në SAP Logon dhe kopjojeni atë në desktopin tuaj. Unë e përdora këtë metodë një herë, por më parë nuk e shikoja në mënyrë specifike skedarin e shkurtoreve. Dhe doli që kjo shkurtore është një skedar teksti i rregullt me ​​shtesë .lëng. Dhe nëse e përdorni në Windows, SAP GUI do të nisë me parametrat që janë specifikuar në këtë skedar. "Bingo!"

Formati i këtij skedari është përafërsisht i mëposhtëm (mund të ketë gjithashtu një transaksion të nisur në fillim, por unë e hoqa atë):

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

Duket se gjithçka që nevojitet: një identifikues sistemi, një klient, një emër përdoruesi dhe madje edhe një fjalëkalim. Dhe madje edhe parametra shtesë: Titulli - titulli i dritares, GuiSize — madhësia e dritares së funksionimit (ekrani i plotë ose jo) dhe ripërdorimin — nëse është e nevojshme të hapni një dritare të re ose të përdorni një tashmë të hapur me të njëjtin sistem. Por menjëherë u shfaq një nuancë - doli që fjalëkalimi në SAP Logon nuk mund të vendosej, linja u bllokua. Doli se kjo është bërë për arsye sigurie: ruan të gjitha shkurtoret e krijuara në SAP Logon në një skedar shkurtore.ini (Pranë saplogon.ini në profilin e përdoruesit të Windows) dhe atje, megjithëse janë të koduar, ato nuk janë të koduara shumë fort dhe, nëse dëshironi, ato mund të deshifrohen. Por ju mund ta zgjidhni këtë duke ndryshuar vlerën e një parametri në regjistër (vlera e paracaktuar është 0):

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

Kjo zhbllokon fushën e Fjalëkalimit për hyrje në formularin e krijimit të shkurtoreve në SAP Logon:

Nisja e SAP GUI nga një shfletues

Dhe kur futni një fjalëkalim në këtë fushë, ai do të vendoset në rreshtin përkatës
shkurtore.ini, por kur tërhiqni një shkurtore në desktop, ajo nuk shfaqet atje - por mund ta shtoni atje manualisht. Fjalëkalimi është i koduar, për 111111 do të jetë si më poshtë: PW_49B02219D1F6, për 222222 - PW_4AB3211AD2F5. Por ne jemi më të interesuar për faktin se ky fjalëkalim është i koduar në një mënyrë, pavarësisht nga PC-ja specifike, dhe nëse e rivendosim fjalëkalimin në atë fillestar, atëherë mund të përdorim një vlerë të njohur më parë në këtë fushë. Epo, nëse duam të përdorim një fjalëkalim të krijuar rastësisht, do të duhet të kuptojmë algoritmin e këtij shifrimi. Por, duke gjykuar nga shembujt e dhënë, kjo nuk do të jetë e vështirë për t'u bërë. Nga rruga, në SAP GUI 7.40 kjo fushë u zhduk plotësisht nga formulari, por pranon saktë një skedar me një fjalëkalim të plotësuar.

Kjo do të thotë, rezulton se në shfletues thjesht duhet të klikoni në lidhjen e një skedari me shtrirjen .sap dhe formatin e dëshiruar - dhe do të ofrojë hapjen e tij si një skedar të llojit të shkurtores SAP GUI (natyrisht në një PC me SAP GUI të instaluar) dhe do të hapë një dritare SAP GUI me parametrat e specifikuar (nëse çifti SID dhe klienti janë në listën SAP Logon në këtë PC).

Por, është e qartë se askush thjesht nuk do të krijojë skedarë paraprakisht dhe do t'i ruajë ato në sit - ato duhet të gjenerohen bazuar në parametrat e nevojshëm. Për shembull, mund të krijoni një skript PHP për të gjeneruar shkurtore (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";
?>

Nëse nuk specifikoni një emër përdoruesi dhe fjalëkalim, do të shfaqet dritarja e mëposhtme që kërkon hyrjen dhe fjalëkalimin:

Nisja e SAP GUI nga një shfletues

Nëse kaloni vetëm hyrjen, fusha e hyrjes do të plotësohet dhe fusha e fjalëkalimit do të jetë bosh. Nëse i japim përdoruesit një hyrje dhe një fjalëkalim, por përdoruesi në PC ka çelësin EnablePassword në regjistër në seksionin [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] të vendosur në 0, atëherë marrim të njëjtën gjë. Dhe vetëm nëse ky çelës vendoset në 1 dhe ne kalojmë emrin dhe fjalëkalimin fillestar, sistemi do t'ju kërkojë menjëherë të vendosni dy herë një fjalëkalim të ri të përhershëm. Kjo është ajo që na duhej të merrnim.

Si rezultat, ne kemi grupin e mëposhtëm të opsioneve të shqyrtuara si një ilustrim i të gjitha sa më sipër:

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

Opsioni i fundit më përshtatet. Por në vend që të gjeneroni shkurtore SAP, mund të përdorni gjithashtu, për shembull, gjenerimin e skedarëve CMD, të cilat, kur hapen nga një shfletues, do të hapin gjithashtu dritaren SAP GUI për ju. Më poshtë është një shembull (sapguicmd.php) lansoni drejtpërdrejt SAP GUI me vargun e plotë të lidhjes, pa pasur nevojë të keni konfiguruar SAP Logon:

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

Burimi: www.habr.com

Shto një koment