Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[ABAP]Textedit

Empfohlene Antworten

Veröffentlicht

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

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

  • 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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.