Bukak SAP GUI saka browser

Aku pisanan nulis artikel iki ing sandi blog, supaya ora nggoleki lan ngelingi maneh, nanging amarga ora ana sing maca blog, aku pengin nuduhake informasi iki karo kabeh wong, yen ana wong sing migunani.

Nalika nggarap ide layanan reset sandhi ing sistem SAP R/3, ana pitakonan - carane miwiti SAP GUI kanthi paramèter sing dibutuhake saka browser? Wiwit ide iki nuduhake panggunaan layanan web, mula nanggapi panjaluk SOAP saka GUI SAP lan ngirim layang kanthi tautan menyang kaca web kanthi skrip kanggo ngreset tembung sandhi menyang wiwitan, banjur ditampilake menyang pangguna. pesen bab reset sandi sukses lan nampilake sandi banget dhisikan iki , banjur aku kaya kaca iki uga duwe link kanggo miwiti SAP GUI. Kajaba iku, pranala iki kudu mbukak sistem sing dikarepake, lan, luwih becik, kanthi kolom login lan sandhi diisi bebarengan: pangguna mung kudu ngisi tembung sandhi sing produktif kaping pindho.

Bukak SAP Logon ora menarik kanggo tujuan kita, lan nalika mbukak sapgui.exe ora bisa nemtokake jeneng klien lan pangguna, nanging bisa mbukak sistem sing ora ditetepake ing SAP Logon. Ing sisih liya, ngluncurake SAP GUI kanthi paramèter server sing sewenang-wenang ora cocog banget: yen kita ngrampungake masalah ngreset sandhi pangguna, mesthine dheweke wis duwe baris sing dibutuhake ing SAP Logon, kanthi setelan sing dibutuhake, lan ana. ora perlu repot karo awake dhewe. Nanging syarat sing ditemtokake dening teknologi Shortcut SAP GUI lan program sapshcut.exe dhewe, sing bisa diluncurake SAP GUI nggunakake "trabasan" tartamtu.

Ngatasi masalah langsung: miwiti sapshcut.exe langsung saka browser nggunakake obyek 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');
}

Solusi kasebut ala: pisanan, mung bisa digunakake ing Internet Explorer, kaping pindho, mbutuhake setelan keamanan sing cocog ing browser, sing ing organisasi bisa uga dilarang ing tingkat domain, lan sanajan diijini, browser nampilake jendhela kanthi medeni. warning kanggo pangguna:

Bukak SAP GUI saka browser

Aku nemokake solusi #2 ing Internet: nggawe protokol web dhewe. Ngidini kita miwiti aplikasi sing dibutuhake nggunakake link sing nuduhake protokol, sing kita ndhaptar ing Windows ing pendaptaran ing bagean HKEY_CLASSES_ROOT. Wiwit Trabasan GUI SAP duwe bagean dhewe ing bagean iki, sampeyan bisa nambah parameter string Protokol URL kanthi nilai kosong ing kana:

Bukak SAP GUI saka browser

Protokol iki diwiwiti sapgui.exe karo parameter /PUTUS, sing persis sing kita butuhake:

Bukak SAP GUI saka browser

Ya, utawa yen kita pengin nggawe protokol sing sewenang-wenang (contone, sapshcut), banjur sampeyan bisa ndhaftar nganggo file reg ing ngisor iki:

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

Saiki, yen kita nggawe link ing kaca web sing nuduhake protokol Sapgui.Shortcut.File Kanthi cara sing padha:

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

Kita kudu ndeleng jendhela kaya iki:

Bukak SAP GUI saka browser

Lan kabeh katon apik, nanging nalika sampeyan ngeklik tombol "Allow" kita bakal weruh:

Bukak SAP GUI saka browser

Ups, browser ngowahi spasi dadi %20. Uga, karakter liyane uga bakal dienkode menyang kode numerik dhewe kanthi simbol persen. Lan sing paling ora nyenengake yaiku ora ana sing bisa ditindakake ing level browser (kabeh ing kene wis rampung miturut standar) - browser ora seneng karo karakter kasebut, lan interpreter printah Windows ora bisa digunakake karo nilai sing dienkode. Lan siji minus - kabeh senar dilewati minangka parameter, kalebu jeneng protokol lan malah titik (sapgui.shortcut.file:). Kajaba iku, sanajan padha sapshcut.exe bisa mbuang kabeh sing dudu parameter kasebut (wiwit simbol "-", banjur jeneng, "=" lan nilai), i.e. garis kaya"sapgui.shortcut.file: -system=SID"Iku isih bakal bisa, banjur tanpa spasi"sapgui.shortcut.file:-system=SID"ora kerja maneh.

Pranyata, ing prinsip, ana rong pilihan kanggo nggunakake protokol URI:

  1. Nggunakake tanpa paramèter: Kita nggawe akeh protokol kanggo kabeh jinis sistem SIDMANDT, kaya YYY200, BBB200 lan liya-liyane. Yen sampeyan mung kudu miwiti sistem sing dikarepake, pilihan kasebut cukup bisa ditindakake, nanging ing kasus kita ora cocok, amarga paling ora sampeyan pengin nransfer login pangguna, nanging iki ora bisa ditindakake kanthi cara iki.
  2. Nggunakake program pambungkus kanggo nelpon sapshcut.exe utawa sapgui.exe. Inti saka program iki prasaja - kudu njupuk senar sing dikirim browser liwat protokol web lan nguripake menyang perwakilan sing ditampa Windows, i.e. nguripake kabeh kode karakter bali menyang karakter (bisa uga parses senar miturut paramèter) lan wis nelpon SAP GUI karo printah bener dijamin. Ing kasus kita, iku uga ora sakabehe cocok (mula aku malah ora nulis iku), amarga iku ora cukup kanggo kita kanggo nambah protokol ing kabeh PC pangguna (ing domain iki isih apik, sanajan iku uga luwih apik kanggo ngindhari laku iki), nanging ing kene kita kudu nyeleh luwih program ing PC, lan uga tansah mesthekake yen ora ilang nalika piranti lunak diinstal maneh ing PC.

Sing. Kita uga mbuwang pilihan iki minangka ora cocog kanggo kita.

Ing wektu iki, aku wis wiwit mikir yen aku kudu ngucapake pamit kanggo ngluncurake SAP GUI kanthi paramèter sing dibutuhake saka browser, nanging banjur ana ide yen sampeyan bisa nggawe trabasan ing SAP Logon lan nyalin menyang desktop. Aku nggunakake cara iki sapisan, nanging sadurunge aku ora katon khusus ing file trabasan. Lan ternyata trabasan iki minangka file teks biasa kanthi ekstensi .tlutuh. Lan yen sampeyan mbukak ing Windows, SAP GUI bakal diluncurake kanthi paramèter sing ditemtokake ing file iki. "Bingo!"

Format file iki kira-kira ing ngisor iki (bisa uga ana transaksi sing diluncurake nalika wiwitan, nanging aku ora ngilangi):

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

Katon kabeh sing dibutuhake: pengenal sistem, klien, jeneng pangguna lan malah sandhi. Lan malah paramèter tambahan: Title - judhul jendhela, GuiSize - ukuran jendhela mlaku (layar wutuh utawa ora) lan Gunakake maneh - apa perlu mbukak jendhela anyar utawa nggunakake sing wis mbukak karo sistem sing padha. Nanging nuansa langsung muncul - ternyata sandhi ing SAP Logon ora bisa disetel, baris kasebut diblokir. Ternyata iki ditindakake kanggo alasan keamanan: nyimpen kabeh trabasan sing digawe ing SAP Logon ing file sapshortcut.ini (Cedhak saplogon.ini ing profil pangguna Windows) lan ing kana, sanajan dienkripsi, dheweke ora ndhelik banget lan, yen dikarepake, bisa didekripsi. Nanging sampeyan bisa mutusake masalah iki kanthi ngganti nilai siji parameter ing registri (nilai standar yaiku 0):

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

Iki mbukak kunci kolom Sandi kanggo entri ing formulir nggawe trabasan ing SAP Logon:

Bukak SAP GUI saka browser

Lan nalika sampeyan ngetik sandhi ing lapangan iki, bakal diselehake ing baris sing cocog
sapshortcut.ini, nanging yen sampeyan nyeret trabasan menyang desktop, ora katon ing kana - nanging sampeyan bisa nambah kanthi manual. Sandi dienkripsi, kanggo 111111 bakal kaya ing ngisor iki: PW_49B02219D1F6, kanggo 222222 - PW_4AB3211AD2F5. Nanging kita luwih kasengsem ing kasunyatan sing sandi iki ndhelik ing salah siji cara, independen saka PC tartamtu, lan yen kita ngreset sandhi kanggo pisanan, banjur kita bisa nggunakake siji nilai wis dikenal ing lapangan iki. Ya, yen kita pengin nggunakake tembung sandhi sing digawe kanthi acak, kita kudu ngerti algoritma cipher iki. Nanging miturut conto sing diwenehake, iki ora bakal angel ditindakake. Miturut cara, ing SAP GUI 7.40 lapangan iki rampung ilang saka wangun, nanging bener nampa file karo sandhi kapenuhan.

Yaiku, ternyata ing browser sampeyan mung kudu ngeklik link menyang file kanthi ekstensi .sap lan format sing dikarepake - lan bakal mbukak minangka file saka jinis Shortcut SAP GUI (alami ing PC karo SAP GUI diinstal) lan bakal mbukak jendhela SAP GUI karo paramèter tartamtu (yen SID lan klien pasangan ing dhaftar SAP Logon ing PC iki).

Nanging, jelas yen ora ana sing mung nggawe file sadurunge lan nyimpen ing situs kasebut - kudu digawe adhedhasar parameter sing dibutuhake. Contone, sampeyan bisa nggawe skrip PHP kanggo ngasilake trabasan (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";
?>

Yen sampeyan ora nemtokake jeneng pangguna lan sandhi, sampeyan bakal entuk jendhela ing ngisor iki sing njaluk login lan sandhi:

Bukak SAP GUI saka browser

Yen sampeyan mung mlebu login, kolom login bakal diisi lan kolom sandhi bakal kosong. Yen kita menehi pangguna loro login lan sandhi, nanging pangguna ing PC duwe tombol EnablePassword ing pendaptaran ing [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] bagean disetel kanggo 0, banjur kita njaluk bab sing padha. Lan mung yen tombol iki disetel kanggo 1 lan kita pass loro jeneng lan sandhi awal, sistem bakal langsung njaluk sampeyan ngetik sandhi permanen anyar kaping pindho. Sing perlu kita entuk.

Akibaté, kita duwe set pilihan sing dianggep minangka ilustrasi kabeh ing ndhuwur:

<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 pungkasan cocog karo aku. Nanging tinimbang ngasilake trabasan SAP, sampeyan uga bisa nggunakake, contone, ngasilake file CMD, sing, nalika dibukak saka browser, uga bakal mbukak jendhela SAP GUI kanggo sampeyan. Ing ngisor iki contone (sapguicmd.php) langsung miwiti SAP GUI kanthi senar sambungan lengkap, tanpa perlu SAP Logon dikonfigurasi:

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

Source: www.habr.com

Add a comment