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 / 4477 / 229 / 1203 ) »
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

5
Antw.
3693
Views
CDS-Views / AMDP für HCM
von SaskuAc » 20.03.2019 07:58 • Verfasst in ABAP® für Anfänger
4
Antw.
2216
Views
Was macht AMDP?
von retsch » 30.01.2023 17:32 • Verfasst in ABAP® für Anfänger
2
Antw.
6672
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.
5116
Views
Lokale Klasse autom. in globale Klasse ändern
von JohnLocklay » 09.01.2019 09:10 • Verfasst in ABAP Objects®
5
Antw.
6080
Views
Klasse soll Typdefinition von anderer Klasse nutzen
von debianfan » 24.05.2017 11:30 • Verfasst in ABAP Objects®

Über diesen Beitrag



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

Aktuelle Forenbeiträge

HR in der Zukunft?
vor 2 Tagen von DeathAndPain 6 / 2867
Prüfzeugnisse Anlagen finden
vor 4 Tagen von ewx gelöst 2 / 385
Spool vereinen OTF und PDF
vor einer Woche von anna2205 1 / 345

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

HR in der Zukunft?
vor 2 Tagen von DeathAndPain 6 / 2867
Prüfzeugnisse Anlagen finden
vor 4 Tagen von ewx gelöst 2 / 385
Spool vereinen OTF und PDF
vor einer Woche von anna2205 1 / 345

Unbeantwortete Forenbeiträge

Spool vereinen OTF und PDF
vor einer Woche von anna2205 1 / 345
XSLT und Loipro05 Transformation
letzen Monat von Torsten1965 1 / 6552
VOLL Artikel in einem Display Typ 12
November 2025 von ThomasM84 1 / 24462