SAP GUI:n käynnistäminen selaimesta

Kirjoitin tämän artikkelin ensimmäisen kerran omassani blogi, jotta en enää etsi ja muista myöhemmin, mutta koska kukaan ei lue blogia, halusin jakaa tämän tiedon kaikkien kanssa, jos joku pitää niistä hyödyllistä.

Työskennellessäsi idean salasanan palautuspalvelusta SAP R/3 -järjestelmissä heräsi kysymys - kuinka käynnistää SAP GUI tarvittavilla parametreilla selaimesta? Koska tämä ajatus sisälsi verkkopalvelun käytön, on ensin vastattava SAP GUI:n SOAP-pyyntöön ja lähetettävä kirje, jossa on linkki web-sivulle, jossa on komentosarja salasanan palauttamiseksi alkuperäiseen salasanaan, ja sitten näytettävä käyttäjälle. viestin onnistuneesta salasanan palauttamisesta ja tämän alkuperäisen salasanan näyttämisestä , niin haluaisin, että tällä sivulla on myös linkki SAP GUI:n käynnistämiseen. Lisäksi tämän linkin pitäisi avata haluttu järjestelmä, ja mieluiten kirjautumis- ja salasanakentät kerralla täytettynä: käyttäjän tarvitsee täyttää tuottava salasana vain kahdesti.

SAP Logonin käynnistäminen ei ollut meidän tarkoitukseemme kiinnostavaa, ja sapgui.exe:tä ajettaessa oli mahdotonta määrittää asiakas- ja käyttäjätunnusta, mutta oli mahdollista käynnistää järjestelmä, jota SAP Logonissa ei ole määritelty. Toisaalta SAP GUI:n käynnistäminen mielivaltaisilla palvelinparametreilla ei ollut erityisen merkityksellistä: jos ratkaisemme käyttäjän salasanan nollausongelman, niin todennäköisesti hänellä on jo tarvittava rivi SAP Logonissa tarvitsemillaan asetuksilla ja siellä ei tarvitse sotkea omaansa. Mutta määritellyt vaatimukset täyttivät SAP GUI Shortcut -tekniikka ja itse sapshcut.exe-ohjelma, mikä mahdollisti SAP GUI:n käynnistämisen tietyllä "pikakuvakkeella".

Ongelman ratkaiseminen suoraan: sapshcut.exe-tiedoston käynnistäminen suoraan selaimesta ActiveX-objektin avulla:

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

Ratkaisu on huono: ensinnäkin se toimii vain Internet Explorerissa, toiseksi se vaatii selaimessa asianmukaiset suojausasetukset, jotka organisaatiossa voivat olla kiellettyjä verkkotunnustasolla, ja vaikka se sallittaisiin, selain näyttää ikkunan, jossa on pelottava varoitus käyttäjälle:

SAP GUI:n käynnistäminen selaimesta

Löysin ratkaisun nro 2 Internetistä: oman verkkoprotokollan luominen. Mahdollistaa tarvitsemamme sovelluksen käynnistämisen protokollan osoittavan linkin avulla, jonka rekisteröimme itse Windowsissa rekisterissä HKEY_CLASSES_ROOT-osiossa. Koska SAP GUI Shortcutilla on oma alaosio tässä osiossa, voit lisätä siihen URL-protokollan merkkijonoparametrin tyhjällä arvolla:

SAP GUI:n käynnistäminen selaimesta

Tämä protokolla käynnistyy sapgui.exe parametrin kanssa /PIKAKUVAUS, jota me juuri tarvitsemme:

SAP GUI:n käynnistäminen selaimesta

No, tai jos haluamme tehdä täysin mielivaltaisen protokollan (esim. sapshcut), voit rekisteröidä sen käyttämällä seuraavaa reg-tiedostoa:

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

Jos nyt teemme linkin verkkosivulle, joka osoittaa protokollan Sapgui.Shortcut.File Samaan tapaan:

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

Meidän pitäisi nähdä tällainen ikkuna:

SAP GUI:n käynnistäminen selaimesta

Ja kaikki näyttää hienolta, mutta kun napsautat "Salli"-painiketta, näemme:

SAP GUI:n käynnistäminen selaimesta

Hups, selain muutti välilyönnin %20:ksi. No, myös muut merkit koodataan omaan numerokoodiinsa prosenttisymbolilla. Ja epämiellyttävin asia on, että täällä ei voi tehdä mitään selaintasolla (kaikki täällä tehdään standardin mukaan) - selain ei pidä sellaisista merkeistä, ja Windowsin komentotulkki ei toimi sellaisilla koodatuilla arvoilla. Ja vielä yksi miinus - koko merkkijono välitetään parametrina, mukaan lukien protokollan nimi ja jopa kaksoispiste (sapgui.shortcut.file:). Lisäksi vaikka sama sapshcut.exe voi hylätä kaiken, mikä ei ole sen parametri (alkaa symbolilla "-", sitten nimi, "=" ja arvo), ts. rivi kuten "sapgui.shortcut.file: -system=SID"se toimii edelleen, sitten ilman välilyöntiä"sapgui.shortcut.file:-system=SID"ei toimi enää.

Osoittautuu, että periaatteessa URI-protokollan käyttämiseen on kaksi vaihtoehtoa:

  1. Käyttö ilman parametreja: Luomme koko joukon protokollia kaikille tämän tyyppisille järjestelmillemme SIDMANT, Kuten AAA200, BBB200 ja niin edelleen. Jos haluat vain käynnistää halutun järjestelmän, vaihtoehto on varsin toimiva, mutta meidän tapauksessamme se ei sovellu, koska ainakin haluat siirtää käyttäjän kirjautumisen, mutta tätä ei voi tehdä tällä tavalla.
  2. Kääritysohjelman käyttäminen soittamiseen sapshcut.exe tai sapgui.exe. Tämän ohjelman olemus on yksinkertainen - sen on otettava merkkijono, jonka selain lähettää sille verkkoprotokollan kautta, ja muutettava se esitykseksi, jonka Windows vastaanottaa, ts. muuttaa kaikki merkkikoodit takaisin merkeiksi (ehkä jopa jäsentää merkkijonon parametrien mukaan) ja kutsuu jo SAP GUI:ta taatusti oikealla komennolla. Meidän tapauksessamme se ei myöskään ole täysin sopiva (siksi en edes kirjoittanut sitä), koska ei riitä, että lisäämme protokollan kaikille käyttäjätietokoneille (domainin sisällä tämä on edelleen kunnossa, vaikka on myös parempi Vältä tätä käytäntöä), mutta tässä meidän on asetettava ohjelma tietokoneelle enemmän ja varmistettava jatkuvasti, että se ei katoa, kun ohjelmisto asennetaan uudelleen tietokoneeseen.

Nuo. Hylkäämme myös tämän vaihtoehdon meille sopimattomana.

Tässä vaiheessa aloin jo ajatella, että minun pitäisi sanoa hyvästit ajatuksesta käynnistää SAP GUI tarvittavilla parametreilla selaimesta, mutta sitten tuli ajatus, että voit tehdä pikakuvakkeen SAP Logonissa ja kopioi se työpöydällesi. Käytin tätä menetelmää kerran, mutta ennen sitä en erityisesti katsonut pikakuvaketiedostoa. Ja kävi ilmi, että tämä pikakuvake on tavallinen tekstitiedosto, jonka laajennus on .mahla. Ja jos käytät sitä Windowsissa, SAP GUI käynnistyy tässä tiedostossa määritetyillä parametreilla. "Bingo!"

Tämän tiedoston muoto on suunnilleen seuraava (saattaa olla myös tapahtuma, joka käynnistettiin käynnistyksen yhteydessä, mutta jätin sen pois):

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

Näyttää siltä, ​​​​että kaikki tarvittava: järjestelmätunniste, asiakas, käyttäjätunnus ja jopa salasana. Ja jopa lisäparametreja: Otsikko - ikkunan otsikko, GuiSize — käynnissä olevan ikkunan koko (koko näyttö tai ei) ja Käyttää uudelleen — onko tarpeen avata uusi ikkuna vai käyttää jo avattua ikkunaa samalla järjestelmällä. Mutta vivahde ilmeni välittömästi - kävi ilmi, että SAP Logonin salasanaa ei voitu asettaa, linja oli estetty. Kävi ilmi, että tämä tehtiin turvallisuussyistä: se tallentaa kaikki SAP Logonissa luodut pikakuvakkeet tiedostoon sapshortcut.ini (Lähellä saplogon.ini Windows-käyttäjäprofiilissa) ja siellä, vaikka ne on salattu, ne eivät ole liian vahvasti salattuja, ja ne voidaan haluttaessa purkaa. Mutta voit ratkaista tämän muuttamalla yhden parametrin arvoa rekisterissä (oletusarvo on 0):

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

Tämä avaa Salasana-kentän SAP-kirjautumisen pikakuvakkeen luontilomakkeen syöttämistä varten:

SAP GUI:n käynnistäminen selaimesta

Ja kun kirjoitat salasanan tähän kenttään, se sijoitetaan vastaavalle riville
sapshortcut.ini, mutta kun vedät pikakuvakkeen työpöydälle, se ei näy siellä - mutta voit lisätä sen sinne manuaalisesti. Salasana on salattu, 111111:lle se on seuraava: PW_49B02219D1F6, 222222 - PW_4AB3211AD2F5. Mutta olemme enemmän kiinnostuneita siitä, että tämä salasana on salattu yhdellä tavalla, riippumatta tietystä tietokoneesta, ja jos nollaamme salasanan alkuperäiseen, voimme käyttää tässä kentässä yhtä ennalta tunnettua arvoa. No, jos haluamme käyttää satunnaisesti luotua salasanaa, meidän on ymmärrettävä tämän salauksen algoritmi. Mutta annettujen esimerkkien perusteella tämä ei ole vaikea tehdä. Muuten, SAP GUI 7.40:ssa tämä kenttä katosi kokonaan lomakkeesta, mutta se hyväksyy oikein tiedoston täytetyllä salasanalla.

Toisin sanoen käy ilmi, että selaimessa sinun tarvitsee vain napsauttaa linkkiä tiedostoon, jossa on .sap-tunniste ja haluttu muoto - ja se tarjoaa sen avaamisen tiedostona, kuten SAP GUI Shortcut (luonnollisesti PC:llä). SAP GUI asennettuna) ja avaa SAP GUI -ikkunan, jossa on määritetyt parametrit (jos SID ja asiakaspari ovat tämän tietokoneen SAP Logon -luettelossa).

Mutta on selvää, että kukaan ei yksinkertaisesti luo tiedostoja etukäteen ja tallenna niitä sivustolle - ne on luotava tarvittavien parametrien perusteella. Voit esimerkiksi luoda PHP-skriptin luodaksesi pikakuvakkeita (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";
?>

Jos et määritä käyttäjätunnusta ja salasanaa, saat seuraavan ikkunan, jossa kysytään kirjautumista ja salasanaa:

SAP GUI:n käynnistäminen selaimesta

Jos välität vain sisäänkirjautumisen, kirjautumiskenttä täytetään ja salasanakenttä on tyhjä. Jos annamme käyttäjälle sekä kirjautumistunnuksen että salasanan, mutta tietokoneen käyttäjällä on EnablePassword-avain rekisterissä [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity]-osiossa 0, niin saamme saman asian. Ja vain, jos tämän avaimen arvoksi on asetettu 1 ja välitämme sekä nimen että alkuperäisen salasanan, järjestelmä pyytää sinua välittömästi antamaan uuden pysyvän salasanan kahdesti. Se meidän piti saada.

Tämän seurauksena meillä on seuraavat harkitut vaihtoehdot esimerkkinä kaikista yllä olevista:

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

Viimeinen vaihtoehto sopi minulle. Mutta SAP-pikakuvakkeiden luomisen sijaan voit käyttää myös esimerkiksi CMD-tiedostojen luomista, jotka selaimesta avattaessa avaavat sinulle myös SAP GUI -ikkunan. Alla on esimerkki (sapguicmd.php) käynnistää SAP-käyttöliittymä suoraan täydellä yhteysmerkkijonolla ilman, että SAP-sisäänkirjautumista tarvitsee määrittää:

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

Lähde: will.com

Lisää kommentti