Meluncurkan SAP GUI dari browser

Saya pertama kali menulis artikel ini di saya blog, agar tidak mencari dan mengingatnya lagi nanti, tetapi karena tidak ada yang membaca blog ini, saya ingin berbagi informasi ini dengan semua orang, kalau-kalau ada yang merasa bermanfaat.

Saat mengerjakan ide layanan pengaturan ulang kata sandi di sistem SAP R/3, muncul pertanyaan - bagaimana cara meluncurkan SAP GUI dengan parameter yang diperlukan dari browser? Karena ide ini menyiratkan penggunaan layanan web, pertama-tama tanggapi permintaan SOAP dari SAP GUI dan kirimkan surat dengan tautan ke halaman web dengan skrip untuk mengatur ulang kata sandi ke yang awal, dan kemudian menampilkannya kepada pengguna. pesan tentang penyetelan ulang kata sandi yang berhasil dan menampilkan kata sandi awal ini, maka saya ingin halaman ini juga memiliki tautan untuk meluncurkan SAP GUI. Selain itu, tautan ini akan membuka sistem yang diinginkan, dan, lebih disukai, dengan kolom login dan kata sandi diisi sekaligus: pengguna hanya perlu mengisi kata sandi produktif dua kali.

Meluncurkan SAP Logon tidak menarik untuk tujuan kami, dan saat menjalankan sapgui.exe tidak mungkin menentukan nama klien dan pengguna, tetapi dimungkinkan untuk meluncurkan sistem yang tidak ditentukan dalam SAP Logon. Di sisi lain, meluncurkan SAP GUI dengan parameter server sewenang-wenang tidak terlalu relevan: jika kita memecahkan masalah menyetel ulang kata sandi pengguna, kemungkinan besar dia sudah memiliki baris yang diperlukan di SAP Logon, dengan pengaturan yang dia perlukan, dan di sana tidak perlu main-main dengan miliknya sendiri. Namun persyaratan yang ditentukan dipenuhi oleh teknologi Pintasan SAP GUI dan program sapshcut.exe itu sendiri, yang memungkinkan peluncuran SAP GUI menggunakan "pintasan" tertentu.

Memecahkan masalah secara langsung: meluncurkan sapshcut.exe langsung dari browser 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');
}

Solusinya buruk: pertama, ini hanya berfungsi di Internet Explorer, kedua, memerlukan pengaturan keamanan yang sesuai di browser, yang mungkin dilarang di tingkat domain dalam suatu organisasi, dan bahkan jika diizinkan, browser menampilkan jendela dengan jendela yang menakutkan. peringatan kepada pengguna:

Meluncurkan SAP GUI dari browser

Saya menemukan solusi #2 di Internet: membuat protokol web Anda sendiri. Memungkinkan kita meluncurkan aplikasi yang kita perlukan menggunakan tautan yang menunjukkan protokol, yang kita daftarkan sendiri di Windows dalam registri di bagian HKEY_CLASSES_ROOT. Karena Pintasan SAP GUI memiliki subbagiannya sendiri di bagian ini, Anda dapat menambahkan parameter string Protokol URL dengan nilai kosong di sana:

Meluncurkan SAP GUI dari browser

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

Meluncurkan SAP GUI dari browser

Ya, atau jika kita ingin membuat protokol yang sepenuhnya sewenang-wenang (misalnya, sapshcut), lalu Anda dapat mendaftarkannya menggunakan file 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 link pada halaman web yang menunjukkan protokolnya Sapgui.Pintasan.File Dengan cara yang sama:

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

Kita akan melihat jendela seperti ini:

Meluncurkan SAP GUI dari browser

Dan semuanya tampak baik-baik saja, tetapi ketika Anda mengklik tombol "Izinkan" kita melihat:

Meluncurkan SAP GUI dari browser

Ups, browser mengubah spasi menjadi %20. Nah, karakter lain juga akan dikodekan ke dalam kode numeriknya sendiri dengan simbol persen. Dan hal yang paling tidak menyenangkan adalah tidak ada yang bisa dilakukan di sini di tingkat browser (semuanya di sini dilakukan sesuai standar) - browser tidak menyukai karakter seperti itu, dan penerjemah perintah Windows tidak bekerja dengan nilai yang disandikan seperti itu. Dan satu lagi kekurangannya - seluruh string diteruskan sebagai parameter, termasuk nama protokol dan bahkan titik dua (sapgui.shortcut.file:). Apalagi meski sama sapshcut.exe dapat membuang segala sesuatu yang bukan merupakan parameternya (dimulai dengan simbol β€œ-β€œ, lalu nama, β€œ=” dan nilai), mis. garis seperti "sapgui.shortcut.file: -system=SID"itu akan tetap berfungsi, lalu tanpa spasi"sapgui.shortcut.file:-system=SID"tidak berfungsi lagi.

Ternyata pada prinsipnya ada dua pilihan untuk menggunakan protokol URI:

  1. Menggunakan tanpa parameter: Kami membuat sejumlah besar protokol untuk semua jenis sistem kami SIDMANDT, menyukai AAA200, BBB200 dan seterusnya. Jika Anda hanya perlu memulai sistem yang diinginkan, maka opsi ini cukup bisa diterapkan, tetapi dalam kasus kami ini tidak cocok, karena setidaknya Anda ingin mentransfer login pengguna, tetapi ini tidak dapat dilakukan dengan cara ini.
  2. Menggunakan program pembungkus untuk menelepon sapshcut.exe ΠΈΠ»ΠΈ sapgui.exe. Inti dari program ini sederhana - program ini harus mengambil string yang dikirimkan browser melalui protokol web dan mengubahnya menjadi representasi yang diterima Windows, yaitu. mengubah semua kode karakter kembali menjadi karakter (bahkan mungkin mem-parsing string sesuai dengan parameter) dan sudah memanggil SAP GUI dengan perintah yang dijamin benar. Dalam kasus kami, ini juga tidak sepenuhnya cocok (itulah sebabnya saya bahkan tidak menulisnya), karena kami tidak cukup menambahkan protokol di semua PC pengguna (dalam domain ini masih baik-baik saja, meskipun lebih baik juga hindari praktik ini), tetapi di sini kita perlu lebih banyak menempatkan program di PC, dan juga selalu memastikan bahwa program tersebut tidak hilang ketika perangkat lunak diinstal ulang di PC.

Itu. Kami juga membuang opsi ini karena tidak cocok untuk kami.

Pada titik ini saya sudah mulai berpikir bahwa saya harus mengucapkan selamat tinggal pada gagasan meluncurkan SAP GUI dengan parameter yang diperlukan dari browser, tetapi kemudian terlintas di benak saya bahwa Anda dapat membuat pintasan di SAP Logon dan salin ke desktop Anda. Saya pernah menggunakan cara ini satu kali, namun sebelumnya saya tidak secara spesifik melihat file shortcutnya. Dan ternyata shortcut ini adalah file teks biasa dengan ekstensi .getah. Dan jika Anda menjalankannya di Windows, SAP GUI akan diluncurkan dengan parameter yang ditentukan dalam file ini. "Bingo!"

Format file ini kira-kira sebagai berikut (mungkin juga ada transaksi yang diluncurkan saat startup, tapi saya hilangkan):

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

Tampaknya semua yang diperlukan: pengidentifikasi sistem, klien, nama pengguna, dan bahkan kata sandi. Dan bahkan parameter tambahan: Judul - judul jendela, Ukuran Gui β€” ukuran jendela yang sedang berjalan (layar penuh atau tidak) dan Reuse β€” apakah perlu membuka jendela baru atau menggunakan jendela yang sudah terbuka dengan sistem yang sama. Namun nuansa langsung muncul - ternyata password di SAP Logon tidak bisa diatur, salurannya diblokir. Ternyata hal ini dilakukan untuk alasan keamanan: ia menyimpan semua pintasan yang dibuat di SAP Logon dalam sebuah file sapshortcut.ini (Di dekat saplogon.ini di profil pengguna Windows) dan di sana, meskipun dienkripsi, enkripsinya tidak terlalu kuat dan, jika diinginkan, dapat didekripsi. Namun Anda dapat mengatasinya dengan mengubah nilai salah satu parameter di registri (nilai defaultnya adalah 0):

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

Ini membuka kunci bidang Kata Sandi untuk entri pada formulir pembuatan pintasan di SAP Logon:

Meluncurkan SAP GUI dari browser

Dan ketika Anda memasukkan kata sandi di bidang ini, kata sandi itu akan ditempatkan di baris yang sesuai
sapshortcut.ini, namun saat Anda menyeret pintasan ke desktop, pintasan tersebut tidak muncul di sana - namun Anda dapat menambahkannya di sana secara manual. Kata sandi dienkripsi, untuk 111111 adalah sebagai berikut: PW_49B02219D1F6, untuk 222222 - PW_4AB3211AD2F5. Namun kami lebih tertarik pada kenyataan bahwa kata sandi ini dienkripsi dengan satu cara, tidak bergantung pada PC tertentu, dan jika kami menyetel ulang kata sandi ke kata sandi awal, maka kami dapat menggunakan satu nilai yang telah diketahui sebelumnya di bidang ini. Nah, jika kita ingin menggunakan kata sandi yang dibuat secara acak, kita harus memahami algoritma sandi ini. Namun dilihat dari contoh yang diberikan, hal ini tidak akan sulit untuk dilakukan. Omong-omong, di SAP GUI 7.40 bidang ini benar-benar hilang dari formulir, tetapi menerima file dengan kata sandi yang diisi dengan benar.

Artinya, ternyata di browser Anda hanya perlu mengklik link ke file dengan ekstensi .sap dan format yang diinginkan - dan browser akan menawarkan untuk membukanya sebagai file seperti SAP GUI Shortcut (tentu saja di PC dengan SAP GUI terinstal) dan akan membuka jendela SAP GUI dengan parameter yang ditentukan (jika pasangan SID dan klien ada dalam daftar SAP Logon di PC ini).

Namun, jelas bahwa tidak ada seorang pun yang akan membuat file terlebih dahulu dan menyimpannya di situs - file tersebut harus dibuat berdasarkan parameter yang diperlukan. Misalnya, Anda dapat membuat skrip PHP untuk menghasilkan 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 menentukan nama pengguna dan kata sandi, Anda akan mendapatkan jendela berikut yang meminta login dan kata sandi:

Meluncurkan SAP GUI dari browser

Jika Anda hanya memasukkan login, kolom login akan terisi dan kolom kata sandi akan kosong. Jika kami memberikan login dan kata sandi kepada pengguna, tetapi pengguna di PC memiliki kunci EnablePassword di registri di bagian [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] disetel ke 0, maka kami mendapatkan hal yang sama. Dan hanya jika kunci ini disetel ke 1 dan kami memberikan nama dan kata sandi awal, sistem akan segera meminta Anda memasukkan kata sandi permanen baru sebanyak dua kali. Itulah yang perlu kami dapatkan.

Hasilnya, kami memiliki serangkaian opsi yang dipertimbangkan sebagai ilustrasi dari semua hal 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>

Opsi terakhir cocok untuk saya. Namun alih-alih membuat pintasan SAP, Anda juga dapat menggunakan, misalnya, membuat file CMD, yang jika dibuka dari browser, juga akan membuka jendela SAP GUI untuk Anda. Di bawah ini adalah contohnya (sapguicmd.php) langsung meluncurkan SAP GUI dengan string koneksi lengkap, tanpa perlu mengkonfigurasi 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

Tambah komentar