Konstanten als F4 Auswahl

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Konstanten als F4 Auswahl

Beitrag von nickname8 (Specialist / 134 / 17 / 19 ) »
Hallo,

ich stoße immer wieder an die Anforderung, dass ich gerne in einer globalen/lokalen Klasse definierte CONSTANTS auch gerne mit einer entsprechenden Wertehilfe im Slectionscreen auswählen wollen würde, am Besten mit Übersetzung.

Natürlich könnte ich das einfach zu Fuß machen: Konstante in Klasse anlegen, Wert zuweisen und entsprechendes Datenelement mit Festwert/Pflegetabelle anlegen und Übersetzung erstellen.

Das Problem ist halt, dass es schnell passieren kann, dass der Wert der Konstanten nicht mit dem Wert des Datenelementes übereinstimmt. Das würde ich gerne vermeiden.

Mal ein sehr simples Beispiel:

In der Klassse ist folgendes deklariert:
CONSTANTS:
c_color_yellow TYPE zcol VALUE 1,
c_color_blue TYPE zcol VALUE 2,
c_color_green TYPE zcol VALUE 3.

Die Domäne hinter dem Datentyp zcol hat jedoch als Festwerte nur die Farben yellow und blue definiert. Heißt, ich müsste da immer zu Fuß hinterher und die Werte syncronisieren.
Oder es könnte auch einfach passieren, dass als Festwert yellow den Wert 5 hat, und in der Klasse ist das falsch definiert (warum auch immer).

Hat da jemand schon eine bessere/generischere Lösung zu gefunden?

Bin gespannt auf eure Ideen. :)

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


Re: Konstanten als F4 Auswahl

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Man kann z.B. in einem F4-Userexit aus der View VSEOATTRIB alle PUBLIC CONSTANTS zu einem Interface oder einer Klasse Methode auslesen.
Wenn man zusätzlich auch noch die Vererbungen miteinbeziehen möchte, kann man auch CL_ABAP_OBJECTDESCR verwenden. Dann kann man aber die "eingebauten" Fähigkeit zur Daten-Selektion der Suchhilfen kaum nutzen.
Im Sinne der leichteren Verwaltung solcher Konstanten verwende ich immer ein Interface als Klammer. Um in deinen Beispiel zu bleiben, würde ich ein Interface ZIF_COLOR erstellen und darin alle "Farben" definieren die ich brauche, sonst nichts. Werden weitere Konstanten benötigt kommen die in ein anderes Interface. Der Vorteil von Interfaces ist, dass du die Wahl hast ob du das Interface an deine Klasse "andockst" oder nicht. Manchmal macht das Sinn z.B. um schnell alle Konstanten sehen zu können die deine Klasse verwendet, ein anderes Mal eher nicht weil z.B. nicht wirklich alle Konstanten benötigt werden und es sonst zu unübersichtlich wird.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
nickname8

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Konstanten als F4 Auswahl

Beitrag von msfox (Specialist / 304 / 50 / 62 ) »
nickname8 hat geschrieben:n der Klassse ist folgendes deklariert:
CONSTANTS:
c_color_yellow TYPE zcol VALUE 1,
c_color_blue TYPE zcol VALUE 2,
c_color_green TYPE zcol VALUE 3.

Die Domäne hinter dem Datentyp zcol hat jedoch als Festwerte nur die Farben yellow und blue definiert. Heißt, ich müsste da immer zu Fuß hinterher und die Werte syncronisieren.
Oder es könnte auch einfach passieren, dass als Festwert yellow den Wert 5 hat, und in der Klasse ist das falsch definiert (warum auch immer).
Aus meiner Sicht ist das so wie es ist.
Führend sind die Domänfestwerte, die auch in der Suchhilfe verwendet werden.
Sich dafür Konstanten definieren, kann man sich doch an 'zig Stellen. Für die Pflege ist der Entwickler dann selbst verantwortlich. Und andere Konstanten als in der Domäne festgelegt, machene keinen Sinn.
Warum soll aus yellow = 1 plötzlich yellow = 5 werden?

Es wird erst ein Schuh draus, wenn man nicht mit Domänenfestwerten arbeitet.
Man baut sich eine Klasse mit den Konstanten incl. Text und ggf. GETTER-Methoden. Im Suchhilfeexit kann man diese dann abfragen. Somit hat man die Pflege der Werte incl. Text nur in der Klasse. Die Suchhilfe müsste man dann aber an das Datenelement hängen oder sonst wie mit dem Feld verbinden, wo es gebraucht wird. An der Domäne klappt das dann nicht mehr.

Re: Konstanten als F4 Auswahl

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Da gibt es leider keine zufriedenstellende Lösung.
Das Thema hatten wir gerade:
https://www.abapforum.com/forum/viewtop ... =2&t=23280

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
nickname8


Re: Konstanten als F4 Auswahl

Beitrag von nickname8 (Specialist / 134 / 17 / 19 ) »
ah, mir war doch so, als ob das Thema hier schonmal anklang...
Danke dir.

Re: Konstanten als F4 Auswahl

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Ich habe das so gelöst: Ich habe einen Generator für solche Klassen geschrieben. Legt jemand in einer Domain Festwerte an oder ändert er sie, wird per Mausklick ein Domain Manager (so nennen wir diese Klassen) erzeugt bzw. aktualisiert.

So ist der Arbeitsaufwand für den Entwickler minimiert.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Seite 1 von 1

Vergleichbare Themen

5
Antw.
4402
Views
Konstanten mit Struktur
von black_adept » 11.05.2005 19:08 • Verfasst in ABAP® für Anfänger
2
Antw.
2000
Views
Konstanten auslagern
von Troilus » 20.10.2007 11:31 • Verfasst in ABAP® für Anfänger
4
Antw.
3300
Views
Select mit Konstanten
von codierknecht » 03.01.2007 07:50 • Verfasst in ABAP® für Anfänger
2
Antw.
2545
Views
Übersetzung von Konstanten
von Beni » 28.04.2006 15:45 • Verfasst in ABAP Objects®
1
Antw.
1422
Views
Workflow und Konstanten
von matthes » 02.11.2007 14:33 • Verfasst in ABAP® für Anfänger

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.