Start af SAP GUI fra en browser

Jeg skrev først denne artikel i min blog, for ikke at søge og huske igen senere, men da ingen læser bloggen, ville jeg dele denne information med alle, hvis nogen finder det nyttigt.

Mens man arbejdede på ideen om en adgangskode-nulstillingstjeneste i SAP R/3-systemer, opstod et spørgsmål - hvordan man starter SAP GUI med de nødvendige parametre fra browseren? Da denne idé indebar brugen af ​​en webservice, først at svare på en SOAP-anmodning fra SAP GUI og sende et brev med et link til en webside med et script til at nulstille adgangskoden til den oprindelige, og derefter vise til brugeren en besked om den vellykkede nulstilling af adgangskode og visning af denne første adgangskode, så vil jeg gerne have, at denne side også har et link til at starte SAP GUI. Desuden skulle dette link åbne det ønskede system, og helst med login- og adgangskodefelterne udfyldt på én gang: brugeren skulle kun udfylde den produktive adgangskode to gange.

At starte SAP Logon var ikke interessant for vores formål, og når vi kørte sapgui.exe var det umuligt at angive klient og brugernavn, men det var muligt at starte et system, der ikke var defineret i SAP Logon. På den anden side var lanceringen af ​​SAP GUI med vilkårlige serverparametre ikke særlig relevant: hvis vi løser problemet med at nulstille en brugers adgangskode, så har han højst sandsynligt allerede den nødvendige linje i SAP Logon, med de indstillinger, han har brug for, og der er ingen grund til at rode med sine egne. Men de specificerede krav blev opfyldt af SAP GUI-genvejsteknologien og selve programmet sapshcut.exe, som gjorde det muligt at starte SAP GUI ved hjælp af en specifik "genvej".

Løsning af problemet direkte: lancering af sapshcut.exe direkte fra browseren ved hjælp af et ActiveX-objekt:

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

Løsningen er dårlig: For det første virker det kun i Internet Explorer, for det andet kræver det passende sikkerhedsindstillinger i browseren, hvilket i en organisation kan være forbudt på domæneniveau, og selvom det er tilladt, viser browseren et vindue med et skræmmende advarsel til brugeren:

Start af SAP GUI fra en browser

Jeg fandt løsning #2 på internettet: oprette din egen webprotokol. Giver os mulighed for at starte den applikation, vi har brug for, ved hjælp af et link, der angiver protokollen, som vi selv registrerer i Windows i registreringsdatabasen i afsnittet HKEY_CLASSES_ROOT. Da SAP GUI-genvej har sin egen undersektion i dette afsnit, kan du tilføje URL-protokol-strengparameteren med en tom værdi der:

Start af SAP GUI fra en browser

Denne protokol starter sapgui.exe med parameter /GENVEJ, hvilket er præcis, hvad vi har brug for:

Start af SAP GUI fra en browser

Nå, eller hvis vi vil lave en fuldstændig vilkårlig protokol (f.eks. sapshcut), så kan du registrere det ved hjælp af følgende reg-fil:

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

Nu, hvis vi laver et link på en webside, der angiver protokollen Sapgui.Shortcut.File På lignende måde:

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

Vi skulle se et vindue som dette:

Start af SAP GUI fra en browser

Og alt ser godt ud, men når du klikker på knappen "Tillad" ser vi:

Start af SAP GUI fra en browser

Ups, browseren forvandlede mellemrumstasten til %20. Nå, andre tegn vil også blive kodet ind i deres egen numeriske kode med et procentsymbol. Og det mest ubehagelige er, at intet kan gøres her på browserniveau (alt her udføres i henhold til standarden) - browseren kan ikke lide sådanne tegn, og Windows-kommandofortolkeren fungerer ikke med sådanne kodede værdier. Og et minus mere - hele strengen sendes som en parameter, inklusive protokolnavnet og endda kolon (sapgui.shortcut.file:). Desuden, selvom det er det samme sapshcut.exe kan kassere alt, der ikke er en parameter for det (starter med symbolet "-", derefter navnet, "=" og værdi), dvs. en linje som "sapgui.shortcut.file: -system=SID"det vil stadig fungere, så uden et mellemrum"sapgui.shortcut.file:-system=SID"fungerer ikke længere.

Det viser sig, at der i princippet er to muligheder for at bruge URI-protokollen:

  1. Brug uden parametre: Vi laver en hel masse protokoller til alle vores systemer af typen SIDMANDT, type AAA200, BBB200 og så videre. Hvis du bare skal starte det ønskede system, så er muligheden ret brugbar, men i vores tilfælde er den ikke egnet, da du i det mindste gerne vil overføre brugerlogin, men det kan ikke gøres på denne måde.
  2. Brug af et wrapper-program til at ringe sapshcut.exe eller sapgui.exe. Essensen af ​​dette program er enkelt - det skal tage strengen, som browseren sender til det via webprotokollen, og gøre det til den repræsentation, som Windows modtager, dvs. gør alle tegnkoder tilbage til tegn (måske endda analyserer strengen i henhold til parametre) og kalder allerede SAP GUI med en garanteret korrekt kommando. I vores tilfælde er det heller ikke helt egnet (det er derfor jeg ikke selv har skrevet det), for det er ikke nok for os at tilføje protokollen på alle bruger-pc'er (inden for et domæne er det stadig i orden, selvom det også er bedre at undgå denne praksis), men her skal vi mere placere programmet på pc'en og også hele tiden sikre, at det ikke forsvinder, når softwaren geninstalleres på pc'en.

De der. Vi forkaster også denne mulighed som uegnet for os.

På dette tidspunkt var jeg allerede begyndt at tænke på, at jeg skulle sige farvel til ideen om at lancere SAP GUI med de nødvendige parametre fra browseren, men så faldt tanken op for mig, at du kan lave en genvej i SAP Logon og kopier det til dit skrivebord. Jeg brugte denne metode én gang, men før det så jeg ikke specifikt på genvejsfilen. Og det viste sig, at denne genvej er en almindelig tekstfil med udvidelsen .sap. Og hvis du kører det på Windows, starter SAP GUI med de parametre, der er angivet i denne fil. "Bingo!"

Formatet på denne fil er omtrent det følgende (der kan også være en transaktion lanceret ved opstart, men jeg har udeladt den):

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

Det ser ud til, at alt, hvad der er nødvendigt: en system-id, en klient, et brugernavn og endda en adgangskode. Og endda yderligere parametre: Titel - vindues titel, GuiSize — størrelsen af ​​det kørende vindue (fuld skærm eller ej) og Genbruge — om det er nødvendigt at åbne et nyt vindue eller bruge et allerede åbent med det samme system. Men en nuance dukkede straks op - det viste sig, at adgangskoden i SAP Logon ikke kunne indstilles, linjen var blokeret. Det viste sig, at dette blev gjort af sikkerhedsmæssige årsager: det gemmer alle genveje oprettet i SAP Logon i en fil sapshortcut.ini (Nær ved saplogon.ini i Windows-brugerprofilen) og der, selvom de er krypteret, er de ikke for stærkt krypteret, og hvis det ønskes, kan de dekrypteres. Men du kan løse dette ved at ændre værdien af ​​en parameter i registreringsdatabasen (standardværdien er 0):

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

Dette låser adgangskodefeltet op til indtastning på genvejsoprettelsesformularen i SAP Logon:

Start af SAP GUI fra en browser

Og når du indtaster en adgangskode i dette felt, vil den blive placeret i den tilsvarende linje
sapshortcut.ini, men når du trækker en genvej til skrivebordet, vises den ikke der - men du kan tilføje den der manuelt. Adgangskoden er krypteret, for 111111 vil den være som følger: PW_49B02219D1F6, for 222222 - PW_4AB3211AD2F5. Men vi er mere interesserede i, at denne adgangskode er krypteret på én måde, uafhængig af den specifikke pc, og hvis vi nulstiller adgangskoden til den oprindelige, så kan vi bruge en forudkendt værdi i dette felt. Nå, hvis vi vil bruge en tilfældigt oprettet adgangskode, bliver vi nødt til at forstå algoritmen for denne chiffer. Men at dømme efter de anførte eksempler, vil dette ikke være svært at gøre. Forresten, i SAP GUI 7.40 forsvandt dette felt fuldstændigt fra formularen, men det accepterer korrekt en fil med en udfyldt adgangskode.

Det vil sige, at det viser sig, at du i browseren blot skal klikke på linket til en fil med filtypen .sap og det ønskede format - og den vil tilbyde at åbne den som en fil som SAP GUI Shortcut (naturligvis på en pc med SAP GUI installeret) og åbner et SAP GUI-vindue med de angivne parametre (hvis SID og klientparret er på SAP Logon-listen på denne pc).

Men det er klart, at ingen blot vil oprette filer på forhånd og gemme dem på webstedet - de skal genereres baseret på de nødvendige parametre. For eksempel kan du oprette et PHP-script til at generere genveje (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";
?>

Hvis du ikke angiver et brugernavn og en adgangskode, får du følgende vindue, hvor du bliver bedt om login og adgangskode:

Start af SAP GUI fra en browser

Hvis du kun passerer login, vil login-feltet blive udfyldt, og adgangskodefeltet vil være tomt. Hvis vi giver brugeren både et login og en adgangskode, men brugeren på pc'en har EnablePassword-nøglen i registreringsdatabasen i [HKEY_CURRENT_USERSoftwareSAPSAPShortcutSecurity] sektionen sat til 0, så får vi det samme. Og kun hvis denne nøgle er sat til 1, og vi sender både navnet og den oprindelige adgangskode, vil systemet straks bede dig om at indtaste en ny permanent adgangskode to gange. Det var det, vi skulle have fat i.

Som et resultat har vi følgende sæt af overvejede muligheder som en illustration af alle ovenstående:

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

Den sidste mulighed passede mig. Men i stedet for at generere SAP-genveje, kan du også bruge for eksempel at generere CMD-filer, som, når de åbnes fra en browser, også åbner SAP GUI-vinduet for dig. Nedenfor er et eksempel (sapguicmd.php) Start SAP GUI direkte med den fulde forbindelsesstreng, uden at det er nødvendigt at have SAP Logon konfigureret:

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

Kilde: www.habr.com

Tilføj en kommentar