Programmablauf über Funktionstasten steuern

ABAP Web Dynpro, BusinessServerPages; Erstellung von Webapplikationen.
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

Programmablauf über Funktionstasten steuern

Beitrag von Aggressor (ForumUser / 66 / 0 / 0 ) »
Hallo, ich habe ein kleines Problem.

Und zwar...

Ich habe eine BSP Anwendung die ich gerne mit Hilfe der Tasten F1 - F12 steuern würde. z.B. vorwärts oder rückwärts navigieren. Wisst ihr vlt. wie das geht?
Habe leider selbst überhaupt keine Idee wie das geht.

Vielen Dank
"Holzhacken ist deshalb so beliebt, weil man bei dieser Tätigkeit den Erfolg sofort sieht." Albert Einstein

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Azreal (Specialist / 182 / 1 / 0 ) »
morgen!

normalerweise ist dies nicht ohne weiteres machbar, da der browser meist schon vorbelegte keys hat (F1 - hilfe... etc).

aber grundsätzlich handelt es sich hierbei um kein feature, daß man mit BSP allein lösen könnte. hier kommt eigentlich JavaScript zum tragen.

mit folgendem JS kannst du herrausfinden welche F-Taste gedrückt wurde.

gruß Aze

Code: Alles auswählen.

<script language="JavaScript">
function getKeyCode(event) {
event = event || window.event;
return event.keyCode;
}

function showOutput(code)
{
Output=document.getElementById('show');
var text;

switch (code) {
case 112: text = "F1"; // F1
break;
case 113: text = "F2"; // F2
break;
case 114: text = "F3"; // F3
break;
case 115: text = "F4"; // F4
break;
case 116: text = "F5"; // F5
break;
case 117: text = "F6"; // F6
break;
case 118: text = "F7"; // F7
break;
case 119: text = "F8"; // F8
break;
case 120: text = "F9"; // F9
break;
case 121: text = "F10"; // F10
break;
case 122: text = "F11"; // F11
break;
case 123: text = "F12"; // F12
break;
}

if(!text) text = String.fromCharCode(code);
Output.firstChild.nodeValue=text;
self.focus();
}

document.onkeypress = function()
{
return false;
}
document.onkeydown = function(event){
var charCode = getKeyCode(event);
showOutput(charCode);
return false;
}

</script>

<body>
PRESS ANY KEY TO KONTINÜ<br>
Anzeige der gewählten Taste:
<b>
<p id="show">
&nbsp;
</p>
</b>

</body>

Beitrag von t0mt0m (ForumUser / 16 / 0 / 0 ) »
Ich habe ein ähnliches Problem:
ich hab mehrere Datensätze und möchte dem Nutzer ermöglichen durch Blättern mit den Cursortasten(oder beliebigen anderen Tasten) nach alle relevanten Datensätze duchzublättern

das problem ist nun:
wenn ich die Keycodes mit Javascript abfange sehe ich mich außer stande auf meine Abapdaten zuzugreifen(bisher hohle ich mir meine Daten durch FB Aufrufe in den Eventhandlern des BSPs ...aber ich weiß nicht wie ich diese von Javascript aus ansteuern kann)

ich hatte an so eine Art Pseudocode gedacht:

LAYOUT:
<javascript>function eingabe(eingabe){
if eingabe = 27
inInputProcessing('ESCAPE');
}
</javascript>

ONINPUTPROCESSING:
if event_id = 'ESCAPE'.
call funcion datenhohlen.
endif.

gibt es ein möglichkeit sowas zu machen? Oder verfolge ich vielleicht den komplett falschen Ansatz?

AW

Beitrag von Aggressor (ForumUser / 66 / 0 / 0 ) »
@Azreal

Danke für die Antwort, hat mir echt weitergeholfen!!!

Zumindest teilweise...

Im "nomalen" IE funktionierts, nur soll die BSP Anwendung über einen PDA-Browser ausgeführt werden, und der leitet anscheinend die Tasencodes nicht an die BSP Anwendung weiter... aber ok zumindest funzt es am PC Vielen Dank nochmal.

@t0mt0m

Wenn du rausgefunden hast ob/wie es geht sagst du mir bitte Bescheid ? Danke ![/quote]
"Holzhacken ist deshalb so beliebt, weil man bei dieser Tätigkeit den Erfolg sofort sieht." Albert Einstein

Beitrag von Azreal (Specialist / 182 / 1 / 0 ) »
guten abend,
ihr wollt also tatsächlich nach einem tastendruck nen roundtrip mit dem backend starten - sehe ich das richtig?

dann müsst ihr im grunde nur einen submit auf die entsprechende form per java script ausführen. Dies setzt natürlich vorraus, daß ihr den namen der form kennt, die es zu submitten gilt ;)

hier etwas pseudocode:

Code: Alles auswählen.

<script language="JavaScript">
function getKeyCode(event) {
event = event || window.event;
return event.keyCode;
}

function showOutput(code){

switch (code) {
case 112: 
document.eins.submit(); // F1
break;
}

document.onkeypress = function(){
return false;
}
document.onkeydown = function(event){
var charCode = getKeyCode(event);
showOutput(charCode);
return false;
}

</script>

<form name="eins" action="handle-data.php">
das ist ein test... <input type="text">
</form>
Das ganze mit dem submit hier im detail:
http://www.javascript-coder.com/javascr ... bmit.phtml

@Aggressor: Die browser haben so ihre eigenheit was JavaScript kompatibilität anbelangt. was für ein browser ist denn auf den PDA?

gruß Aze

Beitrag von t0mt0m (ForumUser / 16 / 0 / 0 ) »
@Azrael danke für die Antwort, aber eine Frage hätte ich noch dazu :wink:

Wenn ich den Code grade rchtig vertsanden habe, mnacht der Code nen einfachen Submit, soll heißen, er löst das gleiche aus wie wenn ich nur die Enter Taste drücken würde?

Kommt es irgend eine Möglichkeiten den Submitaufruf noch nen Parameter mitzugeben und Fallunterscheidungen zwischen einzelnen Tasten vorzunehmen?
Denn ich versuche die ganze Zeit die Situation zu erreichen, dass durch das Drücken verschiedener Tasten verschiedene Aktionen ausführen kann.
(mit einer Taste will ich weitere Datensätze anzeigen lassen und mit der anderen Detaildaten zum aktuellen Datensatz)

hab mir grade mal den Link zum Thema Javascript angeschaut aber leider nichts ber Parameter der Methode gefunden...

und das das leider auf nem mobilen Endgerät passieren soll auf dem der Touchscreen deaktiviert ist, kann ich das leider alles nur über Tastatureingaben realisieren

Beitrag von Azreal (Specialist / 182 / 1 / 0 ) »
servus,
also von der html ecke würde das ungefähr so aussehen...
innerhalb der form die du da submittest hast du noch ein inputfeld mit dem parameter hidden. dies setzt du dann kurz vor dem JavaScript submit auf einen gewissen wert (den wert der hinter der taste steht).

& ja, das submit ist vergleichbar mit einem drücken auf enter. das enterdrücken submitted aber nur die form, in der sich der user aktuell befindet (die form die den focus hat, in der sich der coursor befindet). Per javascript kannst du auch andere forms submitten. ggf. sogar forms anderer frames... den trick macht sich auch AJAX zu nutzen...

gruß Aze

Beitrag von t0mt0m (ForumUser / 16 / 0 / 0 ) »
so könnte es funktionieren...habe grade die ersten testläufe gemacht und es scheint zu gehen...also danke schonmal :)

Das einzig seltsame an der ganzen Sache ist nur, dass das Programm wenn ich die Form via Javascript submitte nicht weiter an den Eventhandler OnInputProcessing geht, allerdings wird unter anderem onManipulation aufgerufen(ich glaube das liegt daran, dass die Seite einfach nur reloadet wird), also kann ich meine Kommunikation mit der Applikationsklasse auch dort abhandeln..

Beitrag von t0mt0m (ForumUser / 16 / 0 / 0 ) »
da ich grade nochmal per PM gefragt wurde; hier der Weg wie ich das Problem genau gelöst habe:

ich hab mich recht nah an die Lösungsvarinate von Azrael gehalten;
und zwar auf folgende Art und Weise

Code: Alles auswählen.

LAYOUT:

<head>
...
# Ruft bei Tastendruck die Funktion myHandler auf #
<script for=document event="onkeypress()" language="JScript">{myHandler();}</script>
<script for=document event="onkeydown()" language="JScript">{myHandler();}</script>
<script for=document event="onkeyup()" language="JScript">{myHandler();}</script>
...
<script language="JScript"> function myHandler(){
#Handler für das Drücken der linken Cursortaste
if (window.event.keyCode == "37"){
var dir = "links";
# übergibt dem Hidden Field "Key" einen Wert
document.RF.key.value = dir;
# Submit des Formulars RF
document.RF.submit();}
return false;}
</script>
...
</head>
<body>
...
<form name="RF">
...
<input type="hidden" name="key" value ="">
...
</form>
<body>
(beim Submit wird leider kein onInputProcessing ausgelöst, deswegen fange ich es hier ab; aber abgesehen von EVENT_ID hat man die gleichen Methoden und Paramter zur Verfügung)

Code: Alles auswählen.

ONMANIPULATION:

IF key EQ 'links'.
* mach deine Aktionen für die linke Cursortaste
ENDIF.
Das wars auch schon :)

Das Feld Key kann ich deswegen einfach auslesen, weil ich eine Seitenvariable habe (bzw. ich benutze dazu meistens eine Struktur die ich als Seitenvariable deklariere) die genau so heißt wie das Feld(das Hidden Feld key). Dadurch werden durch Namensgleichheit die Parameter einfach übertragen.

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1473
Views
gesamten Programmablauf protolkollieren
von bohne » 17.06.2006 15:12 • Verfasst in Basis
3
Antw.
4696
Views
Knobelaufgabe ( Sommer 2023 ) - Robuster Programmablauf
von black_adept » 26.06.2023 12:51 • Verfasst in SAP - Allgemeines
1
Antw.
1633
Views
Funktionstasten im ALV Grid
von SAP_ENTWICKLER » 20.11.2014 15:01 • Verfasst in ABAP® Core
2
Antw.
2555
Views
Dynpro / Funktionstasten
von cgreiner » 18.11.2018 15:24 • Verfasst in ABAP® für Anfänger
8
Antw.
4801
Views
Probleme mit Funktionstasten bei ALV
von Fredi » 29.07.2005 15:33 • Verfasst in ABAP® Core

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

IBAN und BUT0BK
vor 12 Stunden von DeathAndPain gelöst 7 / 7602
SAPGui 8.00 32 Bit vs 64 Bit
vor 12 Stunden von DeathAndPain 3 / 1014
Programm per Fremdtransport einspielen
vor 15 Stunden von IHe 3 / 414
Splitter-AlV erscheint nicht
vor 17 Stunden von qyurryus 2 / 443
Speichern Popup in MM42 verhindern
vor 21 Stunden von Noodl 1 / 448

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

IBAN und BUT0BK
vor 12 Stunden von DeathAndPain gelöst 7 / 7602
SAPGui 8.00 32 Bit vs 64 Bit
vor 12 Stunden von DeathAndPain 3 / 1014
Programm per Fremdtransport einspielen
vor 15 Stunden von IHe 3 / 414
Splitter-AlV erscheint nicht
vor 17 Stunden von qyurryus 2 / 443
Speichern Popup in MM42 verhindern
vor 21 Stunden von Noodl 1 / 448