Ngajalankeun SAP GUI tina browser

Kuring mimiti nulis artikel ieu di abdi blog, supados henteu milarian sareng nginget-nginget deui, tapi kumargi teu aya anu maca blog, kuring hoyong bagikeun inpormasi ieu ka sadayana, upami aya anu mendakan mangpaat.

Nalika ngerjakeun ideu jasa reset sandi dina sistem SAP R/3, timbul patarosan - kumaha ngajalankeun SAP GUI kalayan parameter anu diperyogikeun tina browser? Kusabab ide ieu nunjukkeun panggunaan jasa wéb, mimitina ngaréspon kana pamundut SOAP ti SAP GUI sareng ngirim surat kalayan tautan ka halaman wéb anu nganggo skrip pikeun ngareset kecap konci ka anu awal, teras ditingalikeun ka pangguna. pesen ngeunaan reset sandi suksés tur mintonkeun sandi pisan awal ieu, lajeng Abdi hoyong kaca ieu ogé boga tumbu ka peluncuran SAP GUI. Sumawona, tautan ieu kedah muka sistem anu dipikahoyong, sareng, langkung saé, kalayan widang login sareng kecap akses dieusian sakaligus: pangguna ngan ukur kedah ngeusian kecap konci anu produktif dua kali.

Ngaluncurkeun SAP Logon henteu pikaresepeun pikeun tujuan urang, sareng nalika ngajalankeun sapgui.exe mustahil pikeun netepkeun nami klien sareng pangguna, tapi mungkin pikeun ngaluncurkeun sistem anu henteu ditetepkeun dina SAP Logon. Di sisi séjén, launching SAP GUI kalawan parameter server sawenang teu utamana relevan: lamun urang ngarengsekeun masalah ngareset kecap akses pamaké, teras paling dipikaresep anjeunna geus boga garis diperlukeun dina SAP Logon, kalawan setélan nu diperlukeun, sarta aya. teu kudu mess kalawan sorangan. Tapi sarat anu ditetepkeun ku téknologi Shortcut SAP GUI sareng program sapshcut.exe sorangan, anu ngamungkinkeun pikeun ngaluncurkeun GUI SAP nganggo "potong kompas" khusus.

Ngarengsekeun masalah langsung: ngaluncurkeun sapshcut.exe langsung tina browser nganggo obyék ActiveX:

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

Solusina goréng: kahiji, éta ngan ukur tiasa dianggo dina Internet Explorer, kadua, peryogi setélan kaamanan anu pas dina browser, anu dina organisasi tiasa dilarang dina tingkat domain, sareng upami diidinan, browser nampilkeun jandela anu pikasieuneun. warning ka pamaké:

Ngajalankeun SAP GUI tina browser

Kuring mendakan solusi #2 dina Internét: nyieun protokol wéb anjeun sorangan. Ngidinan urang pikeun ngaluncurkeun aplikasi anu urang peryogikeun nganggo tautan anu nunjukkeun protokol, anu urang ngadaptarkeun diri dina Windows dina pendaptaran dina bagian HKEY_CLASSES_ROOT. Kusabab Shortcut SAP GUI gaduh subsection sorangan dina bagian ieu, anjeun tiasa nambihan parameter string URL Protocol kalayan nilai kosong di dinya:

Ngajalankeun SAP GUI tina browser

Protokol ieu dimimitian sapgui.exe kalawan parameter / KOSOR, anu persis anu urang peryogikeun:

Ngajalankeun SAP GUI tina browser

Nya, atanapi upami urang hoyong ngadamel protokol anu sawenang-wenang (contona, sapshcut), teras anjeun tiasa ngadaptarkeun éta nganggo file reg di handap ieu:

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

Ayeuna, upami urang ngadamel tautan dina halaman wéb anu nunjukkeun protokol Sapgui.Shortcut.File Dina cara anu sami:

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

Urang kedah ningali jandela sapertos kieu:

Ngajalankeun SAP GUI tina browser

Sareng sadayana sigana saé, tapi nalika anjeun ngaklik tombol "Ngidinan" kami ningali:

Ngajalankeun SAP GUI tina browser

Aduh, browser ngarobah spasi jadi %20. Nya, karakter sanésna ogé bakal disandikeun kana kode numerik sorangan kalayan simbol persen. Sareng anu paling pikaresepeun nyaéta henteu aya anu tiasa dilakukeun di dieu dina tingkat browser (sadayana di dieu dilakukeun dumasar kana standar) - browser henteu resep karakter sapertos kitu, sareng juru paréntah Windows henteu tiasa dianggo kalayan nilai anu disandikeun sapertos kitu. Sareng hiji deui dikurangan - sadayana senar disalurkeun salaku parameter, kalebet nami protokol bahkan titik dua (sapgui.shortcut.file:). Sumawona, sanajan sarua sapshcut.exe tiasa miceun sadayana anu sanés parameter pikeun éta (dimimitian ku simbol "-", teras nami, "=" sareng nilai), i.e. garis kawas "sapgui.shortcut.file: -sistem = SID"éta tetep tiasa dianggo, teras tanpa spasi"sapgui.shortcut.file:-system=SID"teu dianggo deui.

Tétéla, prinsipna mah, aya dua pilihan pikeun ngagunakeun protokol URI:

  1. Ngagunakeun tanpa parameter: Urang nyieun sakabeh kebat protokol pikeun sakabéh sistem urang tina tipe SIDMANDT, siga AAA200, BBB200 teras salajengna. Upami anjeun ngan ukur kedah ngamimitian sistem anu dipikahoyong, maka pilihanna lumayan tiasa dianggo, tapi dina kasus kami henteu cocog, sabab sahenteuna anjeun hoyong mindahkeun login pangguna, tapi ieu henteu tiasa dilakukeun ku cara ieu.
  2. Ngagunakeun program wrapper mun nelepon sapshcut.exe atawa sapgui.exe. Intina program ieu saderhana - éta kedah nyandak senar anu dikirimkeun ku browser kana éta via protokol wéb sareng janten perwakilan anu ditampi Windows, i.e. Ngahurungkeun sagala kode karakter deui kana karakter (meureun malah parses string nurutkeun parameter) tur geus nelepon SAP GUI kalawan paréntah bener dijamin. Dina kasus urang, éta ogé henteu sapinuhna cocog (éta naha kuring henteu nyerat éta), sabab éta henteu cekap pikeun urang nambihan protokol dina sadaya PC pangguna (dina domain ieu masih leres, sanaos éta ogé langkung saé Ngahindarkeun prakték ieu), tapi di dieu urang peryogi langkung nempatkeun program dina PC, sareng ogé mastikeun yén éta henteu dileungitkeun nalika parangkat lunak dipasang deui dina PC.

Jelema. Urang ogé piceun pilihan ieu salaku teu cocog pikeun urang.

Dina titik ieu kuring parantos mimiti mikir yén kuring kedah pamit pikeun ngaluncurkeun SAP GUI kalayan parameter anu dipikabutuh tina browser, tapi teras aya ideu yén anjeun tiasa ngadamel potong kompas dina SAP Logon sareng salin kana desktop Anjeun. Kuring nganggo metode ieu sakali, tapi sateuacan éta kuring henteu ningali sacara khusus kana file potong kompas. Sareng tétéla yén potong kompas ieu mangrupikeun file téks biasa sareng ekstensi .sap. Tur upami Anjeun salah ngajalankeun eta dina Windows, SAP GUI bakal ngajalankeun kalawan parameter nu dieusian dina file ieu. "Bingo!"

Format file ieu kira-kira di handap ieu (bisa ogé aya transaksi anu diluncurkeun nalika ngamimitian, tapi kuring ngaleungitkeunana):

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

Sigana mah sagalana nu diperlukeun: identifier sistem, klien, ngaran pamaké sarta malah sandi a. Sareng parameter tambahan: gelar - judul jandela, GuiSize - ukuran tina jandela ngajalankeun (layar pinuh atanapi henteu) jeung Ngagunakeun deui - naha perlu muka jandela anyar atanapi nganggo anu parantos dibuka sareng sistem anu sami. Tapi nuansa langsung muncul - tétéla yén kecap akses dina SAP Logon teu tiasa diatur, jalurna diblokir. Tétéla yén ieu dilakukeun pikeun alesan kaamanan: nyimpen sadaya potong kompas anu diciptakeun dina SAP Logon dina file sapshortcut.ini (Deukeut saplogon.ini dina profil pangguna Windows) sareng di dinya, sanaos énkripsi, aranjeunna henteu énkripsi kuat teuing sareng, upami hoyong, aranjeunna tiasa didekripsi. Tapi anjeun tiasa ngabéréskeun ieu ku ngarobih nilai hiji parameter dina pendaptaran (nilai standar nyaéta 0):

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

Ieu muka konci widang Sandi pikeun éntri dina formulir kreasi potong kompas dina SAP Logon:

Ngajalankeun SAP GUI tina browser

Sareng nalika anjeun ngalebetkeun kecap konci dina widang ieu, éta bakal disimpen dina garis anu saluyu
sapshortcut.ini, tapi mun anjeun nyered potong kompas ka desktop, éta teu némbongan di dinya - tapi anjeun bisa nambahkeun eta sacara manual. Sandi énkripsi, pikeun 111111 bakal kieu: PW_49B02219D1F6, pikeun 222222 - PW_4AB3211AD2F5. Tapi urang leuwih kabetot dina kanyataan yén sandi ieu énkripsi dina hiji cara, bebas tina PC husus, sarta lamun urang ngareset sandi ka awal, urang tiasa nganggo hiji nilai pre-dipikawanoh dina widang ieu. Nya, upami urang hoyong nganggo sandi anu didamel sacara acak, urang kedah ngartos algoritma cipher ieu. Tapi ditilik ku conto anu dipasihkeun, ieu moal sesah dilakukeun. Ku jalan kitu, dina SAP GUI 7.40 widang ieu sagemblengna ngiles tina formulir, tapi neuleu narima file kalawan sandi dieusian.

Nyaéta, tétéla yén dina browser anjeun ngan ukur kedah ngaklik tautan kana file anu nganggo ekstensi .sap sareng format anu dipikahoyong - sareng éta bakal nawiskeun pikeun muka file sapertos SAP GUI Shortcut (alami dina PC. kalawan SAP GUI dipasang) sarta bakal muka jandela SAP GUI kalawan parameter husus (lamun SID jeung klien pasangan dina daptar SAP Logon on PC ieu).

Tapi, écés yén teu aya anu ngan saukur nyiptakeun file sateuacanna sareng nyimpen éta dina situs - aranjeunna kedah didamel dumasar kana parameter anu diperyogikeun. Contona, Anjeun bisa nyieun skrip PHP pikeun ngahasilkeun potong kompas (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";
?>

Upami anjeun henteu netepkeun nami pangguna sareng kecap konci, anjeun bakal nampi jandela di handap ieu anu naroskeun login sareng kecap akses:

Ngajalankeun SAP GUI tina browser

Upami anjeun ngan ukur ngalangkungan login, kolom login bakal dieusi sareng kolom sandi bakal kosong. Lamun urang masihan pamaké duanana login sarta sandi a, tapi pamaké on PC nu boga konci EnablePassword dina pendaptaran di [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] bagian disetel ka 0, lajeng urang meunang hal anu sarua. Sareng upami konci ieu disetel ka 1 sareng urang lulus nami sareng kecap konci awal, sistem bakal langsung ngajurung anjeun ngalebetkeun kecap konci permanén dua kali. Éta naon urang diperlukeun pikeun meunangkeun.

Hasilna, kami ngagaduhan set pilihan anu dianggap salaku ilustrasi sadaya di luhur:

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

Pilihan panungtungan cocog kuring. Tapi tinimbang ngahasilkeun potong kompas SAP, anjeun ogé tiasa nganggo, contona, ngahasilkeun file CMD, anu, nalika dibuka tina browser, ogé bakal muka jandela SAP GUI pikeun anjeun. Di handap ieu conto (sapguicmd.php) langsung ngaluncurkeun SAP GUI kalayan senar sambungan pinuh, tanpa kedah ngonpigurasikeun 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 Вход в ".$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";
?>

sumber: www.habr.com

Tambahkeun komentar