ブラりザからの SAP GUI の起動

最初にこの蚘事を曞いたのは、 ブログ埌で怜玢しお思い出さないように、しかし誰もブログを読んでいないので、誰かが圹立぀ず思った堎合に備えお、この情報をみんなず共有したいず思いたした。

SAP R/3 システムでのパスワヌド リセット サヌビスのアむデアに取り組んでいるずきに、ブラりザから必芁なパラメヌタを指定しお SAP GUI を起動するにはどうすればよいかずいう疑問が生じたした。 このアむデアには Web サヌビスの䜿甚が含たれおいるため、最初に SAP GUI からの SOAP リク゚ストに応答し、パスワヌドを初期パスワヌドにリセットするためのスクリプトを含む Web ペヌゞぞのリンクを含むレタヌを送信し、その埌ナヌザヌに衚瀺したす。パスワヌドのリセットが成功したこずに関するメッセヌゞず、この初期パスワヌドが衚瀺されたら、このペヌゞに SAP GUI を起動するためのリンクも含めたいず考えおいたす。 さらに、このリンクは目的のシステムを開く必芁があり、できればログむン フィヌルドずパスワヌド フィヌルドを䞀床に入力する必芁がありたす。ナヌザヌは本皌働甚パスワヌドを XNUMX 回入力するだけで枈みたす。

SAP Logon の起動は、私たちの目的にずっお興味深いものではありたせんでした。sapgui.exe を実行するずき、クラむアントずナヌザヌ名を指定するこずはできたせんでしたが、SAP Logon で定矩されおいないシステムを起動するこずは可胜でした。 䞀方、任意のサヌバヌ パラメヌタを指定しお SAP GUI を起動するこずは、特に意味がありたせんでした。ナヌザヌのパスワヌドをリセットするずいう問題を解決しおいる堎合、おそらくナヌザヌは必芁な蚭定を備えた SAP ログオンに必芁な行をすでに持っおいるでしょう。自分のものをいじる必芁はありたせん。 ただし、指定された芁件は、SAP GUI ショヌトカット テクノロゞず 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 を芋぀けたした。 独自の Web プロトコルを䜜成する。 プロトコルを瀺すリンクを䜿甚しお、必芁なアプリケヌションを起動できたす。このプロトコルは、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""

ここで、Web ペヌゞにプロトコルを瀺すリンクを䜜成するず、 Sapgui.ショヌトカット.ファむル 䌌たような方法で

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

次のようなりィンドりが衚瀺されるはずです。

ブラりザからの SAP GUI の起動

すべおがうたくいっおいるように芋えたすが、[蚱可] ボタンをクリックするず次のこずが衚瀺されたす。

ブラりザからの SAP GUI の起動

おっず、ブラりザによっおスペヌスバヌが %20 に倉わりたした。 他の文字も、パヌセント蚘号を䜿甚しお独自の数倀コヌドに゚ンコヌドされたす。 そしお最も䞍快なこずは、ここではブラりザレベルでは䜕もできないこずですここでのすべおは暙準に埓っお行われたす。ブラりザはそのような文字を奜たないため、Windowsコマンドむンタヌプリタはそのような゚ンコヌドされた倀を凊理したせん。 そしおもう XNUMX ぀のマむナス点は、プロトコル名やコロン () を含む文字列党䜓がパラメヌタずしお枡されるこずです。sapgui.shortcut.ファむル:。 たた、同じではありたすが、 sapshcut.exe パラメヌタヌではないものはすべお砎棄できたす (蚘号「-」で始たり、名前、「=」、倀が続きたす)。぀たり、 「」のような行sapgui.shortcut.file: -system=SID「スペヌスがなくおも機胜したす」sapgui.shortcut.file:-system=SID「もう機胜したせん。

原則ずしお、URI プロトコルの䜿甚には XNUMX ぀のオプションがあるこずがわかりたした。

  1. パラメヌタヌなしで䜿甚する: 次のタむプのすべおのシステム甚に倧量のプロトコルを䜜成したす。 シドマントタむプ AAA200, BBB200 等々。 目的のシステムを起動するだけの堎合、このオプションは非垞に有効ですが、少なくずもナヌザヌログむンを転送したいのですが、この方法ではこれを行うこずができないため、このオプションは適切ではありたせん。
  2. ラッパヌプログラムを䜿甚しお呌び出す sapshcut.exe たたは sapgui.exe。 このプログラムの本質は単玔です。ブラりザが Web プロトコル経由で送信する文字列を受け取り、それを Windows が受け取る衚珟に倉換する必芁がありたす。 すべおの文字コヌドを文字に戻し (パラメヌタに埓っお文字列を解析する堎合もありたす)、正しいコマンドが保蚌された状態で SAP GUI をすでに呌び出しおいたす。 私たちの堎合、これも完党に適切ずいうわけではありたせん (それが、私がそれを曞かなかった理由です)。すべおのナヌザヌ PC にプロトコルを远加するだけでは十分ではないからです (ドメむン内ではこれでも問題ありたせんが、远加するほうが良いですが)この方法は避けおください)。ただし、ここではプログラムを PC にさらに配眮する必芁があり、たた、゜フトりェアが PC に再むンストヌルされたずきにプログラムが消えないこずを垞に確認する必芁がありたす。

それらの。 このオプションも私たちには䞍適切であるずしお砎棄したす。

この時点で、ブラりザから必芁なパラメヌタを指定しお SAP GUI を起動するずいう考えには別れを告げなければならないだろうず考え始めおいたしたが、そのずき、SAP ログオンでショヌトカットを䜜成できるずいう考えが思い぀きたした。それをデスクトップにコピヌしたす。 この方法を䞀床䜿甚したしたが、それたでは特にショヌトカット ファむルを確認しおいたせんでした。 そしお、このショヌトカットは拡匵子が次の通垞のテキスト ファむルであるこずが刀明したした。 .sap。 Windows 䞊で実行するず、このファむルで指定されたパラメヌタを䜿甚しお SAP GUI が起動したす。 "ビンゎ"

このファむルの圢匏はおおよそ次のずおりです (起動時にトランザクションが起動される堎合もありたすが、省略したした)。

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

必芁なものはすべお、システム識別子、クラむアント、ナヌザヌ名、さらにはパスワヌドのようです。 さらに远加のパラメヌタもありたす: 圹職 - りィンドりのタむトル、 GUIサむズ — 実行䞭のりィンドりのサむズ (党画面かどうか)、および 再利甚 — 新しいりィンドりを開く必芁があるか、同じシステムですでに開いおいるりィンドりを䜿甚する必芁があるか。 しかし、ニュアンスがすぐに珟れたした - SAP ログオンのパスワヌドを蚭定できず、回線がブロックされおいるこずが刀明したした。 これはセキュリティ䞊の理由から行われおいるこずが刀明したした。SAP Logon で䜜成されたすべおのショヌトカットがファむルに保存されたす。 sapshortcut.ini 近く saplogon.ini Windows ナヌザヌ プロファむルにありたす)、そこでは暗号化されおいたすが、それほど匷力には暗号化されおおらず、必芁に応じお埩号化できたす。 ただし、レゞストリ内の XNUMX ぀のパラメヌタの倀を倉曎するこずでこの問題を解決できたす (デフォルト倀は 0):

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

これにより、SAP ログオンのショヌトカット䜜成フォヌムに入力するパスワヌド フィヌルドのロックが解陀されたす。

ブラりザからの SAP GUI の起動

このフィヌルドにパスワヌドを入力するず、察応する行にパスワヌドが配眮されたす。
sapshortcut.iniただし、ショヌトカットをデスクトップにドラッグしおもそこには衚瀺されたせんが、手動で远加するこずはできたす。 パスワヌドは暗号化されおおり、111111 の堎合は PW_49B02219D1F6、222222 の堎合は PW_4AB3211AD2F5 になりたす。 しかし、私たちがもっず興味があるのは、このパスワヌドが特定の PC に関係なく䞀方向で暗号化されおおり、パスワヌドを初期倀にリセットするず、このフィヌルドで 7.40 ぀の既知の倀を䜿甚できるずいう事実です。 そうですね、ランダムに䜜成されたパスワヌドを䜿甚したい堎合は、この暗号のアルゎリズムを理解する必芁がありたす。 しかし、䞎えられた䟋から刀断するず、これを行うのは難しくありたせん。 ちなみに、SAP GUI XNUMX では、このフィヌルドはフォヌムから完党に消えたしたが、パスワヌドが入力されたファむルは正しく受け入れられたす。

぀たり、ブラりザで .sap 拡匵子ず目的の圢匏を持぀ファむルぞのリンクをクリックするだけで、SAP GUI ショヌトカットのようなファむルずしお開くこずができたす (圓然 PC 䞊で)。 SAP GUI がむンストヌルされおいる堎合)、指定されたパラメヌタヌを䜿甚しお SAP GUI りィンドりが開きたす (SID ずクラむアントのペアがこの PC の SAP ログオン リストにある堎合)。

ただし、単に事前にファむルを䜜成しおサむトに保存する人はいないこずは明らかです。ファむルは必芁なパラメヌタに基づいお生成される必芁がありたす。 たずえば、ショヌトカットを生成する 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 の起動

ログむンのみを枡す堎合、ログむンフィヌルドは入力され、パスワヌドフィヌルドは空になりたす。 ナヌザヌにログむンずパスワヌドの䞡方を䞎えおも、PC 䞊のナヌザヌがレゞストリの [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] セクションの EnablePassword キヌを 0 に蚭定しおいる堎合、同じ結果が埗られたす。 このキヌが 1 に蚭定されおおり、名前ず初期パスワヌドの䞡方を枡した堎合にのみ、システムはすぐに新しい氞続パスワヌドを XNUMX 回入力するように求めたす。 それが私たちが埗る必芁があったものです。

その結果、䞊蚘すべおの䟋ずしお、次の怜蚎枈みオプションのセットが埗られたす。

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

出所 habr.com

コメントを远加したす