Zum Inhalt springen

[ABAP]Textedit


meKo

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von molle134
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...