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 / 102 / 14 / 12 ) » 7. Feb 2019 06:33

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. :)


Re: Konstanten als F4 Auswahl

Beitrag von a-dead-trousers (Top Expert / 3199 / 81 / 792 ) » 7. Feb 2019 07:25

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.07
Basis: 7.40

Re: Konstanten als F4 Auswahl

Beitrag von msfox (ForumUser / 30 / 2 / 2 ) » 7. Feb 2019 08:26

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 / 3917 / 160 / 349 ) » 7. Feb 2019 09:19

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 / 102 / 14 / 12 ) » 7. Feb 2019 09:20

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 / 3372 / 146 / 213 ) » 7. Feb 2019 11:39

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

Seite 1 von 1

Aktuelle Forenbeiträge

OBN im NWBC ohne Popup
vor 7 Stunden von msfox 2 / 37
Business Partner Konzept
vor 8 Stunden von waltersen 4 / 267
Exception Handling FuBa test
vor 11 Stunden von czschunke 2 / 88
MD14 Felder einblenden Umsetzung Planauftrag
vor 11 Stunden von Thomas R. 1 / 20

Unbeantwortete Forenbeiträge

MD14 Felder einblenden Umsetzung Planauftrag
vor 11 Stunden von Thomas R. 1 / 20
Verursachervormerkung OCM manuell anlegen
vor einer Woche von Aba 1 / 129
Auflösen MILL_OC - Auftragszusammenfassung
vor einer Woche von tofralu 1 / 112
Löschen von archivierten Drucklisten
vor einer Woche von Asaph 1 / 103