markierte Zeile in N1PATORG auslesen

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

markierte Zeile in N1PATORG auslesen

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
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

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


Re: markierte Zeile in N1PATORG auslesen

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
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.18
Basis: 7.50

Re: markierte Zeile in N1PATORG auslesen

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
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.18
Basis: 7.50

Re: markierte Zeile in N1PATORG auslesen

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
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

Re: markierte Zeile in N1PATORG auslesen

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
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.18
Basis: 7.50

Re: markierte Zeile in N1PATORG auslesen

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
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

Re: markierte Zeile in N1PATORG auslesen

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
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

Re: markierte Zeile in N1PATORG auslesen

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
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.18
Basis: 7.50

Re: markierte Zeile in N1PATORG auslesen

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
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

Re: markierte Zeile in N1PATORG auslesen

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
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.18
Basis: 7.50

Re: markierte Zeile in N1PATORG auslesen

Beitrag von sapdepp (Specialist / 218 / 37 / 2 ) »
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

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2826
Views
ALV-Tabelle: markierte Zeile
von bob_sheknowdas » 11.09.2014 18:06 • Verfasst in Web-Dynpro, BSP + BHTML
7
Antw.
4285
Views
Markierte Zeile in ALV Grid mittels Button in DB löschen
von Miss » 15.04.2014 21:57 • Verfasst in ABAP® für Anfänger
4
Antw.
5531
Views
ALV markierte Zeilen auslesen
von bob_sheknowdas » 13.09.2014 21:15 • Verfasst in Web-Dynpro, BSP + BHTML
3
Antw.
6077
Views
ALV markierte Zelle auslesen und Aktion
von Mark33 » 18.09.2012 21:45 • Verfasst in ABAP® für Anfänger
4
Antw.
11173
Views
ALV / CL_SALV TABLE / Markierte Zeilen auslesen
von Michael71 » 24.11.2011 09:04 • Verfasst in ABAP Objects®

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor 19 Stunden von tar 8 / 367
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1636
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 285
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 528

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 19 Stunden von tar 8 / 367
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1636
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 285
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 528

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 2 Tagen von snooga87 1 / 221
aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 3403
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9953