Niliandika makala hii kwanza katika yangu , ili si kutafuta na kukumbuka tena baadaye, lakini kwa kuwa hakuna mtu anayesoma blogu, nilitaka kushiriki habari hii na kila mtu, ikiwa mtu atapata kuwa muhimu.
Wakati wa kufanya kazi juu ya wazo la huduma ya kuweka upya nenosiri katika mifumo ya SAP R/3, swali liliibuka - jinsi ya kuzindua SAP GUI na vigezo muhimu kutoka kwa kivinjari? Kwa kuwa wazo hili lilimaanisha matumizi ya huduma ya wavuti, kwanza kujibu ombi la SOAP kutoka kwa SAP GUI na kutuma barua iliyo na kiunga cha ukurasa wa wavuti na hati ya kuweka upya nenosiri hadi la kwanza, na kisha kuonyeshwa kwa mtumiaji. ujumbe kuhusu kufanikiwa kuweka upya nenosiri na kuonyesha nenosiri hili la awali, basi ningependa ukurasa huu pia uwe na kiungo cha kuzindua SAP GUI. Zaidi ya hayo, kiungo hiki kinapaswa kufungua mfumo unaohitajika, na, ikiwezekana, na mashamba ya kuingia na nenosiri yaliyojazwa mara moja: mtumiaji angepaswa tu kujaza nenosiri la uzalishaji mara mbili.
Uzinduzi wa SAP Logon haukuvutia kwa madhumuni yetu, na wakati wa kuendesha sapgui.exe haikuwezekana kutaja mteja na jina la mtumiaji, lakini iliwezekana kuzindua mfumo ambao haujafafanuliwa katika SAP Logon. Kwa upande mwingine, kuzindua SAP GUI na vigezo vya seva ya kiholela haikuwa muhimu sana: ikiwa tunatatua tatizo la kuweka upya nenosiri la mtumiaji, basi uwezekano mkubwa tayari ana mstari muhimu katika SAP Logon, na mipangilio anayohitaji, na huko. hakuna haja ya kuhangaika na yake. Lakini mahitaji maalum yalikutana na teknolojia ya SAP GUI ya njia ya mkato na programu ya sapshcut.exe yenyewe, ambayo ilifanya iwezekanavyo kuzindua SAP GUI kwa kutumia "njia ya mkato" maalum.
Kutatua tatizo moja kwa moja: kuzindua sapshcut.exe moja kwa moja kutoka kwa kivinjari kwa kutumia kitu cha 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');
}
Suluhisho ni mbaya: kwanza, inafanya kazi tu katika Internet Explorer, pili, inahitaji mipangilio sahihi ya usalama kwenye kivinjari, ambayo katika shirika inaweza kupigwa marufuku katika kiwango cha kikoa, na hata ikiwa inaruhusiwa, kivinjari kinaonyesha dirisha na kutisha. onyo kwa mtumiaji:

Nilipata suluhisho # 2 kwenye Mtandao: Inaturuhusu kuzindua programu tunayohitaji kwa kutumia kiungo kinachobainisha itifaki tunayojisajili nayo Windows Katika sajili, chini ya HKEY_CLASSES_ROOT. Kwa kuwa SAP GUI Shortcut ina subkey yake katika sehemu hii, unaweza kuongeza kigezo cha mfuatano wa Itifaki ya URL chenye thamani tupu:

Itifaki hii inaanza sapgui.exe na parameter /MFUPI, ambayo ndiyo hasa tunayohitaji:

Kweli, au ikiwa tunataka kutengeneza itifaki ya kiholela (kwa mfano, sapshcut), basi unaweza kuisajili kwa kutumia faili ifuatayo ya 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""
Sasa, ikiwa tutafanya kiungo kwenye ukurasa wa wavuti unaoonyesha itifaki Faili.Njia.Mkato.Sapgui Kwa njia sawa:
<a href='Sapgui.Shortcut.File: -system=SID -client=200'>SID200</a>
Tunapaswa kuona dirisha kama hili:

Na kila kitu kinaonekana kuwa kizuri, lakini unapobofya kitufe cha "Ruhusu" tunaona:

Lo, kivinjari kilibadilisha nafasi kuwa %20. Na herufi zingine pia zitasimbwa katika msimbo wao wa nambari zenye ishara ya asilimia. Na sehemu mbaya zaidi ni kwamba hakuna unachoweza kufanya kuhusu hilo katika kiwango cha kivinjari (kila kitu ni cha kawaida hapa)—kivinjari hakipendi herufi kama hizo, na mkalimani wa amri hapendi. Windows haifanyi kazi na thamani kama hizo zilizosimbwa. Na ubaya mwingine ni kwamba mfuatano mzima hupitishwa kama kigezo, ikijumuisha jina la itifaki na hata koloni (sapgui.shortcut.faili:) Aidha, ingawa ni sawa sapshcut.exe inaweza kutupa kila kitu ambacho si parameter kwa ajili yake (huanza na ishara "-", kisha jina, "=" na thamani), i.e. mstari kama"sapgui.shortcut.file: -mfumo=SID"Bado itafanya kazi, basi bila nafasi"sapgui.shortcut.file:-system=SID"haifanyi kazi tena.
Inabadilika kuwa, kimsingi, kuna chaguzi mbili za kutumia itifaki ya URI:
- Kutumia bila vigezo: Tunaunda rundo zima la itifaki kwa mifumo yetu yote ya aina SIDMANT, aina AA200, BBB200 Nakadhalika. Ikiwa unahitaji tu kuanza mfumo unaohitajika, basi chaguo ni rahisi sana, lakini kwa upande wetu haifai, kwani angalau ungependa kuhamisha kuingia kwa mtumiaji, lakini hii haiwezi kufanywa kwa njia hii.
- Kutumia programu ya kanga kupiga simu sapshcut.exe au sapgui.exeKiini cha programu hii ni rahisi - inapaswa kuchukua kamba ambayo kivinjari hutuma kwake kupitia itifaki ya wavuti na kuibadilisha kuwa uwakilishi unaokubalika. Windows, yaani, hubadilisha misimbo yote ya herufi kuwa herufi (labda hata huchanganua mfuatano kwa vigezo) na kisha kuita SAP GUI kwa amri iliyohakikishwa kuwa sahihi. Hii haifai kabisa kwa kesi yetu (ndiyo maana sikujisumbua hata kuiandika), kwa sababu kuongeza itifaki kwenye Kompyuta zote za watumiaji haitoshi (bado ni sawa ndani ya kikoa, ingawa pia ni bora kuepuka utaratibu huu). Pia tutahitaji kusakinisha programu kwenye Kompyuta na kuifuatilia kila mara ili kuhakikisha inabaki mahali pake wakati wa kusakinisha tena programu kwenye Kompyuta.
Wale. Pia tunatupa chaguo hili kama halitufai.
Kwa wakati huu tayari nilikuwa naanza kufikiria kwamba ningelazimika kusema kwaheri kwa wazo la kuzindua SAP GUI na vigezo muhimu kutoka kwa kivinjari, lakini basi wazo lilinijia kwamba unaweza kufanya njia ya mkato katika SAP Logon na. nakili kwenye eneo-kazi lako. Nilitumia njia hii mara moja, lakini kabla ya hapo sikuangalia hasa faili ya njia ya mkato. Na ikawa kwamba njia hii ya mkato ni faili ya maandishi ya kawaida na ugani .majimajiNa ukiiendesha ndani Windows — SAP GUI itazinduliwa na vigezo vilivyoainishwa katika faili hii. "Bingo!"
Umbizo la faili hii ni takriban ifuatayo (kunaweza pia kuwa na shughuli iliyozinduliwa wakati wa kuanza, lakini niliiacha):
[System]
Name=SID
Client=200
[User]
Name=
Language=RU
Password=
[Function]
Title=
[Configuration]
GuiSize=Maximized
[Options]
Reuse=0
Inaonekana kwamba kila kitu kinachohitajika: kitambulisho cha mfumo, mteja, jina la mtumiaji na hata nenosiri. Na hata vigezo vya ziada: Title - kichwa cha dirisha, GuiSize - ukubwa wa dirisha linaloendesha (skrini kamili au la) na Tumia tena - ikiwa ni muhimu kufungua dirisha jipya au kutumia iliyofunguliwa tayari na mfumo sawa. Lakini nuance mara moja ilitokea - ikawa kwamba nenosiri katika SAP Logon haliwezi kuweka, mstari ulizuiwa. Ilibadilika kuwa hii ilifanyika kwa sababu za usalama: huhifadhi njia za mkato zote zilizoundwa katika SAP Logon katika faili sapshortcut.ini (Karibu saplogon.ini katika wasifu wa mtumiaji Windows) na ingawa zimesimbwa kwa njia fiche hapo, hazijasimbwa kwa njia fiche sana na zinaweza kufutwa kwa njia fiche ikiwa unataka kweli. Lakini pia unaweza kutatua hili kwa kubadilisha thamani ya kigezo kimoja kwenye sajili (thamani chaguo-msingi ni 0):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity]
"EnablePassword"="1"
Hii inafungua uga wa Nenosiri kwa ajili ya kuingia kwenye fomu ya kuunda njia ya mkato katika SAP Logon:

Na unapoingia nenosiri katika uwanja huu, litawekwa kwenye mstari unaofanana
sapshortcut.ini, lakini unapoburuta njia ya mkato kwenye eneo-kazi, haionekani hapo - lakini unaweza kuiongeza hapo kwa mikono. Nenosiri limesimbwa kwa njia fiche, kwa 111111 litakuwa kama ifuatavyo: PW_49B02219D1F6, kwa 222222 - PW_4AB3211AD2F5. Lakini tunavutiwa zaidi na ukweli kwamba nenosiri hili limesimbwa kwa njia moja, bila kujitegemea kwa PC maalum, na ikiwa tunaweka upya nenosiri kwa moja ya awali, basi tunaweza kutumia thamani moja inayojulikana awali katika uwanja huu. Naam, ikiwa tunataka kutumia nenosiri lililoundwa kwa nasibu, itatubidi kuelewa kanuni ya msimbo huu. Lakini kwa kuzingatia mifano iliyotolewa, hii haitakuwa vigumu kufanya. Kwa njia, katika SAP GUI 7.40 uwanja huu ulipotea kabisa kutoka kwa fomu, lakini inakubali kwa usahihi faili yenye nenosiri lililojaa.
Hiyo ni, inageuka kuwa katika kivinjari unahitaji tu kubofya kiungo cha faili na kiendelezi cha .sap na umbizo unayotaka - na itatoa kuifungua kama faili kama SAP GUI Shortcut (asili kwenye PC. na SAP GUI imewekwa) na itafungua dirisha la SAP GUI na vigezo maalum (ikiwa SID na jozi ya mteja ziko kwenye orodha ya SAP Logon kwenye PC hii).
Lakini, ni wazi kwamba hakuna mtu atakayeunda faili mapema na kuzihifadhi kwenye tovuti - lazima zizalishwe kulingana na vigezo muhimu. Kwa mfano, unaweza kuunda hati ya PHP kutoa njia za mkato (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";
?>
Ikiwa hutataja jina la mtumiaji na nenosiri, utapata dirisha lifuatalo linalouliza kuingia na nenosiri:

Ikiwa utapitisha kuingia tu, uwanja wa kuingia utajazwa na uwanja wa nenosiri hautakuwa tupu. Ikiwa tunampa mtumiaji kuingia na nenosiri, lakini mtumiaji kwenye PC ana ufunguo wa EnablePassword katika Usajili katika sehemu ya [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] iliyowekwa kwa 0, basi tunapata kitu kimoja. Na tu ikiwa ufunguo huu umewekwa kwa 1 na tunapitisha jina na nenosiri la awali, mfumo utakuhimiza mara moja kuingiza nenosiri jipya la kudumu mara mbili. Hiyo ndiyo tuliyohitaji kupata.
Kama matokeo, tuna seti ifuatayo ya chaguzi zinazozingatiwa kama kielelezo cha yote hapo juu:
<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>
Chaguo la mwisho lilinifaa. Lakini badala ya kuzalisha njia za mkato za SAP, unaweza pia kutumia, kwa mfano, kuzalisha faili za CMD, ambazo, wakati wa kufunguliwa kutoka kwa kivinjari, pia zitafungua dirisha la SAP GUI kwako. Chini ni mfano (sapgucmd.php) zindua moja kwa moja SAP GUI na kamba kamili ya unganisho, bila hitaji la kuwa na SAP Logon iliyosanidiwa:
<?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";
?>
Chanzo: mapenzi.com
