Volldynamische If Anweisung

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

Volldynamische If Anweisung

Beitrag von TZI (ForumUser / 2 / 1 / 0 ) »
Hallo zusammen, wenn ich hier nicht richtig bin, bitte verschieben-
Folgendes, ich habe eine If abfrage zum bewerten eines Fragebogens.
Die Bewertung kann jedoch über eine Costumizing tabelle geändert werden.

Vorweg:
Counter ist der wert, welcher durch die Fragen erziehlt wurde.
<green> ist der schwellenwert welcher gebraucht wird um die grüne Ampel zu erhalten.
<red> ist der Schwellenwert um die rote Ampel zu erhalten
<op1> und <op2> sind die Operatoren, welche folgende Formen annehmen können: '<' '>' '=<' '=>' '='

Mein erster versuch sah wiefolgt aus:

Code: Alles auswählen.

  IF counter <op1> <green>. 
    lv_image = 'ICON_GREEN_LIGHT'.
  ELSEIF counter <op2> <red>. 
    lv_image = 'ICON_RED_LIGHT'.
  ELSE. 
    lv_image = 'ICON_YELLOW_LIGHT'.
  ENDIF.
-> Fehler: Vergleichsoperatoren werden nicht unterstützt

Der zweite versuch folgendermassen:

Code: Alles auswählen.

concatenate counter <op1> <green> into <if_string_green> SEPARATED BY ' '.
concatenate counter <op2> <red> into <if_string_red> SEPARATED BY ' '.

  IF <if_string_green>. 
    lv_image = 'ICON_GREEN_LIGHT'.
  ELSEIF <if_string_red>
    lv_image = 'ICON_RED_LIGHT'.
  ELSE. 
    lv_image = 'ICON_YELLOW_LIGHT'.
  ENDIF.
-> Fehler: Fehlerhafter Logischer ausdruck

Hat jemand eine Idee wie ich das Problem lösen könnte?

Grusse und Danke im vorraus

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


Re: Volldynamische If Anweisung

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
TZI hat geschrieben:Der zweite versuch folgendermassen:

Code: Alles auswählen.

concatenate counter <op1> <green> into <if_string_green> SEPARATED BY ' '.
concatenate counter <op2> <red> into <if_string_red> SEPARATED BY ' '.

  IF <if_string_green>. 
    lv_image = 'ICON_GREEN_LIGHT'.
  ELSEIF <if_string_red>[b][color=#FF0000].[/color][/b]
    lv_image = 'ICON_RED_LIGHT'.
  ELSE. 
    lv_image = 'ICON_YELLOW_LIGHT'.
  ENDIF.
-> Fehler: Fehlerhafter Logischer ausdruck
Weil der (hier rote) Punkt fehlt.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Volldynamische If Anweisung

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »

Code: Alles auswählen.

RANGES green for counter.
ranges red for counter.

green-sign = 'I'.
green-option = 'LT'.
green-low = 100.
append green.

red-sign = 'I'.
red-option = 'GE'.
red-low = 101.
append red.

if counter in green.
lv_image = 'ICON_GREEN_LIGHT'.
elseif counter in red.
lv_image = 'ICON_RED_LIGHT'.
...
endif.
RANGES ist in Klassen nicht erlaubt.
Dafür gibt es dann DATA xyz TYPE RANGE of...

oder einfacher:

Code: Alles auswählen.

data green type i value 10.
data yellow type i value 30.

if counter < green.
lv_image = 'GREEN'.
elseif counter < yellow.
lv_image = 'YELLOW'.
else.
lv_image = 'RED'.
endif.

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


Re: Volldynamische If Anweisung

Beitrag von TZI (ForumUser / 2 / 1 / 0 ) »
@Ralf, leider fliegt der compiler schon beim ersten <if_string_green> ;)

@ewx
Danke für den Input mit den Ranges.
Ich habe es nun wie folgt lösen können:

Code: Alles auswählen.


 DATA: BEGIN OF ls_green,
          sign(1) TYPE c,
          option(2) TYPE c,
          low TYPE zportfostatxt-gruen,
          high TYPE zportfostatxt-gruen,
        END OF ls_green.

  DATA: lt_green LIKE STANDARD TABLE OF ls_green.

  DATA: BEGIN OF ls_red,
          sign(1) TYPE c,
          option(2) TYPE c,
          low TYPE zportfostatxt-rot,
          high TYPE zportfostatxt-rot,
        END OF ls_red.

  DATA: lt_red LIKE STANDARD TABLE OF ls_red.

  ls_green-sign = 'I'.
  ls_green-option = <op1>.
  ls_green-low = <green>.
  ls_green-high = <green>.

  CALL METHOD -> zum austauschen der Operatoren (<= -> LE)

  APPEND ls_green TO lt_green.

  ls_red-sign = 'I'.
  ls_red-option = <op2>.
  ls_red-low = <red>.
  ls_red-high = <red>.

CALL METHOD -> zum austauschen der Operatoren (<= -> LE)

  APPEND ls_red TO lt_red.

  IF counter IN lt_green.
    lv_image = 'ICON_GREEN_LIGHT'.
  ELSEIF counter IN lt_red.
    lv_image = 'ICON_RED_LIGHT'.
  ELSE.
    lv_image = 'ICON_YELLOW_LIGHT'.
  ENDIF.
Grusse

Seite 1 von 1

Vergleichbare Themen

9
Antw.
3148
Views
IF Anweisung
von Mathan » 06.09.2006 13:07 • Verfasst in ABAP® Core
2
Antw.
1889
Views
modify Anweisung
von Jan_M. » 31.05.2004 21:39 • Verfasst in ABAP® für Anfänger
3
Antw.
1565
Views
Select-Anweisung
von phil1982 » 02.08.2007 08:30 • Verfasst in ABAP® für Anfänger
9
Antw.
5853
Views
Select-Anweisung
von ??? » 23.05.2005 10:22 • Verfasst in ABAP® für Anfänger
18
Antw.
5203
Views
Select-Anweisung...
von Nici » 19.07.2004 13:18 • Verfasst in ABAP® für Anfänger

Ü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.