Dialogprogramm - Sperren von Feldern

Benutzeroberflächen in SAP®-Systemen.
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

Dialogprogramm - Sperren von Feldern

Beitrag von Tellerchen58 (ForumUser / 21 / 0 / 0 ) »
Hallo zusammen,

ich habe eine Dialoganwendung erstellt, die einmall als Einzelanwendung aufgerufen kann, aber auch aus einem anderen Dialog aufgerufen wird. Wird sie aus einem anderen Dialog aufgerufen, so werden Schlüsselfelder übergeben, die dann auch nicht mehr überschrieben werden dürfen (z.B. die 'Persoalnummer). Die Übergabe der Schlüsselfeler funktioniert durchaus mit einer Einschränkung. Im PBO habe ich einen LOOP AT SCREEN, um für diese Schlüsselfelder eine Eingabesperre zu setzen. Dies hat aber den Effekt, dass die Feldübergabe aus dem aufrufenden Dialog nicht mehr funktioniert.
Wie kann ich es also schaffen, Werte zu übergeben, die Felder danach aber für die Eingabe zu sperren. (Läuft die Anwendung ohne den Aufruf über einen anderen Dialog müssen die Felder natürlich eingabebereit bleiben).

Danke für eine Antwort.

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


Re: Dialogprogramm - Sperren von Feldern

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Hmmm, seh ich eigentlich kein Problem. Poste doch mal die entscheidenden Quellcode-Stellen, vielleicht erkennen wir so deinen Fehler.

Re: Dialogprogramm - Sperren von Feldern

Beitrag von Tellerchen58 (ForumUser / 21 / 0 / 0 ) »
Hallo,

Aufruf des Dialogs mit

FORM BARCODE_VERGEBEN .
CLEAR S_CALL.
S_CALL-PROGRAM = 'SAPMZREISE_BARCODE'.
S_CALL-DYNPRO = '0100'.
S_CALL-DYNBEGIN = 'X'.
APPEND S_CALL TO T_CALL.

CLEAR S_CALL.
S_CALL-FNAM = 'D0100-PERNR'.
S_CALL-FVAL = W_REISE-PERNR.
APPEND S_CALL TO T_CALL.

CLEAR S_CALL.
S_CALL-FNAM = 'D0100-REISEDATUM'.
WRITE H_REISEDATUM TO S_CALL-FVAL.
APPEND S_CALL TO T_CALL.

H_OPT-DISMODE = 'A'.
H_OPT-DEFSIZE = 'X'.

CALL TRANSACTION 'ZREISE_BARCODE'
USING T_CALL
MODE 'A'
UPDATE 'S'.

CLEAR H_OPT.
REFRESH T_CALL.
ENDFORM. " BARCODE_VERGEBEN

*--------------------------------------------------------------------------
Im eigentlichen (aufgerufenen) Dialog:

FORM FELDER_SPERREN_0100.
* IF H_ABSPRUNG = 'X'.
IF SY-BINPT = 'X'.
LOOP AT SCREEN.
IF SCREEN-NAME EQ 'D0100-WERKS'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.

IF SCREEN-NAME EQ 'D0100-NACHN'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.

IF SCREEN-NAME EQ 'D0100-VORNA'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.

IF SCREEN-NAME EQ 'D0100-REISEDATUM'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.

IF SCREEN-NAME EQ 'D0100-PERNR'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.

IF SCREEN-NAME EQ 'D0100-KOSTL'.
SCREEN-INPUT = '0'.
MODIFY SCREEN.
ENDIF.

ENDLOOP.


*--------------------------------------------------------------------------

Aufruf dieser Routine:
PROCESS BEFORE OUTPUT.
MODULE INITIALISIEREN_0100.
MODULE STATUS_0100.
MODULE FELDER_VORBELEGEN_0100.
* MODULE FELDER_SPRERREN_0100.

PROCESS AFTER INPUT.
MODULE ANWENDUNG_EXIT AT EXIT-COMMAND.
MODULE USER_COMMAND_0100.


Eine Idee dazu ?

Re: Dialogprogramm - Sperren von Feldern

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Ah ok, da hab ich mich "verdacht". Bei Reports gehts ohne Probleme, bei Dialogtransaktionen nicht, da die Parameter per Batch-Input übergeben werden, was natürlich erst nach PBO greift. Da sind die Felder allerdings schon gesperrt.

Was mir spontan einfällt wäre ein OK_CODE, der nur die Felder auf nicht eingabebereit setzt und den du direkt mit aufrufst. Irgendwie sowas in der Art:

Code: Alles auswählen.

CLEAR s_call.
s_call-fnam = 'BDC_OKCODE'.
s_call-fval = '=INPUT'.
APPEND s_call TO t_call.
Und dann im Dialogprogramm:

Code: Alles auswählen.

MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'INPUT'.
      g_input = 'X'.
  ENDCASE.
ENDMODULE. 

Code: Alles auswählen.

MODULE felder_sperren_0100 OUTPUT.
  LOOP AT SCREEN.
    IF input = 'X'.
      screen-input = '0'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
  input = ''.
ENDMODULE.   
Ist zwar ziemlich umständlich, aber sollte funktionieren.

Re: Dialogprogramm - Sperren von Feldern

Beitrag von Tellerchen58 (ForumUser / 21 / 0 / 0 ) »
Hallo nochmal,

den Vorschlag versuche ich ja schon mit dem Schalter SY-BINPT zu realisieren:

IF SY-BINPT = 'X'.
LOOP AT SCREEN.
IF SCREEN-NAME EQ 'D0100-WERKS'.
SCREEN-INPUT = '0' ..............

Der steht auch tatsächlich auf 'X', wenn ich aus der anderen Dialogfunktion in mein Programm springe. Es funktioniert leider nicht, die Felder sind zwar gesperrt, doch eben auch leer.
Muss man vielleicht einen anderen SCREEN-Parameter füllen. Jemand schlug mir ACTIVE vor, das funktioniert allerdings auch nicht.

Noch eine andere Idee ?

Gruß
Tellerchen58

Re: Dialogprogramm - Sperren von Feldern

Beitrag von Tellerchen58 (ForumUser / 21 / 0 / 0 ) »
Noch ein Nachtrag:

Ich habe mal versucht zu debuggern, wann denn die Feldinhalte der Dynpros überhaupt übergeben werden. Obwohl ich mit Einzelschritt mühsam durch das Programm gegangen bin, bin ich nicht an die Stelle gekommen, wo die BTCI-Daten übergeben werden. Wie "von Zauberhand" stehen Sie plötzlich auf dem Bildschirm (wenn ich die Felder nicht sperre).

Weiss jemand, wie das überhaupt funktioniert ?

Re: Dialogprogramm - Sperren von Feldern

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Servus,

also der Trick an meinem Vorschlag war der OK-CODE und nicht irgendein X-Kennzeichen.
1. Aufruf des Programms
2. Durchlaufen PBO
3. Batch-Input
4. Jetzt kommt der Trick -> Auslösen eines OK_CODES "INPUT"
5. erneutes Durchlaufen von PBO und sperren der Felder

g_input brauche ich nur, um im PBO zu erkennen, dass ich was machen will!

Das Problem ist, dass zuerst das Programm gerufen und PBO ausgeführt wird. Erst danach kommt der Batch-Input und will die Daten schreiben, da sind die Felder dann leider schon gesperrt/deaktiviert.
Könnte sein, dass du das im Systemdebugging siehst, bezweifel ich aber auch, da der Befehl CALL TRANSACTION wahrscheinlich nix durchblicken lässt.

Re: Dialogprogramm - Sperren von Feldern

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Hallo Tellerchen58,

Eine dir genehme Möglichkeit mittels "SY-BINPT" hast du ja schon gefunden um zu entscheiden du ob du das Feld eingabebereit machen musst oder auch nicht.
Die Übergabe der Werte würde ich über SET PARAMETER und GET PARAMETER lösen (falls die Felder das standardmäßig unterstützen) oder via EXPORT ... TO MEMORY statt die Werte im BI mitzugeben.

Das sähe dann etwa so aus
aufrufendes Programm:

Code: Alles auswählen.

SET PARAMETER ID reisedatum
SET PARAMETER ID pernr
oder 
EXPORT pernr reisedatum to MEMORY ID 'WAS_WEISS_ICH'



CALL TRANSACTION 'ZREISE_BARCODE'  AND SKIP FIRST SCREEN
und im gerufenen Programm

Code: Alles auswählen.

GET PARAMETER oder IMPORT FROM MEMORY
Eingabefelder mit den importieren Daten füllen
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Dialogprogramm - Sperren von Feldern

Beitrag von Tellerchen58 (ForumUser / 21 / 0 / 0 ) »
Hallo Stefan,

Danke für den Tipp. Das werde ich mal ausprobieren.

Gruß
Tellerchen58

Re: Dialogprogramm - Sperren von Feldern

Beitrag von Tellerchen58 (ForumUser / 21 / 0 / 0 ) »
Hallo Stefan,

habe jetzt endlich die Zeit gefunden, Deinen Tipp auszuprobieren. Leider klappt auch dies nicht. Zwar schaffe ich es, die Werte mit SET bzw. GET an das 2. Programm weiterzugeben. Aber sobald ich im LOOP AT SCREEN die Eigenschaft ändere, erfolgt die Übergabe nicht mehr.
Ich habe auch schon mit verschiedenen Feldern des SCREEN experimentiert - ohne den gewünschten Effekt.

Wie muss ich auf dem Dynpro die Eigenschaften der übergebenden bzw. zu übernehmenden Felder definieren ? Nur Ausgabefeld geht gar nicht, dann übernimmt er den Wert gar nicht.

Gibt es einen Vorschlag, welchen Schalter ich beim SCREEN setzen sollte ?

Danke für die Hilfe.

LG
Tellerchen58

Re: Dialogprogramm - Sperren von Feldern

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Hi Tellerchen58,

ich denke immer noch, das Problem ist der Feldtransport. Da der erst zu Ende PBO stattfindet, du dann aber deine Felder schon gesperrt hast, hast du zwei Möglichkeiten:

1. Nutze die Bausteine DYNP_VALUES_READ / DYNP_VALUES_UPDATE um den Feldtransport zu simulieren.
2. Machs wie ich oben beschrieben hab, das funktioniert.

Grüße
CASMAN

Seite 1 von 1

Vergleichbare Themen

6
Antw.
3765
Views
Range in Dialogprogramm?
von eschi78 » 03.11.2006 13:22 • Verfasst in Dialogprogrammierung
2
Antw.
2247
Views
Hintergrundverarbeitung im Dialogprogramm?
von eschi78 » 16.11.2006 16:30 • Verfasst in Dialogprogrammierung
1
Antw.
1855
Views
Variante in Dialogprogramm?
von eschi78 » 14.11.2006 16:56 • Verfasst in Dialogprogrammierung
6
Antw.
5022
Views
Vorbelegen von Feldern
von chrislis » 18.05.2006 10:55 • Verfasst in Web-Dynpro, BSP + BHTML
6
Antw.
5285
Views
Icons in ALV-Feldern
von Svenson » 19.09.2005 15:07 • Verfasst in ABAP Objects®

Über diesen Beitrag


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

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 744
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2368
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8954