Paglunsad sa SAP GUI gikan sa usa ka browser

Una nakong gisulat kini nga artikulo sa akong blog, aron dili mangita ug mahinumdom pag-usab sa ulahi, apan tungod kay walay usa nga nagbasa sa blog, gusto nako nga ipaambit kini nga kasayuran sa tanan, kung adunay makit-an nga mapuslanon.

Samtang nagtrabaho sa ideya sa usa ka serbisyo sa pag-reset sa password sa mga sistema sa SAP R/3, usa ka pangutana ang mitungha - kung giunsa ang paglansad sa SAP GUI nga adunay kinahanglan nga mga parameter gikan sa browser? Tungod kay kini nga ideya nagpasabot sa paggamit sa usa ka web nga serbisyo, una pagtubag sa usa ka SOAP nga hangyo gikan sa SAP GUI ug pagpadala sa usa ka sulat uban sa usa ka link sa usa ka web page uban sa usa ka script alang sa pag-reset sa password ngadto sa inisyal nga usa, ug dayon ipakita ngadto sa user. usa ka mensahe mahitungod sa malampuson nga pag-reset sa password ug pagpakita niining pinakauna nga password , unya gusto ko nga kini nga panid adunay usab usa ka link aron ilunsad ang SAP GUI. Dugang pa, kini nga link kinahanglan magbukas sa gitinguha nga sistema, ug, labing maayo, nga ang mga natad sa pag-login ug password napuno sa usa ka higayon: ang tiggamit kinahanglan nga pun-on ang produktibo nga password kaduha.

Ang paglansad sa SAP Logon dili makapaikag alang sa among katuyoan, ug kung nagpadagan sa sapgui.exe imposible nga mahibal-an ang kliyente ug ngalan sa gumagamit, apan posible nga maglansad usa ka sistema nga wala gihubit sa SAP Logon. Sa laing bahin, ang paglansad sa SAP GUI nga adunay arbitraryong mga parameter sa server dili labi ka hinungdanon: kung gisulbad namon ang problema sa pag-reset sa password sa usa ka user, nan lagmit naa na niya ang kinahanglan nga linya sa SAP Logon, nga adunay mga setting nga iyang gikinahanglan, ug didto. dili kinahanglan nga magsamok sa iyang kaugalingon. Apan ang gipiho nga mga kinahanglanon gitagbo sa SAP GUI Shortcut nga teknolohiya ug sa sapshcut.exe nga programa mismo, nga nagpaposible sa paglansad sa SAP GUI gamit ang usa ka piho nga "shortcut".

Pagsulbad sa problema head-on: paglansad sapshcut.exe direkta gikan sa browser gamit ang ActiveX nga butang:

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

Ang solusyon dili maayo: una, kini nagtrabaho lamang sa Internet Explorer, ikaduha, nanginahanglan kini nga angay nga mga setting sa seguridad sa browser, nga sa usa ka organisasyon mahimo’g gidili sa lebel sa domain, ug bisan kung gitugotan, ang browser nagpakita sa usa ka bintana nga adunay makahadlok. pahimangno sa tiggamit:

Paglunsad sa SAP GUI gikan sa usa ka browser

Nakakita kog solusyon #2 sa Internet: paghimo sa imong kaugalingon nga web protocol. Nagtugot kanamo sa paglansad sa aplikasyon nga among gikinahanglan gamit ang usa ka link nga nagpaila sa protocol, nga kami mismo nagparehistro sa Windows sa rehistro sa HKEY_CLASSES_ROOT nga seksyon. Tungod kay ang SAP GUI Shortcut adunay kaugalingong subseksyon niini nga seksyon, mahimo nimong idugang ang URL Protocol string parameter nga adunay walay sulod nga bili didto:

Paglunsad sa SAP GUI gikan sa usa ka browser

Nagsugod kini nga protocol sapgui.exe uban sa parameter /LAKTORANAN, nga mao gayud ang atong gikinahanglan:

Paglunsad sa SAP GUI gikan sa usa ka browser

Aw, o kung gusto namon maghimo usa ka hingpit nga arbitraryong protocol (pananglitan, sapshcut), unya mahimo nimong irehistro kini gamit ang mosunod nga reg file:

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

Karon, kung maghimo kami usa ka link sa usa ka web page nga nagpakita sa protocol Sapgui.Shortcut.File Sa samang paagi:

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

Kinahanglan natong makita ang usa ka bintana nga sama niini:

Paglunsad sa SAP GUI gikan sa usa ka browser

Ug ang tanan daw maayo, apan kung imong i-klik ang "Allow" nga buton atong makita:

Paglunsad sa SAP GUI gikan sa usa ka browser

Oops, gihimo sa browser ang spacebar nga %20. Aw, ang ubang mga karakter ma-encode usab sa ilang kaugalingon nga numeric code nga adunay usa ka porsyento nga simbolo. Ug ang labing dili maayo nga butang mao nga wala’y mahimo dinhi sa lebel sa browser (ang tanan dinhi gihimo sumala sa sukaranan) - ang browser dili gusto sa ingon nga mga karakter, ug ang Windows command interpreter dili molihok sa ingon nga mga kantidad nga gi-encode. Ug usa pa nga minus - ang tibuuk nga string gipasa ingon usa ka parameter, lakip ang ngalan sa protocol ug bisan ang colon (sapgui.shortcut.file:). Dugang pa, bisan kung parehas sapshcut.exe mahimong isalikway ang tanan nga dili parameter alang niini (nagsugod sa simbolo "-", dayon ang ngalan, "=" ug kantidad), i.e. usa ka linya sama sa "sapgui.shortcut.file: -system=SID"Motrabaho gihapon kini, unya walay luna"sapgui.shortcut.file:-system=SID"dili na molihok.

Kini nahimo nga, sa prinsipyo, adunay duha ka kapilian sa paggamit sa URI protocol:

  1. Paggamit nga wala’y mga parameter: Naghimo kami usa ka tibuuk nga hugpong sa mga protocol alang sa tanan namon nga mga sistema sa tipo SIDMANDT, ingon AAA200, BBB200 ug uban pa. Kung kinahanglan nimo nga sugdan ang gusto nga sistema, nan ang kapilian mahimo’g magamit, apan sa among kaso dili kini angay, tungod kay labing menos gusto nimo nga ibalhin ang pag-login sa gumagamit, apan dili kini mahimo sa kini nga paagi.
  2. Paggamit sa usa ka programa sa wrapper sa pagtawag sapshcut.exe o sapgui.exe. Ang esensya sa kini nga programa yano - kinahanglan nga kuhaon ang pisi nga gipasa sa browser niini pinaagi sa web protocol ug himuon kini nga representasyon nga nadawat sa Windows, i.e. ibalik ang tanan nga mga code sa karakter balik sa mga karakter (mahimo pa nga ma-parse ang string sumala sa mga parameter) ug nagtawag na sa SAP GUI nga adunay garantiya nga husto nga mando. Sa among kaso, dili usab kini hingpit nga angay (mao nga wala nako kini gisulat), tungod kay dili igo alang kanamo nga idugang ang protocol sa tanan nga mga PC nga tiggamit (sa sulod sa usa ka domain kini okay ra, bisan kung mas maayo usab nga likayi kini nga praktis), apan dinhi kinahanglan namon ang dugang nga pagbutang sa programa sa PC, ug kanunay usab nga sigurohon nga dili kini mawala kung ang software gi-install pag-usab sa PC.

Mga. Gisalikway usab namo kini nga opsyon nga dili angay kanamo.

Niini nga punto nagsugod na ako sa paghunahuna nga kinahanglan kong manamilit sa ideya sa paglansad sa SAP GUI uban ang gikinahanglan nga mga parameter gikan sa browser, apan ang ideya nahitabo kanako nga makahimo ka og usa ka shortcut sa SAP Logon ug kopyaha kini sa imong desktop. Gigamit nako kini nga pamaagi kausa, apan sa wala pa kana wala nako gitan-aw ang shortcut file. Ug kini nahimo nga kini nga shortcut usa ka regular nga text file nga adunay extension .sap. Ug kung gipadagan nimo kini sa Windows, ang SAP GUI maglansad sa mga parameter nga gitakda sa kini nga file. "Bingo!"

Ang pormat niini nga payl mao ang gibana-bana nga mosunod (mahimo usab nga adunay usa ka transaksyon nga gilunsad sa pagsugod, apan wala nako kini iapil):

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

Ingon og ang tanan nga gikinahanglan: usa ka system identifier, usa ka kliyente, usa ka username ug bisan usa ka password. Ug bisan ang dugang nga mga parameter: Ulohan - titulo sa bintana, GuiSize - gidak-on sa nagdagan nga bintana (full screen o dili) ug Pag-usab — kung kinahanglan ba nga magbukas sa usa ka bag-ong bintana o mogamit usa nga bukas na nga adunay parehas nga sistema. Apan usa ka nuance ang mitumaw dayon - kini nahimo nga ang password sa SAP Logon dili mabutang, ang linya gibabagan. Kini nahimo nga kini gihimo alang sa mga hinungdan sa seguridad: gitipigan niini ang tanan nga mga shortcut nga gihimo sa SAP Logon sa usa ka file sapshortcut.ini (Hapit saplogon.ini sa Windows user profile) ug didto, bisan kung sila gi-encrypt, sila dili kaayo kusgan nga naka-encrypt ug, kung gusto, mahimo silang ma-decrypt. Apan mahimo nimong masulbad kini pinaagi sa pagbag-o sa kantidad sa usa ka parameter sa rehistro (ang default nga kantidad mao ang 0):

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

Giablihan niini ang field sa Password alang sa pagsulod sa porma sa paghimo sa shortcut sa SAP Logon:

Paglunsad sa SAP GUI gikan sa usa ka browser

Ug kung mosulod ka og password sa kini nga uma, ibutang kini sa katugbang nga linya
sapshortcut.ini, apan kung imong gi-drag ang usa ka shortcut sa desktop, dili kini makita - apan mahimo nimo kini idugang sa mano-mano. Ang password gi-encrypt, alang sa 111111 kini mahimong ingon sa mosunod: PW_49B02219D1F6, para sa 222222 - PW_4AB3211AD2F5. Apan mas interesado kami sa kamatuoran nga kini nga password gi-encrypt sa usa ka paagi, nga independente sa espesipikong PC, ug kung among i-reset ang password sa una, nan mahimo namong gamiton ang usa ka pre-known value niini nga field. Bueno, kung gusto namon mogamit usa ka random nga gihimo nga password, kinahanglan namon nga masabtan ang algorithm sa kini nga cipher. Apan sa paghukom sa mga pananglitan nga gihatag, kini dili lisud buhaton. Pinaagi sa dalan, sa SAP GUI 7.40 kini nga kapatagan hingpit nga nawala gikan sa porma, apan kini husto nga modawat sa usa ka file nga adunay usa ka napuno nga password.

Kana mao, kini nahimo nga sa browser kinahanglan ra nimo nga i-klik ang link sa usa ka file nga adunay extension nga .sap ug ang gusto nga format - ug itanyag kini nga ablihan kini ingon usa ka file sama sa SAP GUI Shortcut (natural sa usa ka PC nga adunay gi-install nga SAP GUI) ug mag-abli sa usa ka bintana sa SAP GUI nga adunay gitakda nga mga parameter (kung ang pares sa SID ug kliyente naa sa lista sa SAP Logon sa kini nga PC).

Apan, klaro nga wala’y usa nga yano nga maghimo mga file nga abante ug itago kini sa site - kinahanglan kini nga himuon base sa kinahanglan nga mga parameter. Pananglitan, makahimo ka og PHP script aron makamugna og mga shortcut (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";
?>

Kung wala ka magbutang usa ka username ug password, makuha nimo ang mosunud nga bintana nga nangayo alang sa pag-login ug password:

Paglunsad sa SAP GUI gikan sa usa ka browser

Kung ang pag-login lang ang imong ipasa, ang field sa pag-login mapuno ug ang field sa password mahimong walay sulod. Kung hatagan namo ang user og login ug password, apan ang user sa PC adunay EnablePassword key sa registry sa [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] nga seksyon nga gitakda sa 0, unya makuha namo ang samang butang. Ug kung kini nga yawe gibutang sa 1 ug gipasa namon ang ngalan ug ang inisyal nga password, ang sistema moaghat dayon kanimo sa pagsulod sa usa ka bag-ong permanenteng password kaduha. Mao kana ang kinahanglan namon nga makuha.

Isip resulta, aduna kitay mosunod nga hugpong sa gikonsiderar nga mga opsyon isip ilustrasyon sa tanan sa ibabaw:

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

Ang katapusan nga kapilian angay kanako. Apan imbes nga maghimo og mga shortcut sa SAP, mahimo usab nimo gamiton, pananglitan, ang paghimo og mga file sa CMD, nga, kung giablihan gikan sa usa ka browser, magbukas usab sa bintana sa SAP GUI alang kanimo. Sa ubos usa ka pananglitan (sapguicmd.php) direkta nga ilunsad ang SAP GUI nga adunay bug-os nga koneksyon nga string, nga dili kinahanglan nga ma-configure ang 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";
?>

Source: www.habr.com

Idugang sa usa ka comment