నేను మొదట ఈ వ్యాసాన్ని నాలో రాశాను
SAP R/3 సిస్టమ్లలో పాస్వర్డ్ రీసెట్ సేవ యొక్క ఆలోచనపై పని చేస్తున్నప్పుడు, ఒక ప్రశ్న తలెత్తింది - బ్రౌజర్ నుండి అవసరమైన పారామితులతో SAP GUIని ఎలా ప్రారంభించాలి? ఈ ఆలోచన వెబ్ సేవ యొక్క వినియోగాన్ని సూచించినందున, మొదట SAP GUI నుండి SOAP అభ్యర్థనకు ప్రతిస్పందించడం మరియు పాస్వర్డ్ను ప్రారంభానికి రీసెట్ చేయడానికి స్క్రిప్ట్తో వెబ్ పేజీకి లింక్తో లేఖను పంపడం, ఆపై వినియోగదారుకు ప్రదర్శించడం విజయవంతమైన పాస్వర్డ్ రీసెట్ మరియు ఈ ప్రారంభ పాస్వర్డ్ని ప్రదర్శించడం గురించిన సందేశం, అప్పుడు నేను ఈ పేజీకి SAP GUIని ప్రారంభించడానికి లింక్ కూడా ఉండాలని కోరుకుంటున్నాను. అంతేకాకుండా, ఈ లింక్ కావాల్సిన సిస్టమ్ను తెరవాలి మరియు లాగిన్ మరియు పాస్వర్డ్ ఫీల్డ్లను ఒకేసారి నింపాలి: వినియోగదారు ఉత్పాదక పాస్వర్డ్ను రెండుసార్లు మాత్రమే పూరించాలి.
SAP లాగిన్ను ప్రారంభించడం మా ఉద్దేశ్యం కోసం ఆసక్తికరంగా లేదు మరియు sapgui.exeని అమలు చేస్తున్నప్పుడు క్లయింట్ మరియు వినియోగదారు పేరును పేర్కొనడం అసాధ్యం, కానీ SAP లాగిన్లో నిర్వచించబడని సిస్టమ్ను ప్రారంభించడం సాధ్యమైంది. మరోవైపు, ఏకపక్ష సర్వర్ పారామితులతో 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');
}
పరిష్కారం చెడ్డది: మొదటిది, ఇది ఇంటర్నెట్ ఎక్స్ప్లోరర్లో మాత్రమే పని చేస్తుంది, రెండవది, దీనికి బ్రౌజర్లో తగిన భద్రతా సెట్టింగ్లు అవసరం, ఇది ఒక సంస్థలో డొమైన్ స్థాయిలో నిషేధించబడవచ్చు మరియు అనుమతించబడినప్పటికీ, బ్రౌజర్ భయపెట్టే విండోను ప్రదర్శిస్తుంది. వినియోగదారుకు హెచ్చరిక:
నేను ఇంటర్నెట్లో #2 పరిష్కారాన్ని కనుగొన్నాను:
ఈ ప్రోటోకాల్ ప్రారంభమవుతుంది sapgui.exe పరామితితో /షార్ట్కట్, ఇది ఖచ్చితంగా మనకు అవసరం:
సరే, లేదా మనం పూర్తిగా ఏకపక్ష ప్రోటోకాల్ని చేయాలనుకుంటే (ఉదాహరణకు, 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>
మనం ఇలాంటి విండోను చూడాలి:
మరియు ప్రతిదీ చాలా బాగుంది, కానీ మీరు "అనుమతించు" బటన్పై క్లిక్ చేసినప్పుడు మేము చూస్తాము:
అయ్యో, బ్రౌజర్ స్పేస్బార్ను %20గా మార్చింది. సరే, ఇతర అక్షరాలు కూడా శాతం గుర్తుతో వాటి స్వంత సంఖ్యా కోడ్లోకి ఎన్కోడ్ చేయబడతాయి. మరియు చాలా అసహ్యకరమైన విషయం ఏమిటంటే, బ్రౌజర్ స్థాయిలో ఇక్కడ ఏమీ చేయలేము (ఇక్కడ ప్రతిదీ ప్రమాణం ప్రకారం జరుగుతుంది) - బ్రౌజర్ అటువంటి అక్షరాలను ఇష్టపడదు మరియు విండోస్ కమాండ్ ఇంటర్ప్రెటర్ అటువంటి ఎన్కోడ్ విలువలతో పనిచేయదు. మరియు మరో మైనస్ - ప్రోటోకాల్ పేరు మరియు పెద్దప్రేగుతో సహా మొత్తం స్ట్రింగ్ పారామీటర్గా పాస్ చేయబడింది (sapgui.shortcut.file:) అంతేకాక, అదే అయినప్పటికీ sapshcut.exe దాని కోసం పరామితి కాని ప్రతిదాన్ని విస్మరించవచ్చు ("-" గుర్తుతో మొదలవుతుంది, ఆపై పేరు, "=" మరియు విలువ), అనగా. ఒక లైన్ "sapgui.shortcut.file: -system=SID"ఇది ఇప్పటికీ పని చేస్తుంది, అప్పుడు ఖాళీ లేకుండా"sapgui.shortcut.file:-system=SID"ఇక పనిచేయదు.
ఇది సూత్రప్రాయంగా, URI ప్రోటోకాల్ను ఉపయోగించడానికి రెండు ఎంపికలు ఉన్నాయని తేలింది:
- పారామితులు లేకుండా ఉపయోగించడం: మేము మా అన్ని రకాల సిస్టమ్ల కోసం ప్రోటోకాల్ల మొత్తం సమూహాన్ని సృష్టిస్తాము SIDMANDT, ఇష్టం AAA200, BBB200 మరియు అందువలన న. మీరు కోరుకున్న సిస్టమ్ను ప్రారంభించాల్సిన అవసరం ఉంటే, అప్పుడు ఎంపిక చాలా పని చేయగలదు, కానీ మా విషయంలో ఇది తగినది కాదు, ఎందుకంటే కనీసం మీరు వినియోగదారు లాగిన్ను బదిలీ చేయాలనుకుంటున్నారు, కానీ ఇది ఈ విధంగా చేయలేము.
- కాల్ చేయడానికి రేపర్ ప్రోగ్రామ్ని ఉపయోగించడం sapshcut.exe లేదా sapgui.exe. ఈ ప్రోగ్రామ్ యొక్క సారాంశం చాలా సులభం - ఇది వెబ్ ప్రోటోకాల్ ద్వారా బ్రౌజర్ దానికి ప్రసారం చేసే స్ట్రింగ్ను తప్పనిసరిగా తీసుకోవాలి మరియు Windows అందుకునే ప్రాతినిధ్యంగా మార్చాలి, అనగా. అన్ని క్యారెక్టర్ కోడ్లను తిరిగి అక్షరాలుగా మారుస్తుంది (బహుశా పారామితుల ప్రకారం స్ట్రింగ్ను అన్వయించవచ్చు) మరియు ఇప్పటికే హామీ ఇవ్వబడిన సరైన ఆదేశంతో SAP GUIని కాల్ చేస్తుంది. మా విషయంలో, ఇది పూర్తిగా సరికాదు (అందుకే నేను దీన్ని కూడా వ్రాయలేదు), ఎందుకంటే అన్ని వినియోగదారు PCలలో ప్రోటోకాల్ను జోడించడం మాకు సరిపోదు (డొమైన్లో ఇది ఇప్పటికీ బాగానే ఉంటుంది, అయినప్పటికీ ఇది మంచిది ఈ అభ్యాసాన్ని నివారించండి), కానీ ఇక్కడ మనకు ప్రోగ్రామ్ను PCలో మరింత ఉంచడం అవసరం మరియు PCలో సాఫ్ట్వేర్ని మళ్లీ ఇన్స్టాల్ చేసినప్పుడు అది దూరంగా ఉండకుండా చూసుకోవాలి.
ఆ. మేము ఈ ఎంపికను మాకు సరికాదని కూడా విస్మరిస్తాము.
ఈ సమయంలో నేను బ్రౌజర్ నుండి అవసరమైన పారామితులతో SAP GUIని ప్రారంభించాలనే ఆలోచనకు వీడ్కోలు చెప్పాలని నేను ఇప్పటికే ఆలోచించడం ప్రారంభించాను, కానీ మీరు SAP లాగిన్లో సత్వరమార్గాన్ని తయారు చేయవచ్చనే ఆలోచన నాకు వచ్చింది మరియు దాన్ని మీ డెస్క్టాప్కి కాపీ చేయండి. నేను ఒకసారి ఈ పద్ధతిని ఉపయోగించాను, కానీ దానికి ముందు నేను ప్రత్యేకంగా సత్వరమార్గం ఫైల్ను చూడలేదు. మరియు ఈ సత్వరమార్గం పొడిగింపుతో కూడిన సాధారణ టెక్స్ట్ ఫైల్ అని తేలింది .రసం. మరియు మీరు దీన్ని Windowsలో అమలు చేస్తే, SAP GUI ఈ ఫైల్లో పేర్కొన్న పారామితులతో ప్రారంభించబడుతుంది. "బింగో!"
ఈ ఫైల్ యొక్క ఆకృతి సుమారుగా క్రింది విధంగా ఉంటుంది (ప్రారంభంలో కూడా లావాదేవీ ప్రారంభించబడి ఉండవచ్చు, కానీ నేను దానిని విస్మరించాను):
[System]
Name=SID
Client=200
[User]
Name=
Language=RU
Password=
[Function]
Title=
[Configuration]
GuiSize=Maximized
[Options]
Reuse=0
అవసరమైన ప్రతిదీ: సిస్టమ్ ఐడెంటిఫైయర్, క్లయింట్, వినియోగదారు పేరు మరియు పాస్వర్డ్ కూడా. మరియు అదనపు పారామితులు కూడా: శీర్షిక - విండో శీర్షిక, GuiSize - నడుస్తున్న విండో పరిమాణం (పూర్తి స్క్రీన్ లేదా కాదు) మరియు పునర్వినియోగం — కొత్త విండోను తెరవడం లేదా అదే సిస్టమ్తో ఇప్పటికే తెరిచిన దాన్ని ఉపయోగించడం అవసరం. కానీ ఒక స్వల్పభేదాన్ని వెంటనే ఉద్భవించింది - SAP లాగాన్లోని పాస్వర్డ్ సెట్ చేయబడలేదని తేలింది, లైన్ బ్లాక్ చేయబడింది. భద్రతా కారణాల దృష్ట్యా ఇది జరిగిందని తేలింది: ఇది SAP లాగాన్లో సృష్టించబడిన అన్ని సత్వరమార్గాలను ఫైల్లో నిల్వ చేస్తుంది. sapshortcut.ini (సమీపంలో saplogon.ini Windows వినియోగదారు ప్రొఫైల్లో) మరియు అక్కడ, అవి గుప్తీకరించబడినప్పటికీ, అవి చాలా బలంగా గుప్తీకరించబడవు మరియు కావాలనుకుంటే, వాటిని డీక్రిప్ట్ చేయవచ్చు. కానీ మీరు రిజిస్ట్రీలో ఒక పరామితి యొక్క విలువను మార్చడం ద్వారా దీనిని పరిష్కరించవచ్చు (డిఫాల్ట్ విలువ 0):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity]
"EnablePassword"="1"
ఇది SAP లాగాన్లో షార్ట్కట్ సృష్టి ఫారమ్లో నమోదు కోసం పాస్వర్డ్ ఫీల్డ్ను అన్లాక్ చేస్తుంది:
మరియు మీరు ఈ ఫీల్డ్లో పాస్వర్డ్ను నమోదు చేసినప్పుడు, అది సంబంధిత లైన్లో ఉంచబడుతుంది
sapshortcut.ini, కానీ మీరు డెస్క్టాప్కి సత్వరమార్గాన్ని లాగినప్పుడు, అది అక్కడ కనిపించదు - కానీ మీరు దానిని మాన్యువల్గా అక్కడ జోడించవచ్చు. పాస్వర్డ్ ఎన్క్రిప్ట్ చేయబడింది, 111111 కోసం ఇది క్రింది విధంగా ఉంటుంది: PW_49B02219D1F6, 222222 కోసం - PW_4AB3211AD2F5. కానీ ఈ పాస్వర్డ్ నిర్దిష్ట PC నుండి స్వతంత్రంగా ఒక విధంగా గుప్తీకరించబడిందనే వాస్తవంపై మాకు ఎక్కువ ఆసక్తి ఉంది మరియు మేము పాస్వర్డ్ను ప్రారంభదానికి రీసెట్ చేస్తే, ఈ ఫీల్డ్లో ముందుగా తెలిసిన ఒక విలువను ఉపయోగించవచ్చు. సరే, మనం యాదృచ్ఛికంగా సృష్టించబడిన పాస్వర్డ్ను ఉపయోగించాలనుకుంటే, ఈ సాంకేతికలిపి యొక్క అల్గారిథమ్ను మనం అర్థం చేసుకోవాలి. కానీ ఇచ్చిన ఉదాహరణలను బట్టి చూస్తే, దీన్ని చేయడం కష్టం కాదు. మార్గం ద్వారా, SAP GUI 7.40లో ఈ ఫీల్డ్ పూర్తిగా ఫారమ్ నుండి కనుమరుగైంది, అయితే ఇది పూరించిన పాస్వర్డ్తో ఫైల్ను సరిగ్గా అంగీకరిస్తుంది.
అంటే, బ్రౌజర్లో మీరు .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";
?>
మీరు వినియోగదారు పేరు మరియు పాస్వర్డ్ను పేర్కొనకుంటే, లాగిన్ మరియు పాస్వర్డ్ కోసం అడుగుతున్న కింది విండోను మీరు పొందుతారు:
మీరు లాగిన్ను మాత్రమే పాస్ చేస్తే, లాగిన్ ఫీల్డ్ నింపబడుతుంది మరియు పాస్వర్డ్ ఫీల్డ్ ఖాళీగా ఉంటుంది. మేము వినియోగదారుకు లాగిన్ మరియు పాస్వర్డ్ రెండింటినీ ఇస్తే, కానీ PCలోని వినియోగదారు [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] విభాగంలో 0కి సెట్ చేయబడిన రిజిస్ట్రీలో EnablePassword కీని కలిగి ఉంటే, మేము అదే విషయాన్ని పొందుతాము. మరియు ఈ కీ 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 లాగిన్ కాన్ఫిగర్ చేయనవసరం లేకుండా, పూర్తి కనెక్షన్ స్ట్రింగ్తో నేరుగా 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";
?>
మూలం: www.habr.com