markierte Zeile in N1PATORG auslesen


Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

Moderatoren: Jan, Steff

markierte Zeile in N1PATORG auslesen

Beitragvon sapdepp » 11.10.2018, 08:22

Guten Tag,

ich möchte gern bei Klick auf den markierten eigenen HTML-Funktionsbutton die im Patorganizer markierte Zeile auslesen, um an die Fallnummer dieser Zeile zu kommen. Damit soll später weiterer Funktionscode ausgeführt werden bei Klick auf den Button.

Bild

Dazu musste ich bissl instanziieren, um an die Container-Umgebung zu kommen. Denn ich benötige den Constructor-Parameter PARENT der Klasse CL_GUI_ALV_TREE, um die Methode anzuzapfen, die im Container die selektierten Zeilen erkennt und ausliest. Wie folgt:

Code: Alles auswählen
DATA: lr_alv_tree_control TYPE REF TO cl_gui_alv_tree.
DATA: lr_gui_container    TYPE REF TO cl_gui_simple_container.
DATA: l_node    TYPE lvc_nkey.
DATA: l_falnr   TYPE falnr.
DATA: lr_parent TYPE REF TO cl_gui_container.
DATA: lr_cont   TYPE REF TO cl_gui_custom_container.
DATA: l_cont    TYPE sdydo_value.

CLEAR: l_patnr,
       l_falnr.

CREATE OBJECT lr_cont
  EXPORTING
    container_name = l_cont
  EXCEPTIONS
    others         = 1.
IF sy-subrc <> 0.
  EXIT.
ENDIF.

lr_parent = lr_cont.

CREATE OBJECT lr_alv_tree_control
  EXPORTING
    parent = lr_parent.

CALL METHOD lr_alv_tree_control->get_selected_item
  IMPORTING
    e_selected_node   = l_node
  EXCEPTIONS
    no_item_selection = 1
    cntl_system_error = 2
    failed            = 3
    OTHERS            = 4.
 


Problem ist, dass mir die Methode GET_SELECTED_ITEM bisher weder den markierten Knoten (Node) noch die Zeile (Item) ausliest und nichts zurückgibt. SY-SUBRC ist dennoch immer 0, alle Objekte sind gefüllt. Hat das schon mal jemand gemacht oder Ideen? Ich fürchte, ich instanziiere die falschen Objekte, insbesondere oben bei lr_cont bzw. lr_parent, weil ich keinen gefüllten Wert für den Parameter container_name = l_cont übergebe.

Bild

Vielen Dank.

VG
sapdepp
sapdepp
Specialist
 
Beiträge: 157
Registriert: 17.12.2008, 16:13
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: markierte Zeile in N1PATORG auslesen

Beitragvon a-dead-trousers » 11.10.2018, 08:49

Hi.

Das Problem ist hier, wie immer, der Standard.
Die Klasse CL_ISHMED_PATORG hällt die Daten intern (PROTECTED) in der Variable GT_TREECORD.
Den Zugriff darauf kann man sich schön in der Methode HANDLE_FUNCTION_SELECTED ansehen:
Zuerst wird mit GET_SELECTED_NODES der aktuelle Knoten selektiert und dann mit READ TABLE der entsprechende Eintrag gelesen.

Soviel zum Hintergrund.

Wie haben wir das gelöst? Ganze einfach:
Wir haben uns eine Ableitung der CL_ISHMED_PATORG angelegt (Z_CL_ISHMED_PATORG) und diese als neue Anzeigeklasse im Customizing hinterlegt. Frag mich aber jetzt bitte nicht wo genau. Es war auf alle Fälle eine SAP-Tabelle und ist als Standardänderung zu werten.
Jedenfalls besitzt diese Ableitung eine PUBLIC-Methode um den aktuellen Eintrag zurückzuliefern. Immer wenn wir dann sowas von außerhalb brauchen, können wir nun die laufende Inastanz des Patorg auf unsere neue Klasse casten und haben so die Methode zur Verfügung.

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3055
Registriert: 07.02.2011, 13:40
Dank erhalten: 756 mal
Ich bin: Entwickler/in

Re: markierte Zeile in N1PATORG auslesen

Beitragvon a-dead-trousers » 11.10.2018, 09:11

Okay, ich muss mich korrigieren:
Es ist eine Standardänderung im Include LN1PATORGTOP von Nöten.
Der Typ der Variable G_PATORG ist auf die neue Klasse zu ändern. :evil:
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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3055
Registriert: 07.02.2011, 13:40
Dank erhalten: 756 mal
Ich bin: Entwickler/in

Re: markierte Zeile in N1PATORG auslesen

Beitragvon sapdepp » 11.10.2018, 10:40

Gracias. Warum muss es die SAP immer so kompliziert machen ... Standardanpassungen will ich eigentlich vermeiden.

Unsere Buttons (HTML-Container) befinden sich im Header. Das Bild vorhin hat die brachial wegrationalisiert. Die lösen ein Klick-Ereignis auf, wo ich über eine ebenfalls abgeleitete Klasse (von CL_ISHMED_PATIENT_DATA_DISPLAY) Kunden-Funktionen zünde. Dort muss das Auslesen der Zeile platziert werden. Habt ihr das so gemacht, indem ihr von eurer neu angelegten Z-Klasse eine neue Public-Methode ähnlich GET_SELECTED_NODES zündet und dort das von Protected auf Public gesetzte Attribut GT_TREERECORD abgrast mit READ TABLE? Die vorhandene Methode HANDLE_FUNCTION_SELECTED werdet ihr sicher nicht dazu verwendet haben, denn die macht was anderes. ;)

Lieben Dank.

sapdepp
sapdepp
Specialist
 
Beiträge: 157
Registriert: 17.12.2008, 16:13
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: markierte Zeile in N1PATORG auslesen

Beitragvon a-dead-trousers » 11.10.2018, 22:21

sapdepp hat geschrieben:Habt ihr das so gemacht, indem ihr von eurer neu angelegten Z-Klasse eine neue Public-Methode ähnlich GET_SELECTED_NODES zündet und dort das von Protected auf Public gesetzte Attribut GT_TREERECORD abgrast mit READ TABLE?

Bingo!
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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3055
Registriert: 07.02.2011, 13:40
Dank erhalten: 756 mal
Ich bin: Entwickler/in

Re: markierte Zeile in N1PATORG auslesen

Beitragvon sapdepp » 12.10.2018, 10:28

Habt ihr alle Methoden von der Originalklasse in die Z-Klasse übernommen? Ich frage deswegen, weil man dann davon ausgehen kann, dass beim Aufruf anderer Instanzen aus den Z-Klassen-Methoden heraus und der Übergabe des Parameters "me" sowie auch beim Casten von "lr_... ?= me" Fehler kommen dürften, weil der Parameter in den Instanzen als Referenz auf CL_ISHMED_PATORG definiert ist und nicht auf die Z-Klasse ... Ich gehe nicht davon aus, dass ihr in allen referenzierten SAP-Klassen den Standard geändert habt. ;)

Bsp. für me-Parameter mit Referenz auf CL_ISHMED_PATORG:
Code: Alles auswählen
    CALL METHOD l_treerecord-objref->supply_data
      EXPORTING
        it_n1popakte = lt_n1popakte
        i_viewid     = l_treerecord-viewid
        i_wplaceid   = g_wplaceid
        ir_patorg    = me    
      IMPORTING
        et_supply    = lt_supply.
 

VD + VG

sapdepp
sapdepp
Specialist
 
Beiträge: 157
Registriert: 17.12.2008, 16:13
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: markierte Zeile in N1PATORG auslesen

Beitragvon sapdepp » 12.10.2018, 16:06

Sorry, ihr habt die Z-Klasse natürlich von CL_ISHMED_PATORG geerbt und nicht kopiert. Das meintest du mit ableiten. :o

Die Attributsichtbarkeit von GT_TREERECORD habt ihr dann auch nicht geändert von Protected auf Public, weil das ja nicht geht und nicht mehr sein muss, wenn man jetzt mit einer eigenen Public-Methode auf dieses geerbte Attribut zugreifen kann. Es müsste ja innerhalb einer (vererbten) Klasse und durch die Instanzen der (vererbten) Klasse sichtbar sein. Wird jetzt ein Schuh draus, oder habt ihr wirklich ein neues Public-Attribut analog GT_TREERECORD angelegt?

VG

sapdepp
sapdepp
Specialist
 
Beiträge: 157
Registriert: 17.12.2008, 16:13
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: markierte Zeile in N1PATORG auslesen

Beitragvon a-dead-trousers » 12.10.2018, 17:42

sapdepp hat geschrieben:Sorry, ihr habt die Z-Klasse natürlich von CL_ISHMED_PATORG geerbt und nicht kopiert. Das meintest du mit ableiten. :o

Die Attributsichtbarkeit von GT_TREERECORD habt ihr dann auch nicht geändert von Protected auf Public, weil das ja nicht geht und nicht mehr sein muss, wenn man jetzt mit einer eigenen Public-Methode auf dieses geerbte Attribut zugreifen kann. Es müsste ja innerhalb einer (vererbten) Klasse und durch die Instanzen der (vererbten) Klasse sichtbar sein. Wird jetzt ein Schuh draus, oder habt ihr wirklich ein neues Public-Attribut analog GT_TREERECORD angelegt?

Ich würd sagen: Du hast einen Schuh. :P
(Protected Attribute sind in abgeleiteten Klassen sichtbar)
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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3055
Registriert: 07.02.2011, 13:40
Dank erhalten: 756 mal
Ich bin: Entwickler/in

Re: markierte Zeile in N1PATORG auslesen

Beitragvon sapdepp » 15.10.2018, 11:13

Das aus deinem Mund. :D

Die Wertemenge aus GT_TREERECORD als auch den Cast habe ich inzwischen fertig. Ein Puzzlestück fehlt aber noch. Wenn ihr euren Kundenbutton im Header klickt, müsst ihr ja noch die markierte Zeile in der Patorg-Struktur auslesen und den mit der rechten oder linken Maustaste markierten Knoten mit GT_TREERECORD abgleichen. Ich habe mal versucht, bissl zu casten (CL_GUI_ALV_TREE~GET_SELECTED_NODES), um die Tabelle ct_selected_nodes zu erhalten. Obwohl ein Eintrag markiert ist, liefert die Methode nix zurück. Im Top-Include hatte ich G_PATORG auf ZCL_ISHMED_PATORG modifiziert. Habt ihr eventuell von der übergeordneten ALV-Tree-Klasse CL_TREE_CONTROL_BASE ein Object "created", die Werte des dortigen Contructors versorgt beim Create und danach die PUBLIC-Methode GET_SELECTED_NODES ausgeführt, um den markierten Eintrag zu erhalten und mit eurem Button zu verheiraten?

VD + VG

sapdepp
sapdepp
Specialist
 
Beiträge: 157
Registriert: 17.12.2008, 16:13
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: markierte Zeile in N1PATORG auslesen

Beitragvon a-dead-trousers » 15.10.2018, 14:47

Im Grunde haben wir das gemacht, was auch im HANDLE_USER_COMMAND gemacht wird (Hab leider grad kein System zur Hand zum Nachschauen)
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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3055
Registriert: 07.02.2011, 13:40
Dank erhalten: 756 mal
Ich bin: Entwickler/in

Re: markierte Zeile in N1PATORG auslesen

Beitragvon sapdepp » 15.10.2018, 15:51

a-dead-trousers hat geschrieben:Im Grunde haben wir das gemacht, was auch im HANDLE_USER_COMMAND gemacht wird (Hab leider grad kein System zur Hand zum Nachschauen)


Das geht hier aber nicht. Schade, dass du kein System zur Hand hast. :wink: Es handelt sich nicht um Aspektbuttons, sondern um Kundenbuttons im HTML-Header (Kopfdaten ein/aus) ganz oben. Die HANDLE_USER_COMMAND wird gar nicht angesprungen, um auch nur ansatzweise die selektierte Zeile auszulesen. :cry: Alles schon probiert. Kann sogar sein, dass wir hier die Klassen CL_GUI_DATAMANAGER oder CL_GUI_EVENT anzapfen müssen, also sehr nahe schon am System/Kernel dran. Bei der ersten Klasse gibt es die Methode ON_INPUT, die den geklickten Zeilenindex als xml-String enthält in Variable DATASTREAM, bei letzterer Klasse gibt es die Methode GET_EVENT_PARAM, die die Tabellenstruktur Params enthält. Dort müsste quasi die markierte Zeile mit den Werten PID und VALUE rein, dann hätten wir's. Bloß, wie verheiratet man das Ganze: Klick auf Kundenbutton, Übergabe markierte Zeile an OO-Referenz, welche auch immer, Ausgabe der Zeilen-ID bzw. PID und VALUE, rein ins Read Table.
Übrigens: Wenn ich den Kundenbutton im Header klicke, wird PARAMS mit den Werten des Headers und dem dynamischen Klickereignis des Buttons gefüllt.
______________________________
Zeile|PID|VALUE
1|0|Frame0
2|1|37
3|2|sapevent:A5F1
______________________________

Ziel muss es sein, dass es in etwas so aussieht, wenn der Kundenbutton geklickt und eine Zeile markiert wurde:
______________________________
Zeile|PID|VALUE
1|0|28
______________________________

VALUE = 28 wäre dann der Node, den ich fürs READ TABLE nehme, um die Fallnummer des Nodes auszulesen. Die 28 steht dabei nicht für die Zeile, sondern einfach nur für die Knoten-ID.

Ich hoffe aber, es gibt eine Lösung, ohne die System-Klassen anzuzapfen, sondern die üblichen PATORG-, TREE-, ALV-Klassen ...

VG
sapdepp
sapdepp
Specialist
 
Beiträge: 157
Registriert: 17.12.2008, 16:13
Dank erhalten: 0 mal
Ich bin: Entwickler/in


Zurück zu ABAP Objects®

  Aktuelle Beiträge   
Java & Bildbearbeitung
vor 13 Stunden von Madredure 0 Antw.
Call Transaction WE20 mit Werteübergabe
vor 12 Stunden von ewx 1 Antw.
Vergleich Customizing Tabellen auf zwei Systemen
vor 13 Stunden von ewx 2 Antw.
Empfehlung Antiviren-Programm?
vor 14 Stunden von Madredure 2 Antw.
BADI im Customizing finden
Gestern von Romaniac 0 Antw.

  Ähnliche Beiträge beta
ALV / CL_SALV TABLE / Markierte Zeilen auslesen
16.01.2012, 09:53 von Michael71 4 Antw.
Zeile aus ALV Grid auslesen
15.10.2004, 12:49 von Asaph 1 Antw.
Zeile auf ALV-Grid selektieren Daten auslesen
27.04.2006, 07:57 von crustycheesewithextrachee 2 Antw.
ALV-Grid: markierte Zeilen und Spalten
15.02.2006, 15:17 von dmyrb5 0 Antw.
gelöst Markierte Zeilen im ALV merken (REUSE_ALV_GRID_DISPLAY_LVC)
09.11.2017, 13:33 von sapdepp 4 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder