[ABAP] SAPscript-Texte: Clusterdaten ohne READ_TEXT direkt aus Tabelle STXL lesen

TYPES: BEGIN OF ty_s_stxl_raw,
         clustr TYPE stxl-clustr,
         clustd TYPE stxl-clustd,
       END OF ty_s_stxl_raw.

TYPES: ty_t_stxl_raw TYPE STANDARD TABLE OF ty_s_stxl_raw.

PARAMETERS: p_tdobj TYPE ttxob-tdobject DEFAULT 'TEXT'.
PARAMETERS: p_tdname TYPE stxh-tdname MATCHCODE OBJECT icl_stxh DEFAULT 'ADDRESS'.
PARAMETERS: p_tdid TYPE ttxid-tdid DEFAULT 'ST'.

START-OF-SELECTION.

* STXD SAPscript Text-Datei Header
  SELECT FROM stxh
    FIELDS
      tdname,
      tdobject,
      tdid
    WHERE tdobject = @p_tdobj
      AND tdname   = @p_tdname
      AND tdid     = @p_tdid
      AND tdspras  = @sy-langu
    INTO TABLE @DATA(it_stxh).

  IF sy-subrc = 0.

* STXD SAPscript Text-Datei Lines
    SELECT FROM stxl
      FIELDS
        tdname,
        clustr,
        clustd
      FOR ALL ENTRIES IN @it_stxh
      WHERE relid    = 'TX'
        AND tdobject = @it_stxh-tdobject
        AND tdname   = @it_stxh-tdname
        AND tdid     = @it_stxh-tdid
        AND tdspras  = @sy-langu
      INTO TABLE @DATA(it_stxl)
      PACKAGE SIZE 3000. " Datenmenge bei SELECT begrenzen, um Laufzeitfehler zu vermeiden

      DATA: it_stxl_raw TYPE ty_t_stxl_raw.
      CLEAR: it_stxl_raw.

      LOOP AT it_stxl ASSIGNING FIELD-SYMBOL(<stxl>).

        APPEND VALUE ty_s_stxl_raw( clustr = <stxl>-clustr
                                    clustd = <stxl>-clustd ) TO it_stxl_raw.

        DATA(it_lines) = VALUE tline_t( ).

* Zeilen aus Datencluster lesen
        IMPORT tline = it_lines FROM INTERNAL TABLE it_stxl_raw.

        LOOP AT it_lines ASSIGNING FIELD-SYMBOL(<l>).
          WRITE: / <stxl>-tdname, <l>-tdformat, <l>-tdline.
        ENDLOOP.

      ENDLOOP.

    ENDSELECT.

  ENDIF.

Links

[CDS-Views] SAPScript-Texte mit Hilfe von virtuellen Elementen lesen

In den Beiträgen wird beschrieben, wie man den Funktionsbaustein „READ_TEXT“ über sog. virtuelle Elemente in einem CDS-View anspricht:

https://community.sap.com/t5/technology-blog-posts-by-members/using-virtual-elements-with-cds-in-fiori-elements/ba-p/13451568

https://community.sap.com/t5/technology-blog-posts-by-members/read-material-basic-data-text-long-text-without-using-function-module-read/ba-p/13480045

[ABAP] Einkaufsbestelltext zum Material auslesen

* https://www.berater-wiki.de/SAPscript-Textbaustein_lesen_mit_Funktionsbaustein_READ_TEXT_und_speichern_mit_SAVE_TEXT
* Texte: Anwendungsobjekt
* siehe SE75
CONSTANTS: co_obj_type TYPE thead-tdobject VALUE 'MATERIAL'. " Materialtexte Einkauf/Lagerung
* Text-ID
* siehe SE75 --> Doppelklick auf Objekt
CONSTANTS: co_obj_id TYPE thead-tdid VALUE 'BEST'. " Einkaufsbestelltext

DATA: it_thead TYPE STANDARD TABLE OF thead WITH DEFAULT KEY.
DATA: it_lines TYPE tline_t.
DATA: it_ascii TYPE tdtab_c132.

* Materialnummer mit führenden Nullen
DATA(lv_matnr) = CONV matnr( '000000001122334455' ).

* erst 'SELECT_TEXT' zur Prüfung aufrufen (ob Text vorhanden)
* 'READ_TEXT' wirft sonst bei Nichtvorhandensein des Textes eine Abbruchmessage
* Texterstellung Text auswählen
CALL FUNCTION 'SELECT_TEXT'
  EXPORTING
    object                  = co_obj_type
    name                    = CONV thead-tdname( lv_matnr )
    id                      = co_obj_id
    language                = sy-langu
  TABLES
    selections              = it_thead   " Textheader der gefundenen Texte
  EXCEPTIONS
    wrong_access_to_archive = 1
    OTHERS                  = 2.

IF sy-subrc = 0.
  IF lines( it_thead ) > 0.
* Texterstellung Text lesen
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
        id                      = co_obj_id
        language                = sy-langu
        name                    = CONV thead-tdname( lv_matnr )
        object                  = co_obj_type
      TABLES
        lines                   = it_lines " Textzeilen des gelesenen Textes
      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.
      IF lines( it_lines ) > 0.
* Textkonvertierung ITF (SAPscript-Format) in ASCII
* Stile und Formatierungen aus SAP-Script-Text entfernen
        CALL FUNCTION 'CONVERT_ITF_TO_ASCII'
          EXPORTING
            formatwidth       = 132
          IMPORTING
            c_datatab         = it_ascii
          TABLES
            itf_lines         = it_lines
          EXCEPTIONS
            invalid_tabletype = 1
            OTHERS            = 2.
        IF sy-subrc = 0.
          cl_demo_output=>write_data( it_thead ).
          cl_demo_output=>write_data( it_lines ).
          cl_demo_output=>write_data( it_ascii ).
          cl_demo_output=>display( ).
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDIF.

[SAP] SAPscript

Transaktionen

SO10 (SAPscript Standardtexte)
SE71 (SAPscript Formular)

  • Formularvergleich: Menü -> Hilfsmittel -> Formulare vergleichen
  • Kopieren: Menü -> Hilfsmittel -> Kopieren von Mandant
  • Druckansicht: Menü -> Hilfsmittel -> Testdruck
  • Formularsuche: Menü -> Formular -> Suchen -> Suche nach Merkmalen

SE72 (SAPscript Stile)
SE75 (SAPscript Einstellungen)

  • Anzeigen und Ändern von Textobjekten + TextIDs, Grafikobjekten, Standardsymbolen

SE78 (Verwaltung von Formulargrafiken)
TXBA (Verwendungsnachweis für Textbausteine)
RECATM (Manage Text Modules)

Tabellen

STXH (STXD SAPscript Text-Datei Header)

  • Formulare suchen: Objekt ‚FORM‘, Textname ‚FORMULARNAME‘, ID ‚DEF‘

STXL (STXD SAPscript Text-Datei Lines)
TTXID (Zulässige Text-Id’s)
TTXIT (Texte zu Text-Id’s)
TTXOT (Kurztexte zu Textobjekten)
TTXOB (Eigenschaften der Textobjekte)

Suchhilfen

ICL_STXH (Kurztitel zu einem Textbaustein ermitteln)

CDS-Views

I_TextObject (Text Object)

Funktionsbausteine

SELECT_TEXT (Texterstellung Text auswählen)
READ_TEXT (Texterstellung Text lesen)
SAVE_TEXT (Texterstellung Text sichern)
READ_MULTIPLE_TEXTS (Mehrere Texte lesen (Auswahl über Wildcards bzw. Ranges-Tabellen))
CONVERT_ITF_TO_ASCII (Textkonvertierung ITF (SAPscript-Format) in ASCII)

Reports

RSTXTRAN (Transfer of SAPscript Texts to a Correction)
RSTXSCRP (SAPscript Export to Dataset / SAPscript Import from Dataset)
RSTXPDFT4 (Konvertiere SAPscript (OTF) oder ABAP List Spool Job nach PDF)
RSTXPDFT5 (GUI Download eines Spool-Auftrages)
ICL_TEXTMOD_MAINTAIN (Textbausteine verwalten)

  • beliebige Textobjeke pflegen

SF_MIGRATE (Report zum Migrieren von SAPscript-Formularen)

Links

[ABAP] Text zu Wert in einem Datenbankfeld auslesen

Variante 1 (einzelner Feldwert)

DATA: lv_text TYPE text255.
DATA: lv_found TYPE flag_x.
DATA: it_identifier TYPE txid_t_text_identifier_result.

TRY.
    DATA(o_text) = NEW cl_text_identifier( ).
* Text für EBAN-STATU zu Feldwert 'B' holen
    o_text->read_text( EXPORTING
                         tabname    = 'EBAN'   " Tabelle
                         fieldname  = 'STATU'  " Feld
                         fieldvalue = 'B'      " Feldwert
                       IMPORTING
                         text                    = lv_text
                         text_for_value_read     = lv_found
                         text_identifier_results = it_identifier ).

    IF lv_found = abap_true.
* gefundenen Text ausgeben
      WRITE: / lv_text.

      LOOP AT it_identifier ASSIGNING FIELD-SYMBOL(<i>).
        WRITE: / <i>-tabname, <i>-fieldname, <i>-fieldvalue, <i>-text.
      ENDLOOP.
    ENDIF.
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

Variante 2 (Datensatz)

PARAMETERS: p_banf TYPE eban-banfn OBLIGATORY.

START-OF-SELECTION.
* Datensatz holen
  DATA: lv_eban TYPE eban.
  SELECT SINGLE * FROM eban INTO lv_eban WHERE banfn EQ p_banf.

  IF sy-subrc = 0.
    DATA: lv_text TYPE text255.
    DATA: lv_found TYPE flag_x.
    DATA: it_identifier TYPE txid_t_text_identifier_result.

    TRY.
* Datensatz: Text zu Feld 'STATU' holen
        DATA(o_text) = NEW cl_text_identifier( ).
        o_text->read_text( EXPORTING
                             tabname          = 'EBAN'    " Tabelle
                             fieldname        = 'STATU'   " Feld
                             record           = lv_eban   " Struktur mit Wert für EBAN-STATU
                             record_specified = abap_true
                           IMPORTING
                             text                    = lv_text
                             text_for_value_read     = lv_found
                             text_identifier_results = it_identifier ).

        IF lv_found = abap_true.
* gefundenen Text ausgeben
          WRITE: / lv_text.

          LOOP AT it_identifier ASSIGNING FIELD-SYMBOL(<i>).
            WRITE: / <i>-tabname, <i>-fieldname, <i>-fieldvalue, <i>-text.
          ENDLOOP.
        ENDIF.
      CATCH cx_root INTO DATA(e_txt).
        WRITE: / e_txt->get_text( ).
    ENDTRY.
  ENDIF.