SAP GUI ji gerokek dest pê dike

Min cara yekem ev gotara di xwe de nivîsand blog, ji bo ku ez paşê careke din negerim û ji bîr nekim, lê ji ber ku kes blogê naxwîne, min xwest ez vê agahiyê bi her kesî re parve bikim, ger kesek kêrhatî bibîne.

Dema ku li ser ramana karûbarek vesazkirina şîfreyê di pergalên SAP R/3 de dixebitî, pirsek derket - meriv çawa SAP GUI bi pîvanên pêwîst ji gerokê re dest pê dike? Ji ber ku ev raman tê wateya karanîna karûbarek malperê, pêşî bersiv da daxwazek SOAP ji SAP GUI û nameyek bi girêdanek ji rûpelek malperê re bi skrîptek ji bo vegerandina şîfreyê li ya destpêkê, û dûv re jî ji bikarhêner re nîşan dide. peyamek li ser vesazkirina şîfreya serketî û nîşandana vê şîfreya destpêkê, wê hingê ez dixwazim ku ev rûpel jî girêdanek ji bo destpêkirina SAP GUI hebe. Digel vê yekê, divê ev girêdan pergala xwestî veke, û, bi tercîh, ku qadên têketinê û şîfreyê bi yekcarî dagirtin: bikarhêner tenê neçar e ku şîfreya hilberîner du caran dagire.

Destpêkirina SAP Logon ji bo mebesta me ne balkêş bû, û dema ku sapgui.exe dimeşîne, ne gengaz bû ku meriv navê xerîdar û bikarhêner diyar bike, lê gengaz bû ku pergalek ku di SAP Têketinê de nehatiye destnîşankirin dest pê bike. Ji hêla din ve, destpêkirina SAP GUI bi parametreyên serverê yên keyfî bi taybetî ne têkildar bû: heke em pirsgirêka vesazkirina şîfreya bikarhênerek çareser bikin, wê hingê bi îhtîmalek ku ew jixwe di SAP Logon de rêza pêwîst heye, digel mîhengên ku ew hewce dike, û li wir ne hewce ye ku bi ya xwe re mijûl bibe. Lê hewcedariyên diyarkirî ji hêla teknolojiya SAP GUI Shortcut û bernameya sapshcut.exe bi xwe ve hatin bicîh kirin, ku ev gengaz kir ku SAP GUI bi karanîna "kurterek" taybetî dest pê bike.

Çareserkirina pirsgirêkê bi serê xwe: Sapshcut.exe rasterast ji gerokê bi karanîna tiştek ActiveX dest pê dike:

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

Çareserî xirab e: yekem, ew tenê di Internet Explorer-ê de dixebite, ya duyemîn jî, ew hewceyê mîhengên ewlehiyê yên guncan di gerokê de hewce dike, ku di rêxistinekê de dibe ku di asta domainê de were qedexe kirin, û heke destûr jî hebe, gerok pencereyek bi tirs nîşan dide. hişyarî ji bikarhêner re:

SAP GUI ji gerokek dest pê dike

Min çareseriya #2 li ser Înternetê dît: afirandina protokola weba xwe. Destûrê dide me ku em serîlêdana ku em hewce ne bi karanîna zencîreyek ku protokolê destnîşan dike, ku em bixwe di Windows-ê de di qeydê de di beşa HKEY_CLASSES_ROOT de tomar dikin, bidin destpêkirin. Ji ber ku SAP GUI Shortcut di vê beşê de binebeşa xwe heye, hûn dikarin parametreya rêzika URL-ê ya bi nirxek vala lê zêde bikin:

SAP GUI ji gerokek dest pê dike

Ev protokol dest pê dike sapgui.exe bi parametre /KURTEK, ya ku bi rastî hewcedariya me ye:

SAP GUI ji gerokek dest pê dike

Welê, an heke em dixwazin protokolek bi tevahî kêfî çêbikin (mînak, sapshcut), wê hingê hûn dikarin wê bi karanîna pelê reg-ê jêrîn tomar bikin:

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

Naha, heke em li ser rûpelek malperê girêdanek çêbikin ku protokolê destnîşan dike Sapgui.Shortcut.Pel Bi heman awayî:

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

Divê em pencereyek bi vî rengî bibînin:

SAP GUI ji gerokek dest pê dike

Û her tişt pir xweş xuya dike, lê gava ku hûn li ser bişkoka "Destûr" bikirtînin, em dibînin:

SAP GUI ji gerokek dest pê dike

Oops, gerokê valahiyê zivirî %20. Welê, karakterên din jî dê di koda xweya hejmarî de bi nîşanek ji sedî ve werin kod kirin. Tiştê herî ne xweş ev e ku li vir di asta gerokê de tiştek nayê kirin (li vir her tişt li gorî standardê tête kirin) - gerok ji karakterên weha hez nake, û wergêrê fermana Windows-ê bi nirxên weha kodkirî re naxebite. Û yek kêmek din - tevaya rêzê wekî pîvanek tê derbas kirin, tevî navê protokolê û tewra kolon jî (sapgui.shortcut.file:). Wekî din, her çend heman sapshcut.exe dikare her tiştê ku ji bo wê ne parametreyek e ji holê rake (bi nîşana "-" dest pê dike, paşê nav, "=" û nirx), ango. rêzek mîna "sapgui.shortcut.file: -system=SID"ew ê hîn jî bixebite, wê hingê bê cîh"sapgui.shortcut.file:-system=SID"êdî kar nake.

Derket holê ku, di prensîbê de, ji bo karanîna protokola URI du vebijark hene:

  1. Bikaranîna bêyî pîvanan: Em ji bo hemî pergalên xwe yên celebê komek protokolan diafirînin SIDMANT, wek AAA200, BBB200 wate ya vê çîye. Ger hûn tenê hewce ne ku pergala xwestinê bidin destpêkirin, wê hingê vebijark pir bikêr e, lê di rewşa me de ew ne guncan e, ji ber ku bi kêmanî hûn dixwazin têketina bikarhêner veguhezînin, lê ev bi vî rengî nayê kirin.
  2. Ji bo banga bernameyek wrapper bikar bînin sapshcut.exe an sapgui.exe. Esasê vê bernameyê hêsan e - pêdivî ye ku ew rêzika ku gerok bi protokola tevneyê jê re vediguhezîne bigire û wê veguherîne nûnertiya ku Windows distîne, ango. hemî kodên karakteran dîsa vedigerîne karakteran (dibe ku rêzê li gorî pîvanan jî pars bike) û berê bi fermanek rast garantîkirî gazî SAP GUI dike. Di doza me de, ew jî bi tevahî ne guncaw e (ji ber vê yekê min ew jî nenivîsandiye), ji ber ku ji me re ne bes e ku em protokolê li hemî PC-yên bikarhêner zêde bikin (di nav domainek de ev hîn jî rast e, her çend ew jî çêtir e ku ji vê pratîkê dûr bixin), lê li vir em ê hewce bikin ku bêtir bernameyê li ser PC-ê bi cîh bikin, û her weha bi domdarî piştrast bikin ku gava ku nermalava li ser PC-yê ji nû ve were saz kirin ew neçe.

Ewan. Em vê vebijarkê jî wekî ku ji bo me neguncaw e, red dikin.

Di vê nuqteyê de min jixwe dest pê kir ku ez bifikirim ku ez ê bixwazim xatir ji ramana destpêkirina SAP GUI bi pîvanên pêwîst ji gerokê re bixwazim, lê dûv re fikir hat serê min ku hûn dikarin di SAP Logon de kurtenivîsek çêbikin û wê li ser sermaseya xwe kopî bikin. Min ev rêbaz carekê bikar anî, lê berî wê min bi taybetî li pelê kurtebirê nenêrî. Û derket holê ku ev kurtebir pelek nivîsê ya birêkûpêk bi dirêjkirinê ye .mêweav. Û heke hûn wê li ser Windows-ê bimeşînin, SAP GUI dê bi pîvanên ku di vê pelê de hatine destnîşan kirin dest pê bike. "Bingo!"

Formata vê pelê bi qasî jêrîn e (dibe ku di destpêkê de danûstendinek jî hebe, lê min ew ji dest da):

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

Wusa dixuye ku her tiştê ku hewce ye: nasnameyek pergalê, xerîdar, navek bikarhêner û tewra şîfreyek. Û hê jî parametreyên din: Nav - Sernavê pencereyê, GuiSize - mezinahiya pencereya xebitandinê (tevahiya ekranê an na) û Dîsabikaranîn - gelo pêdivî ye ku meriv pencereyek nû veke an jî bi heman pergalê ve pencereyek berê vekirî bikar bîne. Lê nuwazeyek tavilê derket holê - derket holê ku şîfreya di SAP Logon de nayê danîn, xet hate asteng kirin. Derket holê ku ev ji ber sedemên ewlehiyê hate kirin: ew hemî kurtebirên ku di SAP Logon de hatine afirandin di pelek de hilîne sapshortcut.ini (Nêz saplogon.ini di profîla bikarhênerê Windows-ê de) û li wir, her çend ew têne şîfre kirin jî, ew pir bi tundî nayên şîfre kirin û, ger bixwaze, ew dikarin werin deşîfre kirin. Lê hûn dikarin vê yekê bi guheztina nirxa yek parametreyê di qeydê de çareser bikin (nirxa xwerû ye 0):

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

Ev qada Şîfreyê ji bo têketina li ser forma çêkirina kurtebirê di Têketina SAP de vedike:

SAP GUI ji gerokek dest pê dike

Û gava ku hûn şîfreyek li vê qadê binivîsin, ew ê di rêza têkildar de were danîn
sapshortcut.ini, lê gava ku hûn kurtenivîsekê dakêşin ser sermaseyê, ew li wir xuya nake - lê hûn dikarin wê bi destan lê zêde bikin. Şîfreya şîfrekirî ye, ji bo 111111 ew ê wiha be: PW_49B02219D1F6, ji bo 222222 - PW_4AB3211AD2F5. Lê em ji vê yekê bêtir eleqedar in ku ev şîfre bi yek awayê, ji PC-ya taybetî serbixwe, hatî şîfre kirin, û heke em şîfreyê li ya destpêkê vegerînin, wê hingê em dikarin di vê qadê de nirxek berê-naskirî bikar bînin. Welê, heke em bixwazin şîfreyek ku bi rengek rasthatî hatî afirandin bikar bînin, pêdivî ye ku em algorîtmaya vê şîfreyê fam bikin. Lê li gorî mînakên ku hatine dayîn, ev yek dê ne dijwar be. Bi awayê, di SAP GUI 7.40 de ev qad bi tevahî ji formê winda bû, lê ew pelek bi şîfreyek dagirtî rast qebûl dike.

Ango, derdikeve holê ku di gerokê de hûn tenê hewce ne ku li ser zencîreya pelê bi dirêjkirina .sap û formata xwestinê bikirtînin - û ew ê pêşkêşî vekirina wê wekî pelek mîna SAP GUI Shortcut (bi xwezayî li ser PC-yê bike bi SAP GUI ve hatî saz kirin) û dê pencereyek SAP GUI bi pîvanên diyarkirî veke (heke SID û cotê xerîdar li ser vê PC-ê di navnîşa SAP Têketinê de bin).

Lê, diyar e ku kes dê bi tenê pelan pêşwext biafirîne û wan li ser malperê hilîne - divê ew li ser bingeha pîvanên pêwîst bêne çêkirin. Mînakî, hûn dikarin nivîsarek PHP-ê biafirînin ku kurtebiran çêbike (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";
?>

Ger hûn navek bikarhêner û şîfreyê diyar nekin, hûn ê pencereya jêrîn bistînin ku têketin û şîfreyê dipirse:

SAP GUI ji gerokek dest pê dike

Heke hûn tenê têketinê derbas bikin, dê qada têketinê were tije kirin û qada şîfreyê dê vala bimîne. Ger em hem têketinek û hem jî şîfreyek bidin bikarhêner, lê bikarhênerê li ser PC-ê di qeydê de di beşa [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] de mifteya EnablePassword li 0-yê hatî danîn, wê hingê em heman tiştî digirin. Û tenê heke ev mifteya 1-ê were danîn û em hem nav û hem jî şîfreya destpêkê derbas bikin, pergal dê tavilê ji we bixwaze ku hûn du caran şîfreyek nû ya daîmî têkevin. Ya ku me hewce dikir ev e.

Wekî encamek, me vebijarkên jêrîn wekî mînakek hemî jorîn hene:

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

Vebijarka dawî li min hat. Lê li şûna ku hûn kurtebirên SAP-ê çêbikin, hûn dikarin, mînakî, pelên CMD-ê jî bikar bînin, ku gava ji gerokek vebe, dê pencereya SAP GUI jî ji we re veke. Li jêr mînakek (sapguicmd.php) rasterast SAP GUI-ya bi xêza pêwendiyê ya tevahî dest pê dike, bêyî ku hewce bike ku SAP Têketinê were mîheng kirin:

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

Source: www.habr.com

Add a comment