Konstanten mit Struktur

Getting started ... Alles für einen gelungenen Start.
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Konstanten mit Struktur

Beitrag von black_adept (Top Expert / 3950 / 105 / 886 ) »
Hallo abapler,

gibt es eigentlich in ABAP eine Möglichkeit Konstanten mit Bezug auf einen strukturierten Typ anzulegen.

Beispiel:
Eine DB-Struktur ist definiert wie folgt:

ZMYCOLOR mit den Feldern
ROT - Typ Integer,
GRÜN - Typ Integer,
BLAU - auch Typ Integer,


Jetzt möchte ich sowohl in einem normalen Programm als auch in Klassen als Klassenkonstante z.B. folgendes defieren:

c_color_weiss TYPE zmycolor VALUE ???.
Tja - hier versage ich jetzt. Ich hätte gerne sowas wie (255,255,255)

Vorschläge oder Workarounds würden mir sehr weiterhelfen.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

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


Beitrag von Thomas R. (Expert / 754 / 74 / 34 ) »
Hallo Stefan,
wie heißt es immer so schön (wenn man den Wald vor lauter Bäumen nicht sieht :?: ): F1 hilft weiter.

Die F1-Hilfe gibt folgenden Tipp:

CONSTANTS: BEGIN OF CONST_REC,
C(2) TYPE C VALUE 'XX',
N(2) TYPE N VALUE '12',
X TYPE X VALUE 'FF',
I TYPE I VALUE 99,
P TYPE P VALUE 99,
F TYPE F VALUE '9.99E9',
D TYPE D VALUE '19950101',
T TYPE T VALUE '235959',
END OF CONST_REC.

Übertragen auf Dein Beispiel:
CONSTANTS:
BEGIN OF C_COLOR,
ROT TYPE ZMYCOLOR-ROT VALUE 255,
GRÜN TYPE ZMYCOLOR-GRÜN VALUE 255,
BLAU TYPE ZMYCOLOR-BLAU VALUE 255,
END OF C_COLOR.

Dies wäre doch ein work-around oder gibt es Gründe, weshalb Du diese Lösung verworfen hast?

MfG
Thomas R.

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

Konstantendeklarationen lassen sich in dieser Form nicht als Klassenkonstanten definieren, weil hierzu binäre Informationen zu den Integerfeldern definiert werden müssten, die sich so nicht in Klassen eingeben lassen.

Mein Vorschlag ist:
definiere ein Klassenattribut (z.B. C_COLOR_WHITE) vom Typ STATIC, READ-ONLY mit der Struktur als Typ.
Im CLASS-CONSTRUCTOR wird diese Variablenstruktur mit ihren Werten initialisiert und steht dann als quasi-Konstante zur Verfügung.

Code: Alles auswählen.

METHOD CLASS-CONSTRUCTOR.
* quasi-Konstante mit (255,255,255) initialisieren
  c_color_white-red   = 255.
  c_color_white-green = 255.
  c_color_white-blue  = 255.
ENDMETHOD.
das Beispiel ist ohne Systemunterstüzung geschrieben und muss eventuell noch angepasst werden.
Gruß
Ereglam


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

Beitrag von black_adept (Top Expert / 3950 / 105 / 886 ) »
Hallo ihr Beiden und vielen Dank für eure Tipps.

@ Thomas:
Das mit dem Wald hätt ich beinahe sowieso schon in mein Posting geschrieben da ich mir genauso vorkam.

Deine Lösung an sich ist ok - aber damit ist die Konstante ja eben nicht mit Bezug auf den Typ angelegt sondern "nur" analog.
Letztlich werd ich mich wohl mit dieser Lösung begnügen müssen fürchte ich.

Code: Alles auswählen.

REPORT zss_test3 .

types: begin of ty_rgb,
         red   type i,
         green type i,
         blue  type i,
       end of ty_rgb.

constants: color1 type ty_rgb value 0," ! schecht - aber syntaktisch ok
           begin of color2,
             red   type i value 255,
             green type i value 255,
             blue  type i value 255,
           end of color2.

data: descr_ref TYPE ref to cl_abap_typedescr.



START-OF-SELECTION.
  descr_ref = cl_abap_typedescr=>describe_by_data( color1 ).

  WRITE: / 'Typename:', descr_ref->absolute_name.
  WRITE: / 'Kind    :', descr_ref->type_kind.
  WRITE: / 'Length  :', descr_ref->length.
  WRITE: / 'Decimals:', descr_ref->decimals.
uline.
  descr_ref = cl_abap_typedescr=>describe_by_data( color2 ).

  WRITE: / 'Typename:', descr_ref->absolute_name.
  WRITE: / 'Kind    :', descr_ref->type_kind.
  WRITE: / 'Length  :', descr_ref->length.
  WRITE: / 'Decimals:', descr_ref->decimals.
Ein Vergleich der Type von "color1" und "color2" zeigt, dass es sich nicht um denselben Typ handelt, auch wenn die interne Struktur indentisch ist.
Außerdem kommt es zu keinem (gewollten) Syntaxfehler, sobald sich der Typ mal ändert falls er im DDIC abgelegt ist.


@Ereglam:

Was anderes wird mir wohl nicht übrig bleiben. Ich hab grad mal in meinen Klassenkonstruktor geschaut und dort den Satz "Quasikonstanten belegen" gefunden. Mir scheint du denkst sehr ähnlich wie ich.
Mich stört aber immer noch, dass in abgeleiteten Klassen später dieses Attribut geändert werden kann und es somit faktisch keine echte Konstante ist.

Wahrscheinlich werde ich folgende Lösung probieren.
Ich definiere eine neue Klasse, die aber final ist und benutze genau die von ereglam beschriebene Quasikonstantenmethode. Damit sind dann leider nicht mehr die strukturierten Konstanten in der Klasse wo sie "eigentlich" zu vermuten gewesen wären - aber durch die Finalität der Hilfsklasse kann zumindest niemand die Belegung ändern so dass die "Quasikonstanten" damit (hoffentlich*) zu echten Konstanten werden.


(hoffentlich*):
Ich befürchte jetzt nur noch, dass Frank irgendeinen Trick kennt, wie man READ_ONLY-Attribute einer finalen Klasse doch noch ändern kann :D
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
@black_adept
wer solche quasi-Konstanten verändert, hat es dann nicht besser verdient. :?

Schreib doch einen Kommentar an die Initialisierung:
Wer quasi-Konstanten verändert oder verfälscht oder geänderte oder verfälschte quasi-Konstanten in Umlauf bringt, wird mit Systemunpässlichkeiten nicht unter zwei Arbeitstagen bestraft!
:twisted:

PS:
der Trick mit der Hilfsklasse ist ja auch noch eine Lösung.
PPS:
in SAP-Programmen finden sich auch immer mal Konstanten, die mit DATA definiert wurden... ;)
PPPS:
wenn Du TRUE ('X') und FALSE (' ') als Konstanten benutzen willst (und es nicht schon tust), benutze TYP-POOL abap mit den Konstanten abap_true und abap_false, sowie dem Typ abap_bool (TYPE c(1)).
Gruß
Ereglam


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

RGB-Farbausgabe auf Dynpro/Liste??

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

ich hatte jetzt spontan die Idee, die Struktur als Dictionary-Struktur anzulegen, also 1 Domäne COLOR, 3 Datenelemente COL_RED, COL_..., COL_... und eine Struktor Z_S_COLOR mit den 3 Colors.

Diese Struktur kann ich überall benutzen.

Ansonsten "öffentliches" Attribut c_white als TYPE Z_S_COLOR und Zuweisung im CONSTRUCTOR wie bereits oben beschrieben.

Tatsächlich werde ich so was nächste Woche brauchen um Farbangaben aus einem Vorsystem zu verarbeiten.

Dabei würde mich noch interessieren, wie man diese Farben auf einem Dynpro oder auf einer Liste ausgibt.

Gruß
babap

Seite 1 von 1

Vergleichbare Themen

2
Antw.
2011
Views
Konstanten auslagern
von Troilus » 20.10.2007 11:31 • Verfasst in ABAP® für Anfänger
2
Antw.
2556
Views
Übersetzung von Konstanten
von Beni » 28.04.2006 15:45 • Verfasst in ABAP Objects®
17
Antw.
3477
Views
Konstanten als Domänenfestwerte
von ralf.wenzel » 08.12.2018 13:42 • Verfasst in ABAP® Core
1
Antw.
1425
Views
Workflow und Konstanten
von matthes » 02.11.2007 14:33 • Verfasst in ABAP® für Anfänger
4
Antw.
3312
Views
Select mit Konstanten
von codierknecht » 03.01.2007 07:50 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

CDS VIEWS aufsummieren von Werte
vor 3 Stunden von ZF_SAPler 3 / 38
Artikel automatisch in va01
vor 3 Tagen von wreichelt 2 / 55
langtexte beim Fertigungsauftrag
vor 3 Tagen von ByteMeBaby 7 / 6427
Updates der Daten, Fehlermeldung
vor 4 Tagen von Egzon gelöst 1 / 76

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

CDS VIEWS aufsummieren von Werte
vor 3 Stunden von ZF_SAPler 3 / 38
Artikel automatisch in va01
vor 3 Tagen von wreichelt 2 / 55
langtexte beim Fertigungsauftrag
vor 3 Tagen von ByteMeBaby 7 / 6427
Updates der Daten, Fehlermeldung
vor 4 Tagen von Egzon gelöst 1 / 76

Unbeantwortete Forenbeiträge

Updates der Daten, Fehlermeldung
vor 4 Tagen von Egzon 1 / 76
Zwischensumme Adobe Forms
letzen Monat von Lucyalison 1 / 307