meKo Geschrieben 9. Juni 2009 Geschrieben 9. Juni 2009 Hallo, ich habe folgendes Problem. Ich bin derweil in der Ausbildung und habe als Themengebiet hier mit ABAP zu arbeiten. Leider ist die Unterstützung seitens meiner Firma nicht wirklich ausreichend. Nun stehe ich also vor dem Problem, in ein Dynpro ein TextEditControl einbauen zu müssen, welches Texte > 255 Zeichen ausgeben bzw. einlesen kann. Diese Texte sind Teil einer Datenbanktabelle, welche noch andere Informationen enthält. Google hat mir da leider nicht weitergeholfen, bzw. funktioniert copy + paste nicht so prima, wenn man gar nicht weiss, was da alles passiert / passieren sollte... Wenn jemand so freundlich wäre, und mir erklären könnte, wie man so ein TextEdit aufbauen muss und wie ich dort meinen Text reinbekomme, wäre ich furchtbar dankbar. greeZ Zitieren
molle134 Geschrieben 10. Juni 2009 Geschrieben 10. Juni 2009 Hallo auch, zuerst brauchst du ein Custom Control auf dem Dynpro. Das legst du im Screen Painter in gewünschter Größe an und vergibst einen Namen (hier "CC_TEST"). Weiterhin musst du folgende Referenzvariablen im Programm global verfügbar machen (also i.d.R. im TOP-Include): data: go_custom_container type ref to cl_gui_custom_container, go_textedit_control type ref to cl_gui_textedit. In der Ablauflogik zu PBO fügst du ein Modul dafür ein und rufst darin eine FORM-Routine. Hierin instanziierst du dann zuerst den Custom Container für das Custom Control: CREATE OBJECT go_custom_container EXPORTING container_name = 'CC_TEST' "Name des Custom Controls auf dem Dynpro EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5 OTHERS = 6. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. Und dann legst du die Instanz für das Textedit-Control im Custom Container an: CREATE OBJECT go_textedit_control EXPORTING parent = go_custom_container EXCEPTIONS error_cntl_create = 1 error_cntl_init = 2 error_cntl_link = 3 error_dp_create = 4 gui_type_not_supported = 5 OTHERS = 6. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. Nun kannst du das Texteditcontrol mit Text belegen. Dazu benutzt du je nachdem wie du den Text im Programm hast folgende Methoden der Instanz go_textedit_control: - Text liegt als String vor: Methode set_textstream - Text liegt als interne Tabelle vor: Methode set_text_as_r3table Später holst du den ggf. geänderten Text mit der jeweils zugehörigen GET-Methode wieder ab (im Methodenamen einfachen set_ durch get_ ersetzen) und kannst den Text intern dann normal weiter bearbeiten. Wenn du erst noch prüfen willst, ob der Text überhaupt geändert wurde, rufst du vorher noch die Methode GET_TEXTMODIFIED_STATUS auf. Hoffe das ist halbwegs verständlich... Zitieren
meKo Geschrieben 19. Juni 2009 Autor Geschrieben 19. Juni 2009 Danke sehr, das hat mir sehr geholfen. Kann mir vielleicht auch jemand sagen, welches Ereignis im ALV-Grid die Selektierung einer Zeile beschreibt? Also derweil nutze ich das double_click bzw. hotspot_click Event, aber das ist beides nicht wirklich das, was ich gern hätte. Also der Plan ist, eine Zeile in der Tabelle anzuklicken und dann ohne weiteres zutun den Text im TextEdit zu sehen. Wie gesagt, mit hotspot_click oder double_click rufe ich meine Klasse auf und das funktioniert auch. Aber hübscher wäre es, wenn ich einfach so ohne SchnickSchnack die Zeile anwählen kann. Gibt es da so ein Event? Danke schonmal. greeZ Zitieren
molle134 Geschrieben 19. Juni 2009 Geschrieben 19. Juni 2009 (bearbeitet) Hi, dafür benutzt den Event DELAYED_CHANGED_SEL_CALLBACK des Grids. Bitte beachten, vor Setzen des Eventhandlers, muss dieser Event noch wie folgt für das Grid registriert werden: CALL METHOD grid_objekt->register_delayed_event EXPORTING I_EVENT_ID = cl_gui_alv_grid=>mc_evt_delayed_change_select . Und nicht wundern, der Aufruf ist wie der Eventname schon andeutet verzögert. Also Zeilenselektion geklickt und nach 1-2 Sekunden wird dann auch der Event abgefeuert. :schlaf: Ach so, kleiner Nachtrag. Du musst dann noch per Methode GET_SELECTED_ROWS die selektierten Zeilen aus dem Grid ermitteln. Das liefert der Event leider nicht mit... Bearbeitet 19. Juni 2009 von molle134 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.