SAP GUI abiarazteko arakatzaile batetik

Artikulu hau idatzi nuen lehenengoz nire blog, gerora berriro bilatu eta gogoratu ez dadin, baina bloga inork irakurtzen ez duenez, informazio hau denon artean partekatu nahi izan dut, norbaitek baliagarria iruditzen bazaio.

SAP R/3 sistemetan pasahitza berrezartzeko zerbitzuaren ideian lanean ari zela, galdera bat sortu zen: nola abiarazi SAP GUI arakatzailetik beharrezko parametroekin? Ideia honek web-zerbitzu bat erabiltzea inplikatzen zuenez, lehenik SAP GUI-tik SOAP eskaera bati erantzunez eta mezu elektroniko bat bidaliz web orri baterako esteka batekin pasahitza hasierakora berrezartzeko script batekin, eta gero erabiltzaileari bistaratu. pasahitza berrezartzeari buruzko mezu bat eta hasierako pasahitz hau bistaratzeari buruzko mezu bat, orduan orrialde honek SAP GUI abiarazteko esteka bat izatea nahiko nuke. Gainera, esteka honek nahi den sistema ireki beharko luke, eta, hobe, saio-hasiera eta pasahitz eremuak aldi berean beteta: erabiltzaileak birritan bakarrik bete beharko luke pasahitz produktiboa.

SAP Logon abiaraztea ez zen interesgarria gure helbururako, eta sapgui.exe exekutatzen ari zenean ezinezkoa zen bezero eta erabiltzaile-izena zehaztea, baina posible zen SAP Logon-en zehaztu gabeko sistema bat abiarazteko. Bestalde, SAP GUI zerbitzariaren parametro arbitrarioekin abiaraztea ez zen bereziki garrantzitsua izan: erabiltzailearen pasahitza berrezartzearen arazoa konpontzen ari bagara, ziurrenik SAP Logon-en beharrezkoa den lerroa badu, behar dituen ezarpenekin, eta hor ez dago berearekin nahastu behar. Baina zehaztutako eskakizunak SAP GUI Shortcut teknologiak eta sapshcut.exe programak berak betetzen zituzten, eta horri esker, SAP GUI abiarazte zen "lasterbide" zehatz bat erabiliz.

Arazoa aurrez aurre konpontzea: sapshcut.exe abiarazi zuzenean arakatzailetik ActiveX objektu bat erabiliz:

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

Irtenbidea txarra da: lehenik, Internet Explorer-en bakarrik funtzionatzen du, bigarrenik, nabigatzailean segurtasun-ezarpen egokiak behar ditu, erakunde batean domeinu mailan debekatuta egon daitekeena, eta baimenduta badago ere, nabigatzaileak leiho bat bistaratzen du beldurgarri batekin. erabiltzaileari abisua:

SAP GUI abiarazteko arakatzaile batetik

2. irtenbidea aurkitu dut Interneten: zure web protokolo propioa sortzea. Protokoloa adierazten duen esteka erabiliz behar dugun aplikazioa abiarazteko aukera ematen digu, eta guk geuk Windows-en erregistratzen dugu HKEY_CLASSES_ROOT atalean dagoen erregistroan. SAP GUI Shortcut-ek atal honetan bere azpiatal propioa duenez, URL Protokoloaren kate-parametroa gehi dezakezu bertan balio huts batekin:

SAP GUI abiarazteko arakatzaile batetik

Protokolo hau hasten da sapgui.exe parametroarekin /LASTERBIDEA, hau da, hain zuzen, behar duguna:

SAP GUI abiarazteko arakatzaile batetik

Tira, edo protokolo guztiz arbitrarioa egin nahi badugu (adibidez, sapshcut), orduan erregistratu dezakezu erregistro fitxategi hau erabiliz:

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

Orain, web orri batean esteka bat egiten badugu protokoloa adieraziz Sapgui.Lasterbidea.Fitxategia Antzeko modu batean:

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

Horrelako leiho bat ikusi beharko genuke:

SAP GUI abiarazteko arakatzaile batetik

Eta dena bikaina dirudi, baina "Baimendu" botoian klik egiten duzunean ikusiko dugu:

SAP GUI abiarazteko arakatzaile batetik

Arakatzaileak zuriune-barra %20 bihurtu du. Beno, beste karaktere batzuk ere bere zenbakizko kodean kodetuko dira ehuneko ikur batekin. Eta gauza desatseginena da hemen ezin dela ezer egin arakatzaile mailan (hemen dena estandarraren arabera egiten da) - arakatzaileak ez ditu horrelako karaktereak gustatzen eta Windows komandoen interpreteak ez du funtzionatzen kodetutako balioekin. Eta ken bat gehiago: kate osoa parametro gisa pasatzen da, protokoloaren izena eta bi puntuak barne (sapgui.shortcut.file:). Gainera, berdina izan arren sapshcut.exe parametroa ez den guztia baztertu dezake (β€œ-β€œ ikurrarekin hasten da, gero izena, β€œ=” eta balioa), hau da. " bezalako lerro batsapgui.shortcut.file: -system=SID"oraindik funtzionatuko du, gero espaziorik gabe"sapgui.shortcut.file:-system=SID"Jada ez du funtzionatzen.

Bihurtzen da, printzipioz, bi aukera daudela URI protokoloa erabiltzeko:

  1. Parametrorik gabe erabiltzea: mota honetako gure sistema guztietarako protokolo sorta bat sortzen dugu SIDMANDT, bezala AAA200, BBB200 eta abar. Nahi duzun sistema abiarazi behar baduzu, aukera nahiko erabilgarria da, baina gure kasuan ez da egokia, gutxienez erabiltzailearen saioa transferitu nahiko zenukeelako, baina hori ezin da horrela egin.
  2. Deitzeko wrapper programa bat erabiliz sapshcut.exe edo sapgui.exe. Programa honen funtsa sinplea da: nabigatzaileak web protokoloaren bidez transmititzen dion katea hartu behar du eta Windows-ek jasotzen duen irudikapen bihurtu behar du, hau da. karaktere-kode guztiak karaktere bihurtzen ditu (agian katea parametroen arabera analizatzen du) eta dagoeneko SAP GUI deitzen du komando zuzena bermatuta. Gure kasuan, gainera, ez da guztiz egokia (horregatik ez dut idatzi ere egin), ez baita nahikoa erabiltzaile-ordenagailu guztietan protokoloa gehitzea (domeinu baten barruan hori ondo dago, nahiz eta hobe den ere praktika hau saihestu), baina hemen programa gehiago jarri beharko dugu ordenagailuan, eta, gainera, etengabe ziurtatu ez dela desagertuko softwarea ordenagailuan berriro instalatzen denean.

Horiek. Aukera hau ere baztertzen dugu guretzat desegokia delako.

Une honetan jada pentsatzen hasia nintzen SAP GUI nabigatzailetik beharrezko parametroekin abiarazteko ideiari agur esan beharko niola, baina orduan bururatu zitzaidan SAP saioan lasterbide bat egin dezakezula eta kopiatu zure mahaigainean. Metodo hau behin erabili nuen, baina aurretik ez nuen zehazki begiratu lasterbideen fitxategia. Lasterbide hau luzapena duen testu-fitxategi arrunta dela ikusi zen .sap. Eta Windows-en exekutatzen baduzu, SAP GUI abiaraziko da fitxategi honetan zehaztutako parametroekin. "Bingoa!"

Fitxategi honen formatua hau da gutxi gorabehera (abiaraztean transakzio bat ere abiarazita egon daiteke, baina alde batera utzi dut):

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

Badirudi behar den guztia dela: sistemaren identifikatzaile bat, bezero bat, erabiltzaile-izena eta baita pasahitza ere. Eta baita parametro gehigarriak ere: Izenburua - leihoaren izenburua, GuiSize β€” martxan dagoen leihoaren tamaina (pantaila osoa ala ez) eta berrerabiltzeko β€” beharrezkoa den leiho berri bat irekitzea edo irekita dagoen bat erabili sistema berdinarekin. Baina berehala Γ±abardura bat sortu zen - SAP Logon-en pasahitza ezin zela ezarri, lerroa blokeatu egin zen. Segurtasun arrazoiengatik egin zen hori: SAP Logon-n sortutako lasterbide guztiak fitxategi batean gordetzen ditu. saps shortcut.ini (Gerbil saplogon.ini Windows-eko erabiltzaile-profilean) eta han, zifratuta egon arren, ez daude oso zifratzen eta, nahi izanez gero, deszifratu daitezke. Baina hau konpon dezakezu erregistroko parametro baten balioa aldatuz (balio lehenetsia da 0):

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

Honek SAP saioan lasterbideak sortzeko inprimakian sartzeko Pasahitza eremua desblokeatzen du:

SAP GUI abiarazteko arakatzaile batetik

Eta eremu honetan pasahitza sartzen duzunean, dagokion lerroan jarriko da
saps shortcut.ini, baina lasterbide bat mahaigainera arrastatzean, ez da hor agertzen, baina eskuz gehi dezakezu. Pasahitza zifratuta dago, 111111rako honako hau izango da: PW_49B02219D1F6, 222222 - PW_4AB3211AD2F5. Baina gehiago interesatzen zaigu pasahitz hori modu batean zifratuta egotea, ordenagailu zehatzetik independentea, eta pasahitza hasierakoari berrezartzen badiogu, orduan aldez aurretik ezagutzen den balio bat erabil dezakegu eremu honetan. Bada, ausaz sortutako pasahitz bat erabili nahi badugu, zifratze honen algoritmoa ulertu beharko dugu. Baina emandako adibideak ikusita, hori ez da zaila izango. Bide batez, SAP GUI 7.40-n eremu hau guztiz desagertu zen formulariotik, baina behar bezala onartzen du betetako pasahitza duen fitxategi bat.

Hau da, bilakatzen da arakatzailean .sap luzapena eta nahi den formatua duen fitxategi baterako estekan klik egitea besterik ez duzula eta SAP GUI Shortcut bezalako fitxategi gisa irekitzea eskainiko du (normalean ordenagailu batean). SAP GUI instalatuta) eta SAP GUI leiho bat irekiko du zehaztutako parametroekin (SID eta bezero bikotea ordenagailu honetako SAP Saioa hasteko zerrendan badaude).

Baina, argi dago inork ez dituela aldez aurretik fitxategiak sortu eta gunean gordeko; beharrezko parametroetan oinarrituta sortu behar dira. Adibidez, PHP script bat sor dezakezu lasterbideak sortzeko (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";
?>

Erabiltzaile-izenik eta pasahitzik zehazten ez badituzu, hurrengo leihoa jasoko duzu saioa hasteko eta pasahitza eskatuz:

SAP GUI abiarazteko arakatzaile batetik

Saio-hasiera soilik pasatzen baduzu, saioa hasteko eremua beteko da eta pasahitzaren eremua hutsik egongo da. Erabiltzaileari saio-hasiera eta pasahitza ematen badiogu, baina ordenagailuko erabiltzaileak [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] ataleko erregistroan EnablePassword gakoa 0 gisa ezarrita badu, orduan gauza bera lortuko dugu. Eta gako hau 1ean ezartzen bada eta izena eta hasierako pasahitza pasatzen baditugu, sistemak berehala eskatuko dizu bi aldiz pasahitz iraunkor berri bat sartzeko. Hori da lortu behar genuena.

Ondorioz, kontuan hartutako aukera multzo hau dugu aurreko guztiaren ilustrazio gisa:

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

Azken aukera egokitu zitzaidan. Baina SAP lasterbideak sortu beharrean, CMD fitxategiak sortzea ere erabil dezakezu, adibidez, arakatzaile batetik irekitzen direnean, SAP GUI leihoa ere irekiko dizu. Jarraian adibide bat (sapguicmd.php) zuzenean abiarazi SAP GUI konexio-kate osoarekin, SAP saioa konfiguratuta eduki beharrik gabe:

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

Iturria: www.habr.com

Gehitu iruzkin berria