Браузерден SAP GUI іске қосылуда

Мен бұл мақаланы алғаш рет өз парақшама жаздым блог, кейін іздеп, қайта еске түсірмеу үшін, бірақ блогты ешкім оқымайтындықтан, біреу пайдалы деп тапқан жағдайда бұл ақпаратты барлығымен бөліскім келді.

SAP R/3 жүйелерінде құпия сөзді қалпына келтіру қызметі идеясымен жұмыс істеу кезінде сұрақ туындады - браузерден қажетті параметрлермен SAP GUI қалай іске қосу керек? Бұл идея веб-қызметті пайдалануды көздейтіндіктен, алдымен SAP GUI-ден SOAP сұрауына жауап беру және парольді бастапқыға қалпына келтіруге арналған сценарийі бар веб-бетке сілтемесі бар хатты жіберу, содан кейін пайдаланушыға көрсету құпия сөзді сәтті қалпына келтіру және осы бастапқы құпия сөзді көрсету туралы хабарлама , содан кейін мен бұл бетте SAP GUI іске қосу сілтемесі болғанын қалаймын. Сонымен қатар, бұл сілтеме қалаған жүйені ашуы керек және логин мен пароль өрістерін бірден толтыру керек: пайдаланушы өнімді құпия сөзді екі рет толтыруы керек.

SAP Logon іске қосу біздің мақсат үшін қызық болмады, және sapgui.exe файлын іске қосу кезінде клиент пен пайдаланушы атын көрсету мүмкін болмады, бірақ SAP Logon жүйесінде анықталмаған жүйені іске қосу мүмкін болды. Екінші жағынан, ерікті сервер параметрлері бар SAP GUI іске қосу аса маңызды емес еді: егер біз пайдаланушының құпия сөзін қалпына келтіру мәселесін шешетін болсақ, онда оған қажет параметрлері бар SAP Logon жүйесінде қажетті жол бар және сол жерде өзімен араласудың қажеті жоқ. Бірақ көрсетілген талаптарды SAP GUI Shortcut технологиясы және sapshcut.exe бағдарламасының өзі қанағаттандырды, бұл SAP GUI-ді белгілі бір «төте жол» арқылы іске қосуға мүмкіндік берді.

Мәселені тікелей шешу: ActiveX нысанын пайдаланып, sapshcut.exe файлын браузерден тікелей іске қосу:

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

Шешім нашар: біріншіден, ол тек Internet Explorer-де жұмыс істейді, екіншіден, ол браузерде тиісті қауіпсіздік параметрлерін қажет етеді, ұйымда домен деңгейінде тыйым салынуы мүмкін, тіпті рұқсат етілсе де, браузер қорқынышты терезені көрсетеді. пайдаланушыға ескерту:

Браузерден SAP GUI іске қосылуда

Мен Интернетте №2 шешім таптым: өзіңіздің веб-протоколыңызды жасау. Windows жүйесінде HKEY_CLASSES_ROOT бөліміндегі тізілімде өзіміз тіркейтін хаттаманы көрсететін сілтеме арқылы бізге қажет қолданбаны іске қосуға мүмкіндік береді. SAP GUI таңбашасының осы бөлімде өзінің ішкі бөлімі болғандықтан, бос мәнмен URL протоколының жол параметрін қосуға болады:

Браузерден SAP GUI іске қосылуда

Бұл протокол басталады sapgui.exe параметрімен /Қысқа жол, бұл бізге дәл қажет:

Браузерден SAP GUI іске қосылуда

Жақсы, немесе біз толығымен ерікті протокол жасағымыз келсе (мысалы, кесу), содан кейін оны келесі reg файлы арқылы тіркеуге болады:

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

Енді хаттаманы көрсететін веб-бетке сілтеме жасасақ Sapgui.Shortcut.File Сол сияқты:

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

Біз келесідей терезені көруіміз керек:

Браузерден SAP GUI іске қосылуда

Барлығы керемет сияқты, бірақ «Рұқсат ету» түймесін басқан кезде біз көреміз:

Браузерден SAP GUI іске қосылуда

Ой, браузер бос орын пернесін %20-ға айналдырды. Басқа таңбалар да пайыздық таңбамен өздерінің сандық кодына кодталады. Және ең жағымсыз нәрсе - бұл жерде браузер деңгейінде ештеңе істеу мүмкін емес (мұнда бәрі стандартқа сәйкес жасалады) - браузер мұндай таңбаларды ұнатпайды, ал Windows пәрмендерін аудармашы мұндай кодталған мәндермен жұмыс істемейді. Және тағы бір минус - барлық жол протокол атауын және тіпті қос нүктені қоса алғанда, параметр ретінде беріледі (sapgui.shortcut.file:). Оның үстіне, бірдей болса да sapshcut.exe ол үшін параметр болып табылмайтын барлық нәрсені тастай алады («-» таңбасынан басталады, содан кейін атау, «=» және мән), яғни. сияқты жолsapgui.shortcut.file: -system=SID«ол әлі де жұмыс істейді, содан кейін бос орынсыз»sapgui.shortcut.file:-system=SID«енді жұмыс істемейді.

Негізінде URI протоколын пайдаланудың екі нұсқасы бар екен:

  1. Параметрлерсіз пайдалану: Біз типтегі барлық жүйелеріміз үшін хаттамалардың тұтас жиынтығын жасаймыз СИДМАНДТ, сияқты ААА200, BBB200 және т.б. Егер сізге қажет жүйені іске қосу қажет болса, онда опция өте қолайлы, бірақ біздің жағдайда ол қолайлы емес, өйткені сіз кем дегенде пайдаланушы логинін тасымалдағыңыз келеді, бірақ бұлай істеу мүмкін емес.
  2. Қоңырау шалу үшін орауыш бағдарламасын пайдалану sapshcut.exe немесе sapgui.exe. Бұл бағдарламаның мәні қарапайым - ол браузер оған веб-хаттама арқылы жіберетін жолды алып, оны Windows алатын өкілдікке айналдыруы керек, яғни. барлық таңба кодтарын қайтадан таңбаларға айналдырады (мүмкін тіпті жолды параметрлерге сәйкес талдайды) және SAP GUI-ге кепілдік берілген дұрыс пәрменді шақырады. Біздің жағдайда бұл мүлдем жарамсыз (сондықтан да мен оны жазбадым), өйткені протоколды барлық пайдаланушы компьютерлеріне қосу бізге жеткіліксіз (доменде бұл бәрібір жақсы, бірақ оны жасаған дұрыс. бұл тәжірибеден аулақ болыңыз), бірақ бұл жерде бізге бағдарламаны ДК-де көбірек орналастыру керек, сонымен қатар бағдарламалық жасақтама ДК-де қайта орнатылған кезде оның жоғалып кетпеуін үнемі қадағалаңыз.

Анау. Біз бұл опцияны біз үшін жарамсыз деп есептейміз.

Осы кезде мен браузерден қажетті параметрлермен SAP GUI іске қосу идеясымен қоштасуым керек деп ойлай бастадым, бірақ содан кейін маған SAP Logon бағдарламасында төте жолды жасауға болады деген ой келді. оны жұмыс үстеліне көшіріңіз. Мен бұл әдісті бір рет қолдандым, бірақ бұған дейін мен таңбаша файлын арнайы қараған жоқпын. Және бұл таңбаша кеңейтімі бар кәдімгі мәтіндік файл болып шықты .sap. Егер сіз оны Windows жүйесінде іске қоссаңыз, SAP GUI осы файлда көрсетілген параметрлермен іске қосылады. «Бинго!»

Бұл файлдың пішімі шамамен келесідей (іске қосу кезінде іске қосылған транзакция да болуы мүмкін, бірақ мен оны өткізіп жібердім):

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

Барлығы қажет сияқты: жүйе идентификаторы, клиент, пайдаланушы аты және тіпті пароль. Және тіпті қосымша параметрлер: тақырып - терезе тақырыбы, GuiSize — жұмыс істейтін терезенің өлшемі (толық экран немесе жоқ) және Қайта пайдалану — жаңа терезе ашу керек пе немесе сол жүйемен бұрыннан ашылған терезені пайдалану керек пе. Бірақ бірден бір нюанс пайда болды - SAP Logon жүйесінде құпия сөзді орнату мүмкін емес, желі бұғатталған. Бұл қауіпсіздік мақсатында жасалғаны белгілі болды: ол SAP Logon бағдарламасында жасалған барлық таңбашаларды файлда сақтайды. sapshortcut.ini (жанында saplogon.ini Windows пайдаланушы профилінде) және олар шифрланғанымен, олар тым қатты шифрланбаған және қажет болса, шифрын шешуге болады. Бірақ сіз мұны тізілімдегі бір параметрдің мәнін өзгерту арқылы шеше аласыз (әдепкі мән 0):

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

Бұл SAP Logon жүйесінде таңбаша жасау пішініне енгізу үшін Құпия сөз өрісінің құлпын ашады:

Браузерден SAP GUI іске қосылуда

Ал осы өріске парольді енгізген кезде ол сәйкес жолға қойылады
sapshortcut.ini, бірақ төте жолды жұмыс үстеліне сүйреп апарған кезде, ол жерде пайда болмайды - бірақ оны қолмен қосуға болады. Құпия сөз шифрланған, 111111 үшін ол келесідей болады: PW_49B02219D1F6, 222222 үшін - PW_4AB3211AD2F5. Бірақ бізді бұл құпия сөздің белгілі бір компьютерге тәуелсіз бір жолмен шифрланғаны қызықтырады және егер құпия сөзді бастапқыға қалпына келтірсек, онда біз осы өрісте алдын ала белгілі бір мәнді пайдалана аламыз. Егер біз кездейсоқ жасалған құпия сөзді қолданғымыз келсе, біз бұл шифрдың алгоритмін түсінуіміз керек. Бірақ келтірілген мысалдарға сүйенсек, мұны істеу қиын болмайды. Айтпақшы, SAP GUI 7.40-да бұл өріс пішіннен толығымен жойылды, бірақ ол толтырылған құпия сөзі бар файлды дұрыс қабылдайды.

Яғни, браузерде .sap кеңейтімі және қалаған пішімі бар файлдың сілтемесін басу керек екендігі белгілі болды - және ол оны SAP GUI Shortcut сияқты файл ретінде ашуды ұсынады (әрине, компьютерде). SAP GUI орнатылған) және көрсетілген параметрлері бар SAP GUI терезесін ашады (егер SID және клиент жұбы осы компьютердегі SAP Logon тізімінде болса).

Бірақ, ешкім файлдарды алдын-ала жасап, оларды сайтта сақтамайтыны анық - олар қажетті параметрлер негізінде құрылуы керек. Мысалы, төте жолдарды жасау үшін PHP сценарийін жасауға болады (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";
?>

Пайдаланушы аты мен құпия сөзді көрсетпесеңіз, логин мен құпия сөзді сұрайтын келесі терезені аласыз:

Браузерден SAP GUI іске қосылуда

Егер сіз тек логинді өткізсеңіз, кіру өрісі толтырылады және құпия сөз өрісі бос болады. Егер пайдаланушыға логинді де, құпия сөзді де берсек, бірақ компьютердегі пайдаланушының [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] бөліміндегі тізілімде EnablePassword кілті 0 мәніне орнатылған болса, онда біз бірдей нәрсені аламыз. Егер бұл кілт 1-ге орнатылған болса және біз атауды да, бастапқы құпия сөзді де өткізсек, жүйе бірден жаңа тұрақты құпия сөзді екі рет енгізуді ұсынады. Бұл бізге жетуіміз керек еді.

Нәтижесінде бізде жоғарыда аталғандардың барлығына мысал ретінде қарастырылған опциялардың келесі жиынтығы бар:

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

Соңғы нұсқа маған ұнады. Бірақ SAP таңбашаларын жасаудың орнына, мысалы, CMD файлдарын жасауды пайдалануға болады, ол браузерден ашылғанда, сіз үшін SAP GUI терезесін де ашады. Төменде мысал келтірілген (sapguicmd.php) SAP Logon конфигурациясын қажет етпей, толық қосылым жолы бар SAP GUI-ді тікелей іске қосыңыз:

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

Ақпарат көзі: www.habr.com

пікір қалдыру