SAP GUI palaiŔana no pārlūkprogrammas

Pirmo reizi es uzrakstÄ«ju Å”o rakstu manā blog, lai vēlāk vairs nemeklētu un neatcerētos, bet tā kā blogu neviens nelasa, gribēju padalÄ«ties ar Å”o informāciju ar visiem, ja nu kādam noder.

Strādājot pie idejas par paroles atiestatÄ«Å”anas pakalpojumu SAP R/3 sistēmās, radās jautājums - kā palaist SAP GUI ar nepiecieÅ”amajiem parametriem no pārlÅ«kprogrammas? Tā kā Ŕī ideja paredzēja tÄ«mekļa pakalpojuma izmantoÅ”anu, vispirms jāatbild uz SOAP pieprasÄ«jumu no SAP GUI un jānosÅ«ta vēstule ar saiti uz tÄ«mekļa lapu ar skriptu sākotnējās paroles atiestatÄ«Å”anai un pēc tam parādÄ«ta lietotājam. ziņojumu par veiksmÄ«gu paroles atiestatÄ«Å”anu un Ŕīs paÅ”as sākotnējās paroles parādÄ«Å”anu , tad es vēlētos, lai Å”ajā lapā bÅ«tu arÄ« saite uz SAP GUI palaiÅ”anu. Turklāt Å”ai saitei vajadzētu atvērt vajadzÄ«go sistēmu un, vēlams, uzreiz aizpildÄ«t pieteikÅ”anās un paroles laukus: lietotājam produktÄ«vā parole bÅ«tu jāievada tikai divas reizes.

SAP Logon palaiÅ”ana mÅ«su mērÄ·im nebija interesanta, un, palaižot sapgui.exe, nebija iespējams norādÄ«t klientu un lietotājvārdu, taču bija iespējams palaist sistēmu, kas nebija definēta SAP Logon. No otras puses, SAP GUI palaiÅ”ana ar patvaļīgiem servera parametriem nebija Ä«paÅ”i aktuāla: ja mēs risinām lietotāja paroles atiestatÄ«Å”anas problēmu, tad visticamāk viņam jau ir vajadzÄ«gā rinda SAP Logon ar nepiecieÅ”amajiem iestatÄ«jumiem un tur nav jājaucas ar savējo. Bet norādÄ«tajām prasÄ«bām atbilda SAP GUI Shortcut tehnoloÄ£ija un pati programma sapshcut.exe, kas ļāva palaist SAP GUI, izmantojot Ä«paÅ”u ā€œsaÄ«sniā€.

Problēmas risināŔana: sapshcut.exe palaiÅ”ana tieÅ”i no pārlÅ«kprogrammas, izmantojot ActiveX objektu:

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

Risinājums ir slikts: pirmkārt, tas darbojas tikai pārlÅ«kprogrammā Internet Explorer, otrkārt, ir nepiecieÅ”ami atbilstoÅ”i droŔības iestatÄ«jumi pārlÅ«kprogrammā, kas organizācijā var bÅ«t aizliegti domēna lÄ«menÄ«, un pat tad, ja tas ir atļauts, pārlÅ«kprogramma parāda logu ar biedējoÅ”u brÄ«dinājums lietotājam:

SAP GUI palaiŔana no pārlūkprogrammas

Internetā atradu risinājumu #2: izveidot savu tÄ«mekļa protokolu. Ä»auj palaist nepiecieÅ”amo lietojumprogrammu, izmantojot saiti, kas norāda protokolu, kuru mēs paÅ”i reÄ£istrējam sistēmā Windows reÄ£istra sadaļā HKEY_CLASSES_ROOT. Tā kā SAP GUI saÄ«snei Å”ajā sadaļā ir sava apakÅ”sadaļa, varat pievienot URL protokola virknes parametru ar tukÅ”u vērtÄ«bu.

SAP GUI palaiŔana no pārlūkprogrammas

Å is protokols sākas sapgui.exe ar parametru /ÄŖSCEÄ»A, kas ir tieÅ”i tas, kas mums vajadzÄ«gs:

SAP GUI palaiŔana no pārlūkprogrammas

Nu, vai arÄ« mēs vēlamies izveidot pilnÄ«gi patvaļīgu protokolu (piemēram, sapshcut), varat to reÄ£istrēt, izmantojot Ŕādu reg failu:

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

Tagad, ja mēs izveidojam saiti tÄ«mekļa lapā, kas norāda protokolu Sapgui.ÄŖsceļŔ.Fails LÄ«dzÄ«gā veidā:

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

Mums vajadzētu redzēt Ŕādu logu:

SAP GUI palaiŔana no pārlūkprogrammas

Un viss Ŕķiet lieliski, bet, noklikŔķinot uz pogas ā€œAtļautā€, mēs redzam:

SAP GUI palaiŔana no pārlūkprogrammas

Hmm, pārlÅ«kprogramma pārvērta atstarpes taustiņu par %20. Citas rakstzÄ«mes arÄ« tiks iekodētas savā ciparu kodā ar procentu simbolu. Un visnepatÄ«kamākais ir tas, ka Å”eit neko nevar izdarÄ«t pārlÅ«kprogrammas lÄ«menÄ« (Å”eit viss tiek darÄ«ts pēc standarta) - pārlÅ«kprogrammai nepatÄ«k Ŕādas rakstzÄ«mes, un Windows komandu tulks nedarbojas ar Ŕādām kodētām vērtÄ«bām. Un vēl viens mÄ«nuss - visa virkne tiek nodota kā parametrs, ieskaitot protokola nosaukumu un pat kolu (sapgui.shortcut.file:). Turklāt, lai gan tas pats sapshcut.exe var izmest visu, kas tam nav parametrs (sākas ar simbolu ā€œ-ā€, pēc tam nosaukumu, ā€œ=ā€ un vērtÄ«bu), t.i. tāda rinda kā "sapgui.shortcut.file: -system=SID"tas joprojām darbosies, tad bez atstarpes"sapgui.shortcut.file:-system=SID"vairs nedarbojas.

Izrādās, ka principā ir divas URI protokola izmantoÅ”anas iespējas:

  1. Izmantojot bez parametriem: mēs izveidojam veselu virkni protokolu visām mÅ«su Ŕāda veida sistēmām SIDMANDS, tips AAA200, BBB200 un tā tālāk. Ja jums vienkārÅ”i jāstartē vēlamā sistēma, opcija ir diezgan funkcionāla, taču mÅ«su gadÄ«jumā tā nav piemērota, jo jÅ«s vismaz vēlaties pārsÅ«tÄ«t lietotāja pieteikÅ”anos, taču to nevar izdarÄ«t Ŕādā veidā.
  2. Izmantojot iesaiņojuma programmu, lai izsauktu sapshcut.exe vai sapgui.exe. Å Ä«s programmas bÅ«tÄ«ba ir vienkārÅ”a ā€“ tai ir jāņem virkne, ko pārlÅ«kprogramma tai pārsÅ«ta caur tÄ«mekļa protokolu, un jāpārvērÅ” tā par Windows saņemto atveidojumu, t.i. pārvērÅ” visus rakstzÄ«mju kodus atpakaļ rakstzÄ«mēs (varbÅ«t pat parsē virkni pēc parametriem) un jau izsauc SAP GUI ar garantēti pareizu komandu. MÅ«su gadÄ«jumā tas arÄ« nav lÄ«dz galam piemērots (tāpēc es to pat nerakstÄ«ju), jo mums nepietiek ar protokolu pievienot visiem lietotāju datoriem (domēna ietvaros tas joprojām ir labi, lai gan labāk ir izvairieties no Ŕādas prakses), taču Å”eit mums bÅ«s vairāk jāievieto programma datorā, kā arÄ« pastāvÄ«gi jānodroÅ”ina, lai tā nepazustu, kad programmatÅ«ra tiek atkārtoti instalēta datorā.

Tie. Mēs arÄ« atmetam Å”o iespēju kā mums nepiemērotu.

Å ajā brÄ«dÄ« jau sāku domāt, ka bÅ«s jāatvadās no domas palaist SAP GUI ar nepiecieÅ”amajiem parametriem no pārlÅ«kprogrammas, bet tad man ienāca prātā doma, ka var izveidot saÄ«sni SAP Logon un kopējiet to uz darbvirsmu. Es vienu reizi izmantoju Å”o metodi, bet pirms tam es Ä«paÅ”i neskatÄ«jos uz saÄ«snes failu. Un izrādÄ«jās, ka Ŕī saÄ«sne ir parasts teksta fails ar paplaÅ”inājumu .sap. Un, ja to palaižat operētājsistēmā Windows, SAP GUI tiks palaists ar Å”ajā failā norādÄ«tajiem parametriem. "Bingo!"

Å Ä« faila formāts ir aptuveni Ŕāds (var bÅ«t arÄ« kāds darÄ«jums, kas tika palaists startÄ“Å”anas laikā, bet es to izlaidu):

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

Å Ä·iet, ka viss nepiecieÅ”amais: sistēmas identifikators, klients, lietotājvārds un pat parole. Un pat papildu parametri: Uzruna - loga nosaukums, GuiSize ā€” darbojas loga lielums (pilnekrāna režīmā vai ne) un Atkārtota izmantoÅ”ana ā€” vai ir jāatver jauns logs vai jāizmanto jau atvērts logs ar to paÅ”u sistēmu. Taču uzreiz parādÄ«jās nianse - izrādÄ«jās, ka SAP Logon paroli nevarēja iestatÄ«t, lÄ«nija bija bloķēta. IzrādÄ«jās, ka tas tika darÄ«ts droŔības apsvērumu dēļ: tas saglabā visus SAP Logon izveidotos saÄ«snes failā sapshortcut.ini (Netālu saplogon.ini Windows lietotāja profilā) un tur, lai gan tie ir Å”ifrēti, tie nav pārāk stingri Å”ifrēti un, ja vēlaties, tos var atÅ”ifrēt. Taču to var atrisināt, mainot viena parametra vērtÄ«bu reÄ£istrā (noklusējuma vērtÄ«ba ir 0):

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

Tādējādi tiek atbloķēts paroles lauks ievadÄ«Å”anai saÄ«snes izveides veidlapā SAP pieteikÅ”anās programmā:

SAP GUI palaiŔana no pārlūkprogrammas

Un, ievadot paroli Ŕajā laukā, tā tiks ievietota attiecīgajā rindā
sapshortcut.ini, bet, velkot saÄ«sni uz darbvirsmu, tas tur neparādās, taču varat to pievienot manuāli. Parole ir Å”ifrēta, numuram 111111 tā bÅ«s Ŕāda: PW_49B02219D1F6, 222222 - PW_4AB3211AD2F5. Bet mÅ«s vairāk interesē tas, ka Ŕī parole tiek Å”ifrēta vienā veidā, neatkarÄ«gi no konkrētā datora, un, ja mēs atiestatām paroli uz sākotnējo, tad Å”ajā laukā varam izmantot vienu iepriekÅ” zināmu vērtÄ«bu. Nu, ja mēs vēlamies izmantot nejauÅ”i izveidotu paroli, mums bÅ«s jāsaprot Ŕī Å”ifra algoritms. Bet, spriežot pēc sniegtajiem piemēriem, to izdarÄ«t nebÅ«s grÅ«ti. Starp citu, SAP GUI 7.40 Å”is lauks pilnÄ«bā pazuda no veidlapas, taču tas pareizi pieņem failu ar aizpildÄ«tu paroli.

Tas ir, izrādās, ka pārlÅ«kprogrammā jums vienkārÅ”i jānoklikŔķina uz saites uz failu ar paplaÅ”inājumu .sap un vēlamo formātu - un tas piedāvās to atvērt kā failu, piemēram, SAP GUI Shortcut (proti, datorā ar instalētu SAP GUI) un tiks atvērts SAP GUI logs ar norādÄ«tajiem parametriem (ja SID un klienta pāris ir Ŕī datora SAP pieteikÅ”anās sarakstā).

Bet ir skaidrs, ka neviens vienkārÅ”i neizveidos failus iepriekÅ” un neuzglabās tos vietnē - tie ir jāģenerē, pamatojoties uz nepiecieÅ”amajiem parametriem. Piemēram, varat izveidot PHP skriptu, lai Ä£enerētu saÄ«snes (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";
?>

Ja nenorādīsiet lietotājvārdu un paroli, tiks parādīts Ŕāds logs, kurā tiks prasīts ievadīt pieteikumvārdu un paroli:

SAP GUI palaiŔana no pārlūkprogrammas

Ja nododat tikai pieteikÅ”anos, pieteikÅ”anās lauks tiks aizpildÄ«ts un paroles lauks bÅ«s tukÅ”s. Ja lietotājam pieŔķiram gan pieteikumvārdu, gan paroli, bet lietotājam datorā reÄ£istra sadaļā [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] ir iestatÄ«ta atslēga EnablePassword uz 0, mēs iegÅ«stam to paÅ”u. Un tikai tad, ja Ŕī atslēga ir iestatÄ«ta uz 1 un mēs nododam gan vārdu, gan sākotnējo paroli, sistēma nekavējoties liks jums divreiz ievadÄ«t jaunu pastāvÄ«go paroli. Tas ir tas, ko mums vajadzēja iegÅ«t.

Tā rezultātā mums ir Ŕāda apsvērto iespēju kopa, kas ilustrē visu iepriekÅ” minēto:

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

Pēdējais variants man derēja. Taču SAP Ä«sceļu Ä£enerÄ“Å”anas vietā varat izmantot arÄ«, piemēram, CMD failu Ä£enerÄ“Å”anu, kurus atverot no pārlÅ«kprogrammas, jums tiks atvērts arÄ« SAP GUI logs. Zemāk ir piemērs (sapguicmd.php) tieÅ”i palaidiet SAP GUI ar pilnu savienojuma virkni, bez nepiecieÅ”amÄ«bas konfigurēt SAP pieteikÅ”anos:

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

Avots: www.habr.com

Pievieno komentāru