Brauzerdan SAP GUI ishga tushirilmoqda

Men ushbu maqolani birinchi marta o'z sahifamda yozganman blog, keyinroq qidirmaslik va eslab qolmaslik uchun, lekin blogni hech kim o'qimaganligi sababli, kimdir foydali deb topsa, bu ma'lumotni hamma bilan baham ko'rmoqchi edim.

SAP R/3 tizimlarida parolni tiklash xizmati g'oyasi ustida ishlayotganda savol tug'ildi - brauzerdan kerakli parametrlar bilan SAP GUI-ni qanday ishga tushirish kerak? Ushbu g'oya veb-xizmatdan foydalanishni nazarda tutganligi sababli, avval SAP GUI-dan SOAP so'roviga javob berish va parolni dastlabkisiga tiklash skripti bilan veb-sahifaga havola bilan xat yuborish va keyin foydalanuvchiga ko'rsatish. Muvaffaqiyatli parolni tiklash va ushbu dastlabki parolni ko'rsatish haqida xabar, keyin men ushbu sahifada SAP GUI-ni ishga tushirish uchun havola bo'lishini xohlayman. Bundan tashqari, ushbu havola kerakli tizimni ochishi kerak va afzalroq, login va parol maydonlarini bir vaqtning o'zida to'ldirishi kerak: foydalanuvchi samarali parolni faqat ikki marta to'ldirishi kerak.

SAP Logon-ni ishga tushirish bizning maqsadimiz uchun qiziq emas edi va sapgui.exe-ni ishga tushirishda mijoz va foydalanuvchi nomini ko'rsatish mumkin emas edi, lekin SAP Logon-da aniqlanmagan tizimni ishga tushirish mumkin edi. Boshqa tomondan, o'zboshimchalik bilan server parametrlari bilan SAP GUI-ni ishga tushirish unchalik dolzarb emas edi: agar biz foydalanuvchi parolini tiklash muammosini hal qilayotgan bo'lsak, u holda SAP Logon-da unga kerakli sozlamalar bilan kerakli qatorga ega bo'lishi mumkin. o'zi bilan aralashishning hojati yo'q. Ammo belgilangan talablarga SAP GUI Shortcut texnologiyasi va sapshcut.exe dasturining o'zi javob berdi, bu esa SAP GUI-ni ma'lum bir "yorliq" yordamida ishga tushirishga imkon berdi.

Muammoni to'g'ridan-to'g'ri hal qilish: ActiveX ob'ekti yordamida to'g'ridan-to'g'ri brauzerdan sapshcut.exe faylini ishga tushirish:

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

Yechim yomon: birinchidan, u faqat Internet Explorer-da ishlaydi, ikkinchidan, u brauzerda tegishli xavfsizlik sozlamalarini talab qiladi, bu tashkilotda domen darajasida taqiqlangan bo'lishi mumkin va ruxsat berilgan taqdirda ham brauzer qo'rqinchli oynani ko'rsatadi. foydalanuvchiga ogohlantirish:

Brauzerdan SAP GUI ishga tushirilmoqda

Internetda β„–2 yechim topdim: o'z veb-protokolingizni yaratish. Biz o'zimiz Windows-da HKEY_CLASSES_ROOT bo'limidagi ro'yxatga olish kitobida ro'yxatdan o'tadigan protokolni ko'rsatadigan havoladan foydalanib kerakli dasturni ishga tushirishga imkon beradi. SAP GUI yorlig'i ushbu bo'limda o'z bo'limiga ega bo'lganligi sababli, u erda bo'sh qiymat bilan URL Protocol string parametrini qo'shishingiz mumkin:

Brauzerdan SAP GUI ishga tushirilmoqda

Ushbu protokol boshlanadi sapgui.exe parametr bilan /SHORTCUT, bu bizga aynan kerak bo'lgan narsa:

Brauzerdan SAP GUI ishga tushirilmoqda

Xo'sh, yoki biz butunlay o'zboshimchalik bilan protokol tuzmoqchi bo'lsak (masalan, sapshcut), keyin uni quyidagi reg fayli yordamida ro'yxatdan o'tkazishingiz mumkin:

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

Endi biz protokolni ko'rsatuvchi veb-sahifada havola qilsak Sapgui.Shortcut.File Xuddi shunday tarzda:

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

Biz shunday oynani ko'rishimiz kerak:

Brauzerdan SAP GUI ishga tushirilmoqda

Va hamma narsa ajoyib ko'rinadi, lekin "Ruxsat berish" tugmasini bosganingizda biz quyidagilarni ko'ramiz:

Brauzerdan SAP GUI ishga tushirilmoqda

Voy, brauzer bo'sh joyni %20 ga aylantirdi. Boshqa belgilar ham foiz belgisi bilan o'zlarining raqamli kodlariga kodlanadi. Va eng yoqimsiz narsa shundaki, bu erda brauzer darajasida hech narsa qilish mumkin emas (bu erda hamma narsa standartga muvofiq amalga oshiriladi) - brauzer bunday belgilarni yoqtirmaydi va Windows buyruq tarjimoni bunday kodlangan qiymatlar bilan ishlamaydi. Va yana bir minus - butun satr parametr sifatida uzatiladi, jumladan protokol nomi va hatto ikki nuqta (sapgui.shortcut.file:). Bundan tashqari, bir xil bo'lsa-da sapshcut.exe u uchun parametr bo'lmagan hamma narsani tashlab yuborishi mumkin ("-" belgisi bilan boshlanadi, keyin ism, "=" va qiymat), ya'ni. " kabi qatorsapgui.shortcut.file: -system=SID"U hali ham ishlaydi, keyin bo'sh joysiz"sapgui.shortcut.file:-system=SID"Endi ishlamaydi.

Ma'lum bo'lishicha, printsipial jihatdan URI protokolidan foydalanishning ikkita varianti mavjud:

  1. Parametrlarsiz foydalanish: Biz barcha turdagi tizimlarimiz uchun protokollar to'plamini yaratamiz SIDMANDT, turi AAA200, BBB200 va h.k. Agar siz shunchaki kerakli tizimni ishga tushirishingiz kerak bo'lsa, unda variant juda mos keladi, ammo bizning holatlarimizda bu mos emas, chunki siz hech bo'lmaganda foydalanuvchi loginini o'tkazmoqchisiz, ammo buni shunday qilish mumkin emas.
  2. Qo'ng'iroq qilish uchun o'rash dasturidan foydalanish sapshcut.exe yoki sapgui.exe. Ushbu dasturning mohiyati oddiy - u veb-protokol orqali brauzer unga uzatadigan satrni olishi va uni Windows qabul qiladigan vakillikka aylantirishi kerak, ya'ni. barcha belgilar kodlarini yana belgilarga aylantiradi (ehtimol, hatto parametrlarga ko'ra satrni tahlil qiladi) va allaqachon kafolatlangan to'g'ri buyruq bilan SAP GUI-ni chaqiradi. Bizning holatda, bu ham to'liq mos emas (shuning uchun men uni yozmadim), chunki barcha foydalanuvchi shaxsiy kompyuterlarida protokol qo'shish biz uchun etarli emas (domen ichida bu hali ham yaxshi, lekin undan ham yaxshiroq bo'lsa ham. Ushbu amaliyotdan qoching), lekin bu erda biz dasturni shaxsiy kompyuterga ko'proq joylashtirishimiz kerak, shuningdek, dasturiy ta'minot kompyuterga qayta o'rnatilganda uning o'chib ketmasligiga doimo ishonch hosil qilishimiz kerak.

Bular. Shuningdek, biz ushbu variantni o'zimizga mos kelmasligi uchun bekor qilamiz.

Ayni paytda men brauzerdan kerakli parametrlar bilan SAP GUI-ni ishga tushirish g'oyasi bilan xayrlashishim kerak deb o'ylay boshladim, lekin keyin menda SAP Logon va yorliq yaratishingiz mumkin degan fikr paydo bo'ldi. uni ish stolingizga nusxalash. Men bu usulni bir marta ishlatganman, lekin bundan oldin men yorliq fayliga alohida qaramadim. Va bu yorliq kengaytmali oddiy matn fayli ekanligi ma'lum bo'ldi .sap. Va agar siz uni Windows-da ishga tushirsangiz, SAP GUI ushbu faylda ko'rsatilgan parametrlar bilan ishga tushadi. "Bingo!"

Ushbu faylning formati taxminan quyidagicha (shuningdek, ishga tushirish paytida boshlangan tranzaksiya ham bo'lishi mumkin, lekin men uni o'tkazib yuborganman):

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

Aftidan, kerak bo'lgan hamma narsa: tizim identifikatori, mijoz, foydalanuvchi nomi va hatto parol. Va hatto qo'shimcha parametrlar: sarlavha - oyna nomi, GuiSize β€” ishlaydigan oynaning o'lchami (to'liq ekran yoki yo'q) va Qayta foydalanish β€” yangi oyna ochish kerakmi yoki xuddi shu tizim bilan allaqachon ochilgan oynadan foydalanish kerakmi. Ammo darhol bir nuance paydo bo'ldi - SAP Logon-da parolni o'rnatib bo'lmagani, chiziq bloklanganligi ma'lum bo'ldi. Bu xavfsizlik nuqtai nazaridan qilinganligi ma'lum bo'ldi: u SAP Logon-da yaratilgan barcha yorliqlarni faylda saqlaydi. sapshortcut.ini (Yaqin saplogon.ini Windows foydalanuvchi profilida) va u erda, ular shifrlangan bo'lsa-da, ular juda kuchli shifrlanmagan va agar kerak bo'lsa, shifrini ochish mumkin. Ammo siz buni ro'yxatga olish kitobidagi bitta parametrning qiymatini o'zgartirish orqali hal qilishingiz mumkin (standart qiymat 0):

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

Bu SAP tizimga kirishda yorliq yaratish formasiga kirish uchun Parol maydonini qulfdan chiqaradi:

Brauzerdan SAP GUI ishga tushirilmoqda

Va bu maydonga parolni kiritganingizda, u tegishli qatorga joylashtiriladi
sapshortcut.ini, lekin yorliqni ish stoliga sudrab olib borganingizda, u erda ko'rinmaydi - lekin uni qo'lda qo'shishingiz mumkin. Parol shifrlangan, 111111 uchun u quyidagicha bo'ladi: PW_49B02219D1F6, 222222 uchun - PW_4AB3211AD2F5. Ammo bizni ushbu parolning ma'lum bir shaxsiy kompyuterdan mustaqil ravishda shifrlanganligi ko'proq qiziqtiradi va agar parolni dastlabkisiga o'rnatsak, biz ushbu sohada oldindan ma'lum bo'lgan bitta qiymatdan foydalanishimiz mumkin. Xo'sh, agar biz tasodifiy yaratilgan paroldan foydalanmoqchi bo'lsak, biz ushbu shifrning algoritmini tushunishimiz kerak bo'ladi. Ammo keltirilgan misollarga ko'ra, buni qilish qiyin bo'lmaydi. Aytgancha, SAP GUI 7.40 da bu maydon formadan butunlay yo'qoldi, ammo u to'ldirilgan parol bilan faylni to'g'ri qabul qiladi.

Ya'ni, brauzerda siz shunchaki .sap kengaytmali va kerakli formatdagi faylga havolani bosishingiz kerak bo'ladi - va u uni SAP GUI Shortcut tipidagi fayl sifatida ochishni taklif qiladi (tabiiy ravishda SAP GUI o'rnatilgan kompyuter) va belgilangan parametrlarga ega SAP GUI oynasini ochadi (agar SID va mijoz juftligi ushbu kompyuterda SAP tizimga kirish ro'yxatida bo'lsa).

Ammo, hech kim shunchaki fayllarni oldindan yaratmasligi va ularni saytda saqlamasligi aniq - ular kerakli parametrlar asosida yaratilishi kerak. Masalan, yorliqlarni yaratish uchun PHP skriptini yaratishingiz mumkin (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";
?>

Agar foydalanuvchi nomi va parolni ko'rsatmasangiz, login va parolni so'rab quyidagi oynani olasiz:

Brauzerdan SAP GUI ishga tushirilmoqda

Agar siz faqat logindan o'tsangiz, login maydoni to'ldiriladi va parol maydoni bo'sh bo'ladi. Agar biz foydalanuvchiga login va parolni ham bersak, lekin shaxsiy kompyuterdagi foydalanuvchi [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] bo'limidagi registrda EnablePassword kalitiga ega bo'lsa, u holda biz bir xil narsani olamiz. Va agar bu kalit 0 ga o'rnatilgan bo'lsa va biz ism va boshlang'ich parolni o'tkazsak, tizim darhol yangi doimiy parolni ikki marta kiritishingizni taklif qiladi. Buni olishimiz kerak edi.

Natijada, yuqorida aytilganlarning barchasiga misol sifatida biz quyidagi ko'rib chiqilgan variantlar to'plamiga egamiz:

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

Oxirgi variant menga mos keldi. Ammo SAP yorliqlarini yaratish o'rniga, masalan, brauzerdan ochilganda siz uchun SAP GUI oynasini ochadigan CMD fayllarini yaratishdan ham foydalanishingiz mumkin. Quyida bir misol (sapguicmd.php) to'liq ulanish qatori bilan SAP GUI-ni to'g'ridan-to'g'ri ishga tushiring, SAP Logon sozlanishi kerak emas:

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

Manba: www.habr.com

a Izoh qo'shish