SAP GUI starte fanút in browser

Ik earst skreau dit artikel yn myn blog, om letter net wer te sykjen en te ûnthâlden, mar om't gjinien it blog lêst, woe ik dizze ynformaasje mei elkenien diele, foar it gefal dat immen it nuttich fynt.

Wylst wurke oan it idee fan in wachtwurd reset tsjinst yn SAP R/3 systemen, ûntstie in fraach - hoe te starten SAP GUI mei de nedige parameters fan de browser? Om't dit idee it gebrûk fan in webtsjinst ymplisearre, earst reagearje op in SOAP-fersyk fan 'e SAP GUI en in brief ferstjoere mei in keppeling nei in webside mei in skript foar it weromsetten fan it wachtwurd nei de earste, en dan werjaan oan de brûker in berjocht oer de suksesfolle reset fan wachtwurd en it werjaan fan dit heul earste wachtwurd, dan wol ik graach dat dizze side ek in keppeling hat om SAP GUI te starten. Boppedat moat dizze keppeling it winske systeem iepenje, en, leafst, mei de oanmeld- en wachtwurdfjilden tagelyk ynfolle: de brûker soe it produktive wachtwurd mar twa kear ynfolje moatte.

It starten fan SAP Logon wie net nijsgjirrich foar ús doel, en by it útfieren fan sapgui.exe wie it ûnmooglik om de kliïnt en brûkersnamme op te jaan, mar it wie mooglik om in systeem te starten dat net definiearre is yn SAP Logon. Oan 'e oare kant wie it lansearjen fan SAP GUI mei willekeurige serverparameters net bysûnder relevant: as wy it probleem oplosse fan it resetten fan in wachtwurd fan in brûker, dan hat hy nei alle gedachten al de nedige line yn SAP Logon, mei de ynstellingen dy't hy nedich is, en dêr it is net nedich om te rommeljen mei syn eigen. Mar de spesifisearre easken waarden foldien troch de SAP GUI Shortcut technology en it programma sapshcut.exe sels, wat it mooglik makke om de SAP GUI te starten mei in spesifike "fluchtoets".

It probleem direkt oplosse: sapshcut.exe direkt út 'e browser starte mei in ActiveX-objekt:

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

De oplossing is min: as earste, it wurket allinnich yn Internet Explorer, twadde, it fereasket passende feiligens ynstellings yn 'e browser, dy't yn in organisaasje kin wurde ferbean op it domein nivo, en sels as tastien, de browser toant in finster mei in skriklike warskôging foar de brûker:

SAP GUI starte fanút in browser

Ik fûn oplossing #2 op it ynternet: it meitsjen fan jo eigen webprotokol. Stelt ús yn steat om de applikaasje te starten dy't wy nedich binne mei in keppeling dy't it protokol oanjout, dat wy sels registrearje yn Windows yn it register yn 'e seksje HKEY_CLASSES_ROOT. Sûnt SAP GUI Shortcut hat in eigen subseksje yn dizze seksje, kinne jo dêr de URL Protocol string parameter mei in lege wearde tafoegje:

SAP GUI starte fanút in browser

Dit protokol begjint sapgui.exe mei parameter /SHORTCUT, dat is krekt wat wy nedich binne:

SAP GUI starte fanút in browser

No, of as wy in folslein willekeurich protokol meitsje wolle (bygelyks, sapshcut), dan kinne jo it registrearje mei it folgjende reg-bestân:

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

No, as wy in keppeling meitsje op in webside dy't it protokol oanjout Sapgui.Shortcut.File Op in fergelykbere wize:

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

Wy moatte in finster sjen as dit:

SAP GUI starte fanút in browser

En alles liket geweldich, mar as jo op de knop "Tastean" klikke, sjogge wy:

SAP GUI starte fanút in browser

Oeps, de browser hat de spaasjebalke feroare yn %20. No, oare karakters sille ek wurde kodearre yn har eigen numerike koade mei in persintaazjesymboal. En it meast onaangename is dat hjir neat kin dien wurde op browsernivo (alles hjir wurdt dien neffens de standert) - de browser hâldt net fan sokke tekens, en de Windows-kommando-tolk wurket net mei sokke kodearre wearden. En noch ien minus - de hiele tekenrige wurdt trochjûn as in parameter, ynklusyf de protokolnamme en sels de kolon (sapgui.shortcut.file:). Boppedat, hoewol't itselde sapshcut.exe kin alles wat der gjin parameter foar is (begjint mei it symboal "-", dan de namme, "=" en wearde), d.w.s. in rigel lykas "sapgui.shortcut.file: -system=SID"it sil noch wurkje, dan sûnder romte"sapgui.shortcut.file:-system=SID" wurket net mear.

It docht bliken dat d'r yn prinsipe twa opsjes binne foar it brûken fan it URI-protokol:

  1. Gebrûk sûnder parameters: Wy meitsje in hiele boskje protokollen foar al ús systemen fan it type SIDMANDT, lykas AAA200, BBB200 ensafuorthinne. As jo ​​​​gewoan it winske systeem moatte begjinne, dan is de opsje frij wurkber, mar yn ús gefal is it net gaadlik, om't jo teminsten de brûkersoanmelding wolle oerdrage, mar dit kin net op dizze manier dien wurde.
  2. Mei help fan in wrapper programma te belje sapshcut.exe of sapgui.exe. De essinsje fan dit programma is ienfâldich - it moat de tekenrige nimme dy't de browser dernei stjoert fia it webprotokol en it omsette yn 'e fertsjintwurdiging dy't Windows ûntfangt, d.w.s. feroaret alle karakter koades werom yn karakters (miskien sels parses de tekenrige neffens parameters) en al ropt SAP GUI mei in garandearre korrekt kommando. Yn ús gefal is it ek net hielendal gaadlik (dêrom haw ik it net iens skreaun), want it is net genôch foar ús om it protokol op alle brûkers-pc's ta te foegjen (binnen in domein is dat noch wol goed, al is it ek better om foarkomme dizze praktyk), mar hjir sille wy it programma mear op 'e PC moatte pleatse, en ek konstant soargje dat it net ferdwynt as de software opnij wurdt ynstalleare op' e PC.

Dy. Wy negearje dizze opsje ek as net geskikt foar ús.

Op dit punt begon ik al te tinken dat ik ôfskie soe moatte nimme fan it idee om SAP GUI te starten mei de nedige parameters fan 'e browser, mar doe kaam it idee by my op dat jo in fluchtoets kinne meitsje yn SAP Logon en kopiearje it nei jo buroblêd. Ik brûkte dizze metoade ien kear, mar dêrfoar seach ik net spesifyk nei it fluchtoetsbestân. En it die bliken dat dizze fluchtoets in gewoane tekstbestân is mei de tafoeging .sop. En as jo it op Windows útfiere, sil SAP GUI starte mei de parameters dy't yn dit bestân oanjûn binne. "Bingo!"

It formaat fan dit bestân is sawat it folgjende (d'r kin ek in transaksje wurde lansearre by it opstarten, mar ik haw it weglitten):

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

It liket derop dat alles wat nedich is: in systeem identifier, in kliïnt, in brûkersnamme en sels in wachtwurd. En sels ekstra parameters: Titel - finster titel, GuiSize - grutte fan it rinnende finster (folslein skerm of net) en Gebrûk wer - oft it nedich is om in nij finster te iepenjen of in al iepene te brûken mei itselde systeem. Mar in nuânse ûntstie fuortendaliks - it die bliken dat it wachtwurd yn SAP Logon net ynsteld wurde koe, de line waard blokkearre. It die bliken dat dit waard dien om feiligens redenen: it bewarret alle fluchtoetsen makke yn SAP Logon yn in bestân sapshortcut.ini (Tichtby saplogon.ini yn it Windows brûkersprofyl) en dêr, hoewol se fersifere binne, binne se net te sterk fersifere en, as jo wolle, kinne se ûntsifere wurde. Mar jo kinne dit oplosse troch de wearde fan ien parameter yn it register te feroarjen (de standertwearde is 0):

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

Dit ûntsluten it Wachtwurdfjild foar ynfier op it formulier foar oanmeitsjen fan fluchtoetsen yn SAP Logon:

SAP GUI starte fanút in browser

En as jo in wachtwurd yn dit fjild ynfiere, sil it yn 'e oerienkommende rigel pleatst wurde
sapshortcut.ini, mar as jo in fluchtoets nei it buroblêd slepe, ferskynt it dêr net - mar jo kinne it dêr manuell tafoegje. It wachtwurd is fersifere, foar 111111 sil it sa wêze: PW_49B02219D1F6, foar 222222 - PW_4AB3211AD2F5. Mar wy binne mear ynteressearre yn it feit dat dit wachtwurd op ien manier is fersifere, ûnôfhinklik fan 'e spesifike PC, en as wy it wachtwurd weromsette nei de earste, dan kinne wy ​​ien foarôf bekende wearde brûke yn dit fjild. No, as wy in willekeurich oanmakke wachtwurd wolle brûke, sille wy it algoritme fan dit sifer moatte begripe. Mar te beoardieljen troch de foarbylden jûn, dit sil net dreech te dwaan. Trouwens, yn SAP GUI 7.40 ferdwûn dit fjild folslein út it formulier, mar it aksepteart in bestân korrekt mei in ynfolle wachtwurd.

Dat is, it docht bliken dat jo yn 'e browser gewoan moatte klikke op de keppeling nei in bestân mei de .sap-útwreiding en it winske formaat - en it sil biede om it te iepenjen as in bestân lykas SAP GUI Shortcut (natuerlik op in PC) mei SAP GUI ynstalleare) en sil in SAP GUI-finster iepenje mei de oantsjutte parameters (as it SID en kliïntpear yn 'e SAP Logon list op dizze PC steane).

Mar, it is dúdlik dat gjinien gewoan bestannen foarôf sil oanmeitsje en se op 'e side opslaan - se moatte wurde oanmakke op basis fan de nedige parameters. Jo kinne bygelyks in PHP-skript oanmeitsje om fluchtoetsen te generearjen (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";
?>

As jo ​​gjin brûkersnamme en wachtwurd oantsjutte, krije jo it folgjende finster dat freget om oanmelding en wachtwurd:

SAP GUI starte fanút in browser

As jo ​​allinich de oanmelding trochjaan, sil it oanmeldfjild ynfolle wurde en it wachtwurdfjild sil leech wêze. As wy de brûker sawol in oanmelding as in wachtwurd jouwe, mar de brûker op 'e PC hat de EnablePassword-kaai yn' e registraasje yn 'e seksje [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] ynsteld op 0, dan krije wy itselde ding. En allinich as dizze kaai op 1 is ynsteld en wy sawol de namme as it earste wachtwurd trochjaan, sil it systeem jo fuortendaliks freegje om twa kear in nij permanint wachtwurd yn te fieren. Dat moasten wy krije.

As gefolch hawwe wy de folgjende set fan beskôge opsjes as yllustraasje fan al it boppesteande:

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

De lêste opsje paste my. Mar ynstee fan it generearjen fan SAP-fluchtoetsen, kinne jo ek brûke, bygelyks, it generearjen fan CMD-bestannen, dy't, as se iepenje fan in browser, ek it SAP GUI-finster foar jo iepenje. Hjirûnder is in foarbyld (sapguicmd.php) start de SAP GUI direkt mei de folsleine ferbiningsstring, sûnder de needsaak om SAP Logon konfigurearre te hawwen:

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

Boarne: www.habr.com

Add a comment