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 / 3955 / 202 / 281 ) »
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
Neuer Artikel über BRF+ in der neuen iX 05/25!

Re: Volldynamische If Anweisung

Beitrag von ewx (Top Expert / 4885 / 319 / 644 ) »

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.
3633
Views
IF Anweisung
von Mathan » 06.09.2006 13:07 • Verfasst in ABAP® Core
3
Antw.
1848
Views
Select-Anweisung
von phil1982 » 02.08.2007 08:30 • Verfasst in ABAP® für Anfänger
11
Antw.
6252
Views
JOIN-Anweisung
von honeyjam » 04.01.2011 16:41 • Verfasst in ABAP® für Anfänger
4
Antw.
4009
Views
Anweisung nicht erreichbar
von LittleT » 11.09.2006 10:16 • Verfasst in ABAP Objects®
2
Antw.
2709
Views
Dynamische Update Anweisung
von jondahl11 » 21.02.2007 09:08 • 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

IF mit AND und OR
vor einer Woche von GastX 6 / 9055
Meine Inbox
vor einer Woche von Rabea1103 1 / 6805
PCL2 Cluster auslesen
vor einer Woche von DeathAndPain 2 / 7953
FUBA 'HR_INFOTYPES_OPERATION'
vor einer Woche von Bright4.5 3 / 13449

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

IF mit AND und OR
vor einer Woche von GastX 6 / 9055
Meine Inbox
vor einer Woche von Rabea1103 1 / 6805
PCL2 Cluster auslesen
vor einer Woche von DeathAndPain 2 / 7953
FUBA 'HR_INFOTYPES_OPERATION'
vor einer Woche von Bright4.5 3 / 13449