Dynpro: Eingabefelder dynamisch erstellen und ausrichten

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

Dynpro: Eingabefelder dynamisch erstellen und ausrichten

Beitrag von Nautilus (ForumUser / 45 / 0 / 0 ) »
Hallo Leute.

Ich habe gerade mal eine Frage:

Ist es möglich, in einem leeren Dynpro zu PBO Eingabefelder dynamisch zu erzeugen?

Ausgangslage ist, dass ich je Inhalt bestimmter Variablen zu PBO einen Selektionsbildschirm unterschiedlich aufbauen und somit Eingabe- und Textfelder dynamisch erstellen möchte.

Ist so etwas möglich?
Wenn ja wie und wenn nein:
Wie kann man es alternativ tun?

Ich hoffe auf viele Antworten.

Vielen Dank!

Chris

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Chris,

da SAP bei der Pflege von Dynpro auch nichts anderes macht, wenn auch außerhalb des jeweiligen Programms, ist eine dynamische Erzeugung von Dynpros möglich.
Allerdings ist es nicht damit getan, mal eben schnell 3 Felder zu plazieren.

Daher die Fragen:
Warum kannst/willst Du das Aussehen Deines Dynpros nicht dynamisch durch Ein- und Ausblenden von Feldern mit dem LOOP AT SCREEN erreichen?
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Nautilus (ForumUser / 45 / 0 / 0 ) »
Gut, habe mir den Befehl Loop At Screen angeschaut.
Damit könnte ich leben, allerdings muss es möglich sein, dass die Felder sich in der Position auch ändern können.

Z.B.:

Code: Alles auswählen.

Normaler Aufbau des Dynpros:

|-------------------|
|        FELD1      |
|-------------------|


|-------------------|
|        FELD2      |
|-------------------|


|-------------------|
|        FELD3      |
|-------------------|


nun habe ich mit screen-active=0 das Feld 2 ausgeblendet, allerdings ist jetzt ein leerer Platz zwischen den Feldern 1 und 3. 
Das sieht nicht aus und hilft mir nicht weiter:

|-------------------|
|        FELD1      |
|-------------------|


|
| --> leerer Platz!
|


|-------------------|
|        FELD1      |
|-------------------|


Kann ich da irgendwas machen, dass ich die Felder anders ausrichte?

Wie macht SAP denn die dynamsiche Erstellung? Hast Du da gerade ein Stichwort für mich?

Bis denn...

Chris[/code]

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Chris,

benutze mal 'SCREEN-INVISIBLE = 1'. Damit wird das Feld und die Zeile entfernt, wenn es keine weiteren Felder in der Zeile gibt.

Ein Verschieben der Felder mit dieser Technik ist generell nicht möglich. Das geht nur mit dem dynamischen Generieren von Dynpros.

PS:
beschreibe mal die Anforderung bzgl. dem dynamischen Plazieren von Feldern. Mir ist der Hintergrund bzw. der Nutzen noch nicht klar.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Nautilus (ForumUser / 45 / 0 / 0 ) »
Hallo ereglam.

Danke für Deine Antwort.

Also, ich beschreibe Dir noch mal kurz, wie ich mir das vorstelle:

Ich erstelle ein Programm zu dynamischen Datenselektion. Ich komme von Dynpro 100 und wähle dort ein bestimmtes objekt aus. Zu diesem werden zu PAI des ersten dynamisch Daten aus Tabellen selektiert und in entsprechende Variablen geschrieben. Nun wird das Dynpro 200 aufgerufen und es sollen zu PBO die kompletten Variablen abgefragt werden und dementsprechend der Bildschirm von Dynpro 200 aufgebaut werden. Wenn z.B. Die Variable STUELNR gefüllt ist, soll auf dem Dynprofenster das Feld Stücklistennummer ausgegeben werden. Dementsprechend soll es mit anderen Variablen und Fenstern auch gemacht werden.

Logische Coding:

Code: Alles auswählen.

Ist STUELNR gesetzt?
   ja: aktiviere das Label Stücklistennummer und das entsprechende Eingabefeld.
   nein: deaktiviere das Label Stücklistennummer und das entsprechende Eingabefeld.
Wenn ich es mit invsible mache, muss ich im Voraus im Dynpro 200 alle benötigten Labels und Eingabefelder erstellen. Die sind Standardmässig ja sichtbar. Nun komme ich zu PBO des zweiten Dynpros daher und setze, je nachdem welchen Wert meine o.g. Variablen besitzen, auf invisible=1.
Allerdings habe ich etwas Angst, das wenn ich z.B. drei Felder besitze:

Code: Alles auswählen.

|-------------------|  |-------------------| 
|STUELNR Label      |  |STUELNR Eingabefeld| 
|-------------------|  |-------------------| 


|-------------------|  |-------------------| 
|ARBNR Label        |  |  ARBNR Eingabefeld| 
|-------------------|  |-------------------| 


|-------------------|  |-------------------| 
|PLNNR Label        |  |PLNNR Eingabefeld  | 
|-------------------|  |-------------------| 


nun habe ich mit screen-active=0 das Feld ARBNR ausgeblendet, allerdings ist jetzt ein leerer Platz zwischen den Feldern STUELNR und PLNNR. 
Das sieht nicht aus und hilft mir nicht weiter.

Was ich möchte, ist dass, wenn ich ARBNR ausblende, PLNNR nach oben aufrükt, damit das ganze Bildschirmbild halt gleichmässig ausschaut. 

|-------------------|  |-------------------| 
|STUELNR Label      |  |STUELNR Eingabefeld| 
|-------------------|  |-------------------| 


| 
| --> leerer Platz! 
| 


|-------------------|  |-------------------| 
|PLNNR Label        |  |PLNNR Eingabefeld  | 
|-------------------|  |-------------------| 
Wenn ich anstelle von active das Wort "invisible" benutze, dann wirkt das nur für Labels. Die Eingabefelde verwandelt er dann in Passwortfelder mit "Sternchen" (*****).

So, ich hoffe meine Beschreibung war nun ausführlich genug und ich hoffe, ihr könnt mir helfen![/code]

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Chris,

das schon ein recht komplexes Gebilde. Dazu fallen mir nun zwei mögliche Techniken ein:
  1. Alle Felder auf einem Dynpro:
    Ich habe leider vergessen zu erwähnen, dass 'INVISIBLE = 1' und 'ACTIVE = 0' gleichzeitig benutzt werden müssen, damit das Feld vollständig entfernt wird. Hierbei solltest Du im Dynpro dem Bezeichner und den Eingabefeld im Karteireiter 'ModifGruppen' in einer der 4 Gruppen den gleichen Bezeichner geben und im LOOP AT SCREEN auf SCREEN-GROUPx prüfen. Damit erwischtst Du dann alle zusammengehörigen Felder.
  2. Subscreens mit den benötigten Feldern
    Je Objekt ein separaten Subscreen mit den notwendigen Feldern anlegen und dynamisch im Hauptdynpro 0200 ziehen
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Gast ( / / 0 / 3 ) »
Hi Chris,

hört sich im Prinzip so an, als ob
Dir die Bausteine FREE_SELECTIONS_INIT
und FREE_SELECTIONS_DIALOG helfen könnten.

Haben recht gute Doku.

Gruss, Tim

Beitrag von Gast ( / / 0 / 3 ) »
ereglam hat geschrieben:benutze mal 'SCREEN-INVISIBLE = 1'.
Nein.
SCREEN-INVISIBLE wird z.B. zur Abfrage eines Passworts verwendet, wo dann statt der eingegebenen Zeichen '*' angezeigt werden.

Nicht benutzte Zeilen sollten unterdrückt werden, wenn alle entsprechenden Felder ausgeblendet sind und in den Dynpro-Attributen nicht das Flag "Ausschalten Laufzeitkomprimierung" gesetzt ist.

Beitrag von Gast ( / / 0 / 3 ) »
Hast Du vergessen, "ARBNR Label" auszublenden (und nur den Text nicht gefüllt)?
Statt Angabe der Feldnamen kann auch der Zusatz MODIF ID und Prüfung von SCREEN-GROUP1 statt SCREEN-NAME helfen.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Anonymous hat geschrieben:
ereglam hat geschrieben:benutze mal 'SCREEN-INVISIBLE = 1'.
Nein.
SCREEN-INVISIBLE wird z.B. zur Abfrage eines Passworts verwendet, wo dann statt der eingegebenen Zeichen '*' angezeigt werden.
...
Hallo Gast,

die Aussage habe ich weiter unten revidiert:
ereglam hat geschrieben:...
  1. Alle Felder auf einem Dynpro:
    Ich habe leider vergessen zu erwähnen, dass 'INVISIBLE = 1' und 'ACTIVE = 0' gleichzeitig benutzt werden müssen, damit das Feld vollständig entfernt wird. Hierbei solltest Du im Dynpro dem Bezeichner und den Eingabefeld im Karteireiter 'ModifGruppen' in einer der 4 Gruppen den gleichen Bezeichner geben und im LOOP AT SCREEN auf SCREEN-GROUPx prüfen. Damit erwischtst Du dann alle zusammengehörigen Felder.
  2. ...
Abgesehen davon habe ich mal einen Kurztest gemacht:

Code: Alles auswählen.

PARAMETERS:
  p_stlnr TYPE stnum MODIF ID snr,
  p_abrnr TYPE abrnr MODIF ID abr,
  p_plnnr TYPE plnnr MODIF ID pln.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    CASE screen-group1.
      WHEN 'STL'.
        screen-active = 0.
      WHEN 'ABR'.
        screen-invisible = 1.
      WHEN 'PLN'.
        screen-active = 0.
        screen-invisible = 1.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.
Ergebnis:
  • P_STLNR wird normal angezeigt, und ist eingabebereit. :?:
  • P_ABRNR verwendet den 'Passwort'-Modus (Sterne statt Anzeige)
  • P_PLNNR wird komplett mit Bezeichner ausgeblendet.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Nautilus (ForumUser / 45 / 0 / 0 ) »
Hi Tim.

Das mit den FuBas funktioniert das denn auch in der Dynproprogrammierung?

Wo weiss denn die Funktion, auf welches Dynproer die Felder anlegen soll?

Vielen Dank für die Idee mit den FuBas! Das hört sich eigentlich sehr viel versprechend an!

Bis denn Chris

Seite 1 von 1

Vergleichbare Themen

6
Antw.
6825
Views
Eingabefelder Pflichtfelder auf DYNPRO vermeiden.
von RIG » 12.09.2012 18:06 • Verfasst in ABAP® für Anfänger
4
Antw.
2042
Views
ALV und Dynpro-Eingabefelder: Eingabedaten abfragen
von xanatos » 13.06.2008 15:16 • Verfasst in ABAP® Core
9
Antw.
6749
Views
Selektionsbild dynamisch erstellen
von BesenWesen » 17.01.2007 15:26 • Verfasst in ABAP® Core
7
Antw.
6668
Views
Sturktur dynamisch erstellen
von jondahl11 » 23.02.2007 09:31 • Verfasst in ABAP Objects®
6
Antw.
3026
Views
Checkboxen dynamisch erstellen
von mareikemei92 » 14.11.2018 10:57 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor einer Stunde von edwin 1 / 37
Programm anlegen mit Vorlage
vor 6 Stunden von DeathAndPain 2 / 91
IT0024 Qualifikationen CP-ID
vor 6 Stunden von DeathAndPain 2 / 334
BUSOBJEKT zu CMIS PHIO ermitteln
vor 8 Stunden von snooga87 1 / 64

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

Regex in where
vor einer Stunde von edwin 1 / 37
Programm anlegen mit Vorlage
vor 6 Stunden von DeathAndPain 2 / 91
IT0024 Qualifikationen CP-ID
vor 6 Stunden von DeathAndPain 2 / 334
BUSOBJEKT zu CMIS PHIO ermitteln
vor 8 Stunden von snooga87 1 / 64

Unbeantwortete Forenbeiträge

Regex in where
vor einer Stunde von edwin 1 / 37
BUSOBJEKT zu CMIS PHIO ermitteln
vor 8 Stunden von snooga87 1 / 64
aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3246