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.

[SAP/ABAP]textedit control initalisieren

Empfohlene Antworten

Veröffentlicht

Hallo Zusammen,

ich kämpfe schon seit einigen tagen mit folgendem Problem:

ich habe ein textedit control. beim anzeigen meiner daten wird es gefüllt und beim 'zurück gehen' wird der container auf initialwert gesetzt, der editor, und i_text (die itab, in der der text abgelegt wird).

alle felder sind definitif frei/leer unbeschrieben.

nun rufe ich eine leere maske auf (ohne dass ich die sap startseite - heißt das so?) aufrufe. und? in meinem control steht der text von vorher drin.

ich bin jetzt 100 mal durch den debugger gelaufen aber bis zu dem punkt, an dem das dynpro aufgeht (der debugger also komplett durch ist) werden diese felder nicht gefüllt. auch der textschluessel ist leer und das read_text ist in dem moment deaktiviert.

Hat einer von euch eine idee?

entschuldigt bitte ggf. Rechtschreibfehler und meine klein/großschreibung.

danke und lg

Hallöchen,

ja, delete text habe ich schon eingebaut.

'editor' wird initaliesiert. wenn ich die methode delete (noch mal) aufrufe genau bevor ich das dynpro ausgebe kommt ein kurzdump -'Null kann nicht initalisiert werden' - also sinngemäß - was schon nix ist, kann nicht auf nix gesetzt werden...:rolleyes: gelegentlich ist sap sehr verwirrent...:upps

ok, ich versuchs mal, hoffe das klappt ich will und das gibt in der firma kein ärger...

PBO 0200


IF init_0200 IS INITIAL.

    init_0200 = 'X'.


    IF NOT container IS INITIAL.

      CALL METHOD container->free.

      FREE container.

    ENDIF.

    IF NOT editor IS INITIAL.

      CALL METHOD editor->delete_text

        EXCEPTIONS

          error_cntl_call_method = 1

          OTHERS                 = 2.

    ENDIF.



    CLEAR textschluessel.

  ENDIF.

PBO 0200 MODULE contaier_erstellen.

  IF container IS INITIAL.

    CREATE OBJECT container

      EXPORTING

        container_name = 'CONTAINER'.

  ENDIF.


  IF editor IS INITIAL.

    IF modus NE con_anlegen.

      CONCATENATE wa_kopf-bukrs wa_kopf-vtrnr

                          INTO textschluessel.

*    REFRESH i_text.

      CALL FUNCTION 'READ_TEXT'

       EXPORTING

*         CLIENT                  = SY-MANDT

            id                      = 'ZVVW'

            language                = 'D'

            name                    =  textschluessel

            object                  = 'Z*****

*         ARCHIVE_HANDLE          = 0

      IMPORTING

           header                  = tkopf

       TABLES

            lines                   = i_text

      EXCEPTIONS

           id                      = 1

           language                = 2

           name                    = 3

           not_found               = 4

           object                  = 5

           reference_check         = 6

           wrong_access_to_archive = 7

           OTHERS                  = 8.

      IF sy-subrc <> 0.

        tkopf-tdobject = 'Z****' .

        tkopf-tdid     = 'Z***'.

        tkopf-tdspras  = 'D'.

      ENDIF.

    ENDIF.

    CREATE OBJECT editor

      EXPORTING

        parent = container.


    CALL METHOD editor->set_text_as_stream

      EXPORTING

        text            = i_text

      EXCEPTIONS

        error_dp        = 1

        error_dp_create = 2.


    IF sy-subrc NE 0.

      PERFORM destructor.

      MESSAGE a015.

*     Der Text kann nicht geladen werden

    ENDIF.

    CALL METHOD editor->register_event_dblclick

      EXPORTING

        navigate_on_dblclick = cl_gui_textedit=>true.

    CALL METHOD editor->set_toolbar_mode.

  ENDIF.


Nach dem u-comm folgt free und clear vom i_text und editor.

Also es gibt 3 modi: anzeigen, ändern und anlegen. daten ausgeben - zurück -anlegen und hier ist dann noch der text im feld.

die maske 0200 ist eine für alle: die daten werden entweder (nach der eingabe auf dem dynpro 0100) hineingeladen und zum ändern/anzeigen dargestellt oder EIN LEERES formular dargestellt. - alles andere ist auch sauber.

- war das verständlich?

PS: die toolbar geht auch nicht :)

Ich habe das gerade mal gedanklich debuggt, aber festgestellt das ich aus dem Kontext noch nicht genug Informationen beziehen kann... :D

Nach dem u-comm folgt free und clear vom i_text und editor.

Das FREE auf i_text oder auf editor?

Ich nehme an, bei dem ersten Codefragment handelt es sich um den PAI, nicht um den PBO?

Wenn dem so ist:

Die Variable init_0200 wird auf 'X' gesetzt, aber nirgendwo wieder auf space, daher wird das Coding nur einmal durchlaufen und nicht jedesmal, wenn du das Dynpro wieder verlässt.

Zweitens: Was meldet der Aufruf von

      CALL METHOD editor->delete_text

        EXCEPTIONS

          error_cntl_call_method = 1

          OTHERS                 = 2.

zurück?

Da sollte doch eigentlich sy-subrc <> 0 sein, da du das parent control ja schon abgebaut hast...

hello again,

also init_0200 ist wirklich im PBO. nach dem sichern soll gepfüft werden ob init_0200 EQ 'X'.

nach dem sichern, wird init_0200 auf initial (also blanc) gesetzt. sprich: es sollen der container und der editor aufgeräumt werden. da der PBO nach 'enter' oder auch beim aufruf von anzeigen/ändern durchlaufen will, wird so abgefangen, dass die felder jedesmal aufgeräumt werden.

  CLEAR i_text.

        FREE editor.

zu 2: da der editor initial ist beim anlegen (nach dem zurück schritt) wird die methode auch nicht ausgeführt. nehme ich die if-anweisung oder das NOT raus, dump- null kann nicht gelöscht/auf null gesetzt werden.

-total komisch. werde das mal später mit papier u stift debuggen

Guten Morgen,

Ist i_text eine Tabelle mit Kopfzeile? Wenn ja, mache ich fast jede Wette, dass der Fehler hier liegt:

CLEAR i_text
Bei einer Tabelle mit Kopfzeile löscht diese Anweisung nicht den Tabellenkörper sondern nur die Kopfzeile. Versuche mal die Anweisung durch
REFRESH i_text

zu ersetzten.

Guß,

Major.

Hallo Major_Tom,

sorry das ich mich jetzt erst melde, aber die sache mit der zeit ist so eine sache :cool:

wette verloren: ein refresh i_text ist auch vorhanden.

ich habs heut leieder auch nicht geschafft in ruhe alles noch mal zu debuggen, ich setzt mich da im laufe der nächsten tage noch mal ran (berufsschule, weiß nicht wann ich dazu komme)...

danke schon mal für deine mühe, vielleicht kommt noch der lichtblick....

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.