راه اندازی SAP GUI از یک مرورگر

من برای اولین بار این مقاله را در من نوشتم وبلاگ، برای اینکه بعداً جستجو نکنم و دوباره به خاطر بیاورم، اما چون کسی وبلاگ را نمی خواند، می خواستم این اطلاعات را با همه به اشتراک بگذارم، اگر کسی آن را مفید بیابد.

هنگام کار بر روی ایده سرویس بازنشانی رمز عبور در سیستم های SAP R/3، یک سوال مطرح شد - چگونه می توان SAP GUI را با پارامترهای لازم از مرورگر راه اندازی کرد؟ از آنجایی که این ایده مستلزم استفاده از یک وب سرویس بود، ابتدا به درخواست SOAP از رابط کاربری گرافیکی SAP پاسخ داده و نامه ای با پیوند به یک صفحه وب با اسکریپتی برای بازنشانی رمز عبور به رمز اولیه ارسال می شود و سپس برای کاربر نمایش داده می شود. یک پیام در مورد بازنشانی موفقیت آمیز رمز عبور و نمایش این رمز عبور اولیه، سپس من می خواهم این صفحه پیوندی برای راه اندازی SAP GUI داشته باشد. علاوه بر این، این پیوند باید سیستم مورد نظر را باز کند و ترجیحاً با پر کردن فیلدهای ورود و رمز عبور به یکباره: کاربر فقط باید دو بار رمز عبور تولیدی را پر کند.

راه اندازی SAP Logon برای هدف ما جالب نبود و هنگام اجرای sapgui.exe تعیین نام مشتری و کاربر غیرممکن بود، اما امکان راه اندازی سیستمی وجود داشت که در SAP Logon تعریف نشده بود. از سوی دیگر، راه اندازی SAP GUI با پارامترهای سرور دلخواه چندان مرتبط نبود: اگر مشکل بازنشانی رمز عبور کاربر را حل کنیم، به احتمال زیاد او قبلاً خط لازم را در SAP Logon با تنظیمات مورد نیاز خود دارد و در آنجا وجود دارد. نیازی به درگیر شدن با خودش نیست اما الزامات مشخص شده توسط فناوری SAP GUI Shortcut و خود برنامه sapshcut.exe برآورده شد که امکان راه اندازی SAP GUI را با استفاده از یک "میانبر" خاص فراهم کرد.

حل مشکل به صورت مستقیم: راه اندازی sapshcut.exe مستقیماً از مرورگر با استفاده از یک شی 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');
}

راه حل بد است: اولاً فقط در اینترنت اکسپلورر کار می کند ، ثانیاً به تنظیمات امنیتی مناسب در مرورگر نیاز دارد که در یک سازمان ممکن است در سطح دامنه ممنوع شود و حتی اگر مجاز باشد ، مرورگر پنجره ای ترسناک را نشان می دهد. هشدار به کاربر:

راه اندازی SAP GUI از یک مرورگر

من راه حل شماره 2 را در اینترنت پیدا کردم: ایجاد پروتکل وب خود. به ما امکان می دهد با استفاده از پیوندی که پروتکل را نشان می دهد ، برنامه مورد نیاز خود را راه اندازی کنیم ، که ما خودمان آن را در ویندوز در رجیستری در بخش HKEY_CLASSES_ROOT ثبت می کنیم. از آنجایی که میانبر SAP GUI دارای زیربخش خاص خود در این بخش است، می توانید پارامتر رشته پروتکل URL را با مقدار خالی در آنجا اضافه کنید:

راه اندازی SAP GUI از یک مرورگر

این پروتکل شروع می شود sapgui.exe با پارامتر /میانبر، دقیقا همان چیزی است که ما نیاز داریم:

راه اندازی SAP GUI از یک مرورگر

خوب، یا اگر بخواهیم یک پروتکل کاملا دلخواه بسازیم (به عنوان مثال، sapshcut، سپس می توانید آن را با استفاده از فایل 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 از یک مرورگر

و همه چیز عالی به نظر می رسد، اما وقتی روی دکمه "Allow" کلیک می کنید، می بینیم:

راه اندازی SAP GUI از یک مرورگر

اوه، مرورگر فاصله را به %20 تبدیل کرد. خوب، سایر کاراکترها نیز با نماد درصد در کد عددی خود کدگذاری می شوند. و ناخوشایندترین چیز این است که در اینجا هیچ کاری در سطح مرورگر نمی توان انجام داد (همه چیز در اینجا طبق استاندارد انجام می شود) - مرورگر چنین کاراکترهایی را دوست ندارد و مفسر فرمان ویندوز با چنین مقادیر رمزگذاری شده کار نمی کند. و یک منهای دیگر - کل رشته به عنوان پارامتر ارسال می شود، از جمله نام پروتکل و حتی کولون (sapgui.shortcut.file:). علاوه بر این، اگر چه همان sapshcut.exe می‌تواند هر چیزی را که پارامتری برای آن نیست (با نماد «-»، سپس نام، «=» و مقدار شروع می‌شود، دور بریزد. خطی مانند "sapgui.shortcut.file: -system=SID"هنوز کار خواهد کرد، سپس بدون فاصله"sapgui.shortcut.file:-system=SID"دیگر کار نمیکند.

به نظر می رسد که در اصل، دو گزینه برای استفاده از پروتکل URI وجود دارد:

  1. استفاده بدون پارامتر: ما یک دسته کامل از پروتکل ها را برای همه سیستم های خود ایجاد می کنیم سیدمانت، پسندیدن AAA200, BBB200 و غیره اگر فقط نیاز به راه اندازی سیستم مورد نظر دارید، این گزینه کاملاً قابل اجرا است، اما در مورد ما مناسب نیست، زیرا حداقل می خواهید ورود کاربر را انتقال دهید، اما این کار را نمی توان به این روش انجام داد.
  2. استفاده از یک برنامه wrapper برای تماس sapshcut.exe یا sapgui.exe. ماهیت این برنامه ساده است - باید رشته ای را که مرورگر از طریق پروتکل وب به آن منتقل می کند گرفته و آن را به نمایشی که ویندوز دریافت می کند تبدیل کند. همه کدهای کاراکتر را دوباره به کاراکتر تبدیل می کند (شاید حتی رشته را بر اساس پارامترها تجزیه می کند) و قبلاً SAP GUI را با یک فرمان صحیح تضمین شده فراخوانی می کند. در مورد ما نیز کاملاً مناسب نیست (به همین دلیل من حتی آن را ننوشتم)، زیرا برای ما کافی نیست که پروتکل را در تمام رایانه های شخصی کاربر اضافه کنیم (در یک دامنه این هنوز هم درست است، اگرچه بهتر است که از این عمل اجتناب کنید)، اما در اینجا ما نیاز داریم که برنامه را روی رایانه شخصی بیشتر قرار دهیم و همچنین دائماً اطمینان حاصل کنیم که هنگام نصب مجدد نرم افزار روی رایانه، از بین نمی رود.

آن ها ما همچنین این گزینه را به عنوان نامناسب برای ما کنار می گذاریم.

در این مرحله من از قبل داشتم فکر می کردم که باید با ایده راه اندازی SAP GUI با پارامترهای لازم از مرورگر خداحافظی کنم، اما بعد این ایده به ذهنم رسید که می توانید یک میانبر در SAP Logon ایجاد کنید و آن را روی دسکتاپ خود کپی کنید. من یک بار از این روش استفاده کردم، اما قبل از آن به طور خاص به فایل میانبر نگاه نکردم. و معلوم شد که این میانبر یک فایل متنی معمولی با پسوند است .شیره. و اگر آن را روی ویندوز اجرا کنید، 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 را در یک فایل ذخیره می کند sapsshortcut.ini (نزدیک saplogon.ini در پروفایل کاربر ویندوز) و در آنجا، اگرچه رمزگذاری شده اند، اما خیلی قوی رمزگذاری نشده اند و در صورت تمایل، می توان آنها را رمزگشایی کرد. اما شما می توانید این مشکل را با تغییر مقدار یک پارامتر در رجیستری حل کنید (مقدار پیش فرض است 0):

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

با این کار قسمت Password برای ورود به فرم ایجاد میانبر در SAP Logon باز می شود:

راه اندازی SAP GUI از یک مرورگر

و زمانی که در این قسمت رمز عبور وارد می کنید در خط مربوطه قرار می گیرد
sapsshortcut.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 از یک مرورگر

اگر فقط ورود به سیستم را پاس کنید، فیلد ورود پر می شود و قسمت رمز عبور خالی می شود. اگر به کاربر هم ورود و هم رمز عبور بدهیم، اما کاربر روی رایانه شخصی کلید EnablePassword را در رجیستری در بخش [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] روی 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 را با رشته اتصال کامل، بدون نیاز به پیکربندی 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";
?>

منبع: www.habr.com

اضافه کردن نظر