SAP GUI-ի գործարկում բրաուզերից

Ես առաջին անգամ գրեցի այս հոդվածը իմ Օրագիր, որպեսզի հետո չփնտրեմ ու նորից չհիշեմ, բայց քանի որ ոչ ոք չի կարդում բլոգը, ես ցանկացա կիսվել այս տեղեկատվությունը բոլորի հետ, եթե ինչ-որ մեկը օգտակար գտնի։

SAP R/3 համակարգերում գաղտնաբառի վերակայման ծառայության գաղափարի վրա աշխատելիս հարց առաջացավ՝ ինչպե՞ս գործարկել SAP GUI-ն անհրաժեշտ պարամետրերով զննարկիչից: Քանի որ այս գաղափարը ենթադրում էր վեբ ծառայության օգտագործում, նախ պատասխանելով SAP GUI-ի SOAP-ի հարցումին և նամակ ուղարկելով վեբ էջի հղումով՝ գաղտնաբառի սկզբնականին վերակայելու սցենարով, այնուհետև ցուցադրելով օգտատիրոջը: հաղորդագրություն գաղտնաբառի հաջող վերականգնման և այս սկզբնական գաղտնաբառը ցուցադրելու մասին, այնուհետև ես կցանկանայի, որ այս էջը նաև հղում ունենա 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');
}

Լուծումը վատն է՝ նախ այն աշխատում է միայն Internet Explorer-ում, երկրորդ՝ պահանջում է համապատասխան անվտանգության կարգավորումներ բրաուզերում, որոնք կազմակերպությունում կարող են արգելվել տիրույթի մակարդակով, և եթե անգամ թույլատրվի, զննարկիչը վախեցնող պատուհան է ցուցադրում։ նախազգուշացում օգտագործողին.

SAP GUI-ի գործարկում բրաուզերից

Համացանցում գտա թիվ 2 լուծումը. ստեղծելով ձեր սեփական վեբ արձանագրությունը. Թույլ է տալիս մեզ գործարկել մեզ անհրաժեշտ հավելվածը՝ օգտագործելով արձանագրությունը ցույց տվող հղումը, որը մենք ինքներս գրանցում ենք Windows-ում գրանցամատյանում՝ HKEY_CLASSES_ROOT բաժնում: Քանի որ SAP GUI Shortcut-ն ունի իր ենթաբաժինն այս բաժնում, դուք կարող եք ավելացնել 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-ի գործարկում բրաուզերից

Եվ ամեն ինչ հիանալի է թվում, բայց երբ սեղմում եք «Թույլատրել» կոճակը, մենք տեսնում ենք.

SAP GUI-ի գործարկում բրաուզերից

Վա՜յ, զննարկիչը տիեզերագոտին դարձրեց %20: Դե, մյուս նիշերը նույնպես կկոդավորվեն իրենց թվային կոդի մեջ՝ տոկոսային նշանով: Եվ ամենատհաճն այն է, որ այստեղ ոչինչ չի կարելի անել բրաուզերի մակարդակով (այստեղ ամեն ինչ արվում է ըստ ստանդարտի) - զննարկիչը չի սիրում նման նիշեր, և Windows հրամանի թարգմանիչը չի աշխատում նման կոդավորված արժեքներով: Եվ ևս մեկ մինուս. ամբողջ տողը փոխանցվում է որպես պարամետր, ներառյալ արձանագրության անվանումը և նույնիսկ կրկնակետը (sapgui.shortcut.file:) Ընդ որում, թեեւ նույնը sapshcut.exe կարող է հրաժարվել այն ամենից, ինչը նրա համար պարամետր չէ (սկսվում է «-» նշանով, այնուհետև անվանումով, «=» և արժեքով), այսինքն. մի տող, ինչպիսին է «sapgui.shortcut.file: -system=SID«Դա դեռ կաշխատի, հետո առանց տարածության»sapgui.shortcut.file:-system=SID«այլևս չի աշխատում.

Պարզվում է, որ սկզբունքորեն URI արձանագրությունն օգտագործելու երկու տարբերակ կա.

  1. Օգտագործելով առանց պարամետրերի. Մենք ստեղծում ենք արձանագրությունների մի ամբողջ փունջ մեր բոլոր տեսակի համակարգերի համար ՍԻԴՄԱՆԴՏ, ինչպես AAA200, BBB200 եւ այլն։ Եթե ​​ձեզ պարզապես անհրաժեշտ է գործարկել ցանկալի համակարգը, ապա տարբերակը բավականին գործունակ է, բայց մեր դեպքում դա հարմար չէ, քանի որ գոնե դուք կցանկանայիք փոխանցել օգտվողի մուտքը, բայց դա հնարավոր չէ անել այս կերպ:
  2. Զանգահարելու համար օգտագործելով փաթաթող ծրագիր sapshcut.exe կամ sapgui.exe. Այս ծրագրի էությունը պարզ է. այն պետք է վերցնի այն տողը, որը զննարկիչը փոխանցում է նրան վեբ արձանագրության միջոցով և վերածի այն ներկայացման, որը ստանում է Windows-ը, այսինքն. բոլոր նիշերի կոդերը նորից վերածում է նիշերի (գուցե նույնիսկ վերլուծում է տողը ըստ պարամետրերի) և արդեն իսկ կանչում է SAP GUI երաշխավորված ճիշտ հրամանով: Մեր դեպքում դա նույնպես լիովին հարմար չէ (այդ պատճառով ես նույնիսկ չեմ գրել), քանի որ մեզ համար բավարար չէ արձանագրությունն ավելացնել բոլոր օգտագործողների ԱՀ-ներում (տիրույթում դա դեռ ամեն ինչ կարգին է, թեև ավելի լավ է նաև. խուսափեք այս պրակտիկայից), բայց այստեղ մեզ անհրաժեշտ կլինի ավելի շատ տեղադրել ծրագիրը ԱՀ-ում, ինչպես նաև անընդհատ ապահովել, որ այն չվերանա, երբ ծրագրաշարը նորից տեղադրվի համակարգչի վրա:

Նրանք. Մենք նույնպես մերժում ենք այս տարբերակը՝ որպես մեզ համար ոչ պիտանի:

Այս պահին ես արդեն սկսում էի մտածել, որ պետք է հրաժեշտ տամ SAP GUI-ն բրաուզերից անհրաժեշտ պարամետրերով գործարկելու գաղափարին, բայց հետո միտքս ծագեց, որ դուք կարող եք դյուրանցում կատարել SAP Logon-ում և պատճենեք այն ձեր աշխատասեղանին: Ես մեկ անգամ օգտագործել եմ այս մեթոդը, բայց մինչ այդ ես հատուկ չէի նայում դյուրանցման ֆայլին: Եվ պարզվեց, որ այս դյուրանցումը սովորական տեքստային ֆայլ է՝ ընդլայնումով .փոս. Եվ եթե այն գործարկեք Windows-ում, 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-ում ստեղծված բոլոր դյուրանցումները ֆայլի մեջ sapshortcut.ini (Մոտ saplogon.ini Windows-ի օգտվողի պրոֆիլում) և այնտեղ, թեև դրանք գաղտնագրված են, դրանք այնքան էլ խիստ գաղտնագրված չեն և, ցանկության դեպքում, դրանք կարող են վերծանվել: Բայց դուք կարող եք լուծել դա՝ փոխելով ռեեստրի մեկ պարամետրի արժեքը (կանխադրված արժեքն է 0):

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

Սա բացում է «Գաղտնաբառ» դաշտը՝ SAP Logon-ում դյուրանցումների ստեղծման ձևի մուտքագրման համար.

SAP GUI-ի գործարկում բրաուզերից

Եվ երբ այս դաշտում մուտքագրեք գաղտնաբառ, այն կտեղադրվի համապատասխան տողում
sapshortcut.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 GUI-ն ամբողջական կապի տողով, առանց 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";
?>

Source: www.habr.com

Добавить комментарий