Lanse SAP GUI soti nan yon navigatè

Mwen te premye ekri atik sa a nan mwen Blog, pou pa fè rechèch ak sonje ankò pita, men kòm pèsonn pa li blog la, mwen te vle pataje enfòmasyon sa a ak tout moun, nan ka yon moun jwenn li itil.

Pandan y ap travay sou lide yon sèvis reset modpas nan sistèm SAP R/3, yon kesyon te parèt - ki jan yo lanse SAP GUI ak paramèt ki nesesè yo nan navigatè a? Piske lide sa a te enplike itilizasyon yon sèvis entènèt, premye reponn a yon demann SOAP ki soti nan SAP GUI epi voye yon lèt ki gen yon lyen ki mennen nan yon paj entènèt ak yon script pou reset modpas la nan inisyal la, epi answit montre itilizatè a. yon mesaj sou reset modpas siksè ak montre modpas inisyal sa a, Lè sa a, mwen ta renmen paj sa a tou gen yon lyen pou lanse SAP GUI. Anplis, lyen sa a ta dwe louvri sistèm vle a, epi, de preferans, ak login ak modpas jaden ranpli nan yon fwa: itilizatè a ta dwe sèlman ranpli modpas la pwodiktif de fwa.

Lanse SAP Logon pa te enteresan pou objektif nou, epi lè w ap kouri sapgui.exe li te enposib presize kliyan an ak non itilizatè, men li te posib yo lanse yon sistèm ki pa defini nan SAP Logon. Nan lòt men an, lanse SAP GUI ak paramèt sèvè abitrè pa te patikilyèman enpòtan: si nou ap rezoud pwoblèm nan nan Reyajiste modpas itilizatè a, Lè sa a, gen plis chans li deja gen liy ki nesesè nan SAP Logon, ak anviwònman yo li bezwen, epi gen. se pa bezwen dezòd ak pwòp tèt li. Men, kondisyon yo espesifye yo te satisfè pa teknoloji a SAP GUI Shortcut ak pwogram nan sapshcut.exe tèt li, ki te fè li posib yo lanse SAP GUI a lè l sèvi avèk yon "rakoursi".

Rezoud pwoblèm nan tèt-sou: lanse sapshcut.exe dirèkteman nan navigatè a lè l sèvi avèk yon objè 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');
}

Solisyon an se move: premyèman, li sèlman travay nan Internet Explorer, dezyèmman, li mande pou anviwònman sekirite apwopriye nan navigatè a, ki nan yon òganizasyon ka entèdi nan nivo domèn, e menm si pèmèt, navigatè a montre yon fenèt ak yon pè. avètisman pou itilizatè a:

Lanse SAP GUI soti nan yon navigatè

Mwen jwenn solisyon #2 sou entènèt la: kreye pwòp pwotokòl entènèt ou. Pèmèt nou lanse aplikasyon nou bezwen an lè l sèvi avèk yon lyen ki endike pwotokòl la, ke nou menm nou anrejistre nan Windows nan rejis la nan seksyon HKEY_CLASSES_ROOT. Piske SAP GUI Shortcut gen pwòp seksyon li nan seksyon sa a, ou ka ajoute paramèt kòd URL Pwotokòl la ak yon valè vid la:

Lanse SAP GUI soti nan yon navigatè

Pwotokòl sa a kòmanse sapgui.exe ak paramèt /CHEMOTI, ki se egzakteman sa nou bezwen:

Lanse SAP GUI soti nan yon navigatè

Oke, oswa si nou vle fè yon pwotokòl konplètman abitrè (pa egzanp, sapshcut), Lè sa a, ou ka anrejistre li lè l sèvi avèk dosye reg sa a:

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

Koulye a, si nou fè yon lyen sou yon paj entènèt ki endike pwotokòl la Sapgui.Shortcut.File Nan yon fason menm jan an:

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

Nou ta dwe wè yon fenèt tankou sa a:

Lanse SAP GUI soti nan yon navigatè

Ak tout bagay sanble gwo, men lè ou klike sou bouton an "Pèmèt" nou wè:

Lanse SAP GUI soti nan yon navigatè

Woy, navigatè a te fè bar espas la nan %20. Oke, lòt karaktè yo pral tou kode nan pwòp kòd nimerik yo ak yon senbòl pousan. Ak bagay ki pi dezagreyab se ke pa gen anyen ki ka fè isit la nan nivo navigatè a (tout bagay isit la se fè dapre estanda a) - navigatè a pa renmen karaktè sa yo, ak entèprèt la lòd Windows pa travay ak valè kode sa yo. Ak yon lòt mwens - tout fisèl la pase kòm yon paramèt, ki gen ladan non pwotokòl la e menm kolon an (sapgui.shortcut.file:). Anplis, byenke menm bagay la sapshcut.exe ka jete tout bagay ki pa yon paramèt pou li (kòmanse ak senbòl "-", Lè sa a, non an, "=" ak valè), sa vle di. yon liy tankou "sapgui.shortcut.file: -system=SID"li pral toujou travay, Lè sa a, san yon espas"sapgui.shortcut.file:-system=SID"pa travay ankò.

Li sanble ke, nan prensip, gen de opsyon pou itilize pwotokòl la URI:

  1. Sèvi ak san paramèt: Nou kreye yon pakèt antye nan pwotokòl pou tout sistèm nou yo nan kalite a SIDMANDT, tankou AAA200, BBB200 ak sou sa. Si ou jis bezwen kòmanse sistèm lan vle, Lè sa a, opsyon a se byen travayabl, men nan ka nou an li pa apwopriye, depi omwen ou ta renmen transfere login itilizatè a, men sa a pa ka fè nan fason sa a.
  2. Sèvi ak yon pwogram wrapper pou rele sapshcut.exe oswa sapgui.exe. Sans nan pwogram sa a se senp - li dwe pran fisèl la ke navigatè a transmèt li atravè pwotokòl entènèt la epi tounen li nan reprezantasyon ke Windows resevwa, sa vle di. vire tout kòd karaktè tounen nan karaktè (petèt menm analiz fisèl la dapre paramèt) epi li deja rele SAP GUI ak yon lòd kòrèk garanti. Nan ka nou an, li pa totalman apwopriye (se poutèt sa mwen pa menm ekri li), paske li pa ase pou nou ajoute pwotokòl la sou tout òdinatè itilizatè yo (nan yon domèn sa a toujou byen, byenke li pi bon tou pou evite pratik sa a), men isit la nou pral bezwen plis plas pwogram nan sou PC a, epi tou toujou ap asire ke li pa disparèt lè yo enstale lojisyèl an sou PC a.

Moun sa yo. Nou tou jete opsyon sa a kòm pa apwopriye pou nou.

Nan pwen sa a mwen te deja kòmanse panse ke mwen ta dwe di orevwa nan lide lanse SAP GUI ak paramèt ki nesesè yo nan navigatè a, men Lè sa a, lide a te rive m 'ke ou ka fè yon chemen kout nan SAP Logon ak kopye li sou Desktop ou. Mwen te itilize metòd sa a yon fwa, men anvan sa mwen pa t 'espesyalman gade nan dosye a chemen kout. Epi li te tounen soti ke chemen kout sa a se yon dosye tèks regilye ak ekstansyon an .sap. Men, si ou kouri li sou Windows, SAP GUI pral lanse ak paramèt yo ki espesifye nan dosye sa a. "Bengo!"

Fòma fichye sa a se apeprè sa ki annapre yo (kapab genyen tou yon tranzaksyon ki te lanse nan demaraj, men mwen te omisyon li):

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

Li sanble ke tout sa ki nesesè: yon idantifyan sistèm, yon kliyan, yon non itilizatè e menm yon modpas. E menm lòt paramèt: Tit - tit fenèt, GuiSize — gwosè fenèt la kouri (plen ekran oswa ou pa) ak Reutilize — si li nesesè yo louvri yon nouvo fenèt oswa itilize yon ki deja louvri ak menm sistèm nan. Men, yon nuans imedyatman parèt - li te tounen soti ke modpas la nan SAP Logon pa t 'kapab mete, liy lan te bloke. Li te tounen soti ke sa a te fè pou rezon sekirite: li estoke tout rakoursi ki te kreye nan SAP Logon nan yon dosye. sapshortcut.ini (Tou pre saplogon.ini nan pwofil itilizatè Windows) ak la, byenke yo chiffres, yo pa twò fòtman chiffres epi, si ou vle, yo ka dechifre. Men, ou ka rezoud sa a pa chanje valè a nan yon paramèt nan rejis la (valè default la se 0):

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

Sa a debloke jaden Modpas la pou antre sou fòm kreyasyon chemen kout nan SAP Logon:

Lanse SAP GUI soti nan yon navigatè

Epi lè ou antre yon modpas nan jaden sa a, li pral mete nan liy ki koresponn lan
sapshortcut.ini, men lè ou trennen yon chemen kout sou Desktop la, li pa parèt la - men ou ka ajoute li la manyèlman. Modpas la ankode, pou 111111 li pral jan sa a: PW_49B02219D1F6, pou 222222 - PW_4AB3211AD2F5. Men, nou plis enterese nan lefèt ke modpas sa a chiffres nan yon fason, endepandan de PC espesifik la, epi si nou reset modpas la nan inisyal la, Lè sa a, nou ka itilize yon valè pre-li te ye nan jaden sa a. Oke, si nou vle sèvi ak yon modpas owaza kreye, nou pral oblije konprann algorithm nan chifreman sa a. Men, si nou jije dapre egzanp yo bay yo, sa pa pral difisil pou fè. By wout la, nan SAP GUI 7.40 jaden sa a konplètman disparèt nan fòm lan, men li kòrèkteman aksepte yon dosye ki gen yon modpas ranpli.

Sa vle di, li sanble ke nan navigatè a ou jis bezwen klike sou lyen ki mennen nan yon fichye ki gen ekstansyon an .sap ak fòma vle a - epi li pral ofri yo louvri li kòm yon dosye tankou SAP GUI Shortcut (natirèlman sou yon PC. ak SAP GUI enstale) epi yo pral louvri yon fenèt SAP GUI ak paramèt yo espesifye (si SID la ak pè kliyan yo nan lis la SAP Logon sou PC sa a).

Men, li klè ke pèsonn pa pral tou senpleman kreye dosye davans epi estoke yo sou sit la - yo dwe pwodwi ki baze sou paramèt ki nesesè yo. Pou egzanp, ou ka kreye yon script PHP pou jenere rakoursi (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";
?>

Si ou pa presize yon non itilizatè ak modpas, w ap jwenn fenèt sa a ki mande login ak modpas:

Lanse SAP GUI soti nan yon navigatè

Si ou pase sèlman login la, jaden an login pral ranpli epi jaden modpas la pral vid. Si nou bay itilizatè a tou de yon login ak yon modpas, men itilizatè a sou PC a gen kle EnablePassword nan rejis la nan seksyon [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] mete a 0, Lè sa a, nou jwenn menm bagay la. Epi sèlman si kle sa a mete sou 1 epi nou pase tou de non an ak modpas inisyal la, sistèm lan pral imedyatman mande w antre nan yon nouvo modpas pèmanan de fwa. Se sa nou te bezwen jwenn.

Kòm yon rezilta, nou gen seri opsyon sa yo konsidere kòm ilistrasyon tout sa ki anwo yo:

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

Dènye opsyon an te adapte m '. Men, olye pou yo jenere rakoursi SAP, ou ka itilize tou, pou egzanp, jenere dosye CMD, ki, lè yo louvri nan yon navigatè, pral louvri tou fenèt SAP GUI pou ou. Anba a se yon egzanp (sapguicmd.php) dirèkteman lanse SAP GUI a ak kòd koneksyon konplè a, san yo pa bezwen gen SAP Logon konfigirasyon:

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

Sous: www.habr.com

Add nouvo kòmantè