Melancarkan SAP GUI daripada pelayar

Saya mula-mula menulis artikel ini dalam saya blog, supaya tidak mencari dan mengingati lagi nanti, tetapi memandangkan tiada siapa yang membaca blog tersebut, saya ingin berkongsi maklumat ini dengan semua orang, sekiranya seseorang mendapati ia berguna.

Semasa mengusahakan idea perkhidmatan tetapan semula kata laluan dalam sistem SAP R/3, satu persoalan timbul - bagaimana untuk melancarkan SAP GUI dengan parameter yang diperlukan dari penyemak imbas? Memandangkan idea ini membayangkan penggunaan perkhidmatan web, mula-mula bertindak balas kepada permintaan SOAP daripada GUI SAP dan menghantar surat dengan pautan ke halaman web dengan skrip untuk menetapkan semula kata laluan kepada yang awal, dan kemudian memaparkan kepada pengguna mesej tentang penetapan semula kata laluan yang berjaya dan memaparkan kata laluan yang sangat awal ini, maka saya ingin halaman ini turut mempunyai pautan untuk melancarkan SAP GUI. Selain itu, pautan ini harus membuka sistem yang dikehendaki, dan, sebaik-baiknya, dengan medan log masuk dan kata laluan diisi sekaligus: pengguna hanya perlu mengisi kata laluan produktif dua kali.

Melancarkan Logon SAP tidak menarik untuk tujuan kami, dan apabila menjalankan sapgui.exe adalah mustahil untuk menentukan nama pelanggan dan pengguna, tetapi adalah mungkin untuk melancarkan sistem yang tidak ditakrifkan dalam Logon SAP. Sebaliknya, melancarkan SAP GUI dengan parameter pelayan sewenang-wenangnya tidak begitu relevan: jika kami menyelesaikan masalah menetapkan semula kata laluan pengguna, kemungkinan besar dia sudah mempunyai baris yang diperlukan dalam Logon SAP, dengan tetapan yang dia perlukan, dan di sana. tidak perlu mengacau dirinya sendiri. Tetapi keperluan yang ditentukan telah dipenuhi oleh teknologi SAP GUI Shortcut dan program sapshcut.exe itu sendiri, yang memungkinkan untuk melancarkan SAP GUI menggunakan "pintasan" tertentu.

Menyelesaikan masalah secara langsung: melancarkan sapshcut.exe terus dari penyemak imbas menggunakan objek 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');
}

Penyelesaiannya adalah buruk: pertama, ia hanya berfungsi dalam Internet Explorer, kedua, ia memerlukan tetapan keselamatan yang sesuai dalam penyemak imbas, yang dalam organisasi mungkin dilarang di peringkat domain, dan walaupun dibenarkan, penyemak imbas memaparkan tetingkap dengan menakutkan. amaran kepada pengguna:

Melancarkan SAP GUI daripada pelayar

Saya menemui penyelesaian #2 di Internet: mencipta protokol web anda sendiri. Membenarkan kami melancarkan aplikasi yang kami perlukan menggunakan pautan yang menunjukkan protokol, yang kami daftarkan sendiri dalam Windows dalam pendaftaran dalam bahagian HKEY_CLASSES_ROOT. Memandangkan Pintasan GUI SAP mempunyai subseksyen sendiri dalam bahagian ini, anda boleh menambah parameter rentetan Protokol URL dengan nilai kosong di sana:

Melancarkan SAP GUI daripada pelayar

Protokol ini bermula sapgui.exe dengan parameter /PINTAS, itulah yang kita perlukan:

Melancarkan SAP GUI daripada pelayar

Nah, atau jika kita ingin membuat protokol sewenang-wenangnya (contohnya, sapshcut), maka anda boleh mendaftarkannya menggunakan fail reg berikut:

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

Sekarang, jika kita membuat pautan pada halaman web yang menunjukkan protokol Sapgui.Shortcut.Fail Dengan cara yang sama:

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

Kita sepatutnya melihat tetingkap seperti ini:

Melancarkan SAP GUI daripada pelayar

Dan semuanya kelihatan hebat, tetapi apabila anda mengklik pada butang "Benarkan" kami melihat:

Melancarkan SAP GUI daripada pelayar

Oops, penyemak imbas menukar bar ruang kepada %20. Nah, aksara lain juga akan dikodkan ke dalam kod angka mereka sendiri dengan simbol peratus. Dan perkara yang paling tidak menyenangkan ialah tiada apa yang boleh dilakukan di sini pada peringkat penyemak imbas (semuanya di sini dilakukan mengikut standard) - penyemak imbas tidak menyukai aksara sedemikian, dan jurubahasa arahan Windows tidak berfungsi dengan nilai yang dikodkan sedemikian. Dan satu lagi tolak - keseluruhan rentetan diluluskan sebagai parameter, termasuk nama protokol dan juga kolon (sapgui.shortcut.file:). Lebih-lebih lagi, walaupun sama sapshcut.exe boleh membuang semua yang bukan parameter untuknya (bermula dengan simbol "-", kemudian nama, "=" dan nilai), i.e. baris seperti "sapgui.shortcut.file: -system=SID"ia masih akan berfungsi, kemudian tanpa ruang"sapgui.shortcut.file:-system=SID"tidak berfungsi lagi.

Ternyata, pada dasarnya, terdapat dua pilihan untuk menggunakan protokol URI:

  1. Menggunakan tanpa parameter: Kami mencipta sejumlah besar protokol untuk semua jenis sistem kami SIDMANDT, seperti AAA200, BBB200 dan sebagainya. Sekiranya anda hanya perlu memulakan sistem yang diingini, maka pilihannya agak boleh digunakan, tetapi dalam kes kami ia tidak sesuai, kerana sekurang-kurangnya anda ingin memindahkan log masuk pengguna, tetapi ini tidak boleh dilakukan dengan cara ini.
  2. Menggunakan program pembungkus untuk memanggil sapshcut.exe atau sapgui.exe. Intipati program ini adalah mudah - ia mesti mengambil rentetan yang dihantar oleh penyemak imbas kepadanya melalui protokol web dan mengubahnya menjadi perwakilan yang diterima oleh Windows, i.e. menukar semua kod aksara kembali kepada aksara (mungkin juga menghuraikan rentetan mengikut parameter) dan sudah memanggil SAP GUI dengan arahan yang dijamin betul. Dalam kes kami, ia juga tidak sesuai sepenuhnya (sebab itu saya tidak menulisnya), kerana ia tidak mencukupi untuk kami menambah protokol pada semua PC pengguna (dalam domain ini masih baik, walaupun ia juga lebih baik untuk elakkan amalan ini), tetapi di sini kita memerlukan lebih banyak meletakkan program pada PC, dan juga sentiasa memastikan ia tidak hilang apabila perisian dipasang semula pada PC.

Itu. Kami juga membuang pilihan ini sebagai tidak sesuai untuk kami.

Pada ketika ini saya sudah mula berfikir bahawa saya perlu mengucapkan selamat tinggal kepada idea untuk melancarkan SAP GUI dengan parameter yang diperlukan dari penyemak imbas, tetapi kemudian saya terfikir bahawa anda boleh membuat jalan pintas dalam SAP Logon dan salin ke desktop anda. Saya menggunakan kaedah ini sekali, tetapi sebelum itu saya tidak melihat secara khusus pada fail pintasan. Dan ternyata jalan pintas ini adalah fail teks biasa dengan sambungan .sap. Dan jika anda menjalankannya pada Windows, SAP GUI akan dilancarkan dengan parameter yang dinyatakan dalam fail ini. "Bingo!"

Format fail ini lebih kurang seperti berikut (mungkin juga terdapat transaksi yang dilancarkan pada permulaan, tetapi saya mengabaikannya):

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

Nampaknya semua yang diperlukan: pengecam sistem, pelanggan, nama pengguna dan juga kata laluan. Dan juga parameter tambahan: Title - tajuk tetingkap, GuiSize β€” saiz tetingkap yang sedang berjalan (skrin penuh atau tidak) dan Guna semula β€” sama ada perlu membuka tetingkap baharu atau menggunakan tetingkap yang telah dibuka dengan sistem yang sama. Tetapi nuansa segera muncul - ternyata kata laluan dalam Logon SAP tidak dapat ditetapkan, garis itu disekat. Ternyata ini dilakukan atas sebab keselamatan: ia menyimpan semua pintasan yang dibuat dalam Logon SAP dalam fail sappintasan.ini (Dekat saplogon.ini dalam profil pengguna Windows) dan di sana, walaupun ia disulitkan, ia tidak disulitkan terlalu kuat dan, jika dikehendaki, ia boleh dinyahsulit. Tetapi anda boleh menyelesaikannya dengan menukar nilai satu parameter dalam pendaftaran (nilai lalai ialah 0):

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

Ini membuka kunci medan Kata Laluan untuk kemasukan pada borang penciptaan pintasan dalam Logon SAP:

Melancarkan SAP GUI daripada pelayar

Dan apabila anda memasukkan kata laluan dalam medan ini, ia akan diletakkan dalam baris yang sepadan
sappintasan.ini, tetapi apabila anda menyeret pintasan ke desktop, ia tidak muncul di sana - tetapi anda boleh menambahkannya di sana secara manual. Kata laluan disulitkan, untuk 111111 ia adalah seperti berikut: PW_49B02219D1F6, untuk 222222 - PW_4AB3211AD2F5. Tetapi kami lebih berminat dengan fakta bahawa kata laluan ini disulitkan dalam satu cara, bebas daripada PC tertentu, dan jika kami menetapkan semula kata laluan kepada yang awal, maka kami boleh menggunakan satu nilai yang telah diketahui dalam medan ini. Nah, jika kita ingin menggunakan kata laluan yang dibuat secara rawak, kita perlu memahami algoritma sifir ini. Tetapi berdasarkan contoh yang diberikan, ini tidak akan sukar untuk dilakukan. Dengan cara ini, dalam SAP GUI 7.40 medan ini hilang sepenuhnya daripada borang, tetapi ia menerima fail dengan kata laluan yang diisi dengan betul.

Iaitu, ternyata dalam penyemak imbas anda hanya perlu mengklik pada pautan ke fail dengan sambungan .sap dan format yang dikehendaki - dan ia akan menawarkan untuk membukanya sebagai fail seperti Pintasan GUI SAP (secara semula jadi pada PC dengan SAP GUI dipasang) dan akan membuka tetingkap SAP GUI dengan parameter yang ditentukan (jika pasangan SID dan klien berada dalam senarai Logon SAP pada PC ini).

Tetapi, jelas bahawa tiada siapa yang hanya akan membuat fail terlebih dahulu dan menyimpannya di tapak - ia mesti dijana berdasarkan parameter yang diperlukan. Sebagai contoh, anda boleh mencipta skrip PHP untuk menjana pintasan (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";
?>

Jika anda tidak menyatakan nama pengguna dan kata laluan, anda akan mendapat tetingkap berikut yang meminta log masuk dan kata laluan:

Melancarkan SAP GUI daripada pelayar

Jika anda hanya lulus log masuk, medan log masuk akan diisi dan medan kata laluan akan kosong. Jika kami memberikan pengguna log masuk dan kata laluan, tetapi pengguna pada PC mempunyai kunci EnablePassword dalam pendaftaran dalam bahagian [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] ditetapkan kepada 0, maka kami mendapat perkara yang sama. Dan hanya jika kunci ini ditetapkan kepada 1 dan kami memberikan kedua-dua nama dan kata laluan awal, sistem akan segera meminta anda memasukkan kata laluan kekal baharu dua kali. Itulah yang kami perlu dapatkan.

Akibatnya, kami mempunyai set pilihan yang dipertimbangkan berikut sebagai ilustrasi semua perkara di atas:

<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 terakhir sesuai dengan saya. Tetapi daripada menjana pintasan SAP, anda juga boleh menggunakan, sebagai contoh, menjana fail CMD, yang, apabila dibuka dari penyemak imbas, juga akan membuka tetingkap SAP GUI untuk anda. Di bawah adalah contoh (sapguicmd.php) terus melancarkan SAP GUI dengan rentetan sambungan penuh, tanpa perlu mengkonfigurasi Logon SAP:

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

Tambah komen