CL_SALV_TABLE + RTTC => F4?

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

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

CL_SALV_TABLE + RTTC => F4?

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Hallo zusammen!

Ich baue eine Tabelle mitels RTTC zusammen (cl_abap_tabledescr=>create) und verwende Datenelemente bei denen eine Prüftabelle hinterlegt ist.
Merkwürdigerweise funktioniert die F4-Wertehilfe nicht!
Ich habe das nun auf zwei Systemen getestet.

Weiß jemand, woran das liegt?
Ist das ein Fehler im SALV-Model oder muss ich noch eine bestimmte Funktion verwenden?

Danke und Gruß
Enno

Folgend das kleine Beispielprogramm.

Code: Alles auswählen.

REPORT.
*----------------------------------------------------------------------*
*       CLASS lcl_demo DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_demo DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS create.
ENDCLASS.                    "lcl_demo DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_demo IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_demo IMPLEMENTATION.
  METHOD create.

    FIELD-SYMBOLS: <struc>  TYPE any,
                   <table>  TYPE STANDARD TABLE.

    DATA struct_type   TYPE REF TO cl_abap_structdescr.
    data table_type    TYPE REF TO cl_abap_tabledescr.
    data comp_tab      TYPE cl_abap_structdescr=>component_table.
    data comp          LIKE LINE OF comp_tab.
    data dref_struc    TYPE REF TO data.
    data dref_table    TYPE REF TO data.
    DATA lr_salv_table TYPE REF TO cl_salv_table.

    comp-name = 'VKORG'.
    comp-type ?= cl_abap_elemdescr=>describe_by_name( comp-name ).
    append comp to comp_tab.

    comp-name = 'VTWEG'.
    comp-type ?= cl_abap_elemdescr=>describe_by_name( comp-name ).
    append comp to comp_tab.


    struct_type = cl_abap_structdescr=>get( comp_tab ).
    CREATE DATA dref_struc TYPE HANDLE struct_type.


    table_type = cl_abap_tabledescr=>create( p_line_type = struct_type ).

    CREATE DATA dref_table TYPE HANDLE table_type.

    ASSIGN dref_struc->* TO <struc>.
    ASSIGN dref_table->* TO <table>.

    DO 10 TIMES.
      APPEND INITIAL LINE TO <table> ASSIGNING <struc>.
      CLEAR <struc>. " WITH sy-abcde+sy-index(1).
    ENDDO.



    CALL METHOD cl_salv_table=>factory
      EXPORTING
        list_display = if_salv_c_bool_sap=>false
      IMPORTING
        r_salv_table = lr_salv_table
      CHANGING
        t_table      = <table>.

    lr_salv_table->display( ).

  ENDMETHOD.                    "create

ENDCLASS.                    "lcl_demo IMPLEMENTATION

START-OF-SELECTION.

  lcl_demo=>create( ).

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


Re: CL_SALV_TABLE + RTTC => F4?

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Du kannst dir ja mal anschauen was in CL_SALV_DATA_DESCR damit passiert.
Methoden DESCRIBE_TABLE, READ_STRUCTDESCR bzw. FILL_COLUMN
Möglich, dass die Daten entweder nicht ausgelesen oder nicht richtig verarbeitet werden.

Ansonsten kannst du mit CL_SALV_COLUMN=>SET_DDIC_REFERENCE die DDIC-Beziehung neu setzen.

Hinweis: Datenelemente haben keine "Prüftabelle" sondern nur die "Domänen".

Du könntest alternativ auch mal untersuchen, wie die Prüftabelle z.B. in der SE16 versorgt wird:
SE16 aufrufen
Debugger mit /h starten
BREAK-POINT bei CL_GUI_ALV_GRID=>SET_TABLE_FOR_FIRST_DISPLAY setzen
"Systemdebugging" aktivieren
F8 (wieder zurück in die laufende SE16)
Eine Tabelle aufrufen die ein Feld mit Prüftabelle beinhaltet
(Evtl. Über die Einstellungen auf ALV-Grid-Anzeige wechseln)
Es sollte nun der Debugger bei SET_TABLE_FOR_FIRST_DISPLAY aufgehen
Nachschauen was im Feldkatalog (IT_FIELDCATALOG) für das entsprechende Feld alles gesetzt wurde
Dann mit den Informationen aus CL_SALV_DATA_DESCR=>FILL_COLUMN vergleichen

EDIT: Upsi... Das ist ja Enno der hier fragt... Dann hätts vielleicht nicht ganz so ausführlich erklärt werden müssen wie man den Debugger benutzt :P
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: CL_SALV_TABLE + RTTC => F4?

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Ohne dass ich es jetzt mit dem CL_GUI_ALV_GRID probiert habe, gehe ich eigentlich davon aus, dass es dort funktioniert, weil ich dann den Aufbau des Feldkataloges explizit im Programm vornehmen würde. Beim SALV-Model passiert das implizit anhand der übergebenen Tabelle.

Ich habe bereits probiert, die Spalte VTWEG mit cl_salv_column_table->set_F4_Checktable zu setzen. Ohne Erfolg.
Ich wollte auch eigentlich keine Doktorarbeit daraus machen, sondern denke eher, dass ich wohl nicht der einzige bin, der eine dynamisch erzeugte Tabelle mit dem SALV anzeigt und desterhalb evtl. auch schon jemand anderes über das Problem gestolpert sein könnte. Satz Ende. :)

Re: CL_SALV_TABLE + RTTC => F4?

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Vermutlich wird bei einer komplett dynamischen Struktur nur mit den Informationen aus dem Datenelement gearbeitet. Prüftabellen oder Referenztabellen werden aber erst bei "echten" Tabellen oder Strukturen gesetzt. (REF_TABLE und REF_FIELD bzw. CHECKTABLE im LVC_S_FCAT). Ein "Referenzfeld" kennt ja nicht mal die Domäne. Daher werden diese Informationen im DEFIES, das in CL_SALV_DATA_DESCR verwendet wird, nicht zur Verfügung stehen.

Leider bleibt dann nur der Weg das Ganze händisch über
CL_SALV_TABLE->GET_COLUMNS()->GET_COLUMN( ... )->SET_...
nach zu reichen.

Was man im alten CL_GUI_ALV_GRID ja auch teilweise noch machen musste.

lg ADT
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: CL_SALV_TABLE + RTTC => F4?

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Es wird mir wohl nicht anderes übrig bleiben leider... Danke für deine Infos ADT!
Ich habe es jetzt doch noch mal mit CL_GUI_ALV_GRID probiert.
Gleicher Effekt... :(

Erst wenn ich im Feldkatalog explizit "REF_TABLE" und "REF_FIELD" setze, funktioniert die F4-Hilfe wie gewünscht.

Das ist doch echt traurig, dass man sich das erst selbst über die Domäne besorgen muss, oder?

Re: CL_SALV_TABLE + RTTC => F4?

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
Hallo Enno,

bei dir im Tricktresor hatte ich dir doch mal so was ähnliches geschickt .. http://www.tricktresor.de/blog/flexible ... kataloges/
Dort tritt genau das selbe Problem auf ( SALV verwenden um einen Feldkatalog aufbauen zu lassen ), so dass ich davon ausgehe, dass das tatsächlich ein SALV-Problem ist
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: CL_SALV_TABLE + RTTC => F4?

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
ewx hat geschrieben:Erst wenn ich im Feldkatalog explizit "REF_TABLE" und "REF_FIELD" setze, funktioniert die F4-Hilfe wie gewünscht.
Das ist doch echt traurig, dass man sich das erst selbst über die Domäne besorgen muss, oder?
Wird damals als das SALV entwickelt wurde wohl für zu aufwändig erachtet worden sein:
Die Prüftabelle hängt ja nur "lose" an der Domäne. Zumindest ein Feld der Prüftabelle muss dieselbe Domäne haben und dieses muss dann als REF_FIELD verwendet werden. Erschwerend kommt, glaub ich, noch hinzu, dass die Prüftabelle nicht im DFIES-Satz, der ziemlich oft im Standard verwendet wird, eines Datenelements enthalten ist. Man müsste also extra nochmal die Domäne abfragen (DDIF_DOMA_GET) um die Prüftabelle zu bekommen. Dann muss man noch anhand des Domänennamens das richtige Feld aus dieser Tabelle ermitteln. Keine unlösbare Aufgabe, aber vermutlich für die SAP nicht den Aufwand wert gewesen. Solange man Strukturen verwendet, bekommt man ja REF_TABLE und REF_FIELD frei Haus geschenkt (Fremdschlüsselbeziehungen sind erst damit möglich).
Und wenn man sich schon die "Mühe" macht zur Laufzeit eine Tabelle zu generieren, dann wird man wohl auch Zeit haben den Rest gleich mitzumachen. :x
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: CL_SALV_TABLE + RTTC => F4?

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Was ich nicht verstehe ist, warum ich REF_TABLE und REF_FIELD für die F4-Hilfe benötige. In vielen Fällen ist es sinnvoll, da zu einer Struktur abhängige Werthilfen existieren können (VBAK-VKORG / VBAK-VTWEG etc).
Aber es ist nicht zwingend. Und wenn eine Spalte die Eigenschaft "F4_AVAILABLE" und man einen "CHECKTABLE" zuweisen kann, dann sollte das reichen.
Es reicht jedoch weder im SALV-Model noch im ALV-Grid.
Dass will mir nicht in den Kopf... Naja, es ist auch Freitag...

Re: CL_SALV_TABLE + RTTC => F4?

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Manchmal ist die Lösung gleichermaßen einfach wie unverständlich...
ich habe die F4-Werthilfe folgendermaßen erzwingen wollen:

Code: Alles auswählen.

lr_column->set_f4( abap_true ).
ls_ddic-table = 'VBAK'.
ls_ddic-field = 'AUART'.
lr_column->set_ddic_reference( ls_ddic ).
und es hat nicht funktioniert. :mrgreen:

Ich habe dann den Aufruf SET_F4 mal hinter SET_DDIC_REFERENCE gesetzt und siehe da, nun funktioniert es auch mit den Werthilfen...

Also Aufrufreihenfolge immer wie folgt:

Code: Alles auswählen.

ls_ddic-table = 'VBAK'.
ls_ddic-field = 'AUART'.
lr_column->set_ddic_reference( ls_ddic ).
lr_column->set_f4( abap_true ).
Weissdergeierwarum.

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Thomas R.


Re: CL_SALV_TABLE + RTTC => F4?

Beitrag von vonglan (ForumUser / 1 / 1 / 0 ) »
Wir haben 7.40 SP10, und bei uns finde ich die Methode set_f4() gar nicht.
Es reicht aber schon folgendes Coding (neue Syntax):

Code: Alles auswählen.

  DATA(reason_column) = or_table->get_columns( )->get_column( 'REASON ' ).
  reason_column->set_ddic_reference( VALUE #( table = 'ZVX_RECHECK_LOG' field = 'REASON' ) ). 
Zuletzt geändert von vonglan am 23.06.2016 13:41, insgesamt 1-mal geändert.

Re: CL_SALV_TABLE + RTTC => F4?

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
vonglan hat geschrieben:Wir haben 7.40 SP10, und bei uns finde ich die Methode set_f4() gar nicht.
Du musst die Rückgabe von OR_TABLE->GET_COLUMNS( )->GET_COLUMN( ... ) in den Typ CL_SALV_COLUMN_LIST casten um die besagte Methode zu sehen.
CL_SALV_COLUMN ist der allgemeine Definitionsteil den sich CL_SALV_TREE und CL_SALV_TABLE teilen. Erst in CL_SALV_COLUMN_LIST kommen die Spezifika für den CL_SALV_TABLE dazu.

lg ADT

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

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

Seite 1 von 1

Vergleichbare Themen

2
Antw.
3807
Views
Salv Table - Layouts speichern
von JohnLocklay » 14.06.2019 11:33 • Verfasst in ABAP Objects®
3
Antw.
1910
Views
GUI Status verhindert on click Event des SALV Table
von Pinguincommander » 05.02.2019 09:51 • Verfasst in ABAP® Core
1
Antw.
4720
Views
sorted table, hashed table: Übergabe Workarea -> Performa
von Jürgen Fischer » 30.01.2006 08:09 • Verfasst in ABAP® Core
0
Antw.
969
Views
SALV-Klassen
von mumcs » 27.02.2006 19:23 • Verfasst in ABAP® für Anfänger
1
Antw.
913
Views
GUI_STATUS im SALV
von Abapanfänger » 27.01.2017 09:14 • Verfasst in ABAP® für Anfänger

Ü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

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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141