CDS-View/AMDP-Klasse: WHERE-Bedingung 'ungleich'

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

CDS-View/AMDP-Klasse: WHERE-Bedingung 'ungleich'

Beitrag von Anne_A (ForumUser / 23 / 2 / 0 ) »
Hallo zusammen,

ich habe einen CDS-View angelegt, zu dem ich über eine Assoziation zusätzliche Daten lesen möchte. Die Daten für die Assoziation ermittle ich mittels einer Tabellenfunktion und einer AMDP-Klasse.
In der AMDP-Klasse wird unter anderem ein Statusfeld vom Typ CHAR1 selektiert, das die Werte ' ', 'A' oder 'C' haben kann.
Es sollen nur Einträge mit Status ungleich 'C' ausgegeben werden, also habe ich dem Return-Befehl als Bedingung hinzugefügt:

Code: Alles auswählen.

WHERE status <> 'C'
Wenn ich in Eclipse in der Tabellenfunktion auf "Open With" -> "Data Preview" gehe, sehe ich aber, dass nur die Einträge mit Status = 'A' ausgegeben werden, die mit leerem Status dagegen nicht.

Ich bekomme das richtige Ergebnis, wenn die Bedingung statt dessen lautet:

Code: Alles auswählen.

WHERE status IS NULL OR status = 'A'
Diese Variante finde ich aber nicht optimal. Was ist, wenn es in Zukunft noch andere Statuswerte gibt - dann müsste man ja alle einzeln abfragen.

Gibt es eine sauberere Möglichkeit, diese Selektionsbedingung zu formulieren?

Danke und viele Grüße!

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


Re: CDS-View/AMDP-Klasse: WHERE-Bedingung 'ungleich'

Beitrag von a-dead-trousers (Top Expert / 4288 / 214 / 1143 ) »
Das Problem ist eigentlich nur das IS NULL.

Code: Alles auswählen.

WHERE status IS NULL OR status <> 'C'
Damit kriegst du alle Einträge die "Ungleich C" sind inklusive jener die auf der Datenbank gar nicht existieren (also in ABAP auch "Ungleich C" wären).

In ABAP selbst gibt es kein "NULL". Da wird der Wert nach der Abfrage automatisch zu "INITIAL" umgewandelt. Daher muss man bei Datenbankabfragen (auch in OpenSQL) das IS NULL mit berücksichtigen.

EDIT:
Wenn deine Methode einmal mehr als einen Status berücksichtigen soll, kannst du dir mit einem IN behelfen.

Code: Alles auswählen.

WHERE status IS NULL OR status NOT IN (' ','A','B')
Alternativ kann man, sofern die AMDP Implementierung das unterstützt (hab ich leider noch nie verwendet), auch Range-Tabellentypen verwenden.

Code: Alles auswählen.

WHERE status IS NULL OR status IN lt_range
Was hier leider nicht geht, ist die Abfrage des IS [NOT] NULL in den Rangetyp aufzunehmen.
Wenn in AMDP auch Bedingungen gehen, kann man aber folgendes machen

Code: Alles auswählen.

IF space IN lt_range.
  ...
  WHERE status IS NULL OR status IN lt_range
ELSE.
  ...
  WHERE status IN lt_range
ENDIF.
Damit prüft man of der "Leerwert" Teil der Range ist und kann dies für die Abfrage auf den NULL-Wert verwenden.
(Für Zahlenwerte muss man natürlich "0" anstatt "space" verwenden)
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: CDS-View/AMDP-Klasse: WHERE-Bedingung 'ungleich'

Beitrag von Anne_A (ForumUser / 23 / 2 / 0 ) »
Vielen Dank! Dass sich CDS-Views bzw. generell openSQL an der Stelle anders verhält als ABAP, war mir nicht klar.
Mit

Code: Alles auswählen.

WHERE status IS NULL OR status <> 'C'
funktioniert es jetzt und ist deutlich sauberer.
Das mit den Ranges klingt auch interessant, das werde ich bei nächster Gelegenheit mal testen. In einer AMDP-Methode hat man ja doch ein paar mehr Möglichkeiten als in einem reinen CDS-View.

Seite 1 von 1

Vergleichbare Themen

3
Antw.
1616
Views
Down- und Upload: Text gleich - hexadezimal ungleich
von kle » 21.12.2005 17:05 • Verfasst in ABAP® Core
4
Antw.
234
Views
Was macht AMDP?
von retsch » 30.01.2023 17:32 • Verfasst in ABAP® für Anfänger
5
Antw.
1734
Views
CDS-Views / AMDP für HCM
von SaskuAc » 20.03.2019 07:58 • Verfasst in ABAP® für Anfänger
2
Antw.
1110
Views
CDS VIEW: Mehrere Tabellen aus einer CDS View updaten
von Abapanfänger » 03.07.2019 10:46 • Verfasst in ABAP® für Anfänger
1
Antw.
2036
Views
Lokale Klasse autom. in globale Klasse ändern
von JohnLocklay » 09.01.2019 09:10 • Verfasst in ABAP Objects®

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