line_exists evaluieren

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

line_exists evaluieren

Beitrag von Radinator (ForumUser / 73 / 12 / 7 ) »
Grüße!

Ich bin letztens über eine kleine, aber nervige Eigenart von ABAP gestoßen: Ich kann die integrierte Funktion line_exists nur als boolean Operator in einem IF Statement verwenden, allerdings den eigentlich "return" value derselben nicht als Zuweisungswert für eine Variable.

Hier mal ein kleines Codingbeispiel:

Code: Alles auswählen.

types:
  begin of test_daten_type,
    matnr type matnr,
    text type string,
    werk type werks,
  end of test_daten_type.

data:
  test_daten type table of test_daten_type.

test_daten = value #(
  ( matnr = '4711' text = 'Schraube' werk = '0001' )
  ( matnr = '4712' text = 'Bolzen' werk = '0001' )
  ( matnr = '4711' text = 'Schraube' werk = '0011' )
  ( matnr = '4712' text = 'Hammer' werk = '0011' )
).

" funktioniert
data found type abap_bool.
if ( line_exists( test_daten[ matnr = '4711' werk = '0011' ] ) ).
  found = abap_true.
endif.
cl_demo_output=>display( found ).
Was ich aber nicht machen kann ist

Code: Alles auswählen.

data(found2) = line_exists( test_daten[ matnr = '4711' werk = '0011' ] ).
weil mir sonst der Compiler die Meldung Die Syntax für eine Methodenspezifikation ist "objref->method" oder "class=>method". schmeißt. Kann mir einer sagen warum das so ist?

Ich mein laut SAP Help macht die line_exists Funktion folgendes
Die eingebaute Prädikatfunktion line_exists überprüft, ob die im Tabellenausdruck table_exp angegebene Zeile einer internen Tabelle vorhanden ist und gibt einen entsprechenden Wahrheitswert zurück.. Warum zum Teufel also kann ich diesen Wahrheitswert nicht in eine Variable packen?
Und selbst die Version mit

Code: Alles auswählen.

data found2 type abap_bool.
found2 = line_exists( test_daten[ matnr = '4711' werk = '0011' ] ).
gibt mir die Meldung Die vordefinierte Funktion "LINE_EXISTS(" ist unbekannt.

VG radinator

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


Re: line_exists evaluieren

Beitrag von a-dead-trousers (Top Expert / 4450 / 227 / 1196 ) »
Wahrheitswert ist nicht gleich ABAP-Bool.
ABAP kennt im Grunde keinen BOOLschen Wert und das ABAP_BOOL sowie andere "Krücken" sind nur ein unzureichender Ersatz. Man kann diese ja nicht direkt in IF Statements verweden (die Kurzform ausgenommen, die ja im Hintergrund auf IS NOT INITIAL prüft) sondern nur im Zusammenspiel mit einem Operator.

LINE_EXIST fängt in diesem Kontext eigentlich nur die Exception ab, die bei einem Zugriff auf nicht vorhandene Tabellenzeilen mittels []-Syntax auftreten können.
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: line_exists evaluieren

Beitrag von Radinator (ForumUser / 73 / 12 / 7 ) »
Och menneo :(
Also muss ich fürs "(nicht) gefunden Flag setzen" die übelst hässliche if (line exists(). flag = abap_false/true. endif. Konstrukt verwenden.
Schade :(

Aber danke dir dennoch @a-dead-trousers!

Re: line_exists evaluieren

Beitrag von rob_abc (Specialist / 130 / 34 / 54 ) »
Ich benutze in diesen seltenen, speziellen Fällen xsdbool.

Code: Alles auswählen.

DATA(found) = xsdbool( line_exists( test_daten[ matnr = '4711' werk = '0011' ] ) ).

Folgende Benutzer bedankten sich beim Autor rob_abc für den Beitrag (Insgesamt 4):
a-dead-trousersRadinatoredwinewx


Re: line_exists evaluieren

Beitrag von a-dead-trousers (Top Expert / 4450 / 227 / 1196 ) »
Stimmt, xsdbool( ) kann das. Ganz vergessen 😞
Ich verwende das z.B. in der Art "ld_supplied = xsdbool( id_parameter is supplied )."
Zuletzt geändert von a-dead-trousers am 29.04.2025 10:19, insgesamt 1-mal geändert.
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: line_exists evaluieren

Beitrag von Radinator (ForumUser / 73 / 12 / 7 ) »
Das ist eine wunderbare Lösung und das Näheste am dem, was ich eigentlich wollte! Danke dir @rob_abc!

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2936
Views
exists Befehl
von bohne » 11.12.2006 09:55 • Verfasst in ABAP® für Anfänger
4
Antw.
7386
Views
Select .. where exists
von Bzzt » 04.12.2006 11:17 • Verfasst in ABAP® für Anfänger
2
Antw.
16337
Views
WRITE und NEW-LINE
von dyv » 08.09.2014 14:34 • Verfasst in ABAP® für Anfänger
3
Antw.
4291
Views
Hide und At Line Selection
von le_fuka » 10.08.2012 09:10 • Verfasst in ABAP® für Anfänger
1
Antw.
1624
Views
modify line mit icon
von manuk » 09.11.2005 08:35 • Verfasst in Dialogprogrammierung

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

line_exists evaluieren
vor 7 Stunden von Radinator gelöst 6 / 66
Was zum Knobeln....
vor 9 Stunden von a-dead-trousers 5 / 193
BAPI_GOODSMVT_CREATE
vor 4 Tagen von waltersen 4 / 802

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

line_exists evaluieren
vor 7 Stunden von Radinator gelöst 6 / 66
Was zum Knobeln....
vor 9 Stunden von a-dead-trousers 5 / 193
BAPI_GOODSMVT_CREATE
vor 4 Tagen von waltersen 4 / 802

Unbeantwortete Forenbeiträge

Erweiterung in ME51N/ME52N:
vor einer Woche von ABAPlerv 1 / 1290
Erweiterung in ME51N/ME52N:
vor einer Woche von ABAPlerv 1 / 1229