Pokretanje SAP GUI iz preglednika

Ovaj članak sam prvotno napisao za sebe blog, kako ne bih morao ponovo tražiti i pamtiti, ali pošto niko ne čita blog, želeo sam ovu informaciju podeliti sa svima, možda će nekome biti korisna.

Tokom rada na ideji servisa za resetovanje lozinki u SAP R/3 sistemima, postavilo se pitanje — kako pokrenuti SAP GUI s potrebnim parametrima iz pregledača? Budući da je u ovoj ideji predviđeno korišćenje web servisa koji prerađuje SOAP zahtev iz SAP GUI i šalje email sa linkom na web stranicu sa skriptom za resetovanje lozinki na početnu stranu, a zatim se korisniku prikazuje poruka o uspešnom resetovanju lozinke i sama početna lozinka, želeo sam da na toj stranici postoji i link za pokretanje SAP GUI. Pritom, da taj link otvara potrebni sistem, a još bolje da odmah ima popunjena polja za korisničko ime i lozinku: korisniku bi ostalo samo da dva puta unese trenutnu lozinku.

Pokretanje SAP Logona — nije nam bilo zanimljivo, a prilikom pokretanja sapgui.exe nije bilo moguće navesti klijenta i korisničko ime, ali se mogla pokrenuti sistem koja nije definisana u SAP Logonu. S druge strane, pokretanje SAP GUI s proizvoljnim parametrima servera nije bilo posebno aktuelno: ako već rešavamo problem resetovanja korisničke lozinke, verovatno će već imati potrebni unos u SAP Logonu sa postavkama koje mu odgovaraju i ne treba se mešati sa svojim. Zato su zadatim zahtevima odgovarale tehnologija SAP GUI Shortcut i sama aplikacija sapshcut.exe, koja je omogućavala pokretanje SAP GUI koristeći određeni "prečica".

Rešenje problema direktno: pokretanje sapshcut.exe direktno iz pregledača pomoću ActiveX objekta:

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

Rešenje nije dobro: prvo, radi samo u Internet Exploreru, drugo, zahteva odgovarajuće sigurnosne postavke u pregledaču, koje mogu biti zabranjene na domena nivou, a čak i ako su dozvoljene, pregledač daje korisniku upozorenje koje zastrašuje:

Pokretanje SAP GUI iz preglednika

Rešenje broj 2 našao sam na internetu: kreiranje vlastitog web protokola. Omogućava pokretanje potrebne aplikacije putem veze koja specificira protokol, koji sami registriramo u Windows registry u odjeljku HKEY_CLASSES_ROOT. Budući da SAP GUI Shortcut ima svoj pododjeljak u tom dijelu, možemo dodati string parametar URL Protocol s praznom vrijednošću:

Pokretanje SAP GUI iz preglednika

Ovaj protokol pokreće sapgui.exe s parametrom /SHORTCUT, što nam i treba:

Pokretanje SAP GUI iz preglednika

Ili, ako želimo stvoriti potpuno prilagođeni protokol (na primjer, sapshcut), onda ga možemo registrirati pomoću sljedeće reg datoteke:

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

Sada, ako na web stranici napravimo vezu s navedenim protokolom Sapgui.Shortcut.File na sljedeći način:

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

trebalo bi se pojaviti prozor s izgledom:

Pokretanje SAP GUI iz preglednika

I izgleda sve sjajno, ali kad pritisnemo dugme «Dopusti», vidimo:

Pokretanje SAP GUI iz preglednika

Opa, preglednik je prostor pretvorio u . Također će se drugi simboli kodirati u svoj numerički kod s simbolom postotka. I najneugodnije je što se na razini preglednika tu ništa ne može učiniti (sve je to standardizirano) — preglednik ne voli takve simbole, a naredbeni interpretator Windows-a ne radi s tim kodiranim vrijednostima. I još jedan nedostatak — kao parametar se prosljeđuje cijeli niz, uključujući naziv protokola i čak dvotočku ("sapgui.shortcut.file:). Iako sapshcut.exe može odbaciti sve što nije parametar (počinje simbolom «-«, zatim naziv, «=» i vrijednost), tj. string tipa «sapgui.shortcut.file: -system=SID» još uvijek prolazi, dok bez razmaka «sapgui.shortcut.file:-system=SID» više ne radi.

Ispostavlja se da postoje dva načina korištenja URI protokola:

  1. Korištenje bez parametara: Kreiramo cijeli niz protokola za sve naše sustave tipa SIDMANDT, kao što su AAA200, BBB200 i slično. Ako trebate samo pokrenuti potrebni sustav, ta opcija je sasvim funkcionalna, ali u našem slučaju nije odgovarajuća, jer želimo također prenijeti prijavu korisnika, a to na taj način nije moguće.
  2. Korištenje wrapper programa za poziv sapshcut.exe ili sapgui.exe. Bit ovog programa je jednostavan — on treba primiti niz koji mu proslijedi web preglednik putem web protokola i pretvoriti ga u format koji prihvata Windows, tj. pretvara sve kodove znakova nazad u znakove (možda čak i analizira niz prema parametrima) i zatim poziva SAP GUI sa pravilnom naredbom. U našem slučaju, to također nije baš prikladno (zato ga nisam ni napisao), jer nam nije dovoljno dodati protokol na svim korisničkim računalima (u okviru domene, to još nekako ide, iako je bolje izbjeći takvu praksu), ali ovdje će biti potrebno dodatno postaviti program na računalo te neprestano paziti da ne nestane prilikom ponovne instalacije softvera na računalu.

Dakle, ovu opciju također odbacujemo kao neupotrebljivu.

Tu sam već počeo razmišljati da ću se morati oprostiti od ideje da pokrećem SAP GUI s potrebnim parametrima iz preglednika, ali tada mi je pala na pamet misao da se u SAP Logonu može napraviti prečac i da se on može kopirati na radnu površinu. Koristio sam ovu metodu nekada, ali prije toga nisam posebno pogledao datoteku prečaca. I ispostavilo se da prečac predstavlja običnu tekstualnu datoteku s ekstenzijom .sap. I ako se pokrene u Windows-u — pokrenut će se SAP GUI s parametrima koji su navedeni u ovoj datoteci. „Bingo!“

Format ove datoteke je otprilike sljedeći (može biti i pokrenuta transakcija prilikom pokretanja, ali to sam izostavio):

[System]
Naziv=SID
Klijent=200
[User]
Naziv=
Jezik=HR
Lozinka=
[Function]
Naslov=
[Configuration]
GuiSize=Maksimizirano
[Options]
Reuse=0

Izgleda da je sve što je potrebno: i identifikator sistema, i mandat, i ime korisnika i čak lozinka. I čak dodatni parametri: Title — naslov prozora, GuiSize — veličina pokrenutog prozora (puni ekran ili ne) i Reuse — da li obavezno otvarati novi prozor ili koristiti već otvoreni s istim sistemom. Ali odmah se javlja problem — lozinku u SAP Logonu nije moguće postaviti, polje je bilo zaključano. Ispostavilo se da je to učinjeno iz sigurnosnih razloga: svi prečaci koje je kreirao SAP Logon čuva u datoteci sapshortcut.ini (pored saplogon.ini u profilu korisnika Windows-a) i tu su oni, iako šifrirani, ipak ne previše snažno i uz malo volje se mogu dešifrirati. Ali to se može dozvoliti promjenom vrijednosti jednog parametra u registru (po defaultu je vrijednost 0):

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

To otključava polje „Lozinka“ za unos na obrascu za kreiranje prečaca u SAP Logon:

Pokretanje SAP GUI iz preglednika

Kada unesete lozinku u ovo polje, bit će smještena u odgovarajući redak.
sapshortcut.ini, ali kada povučete prečac na radnu površinu, neće se tamo pojaviti - međutim, možete ga dodati ručno. Lozinka je šifrirana, za 111111 bit će u sljedećem obliku: PW_49B02219D1F6, a za 222222 - PW_4AB3211AD2F5. No, više nas zanima da se ova lozinka šifrira na jedan način, neovisno o određenom računalu i, ako resetiramo lozinku na izvorne postavke, možemo u ovom polju koristiti jednu unaprijed poznatu vrijednost. Ako bismo željeli koristiti proizvoljno stvorenu lozinku - morat ćemo razumjeti algoritam te šifre. No, sudeći po prikazanim primjerima, to neće biti teško. Usput, u SAP GUI 7.40 ovo polje je u potpunosti nestalo s obrasca, ali datoteku s popunjenom lozinkom ispravno prepoznaje.

Dakle, u pregledniku je dovoljno kliknuti na poveznicu na datoteku s ekstenzijom .sap i u željenom formatu - te će vam ponuditi da je otvorite kao datoteku tipa SAP GUI Shortcut (naravno, na računalu s instaliranim SAP GUI) i otvorit će nam prozor SAP GUI s navedenim parametrima (ako su par SID i mandant na popisu SAP Logon na tom računalu).

No, jasno je da nitko unaprijed neće stvarati i skladištiti datoteke na webu - moraju se generirati na temelju potrebnih parametara. Na primjer, možete stvoriti PHP skriptu za generiranje prečaca (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 = 'HR'; };
$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=Prijava u sustavrn";};
echo "[Configuration]rn";
if($Size=='max') { echo "GuiSize=Maximizedrn"; };
echo "[Options]rn";
echo "Reuse=0rn";
?>

Ako ne navedete korisničko ime i lozinku, dobit ćemo sljedeći prozor s zahtjevom za prijavu i lozinku:

Pokretanje SAP GUI iz preglednika

Ako se prenese samo korisničko ime — to će polje biti popunjeno, dok će polje za lozinku ostati prazno. Ako, pak, prenosimo i korisničko ime i lozinku, ali je u registru na korisnikovom računalu ključ EnablePassword u odjeljku [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] postavljen na 0, dobit ćemo isto. Samo ako je taj ključ postavljen na 1 i prenosimo i ime i početnu lozinku, sustav će odmah zatražiti da dva puta unesemo novu trajnu lozinku. To je ono što smo željeli postići.

Na kraju, imamo sljedeći set razmotrenih opcija kao ilustraciju svega prethodno rečenog:

<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', '');"/>Primjer 1: Izvrši sapshcut.exe (ActiveX)<br>
<a href='Sapgui.Shortcut.File: -system=SID -client=200'>Primjer 2: Otvori sapshcut.exe (URI)</a><br>
<a href='/hr/sapshcut.php/?SID=SID&Client=200&User=test'>Primjer 3: Otvori datoteku .sap (SAP GUI prečac)</a><br>
</body>
</html>

Meni se svidjela posljednja opcija. Međutim, umjesto generiranja SAP prečaca, također je moguće koristiti, primjerice, generiranje CMD datoteka, koje će, kada se otvore iz preglednika, otvoriti SAP GUI. U nastavku je prikazan primjer (sapguicmd.php) izravnog pokretanja SAP GUI s punom vezom, bez potrebe za konfiguriranim SAP Logon:

<?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 Ulazak u ".$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";
?>

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster