Ræsir SAP GUI úr vafra

Ég skrifaði fyrst þessa grein í minni blogg, til að leita ekki og muna aftur síðar, en þar sem enginn les bloggið, vildi ég deila þessum upplýsingum með öllum, ef einhverjum finnist þær gagnlegar.

Þegar unnið var að hugmyndinni um endurstillingarþjónustu fyrir lykilorð í SAP R/3 kerfum, vaknaði spurning - hvernig á að ræsa SAP GUI með nauðsynlegum breytum úr vafranum? Þar sem þessi hugmynd fól í sér notkun á vefþjónustu, fyrst að bregðast við SOAP beiðni frá SAP GUI og senda bréf með tengli á vefsíðu með skriftu til að endurstilla lykilorðið á það upphaflega, og síðan birta notandanum skilaboð um árangursríka endurstillingu lykilorðs og birtingu þessa fyrstu lykilorðs, þá vil ég að þessi síða hafi einnig hlekk til að ræsa SAP GUI. Ennfremur ætti þessi hlekkur að opna kerfið sem óskað er eftir, og helst með innskráningar- og lykilorðareitina útfyllta í einu: notandinn þyrfti aðeins að fylla út lykilorðið tvisvar.

Að ræsa SAP Logon var ekki áhugavert í okkar tilgangi og þegar sapgui.exe var keyrt var ómögulegt að tilgreina biðlara og notandanafn, en það var hægt að ræsa kerfi sem ekki var skilgreint í SAP Logon. Á hinn bóginn, að ræsa SAP GUI með handahófskenndum miðlarabreytum var ekki sérstaklega viðeigandi: ef við erum að leysa vandamálið við að endurstilla lykilorð notanda, þá er líklegast að hann hafi þegar nauðsynlega línu í SAP Logon, með þeim stillingum sem hann þarf, og þar er óþarfi að skipta sér af sínum eigin. En tilgreindar kröfur voru uppfylltar af SAP GUI flýtileiðartækninni og sapshcut.exe forritinu sjálfu, sem gerði það mögulegt að ræsa SAP GUI með því að nota sérstaka „flýtileið“.

Að leysa vandamálið beint: ræsa sapshcut.exe beint úr vafranum með því að nota ActiveX hlut:

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

Lausnin er slæm: í fyrsta lagi virkar það bara í Internet Explorer, í öðru lagi krefst það viðeigandi öryggisstillinga í vafranum, sem getur verið bannað í fyrirtækinu á lénsstigi, og jafnvel þótt það sé leyfilegt sýnir vafrinn glugga með ógnvekjandi viðvörun til notanda:

Ræsir SAP GUI úr vafra

Ég fann lausn #2 á netinu: búa til þína eigin vefsamskiptareglur. Leyfir okkur að ræsa forritið sem við þurfum með því að nota tengil sem gefur til kynna samskiptareglur, sem við sjálf skráum í Windows í skránni í HKEY_CLASSES_ROOT hlutanum. Þar sem SAP GUI Shortcut hefur sinn eigin undirkafla í þessum hluta geturðu bætt við URL Protocol strengsbreytu með auðu gildi þar:

Ræsir SAP GUI úr vafra

Þessi siðareglur byrjar sapgui.exe með færibreytu /Flýtileið, sem er nákvæmlega það sem við þurfum:

Ræsir SAP GUI úr vafra

Jæja, eða ef við viljum búa til algjörlega handahófskennda siðareglur (td. sapshcut), þá geturðu skráð það með því að nota eftirfarandi reg skrá:

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

Nú, ef við gerum hlekk á vefsíðu sem gefur til kynna siðareglur Sapgui.Shortcut.File Á svipaðan hátt:

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

Við ættum að sjá glugga eins og þennan:

Ræsir SAP GUI úr vafra

Og allt virðist frábært, en þegar þú smellir á „Leyfa“ hnappinn sjáum við:

Ræsir SAP GUI úr vafra

Úbbs, vafrinn breytti bilstönginni í %20. Jæja, aðrir stafir verða líka kóðaðir í eigin tölukóða með prósentutákni. Og það óþægilegasta er að ekkert er hægt að gera hér á vafrastigi (allt hér er gert samkvæmt staðlinum) - vafrinn líkar ekki við slíka stafi og Windows stjórnatúlkurinn virkar ekki með slík kóðuð gildi. Og einn mínus í viðbót - allur strengurinn er samþykktur sem færibreyta, þar á meðal samskiptaheiti og jafnvel ristill (sapgui.shortcut.file:). Þar að auki, þótt það sama sapshcut.exe getur hent öllu sem er ekki færibreyta fyrir það (byrjar á tákninu „-“, svo nafnið, „=“ og gildi), þ.e. línu eins og "sapgui.shortcut.file: -system=SID"það mun samt virka, þá án bils"sapgui.shortcut.file:-system=SID„virkar ekki lengur.

Það kemur í ljós að í grundvallaratriðum eru tveir valkostir til að nota URI siðareglur:

  1. Notkun án breytu: Við búum til fullt af samskiptareglum fyrir öll kerfi okkar af þessari gerð SIDMANDT, eins og AAA200, BBB200 og svo framvegis. Ef þú þarft bara að ræsa kerfið sem þú vilt, þá er valmöguleikinn alveg framkvæmanlegur, en í okkar tilfelli hentar hann ekki, þar sem þú vilt að minnsta kosti flytja notendainnskráninguna, en þetta er ekki hægt að gera með þessum hætti.
  2. Notaðu umbúðaforrit til að hringja sapshcut.exe eða sapgui.exe. Kjarninn í þessu forriti er einfaldur - það verður að taka strenginn sem vafrinn sendir til þess í gegnum vefsamskiptareglur og breyta því í framsetninguna sem Windows fær, þ.e. breytir öllum stafakóðum aftur í stafi (kannski flokkar strenginn í samræmi við færibreytur) og kallar nú þegar SAP GUI með öruggri réttri skipun. Í okkar tilviki hentar það heldur ekki alveg (þess vegna skrifaði ég það ekki einu sinni), því það er ekki nóg fyrir okkur að bæta við samskiptareglum á öllum notendatölvum (innan léns er þetta samt allt í lagi, þó það sé líka betra að forðast þessa æfingu), en hér þurfum við meira að setja forritið á tölvuna og einnig stöðugt tryggja að það fari ekki þegar hugbúnaðurinn er settur upp aftur á tölvunni.

Þeir. Við fleygum líka þessum valmöguleika þar sem hann hentar okkur ekki.

Á þessum tímapunkti var ég þegar farinn að hugsa um að ég þyrfti að kveðja hugmyndina um að ræsa SAP GUI með nauðsynlegum breytum úr vafranum, en þá datt mér í hug að þú getir gert flýtileið í SAP Logon og afritaðu það á skjáborðið þitt. Ég notaði þessa aðferð einu sinni, en áður skoðaði ég ekki flýtileiðaskrána sérstaklega. Og það kom í ljós að þessi flýtileið er venjuleg textaskrá með endingunni .kvoða. Og ef þú keyrir það á Windows mun SAP GUI ræsa með breytunum sem eru tilgreindar í þessari skrá. "Bingó!"

Snið þessarar skráar er um það bil eftirfarandi (það gæti líka verið færslu í gangi við ræsingu, en ég sleppti því):

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

Það virðist sem allt sem þarf: kerfisauðkenni, viðskiptavinur, notendanafn og jafnvel lykilorð. Og jafnvel fleiri breytur: Title - gluggatitill, GuiSize — stærð gluggans sem er í gangi (allur skjár eða ekki) og Endurnýta — hvort nauðsynlegt sé að opna nýjan glugga eða nota þegar opinn glugga með sama kerfi. En það kom strax í ljós blæbrigði - það kom í ljós að ekki var hægt að stilla lykilorðið í SAP Logon, línan var læst. Það kom í ljós að þetta var gert af öryggisástæðum: það geymir allar flýtileiðir sem eru búnar til í SAP Logon í skrá sapshortcut.ini (Nálægt saplogon.ini í Windows notendasniðinu) og þar, þó að þau séu dulkóðuð, eru þau ekki of sterkt dulkóðuð og, ef þess er óskað, er hægt að afkóða þau. En þú getur leyst þetta með því að breyta gildi einnar færibreytu í skránni (sjálfgefið gildi er 0):

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

Þetta opnar lykilorðsreitinn fyrir innslátt á eyðublaði til að búa til flýtivísa í SAP Logon:

Ræsir SAP GUI úr vafra

Og þegar þú slærð inn lykilorð í þessum reit verður það sett í samsvarandi línu
sapshortcut.ini, en þegar þú dregur flýtileið á skjáborðið birtist hann ekki þar - en þú getur bætt honum við þar handvirkt. Lykilorðið er dulkóðað, fyrir 111111 verður það sem hér segir: PW_49B02219D1F6, fyrir 222222 - PW_4AB3211AD2F5. En við höfum meiri áhuga á þeirri staðreynd að þetta lykilorð er dulkóðað á einn hátt, óháð tiltekinni tölvu, og ef við endurstillum lykilorðið á það upphaflega, þá getum við notað eitt fyrirfram þekkt gildi á þessu sviði. Jæja, ef við viljum nota lykilorð sem búið er til af handahófi, verðum við að skilja reiknirit þessa dulmáls. En miðað við dæmin sem gefin eru verður þetta ekki erfitt. Við the vegur, í SAP GUI 7.40 hvarf þessi reitur alveg úr eyðublaðinu, en það tekur rétt við skrá með útfylltu lykilorði.

Það er, það kemur í ljós að í vafranum þarftu bara að smella á hlekkinn á skrá með .sap endingunni og æskilegu sniði - og það mun bjóða upp á að opna hana sem skrá af gerðinni SAP GUI flýtileið (eðlilega á PC með SAP GUI uppsett) og mun opna SAP GUI glugga með tilgreindum breytum (ef SID og biðlaraparið er á SAP Logon listanum á þessari tölvu).

En það er ljóst að enginn mun einfaldlega búa til skrár fyrirfram og geyma þær á síðunni - þær verða að búa til út frá nauðsynlegum breytum. Til dæmis geturðu búið til PHP forskrift til að búa til flýtileiðir (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";
?>

Ef þú tilgreinir ekki notandanafn og lykilorð færðu eftirfarandi glugga þar sem þú biður um innskráningu og lykilorð:

Ræsir SAP GUI úr vafra

Ef þú ferð aðeins framhjá innskráningu verður innskráningarreiturinn fylltur út og lykilorðsreiturinn verður auður. Ef við gefum notandanum bæði innskráningu og lykilorð, en notandinn á tölvunni er með EnablePassword lykilinn í skránni í [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] hlutanum stilltan á 0, þá fáum við það sama. Og aðeins ef þessi lykill er stilltur á 1 og við sendum bæði nafnið og upphaflega lykilorðið, mun kerfið strax biðja þig um að slá inn nýtt varanlegt lykilorð tvisvar. Það var það sem við þurftum að fá.

Fyrir vikið höfum við eftirfarandi sett af íhuguðum valkostum sem dæmi um allt ofangreint:

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

Síðasti kosturinn hentaði mér. En í stað þess að búa til SAP flýtileiðir geturðu líka notað til dæmis CMD skrár, sem, þegar þær eru opnaðar úr vafra, munu einnig opna SAP GUI gluggann fyrir þig. Hér að neðan er dæmi (sapguicmd.php) ræstu SAP GUI beint með öllum tengistrengnum, án þess að þurfa að hafa SAP Logon stillt:

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

Heimild: www.habr.com

Bæta við athugasemd