Fremdschlüsselprüfung im ALV Grid

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
19 Beiträge • Seite 1 von 2 (current) Nächste
19 Beiträge Seite 1 von 2 (current) Nächste

Fremdschlüsselprüfung im ALV Grid

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Hallo zusammen,

ich bin auf ein merkwürdiges Phänomen gestoßen von dem ich nicht weiß, ob das nun eigentlich ein SAP-Fehler ist oder ein Feature. Ich tendiere zu ersterem...

In einer Tabelle ist ein Nicht-Schlüsselfeld vorhanden für dessen Datenelement Festwerte hinterlegt sind.
Wenn ich nun mit dem ALV-Grid einen Eintrag anlegen möchte und das Feld leer lasse, dann bekomme ich den Fehler:
Geben Sie einen gültigen Wert ein

Ganz streng genommen hat das System auch recht, denn SPACE ist nicht bei den Festwerten vorhanden. Aber trotzdem ist es unlogisch, denn normalerweise kann ich ein Feld leer lassen. Normalerweise ist ein leerer Wert implizit immer auch ein gültiger Wert.
Es sei denn, es ist als Musseingabe definiert. Das wiederum geht aber bei einem Grid gar nicht. so eine Prüfung müsste manuell programmiert werden.

In der Methode FORMAL_FIELD_CHECK_DDIC (cl_gui_alv_grid) wird folgendes geprüft:

Code: Alles auswählen.

    if not is_fieldcat-valexi   is initial and
           is_fieldcat-valexi   ne '!'     and
         ( is_fieldcat-datatype eq 'CHAR'  or
           is_fieldcat-datatype eq 'NUMC' ).
In diesem Fall wird geprüft, ob SPACE in den Festwerten vorhanden ist oder nicht. Ist SPACE nicht vorhanden, dann wird die oben genannte Fehlermeldung ausgeworfen.

Code: Alles auswählen.

        loop at lt_dd07v transporting no fields
             where domvalue_l eq c_field or
                 ( domvalue_l le c_field and
                   domvalue_h ge c_field and not
                   domvalue_h is initial ).               "#EC PORTABLE
          exit.
        endloop.
        if sy-subrc ne 0.
          ls_msg-msgid     = '00'.
          ls_msg-msgty     = 'E'.
          ls_msg-msgno     = '002'.
          ls_msg-fieldname = is_fieldcat-fieldname.
          ls_msg-row_id    = i_row_id.
          append ls_msg to mt_msg.
Den Eintrag SPACE als Festwert hinzuzufügen ist verkehrt, da in einem anderen Zusammenhang in einer anderen Tabelle kann es ja durchaus gewollt sein, dass SPACE eben nicht auswählbar ist.

Hilfe.
Enno

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


Re: Fremdschlüsselprüfung im ALV Grid

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Hi Enno,

mmmmh, ich bin mir da nicht ganz so sicher, was jetzt richtig oder falsch ist.

Ich ueberlege gerade, welche Anwendungsfaelle es fuer so etwas gibt.
Typisch ist wohl: SPACE oder X als Festwert, was Deine Feststellung aber nicht tangiert :-)

Ich kenne es aber auch mit CHECK-TABLES so, dass wenn man SPACE als Eintrag zulassen will, dass es dann auch den Eintrag SPACE oder leer in der Tabelle geben muss, da sonst die Pruefungen kein leeres Feld zulassen. Also lassen impliziet keine leeres Feld zu.

Kannst Du das Feld evtl. selber auf SPACE pruefen und falls ja ein '!' dann eingeben?
Dann muesste die ALV Pruefung es doch zulassen, wenn ich mich nicht irre?

Nur mal so ein paar Gedankengaenge ohne gleich eine Doktorarbeit daraus zumachen. :wink:

Re: Fremdschlüsselprüfung im ALV Grid

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Unit605 hat geschrieben:Kannst Du das Feld evtl. selber auf SPACE pruefen und falls ja ein '!' dann eingeben?
Dann muesste die ALV Pruefung es doch zulassen, wenn ich mich nicht irre?
Ich möchte ja nicht jede Programmierung anpassen und an die SE16n komme ich ja sowieso gar nicht ran... ;)
VALEXI = "!" hebelt ja die komplette Fremdschlüsselprüfung aus. Das möchte ich ja auch nicht.

Re: Fremdschlüsselprüfung im ALV Grid

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
ewx hat geschrieben:VALEXI = "!" hebelt ja die komplette Fremdschlüsselprüfung aus. Das möchte ich ja auch nicht.
Ne, ich glaub es war gemeint im ALV Grid anstatt einem Leerwert das ! einzugeben.
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: Fremdschlüsselprüfung im ALV Grid

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
! löscht ja das Feld komplett, womit es wieder SPACE ist.
Funktioniert also nicht.

Re: Fremdschlüsselprüfung im ALV Grid

Beitrag von ST22 (Specialist / 279 / 43 / 41 ) »
Hallo,
selber hab ich es jetzt nicht getestet,
versuch mal das Feld fieldcat-checktable mit '!' zu füllen.

Es gibt doch für die SE16n die Möglichkeit die Fremdschlüsselprüfungen auszuschalten per "&SAP_NO_CHECK"
Das bewirkt in der SE16n genau das:

Code: Alles auswählen.

     if gd-checkkey = true.
        wa_fieldcat-checktable = '!'.
        modify gt_fieldcat from wa_fieldcat index ld_tabix.
     endif.
Gruß
Frank

Re: Fremdschlüsselprüfung im ALV Grid

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Ich will die Fremdschlüsselprüfung ja nicht ausschalten!
Meiner Ansicht nach ist es falsch, in einem editierbaren ALV-Grid den Wert SPACE als Fremdschlüsselwert zu prüfen.
Ich wollte eigentlich eher dazu eure Meinung hören, bzw. wissen, ob sich das Verhalten vielleicht irgendwann mal geändert hat.
Mir ist es vor einem halben Jahr das erste Mal aufgefallen und nun stolpere ich erneut drüber.
War das Verhalten vielleicht vor ECC 6.0 mal anders?

Re: Fremdschlüsselprüfung im ALV Grid

Beitrag von ST22 (Specialist / 279 / 43 / 41 ) »
Hallo Enno,

du meinst, du hast am Datenelement eine Domäne mit Festwerten hinterlegt, oder eine Prüftabelle für die Fremdschlüsselprüfung?
Je nachdem reagiert das System unterschiedlich.
Bei Domänenfestwerten ist die Reaktion wie beschrieben, aber meiner Meinung nach auch korrekt. Das wird ja praktisch zum Mussfeld, wenn SPACE nicht als Festwert definiert ist.
Bei der Fremdschlüsselprüfung über Prüftabelle kann ich das Feld leer lassen.

Ich denke mal, das war schön immer so. Habe aber kein altes Release zum Testen zur Verfügung.

Gruß
Frank

Folgende Benutzer bedankten sich beim Autor ST22 für den Beitrag:
ralf.wenzel


Re: Fremdschlüsselprüfung im ALV Grid

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
ST22 hat geschrieben:Hallo Enno,

du meinst, du hast am Datenelement eine Domäne mit Festwerten hinterlegt, oder eine Prüftabelle für die Fremdschlüsselprüfung?
Domäne mit Festwerten
ST22 hat geschrieben:Je nachdem reagiert das System unterschiedlich.
Genau. Aber das ist quatsch. Inhaltlich ist es egal, ob ich meine zu prüfenden werte in der Domäne oder in einer anderen Tabelle speichere.
ST22 hat geschrieben:Bei Domänenfestwerten ist die Reaktion wie beschrieben, aber meiner Meinung nach auch korrekt. Das wird ja praktisch zum Mussfeld, wenn SPACE nicht als Festwert definiert ist.
Bei der Fremdschlüsselprüfung über Prüftabelle kann ich das Feld leer lassen.
Ob ein Feld ein Mussfeld ist kann aber nicht an der Definition des Festwerte hängen, sondern muss in der Anwendung definiert werden können.
Und es ist bei einem Tabellenpflegedialog auch so, dass ein leerer Wert implizit immer ein gültiger Wert ist, auch wenn der nicht in den Festwerten eingetragen wurde.
Ich werde das gleich noch mal mit einer Listbox testen...
ST22 hat geschrieben:Ich denke mal, das war schön immer so. Habe aber kein altes Release zum Testen zur Verfügung.
Das vermute ich auch fast. Aber da muss doch schon mal jemand drüber gestolpert sein??!

Re: Fremdschlüsselprüfung im ALV Grid

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Ich habe mir das Demo-Programm BCALV_EDIT_07 mal angeschaut (mit editierbaren Listboxen).
Hier wird noch das Flag "!" gesetzt:

Code: Alles auswählen.

* Field 'checktable' is set to avoid shortdumps that are caused
* by inconsistend data in check tables. You may comment this out
* when the test data of the flight model is consistent in your system.
      ls_fcat-checktable = '!'.        "do not check foreign keys
was ich für meinen test natürlich raus genommen habe.
Aber auch hier ist das Verhalten so, wie ich es mir vorstelle:
Ich kann einen Wert auswählen, muss es aber nicht. Die Listbox kann leer bleiben (und es sind keine leeren Einträge in der Listbox vorhanden).

Re: Fremdschlüsselprüfung im ALV Grid

Beitrag von AlexG (ForumUser / 1 / 0 / 0 ) »
Hallo Enno,
Ich habe gleich Problem.
Deaktivieren dialog Fenster - möglich durch :

CALL METHOD <grid>->activate_display_protocol
EXPORTING
i_dialog = ' '.

Probleme mit dem Feldefokus , habe ich beschlossen, mit Hilfe einer einfachen Bedienung:

METHOD handle_data_changes.
CLEAR: er_data_changed->mt_protocol[].
ENDMETHOD.

Ich hoffe, es hilft.

Grüß,
Alex .

Re: Fremdschlüsselprüfung im ALV Grid

Beitrag von Ju.Le.611 (ForumUser / 6 / 3 / 0 ) »
Hallo Enno, hast du in der Zwischenzeit eine Lösung gefunden, die vorgesehen ist?

Beste Grüße,
Julia


Re: Fremdschlüsselprüfung im ALV Grid

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
so. meine Lösung lautet:
- wenn in mod_cells ein Eintrag vorhanden ist mit ERROR = X und VALUE = space und
- in MT_PROTOCOL ein Eintragzur ROW_ID vorhanden ist mit MSGID = 00 und MSGNO = 002 (Bitte geben Sie einen gültigen Wert ein)
dann:
- setze MOD_CELLS-ERROR auf SPACE
- lösche Eintrag aus MT_PROTOCOL
- grid->modify_cell damit Eintrag in MT_GOOD_CELLS erscheint

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
a-dead-trousers


Re: Fremdschlüsselprüfung im ALV Grid

Beitrag von gtoXX (Specialist / 213 / 44 / 36 ) »
Ich sehe das nicht als Fehler aus der Sicht der Konsistenz. Es spielt keine Rolle ob es ein Schlüsselfeld ist oder nicht. Die Domäne sieht ein leeres Feld nicht vor, somit würde auch kein Programm ein leeres Feld erwarten. Die Frage ist dann ja, warum das Feld dann editierbar ist.

Auf normalen SAP Screens hast Du dies ja auch analog, nicht jedes Feld ist als Pflichtfeld definiert, weil sich seine Pflicht eventuell auch erst implizit ergibt.

Das hier zu torpedieren, bedeutet m.E. dass hier ein ALV eigentlich die falsche Wahl ist.

Folgende Benutzer bedankten sich beim Autor gtoXX für den Beitrag:
ralf.wenzel

"Code lügt nicht ^^"

Vergleichbare Themen

1
Antw.
1201
Views
Fremdschlüsselprüfung
von RIG » 21.03.2013 15:34 • Verfasst in ABAP® für Anfänger
2
Antw.
4611
Views
Fremdschlüsselprüfung & Domäne
von derMartin » 09.04.2020 14:45 • Verfasst in ABAP® für Anfänger
1
Antw.
3395
Views
Fremdschlüsselprüfung bei Include-Strukturen
von mfromg » 09.02.2018 08:53 • Verfasst in Dialogprogrammierung
0
Antw.
1918
Views
Fremdschlüsselprüfung im Report Aktivieren/Deaktivieren
von Ralph » 22.12.2005 15:57 • Verfasst in Dialogprogrammierung
4
Antw.
5137
Views
ALV Grid Sortierung aktualisieren im grid 1 und grid 2
von c oco » 06.02.2012 10:09 • Verfasst in ABAP Objects®

Aktuelle Forenbeiträge

Regex in where
vor 10 Stunden von edwin 7 / 166
Daten an Tabelle binden
vor 23 Stunden von Bright4.5 3 / 1487

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

Regex in where
vor 10 Stunden von edwin 7 / 166
Daten an Tabelle binden
vor 23 Stunden von Bright4.5 3 / 1487

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822