Eigenschaften | Quelltext
Titel | database access for text tables |
Originalsprache | DE | Deutsch
Erstellt | 27.10.1998 |  | SAP |
Letzte Änderung | 23.06.2003 |  | SAP |
Status | aktiv |
Attribute
Typ | Include-Programm |
Status | Testprogramm |
Anwendung | Basis (System) |
Paket | SVIM | Basis Viewmaintenance
| Editorsperre
txt
    1
    *----------------------------------------------------------------------*
    2
    *   INCLUDE LSVIMFL1
    3
    **----------------------------------------------------------------------
    4
    *
    5
    *---------------------------------------------------------------------*
    6
    *       FORM VIM_GET_TEXTTAB_DATA                                     *
    7
    *---------------------------------------------------------------------*
    8
    * Texteinträge von der DB nachlesen für angeg. Sprachen               *
    9
    * UFProbl251070/1998: Falls X_NAMTAB-Reihenfolge nicht mit
    10
    *                     DBA-SELLIST-Reihenfolge übereinstimmt, werden
    11
    *                     ANDs oder ORs verschluckt.
    12
    *---------------------------------------------------------------------*
    13
    *  --> LANGUS         ausgewählte Sprachen
    14
    * <--> TEXTTAB
    15
    *---------------------------------------------------------------------*
    16
    FORM vim_get_texttab_data TABLES langus STRUCTURE h_t002
    17
                              CHANGING texttab TYPE table.
    18
    *                                  Type VIM_LINE_US/../VIM_LINE_UL
    19
      DATA: tgd_sellist LIKE vimsellist OCCURS 10, tgd_sel LIKE vimsellist,
    20
            wheretab_line LIKE vimwheretb,
    21
            spras_value(3) TYPE c,
    22
    *        curr_spras(1) TYPE c,
    23
            keylen TYPE i,
    24
            l TYPE i, sellist_l TYPE i, tbx TYPE i,
    25
            and_or_str(6) TYPE c, left_par(1) TYPE c,
    26
            tmp_texttab TYPE REF TO data,
    27
            tmp_texttab_wa TYPE REF TO data,
    28
    *        tmp_texttab TYPE vim_tab_ul WITH HEADER LINE,
    29
            texttab_tabix LIKE sy-tabix,
    30
            align1 type f,
    31
            texttab_wa TYPE vim_line_ul,
    32
            align2 type f,
    33
            view_wa TYPE tabl8000, map_error TYPE xfeld.
    34
      FIELD-SYMBOLS: <tmp_texttab> TYPE STANDARD TABLE,
    35
                     <tmp_texttab_wa> TYPE ANY, <tmp_texttab_wax> TYPE x,
    36
                     <view_key> TYPE x, <next_spras> TYPE spras,
    37
                     <curr_spras> TYPE spras,
    38
                     <h_texttab> TYPE x, <h_texttab_wa> TYPE x,
    39
                     <viewkey_in_texttab> TYPE x, <texttab_struc> TYPE ANY.
    40
    41
      CREATE DATA: tmp_texttab TYPE STANDARD TABLE OF (x_header-texttab),
    42
                   tmp_texttab_wa TYPE (x_header-texttab).
    43
      ASSIGN: tmp_texttab->* TO <tmp_texttab>,
    44
              tmp_texttab_wa->* TO <tmp_texttab_wa>,
    45
              <tmp_texttab_wa> TO <tmp_texttab_wax> CASTING.
    46
    47
      IF x_header-selection NE space.
    48
        LOOP AT dba_sellist INTO tgd_sel       "UFProbl251070/1998
    49
         WHERE value <> space OR initial = 'X'.
    50
          LOOP AT x_namtab WHERE viewfield EQ tgd_sel-viewfield
    51
                           AND keyflag NE space AND txttabfldn NE space.
    52
            tgd_sel-viewfield = x_namtab-txttabfldn.
    53
            tgd_sel-tabix     = sy-tabix.
    54
            APPEND tgd_sel TO tgd_sellist.
    55
            EXIT.
    56
          ENDLOOP.
    57
        ENDLOOP.                                "UFProbl251070/1998
    58
      ENDIF.                               "X_HEADER-SELECTION
    59
    60
      DESCRIBE TABLE tgd_sellist LINES sellist_l.
    61
      IF sellist_l > 0.
    62
        READ TABLE tgd_sellist INDEX sellist_l INTO tgd_sel.
    63
        IF tgd_sel-and_or NE space.
    64
          CLEAR tgd_sel-and_or.
    65
          MODIFY tgd_sellist INDEX sellist_l FROM tgd_sel.
    66
        ENDIF.
    67
        CALL FUNCTION 'VIEW_FILL_WHERETAB'
    68
             EXPORTING
    69
                  tablename               = x_header-texttab
    70
                  only_cnds_for_keyflds   = 'X'
    71
                  is_texttable            = 'X'
    72
             TABLES
    73
                  sellist                 = tgd_sellist
    74
                  wheretab                = vim_wheretab
    75
                  x_namtab                = x_namtab
    76
             EXCEPTIONS
    77
                  no_conditions_for_table = 01.
    78
        IF sy-subrc = 1. sellist_l = 0. ENDIF.
    79
      ELSE.
    80
        REFRESH vim_wheretab.
    81
      ENDIF.
    82
    83
    * VIM_WHERETAB um Bedingungen für ausgew. Sprachen ergänzen
    84
      DESCRIBE TABLE langus LINES l.
    85
      IF l > 1.
    86
        and_or_str = 'OR'.
    87
        IF sellist_l > 0.
    88
          left_par = '('.
    89
        ENDIF.
    90
      ENDIF.
    91
      tbx = 1.
    92
      spras_value = ''' '''.
    93
      LOOP AT langus.
    94
        spras_value+1(1) = langus-spras.
    95
        IF tbx = l.      " letzte Zeile für Sprachselektion
    96
          IF l > 1 AND sellist_l > 0.
    97
            and_or_str = ' ) AND'.
    98
          ELSEIF l = 1 AND sellist_l > 0.
    99
            and_or_str = ' AND'.
    100
          ELSE.
    101
            CLEAR and_or_str.
    102
          ENDIF.
    103
        ENDIF.
    104
       CONCATENATE left_par x_header-sprasfield 'EQ' spras_value and_or_str
    105
                                INTO wheretab_line SEPARATED BY space.
    106
        INSERT wheretab_line INTO vim_wheretab INDEX tbx.
    107
        CLEAR left_par.
    108
        tbx = tbx + 1.
    109
      ENDLOOP.
    110
    111
      SELECT * FROM (x_header-texttab) INTO TABLE <tmp_texttab>
    112
                                          WHERE (vim_wheretab).
    113
    114
    * Texttabellen-Einträge sortiert in Texttabelle einfügen
    115
      IF x_header-delmdtflag <> space AND  "zeitabh. & part. Fremdschl.
    116
         x_header-ptfrkyexst  = 'X'.       "      -> zeitunabh. Texttab.
    117
        keylen = x_header-after_keyc
    118
                  - vim_datum_length * cl_abap_char_utilities=>charsize.
    119
      ELSE.
    120
        keylen = x_header-after_keyc.
    121
      ENDIF.
    122
      ASSIGN: view_wa(keylen) TO <view_key>,
    123
              texttab_wa TO <h_texttab_wa> CASTING,
    124
              <h_texttab_wa>(keylen) TO <viewkey_in_texttab>,
    125
              <h_texttab_wa>+keylen(x_header-texttablen) TO <h_texttab>,
    126
              <h_texttab> TO <texttab_struc>
    127
               CASTING TYPE (x_header-texttab),
    128
              COMPONENT x_header-sprasfield OF STRUCTURE <texttab_struc>
    129
               TO <next_spras>,
    130
              COMPONENT x_header-sprasfield OF STRUCTURE <tmp_texttab_wa>
    131
               TO <curr_spras>.
    132
      LOOP AT <tmp_texttab> INTO <tmp_texttab_wa>.
    133
        PERFORM map_texttabkey_to_viewkey TABLES x_namtab
    134
                                          USING x_header
    135
                                                <tmp_texttab_wax>
    136
                                                x_header-textkeylen
    137
                                                x_header-genertxtrp
    138
                                          CHANGING <view_key>
    139
                                                   map_error.
    140
        CHECK map_error = space.
    141
    *    PERFORM vim_fill_view_key USING tmp_texttab
    142
    *                           CHANGING <view_key> curr_spras.
    143
        CLEAR texttab_wa.
    144
        READ TABLE texttab WITH KEY <view_key> INTO texttab_wa
    145
                                                            BINARY SEARCH.
    146
        texttab_tabix = sy-tabix.
    147
        IF sy-subrc = 0 AND
    148
          <viewkey_in_texttab> = <view_key> AND  "Text ex. in weiteren Spr
    149
          <next_spras> < <curr_spras>. "#EC PORTABLE
    150
          LOOP AT texttab FROM texttab_tabix INTO texttab_wa.
    151
            IF <viewkey_in_texttab> <> <view_key> OR
    152
               <next_spras> >= <curr_spras>. "#EC PORTABLE
    153
              texttab_tabix = sy-tabix.
    154
              EXIT.
    155
            ELSEIF <next_spras> < <curr_spras>. "#EC PORTABLE
    156
              texttab_tabix = sy-tabix + 1.
    157
            ENDIF.
    158
          ENDLOOP.
    159
        ENDIF.   " <next_spras> >= <curr_spras> oder ex. nicht
    160
        IF <next_spras> <> <curr_spras> OR
    161
           <viewkey_in_texttab> <> <view_key>.  "Text ex. nicht in Sprache
    162
          CLEAR texttab_wa.
    163
          <viewkey_in_texttab> = <view_key>.
    164
          <texttab_struc> = <tmp_texttab_wa>.
    165
          INSERT texttab_wa INTO texttab INDEX texttab_tabix.
    166
        ELSE.
    167
          <texttab_struc> = <tmp_texttab_wa>.
    168
          MODIFY texttab FROM texttab_wa INDEX texttab_tabix.
    169
        ENDIF.
    170
    171
      ENDLOOP.                             " tmp_texttab
    172
    ENDFORM.                               "VIM_GET_TEXTTAB_DATA
    173
    174
    *---------------------------------------------------------------------*
    175
    *       FORM VIM_READ_TEXTTAB_ENTRY                                   *
    176
    *---------------------------------------------------------------------*
    177
    * einzelnen Texttabellen-Eintrag für alle bisher bearbeiteten         *
    178
    * Sprachen nachlesen
    179
    * Aktueller Eintrag steht in Kopfzeile von EXTRACT
    180
    *---------------------------------------------------------------------*
    181
    FORM vim_read_texttab_entry.
    182
      DATA: texttab_wa TYPE vim_line_ul,
    183
            texttab_tabix LIKE sy-tabix,
    184
            keylen TYPE i,
    185
            offset TYPE i,
    186
            modify_texttab(1) TYPE c,
    187
            tmp_texttab TYPE ref to data,
    188
            w_tmp_texttab type ref to data.
    189
      FIELD-SYMBOLS: <h_texttab_wa> type x,
    190
                     <viewkey_in_texttab> type x,
    191
                     <texttab_key> type x,
    192
                     <texttab_fields>, <texttab_action> type c,
    193
                     <extract_key> type x,
    194
                     <tmp_texttab> type standard table,
    195
                     <w_tmp_texttab> type any,
    196
                     <w_tmp_texttab_x> type x.
    197
    198
      IF x_header-delmdtflag <> space AND  "zeitabh. & part. Fremdschl.
    199
         x_header-ptfrkyexst  = 'X'.       "      -> zeitunabh. Texttab.
    200
        ASSIGN <vim_ext_mkey_beforex> TO <extract_key>.
    201
    *    ASSIGN <vim_ext_mkey_before> TO <extract_key>.
    202
        keylen = x_header-keylen
    203
                  - vim_datum_length * cl_abap_char_utilities=>charsize.
    204
      ELSE.
    205
        ASSIGN <vim_xextract_key> TO <extract_key>.
    206
         keylen = x_header-after_keyc.
    207
    *    keylen = x_header-keylen.
    208
      ENDIF.
    209
    210
      READ TABLE <vim_texttab> WITH KEY <extract_key>
    211
                               BINARY SEARCH TRANSPORTING NO FIELDS.
    212
      IF sy-subrc = 0.
    213
        texttab_tabix = sy-tabix.
    214
      ELSE.
    215
        EXIT.     "keine Texte zum Key in anderen Sprachen erfaßt
    216
      ENDIF.
    217
    218
      ASSIGN: texttab_wa TO <h_texttab_wa> casting,
    219
              <h_texttab_wa>+keylen(x_header-textkeylen) TO <texttab_key>,
    220
              <h_texttab_wa>+keylen(x_header-texttablen)
    221
               TO <texttab_fields>.
    222
    *  ASSIGN texttab_wa(keylen) TO <viewkey_in_texttab>.
    223
    *  ASSIGN texttab_wa+keylen(x_header-textkeylen) TO <texttab_key>.
    224
    *  ASSIGN texttab_wa+keylen(x_header-texttablen) TO <texttab_fields>.
    225
      offset = ( keylen + x_header-texttablen )
    226
               / cl_abap_char_utilities=>charsize.
    227
    *  offset = keylen + x_header-texttablen.
    228
      ASSIGN texttab_wa+offset(1) TO <texttab_action>.
    229
    230
      create data tmp_texttab type standard table of (x_header-texttab).
    231
      create data w_tmp_texttab type (x_header-texttab).
    232
      assign: tmp_texttab->* to <tmp_texttab>,
    233
              w_tmp_texttab->* to <w_tmp_texttab>,
    234
              <w_tmp_texttab> to <w_tmp_texttab_x> casting.
    235
      LOOP AT <vim_texttab> FROM texttab_tabix INTO texttab_wa.
    236
        IF <viewkey_in_texttab> <> <extract_key>. EXIT. ENDIF.
    237
        IF <texttab_action> = neuer_eintrag.
    238
          DELETE <vim_texttab>.
    239
          modify_texttab = 'X'.
    240
        ELSEIF <texttab_action> <> original.
    241
          refresh <tmp_texttab>.
    242
    *      REFRESH tmp_texttab.
    243
          CALL FUNCTION 'DB_SELECT_GENERIC_TABLE'
    244
               EXPORTING
    245
                    genkey      = <texttab_key>
    246
                    genkey_ln   = x_header-textkeylen
    247
                    tablename   = x_header-texttab
    248
               TABLES
    249
                    inttab      = <tmp_texttab>
    250
    *                inttab      = tmp_texttab
    251
               EXCEPTIONS
    252
                    db_error    = 12
    253
                    not_found   = 04
    254
                    wrong_param = 08.
    255
          IF sy-subrc > 4. RAISE get_table_error. ENDIF.
    256
    257
          READ TABLE <tmp_texttab> into <w_tmp_texttab> INDEX 1.
    258
    *      READ TABLE tmp_texttab INDEX 1.
    259
          IF sy-subrc = 0.
    260
            <texttab_fields> = <w_tmp_texttab_x>(x_header-texttablen).
    261
    *        <texttab_fields> = tmp_texttab(x_header-texttablen).
    262
            <texttab_action> = original.
    263
            MODIFY <vim_texttab> FROM texttab_wa.
    264
            modify_texttab = 'X'.
    265
          ELSE.                            "NOT_FOUND
    266
            DELETE <vim_texttab>.
    267
            modify_texttab = 'X'.
    268
          ENDIF.
    269
        ENDIF.
    270
      ENDLOOP.
    271
      IF modify_texttab = 'X'.
    272
        MODIFY vim_texttab_container INDEX vim_texttab_container_index.
    273
        CLEAR sy-subrc.
    274
      ELSE.
    275
        sy-subrc = 4.
    276
      ENDIF.
    277
    ENDFORM.                               "VIM_READ_TEXTTAB_ENTRY
    278
    279
    *---------------------------------------------------------------------*
    280
    *       FORM VIM_TEXTTAB_DB_UPD                                       *
    281
    *---------------------------------------------------------------------*
    282
    * Datenbank-Änderungen für Texttabelle (für spras <> SY-LANGU)        *
    283
    * Action_Flag in <VIM_TEXTTAB> für modif. Einträge zurücksetzen
    284
    * gelöschte Einträge aus interner Text-Tabelle löschen
    285
    *---------------------------------------------------------------------*
    286
    FORM vim_texttab_db_update.
    287
      DATA: modified_entries TYPE i,
    288
            texttab_modified(1) TYPE c,
    289
            keylen TYPE i,
    290
            offset TYPE i,
    291
            align type f, texttab_wa TYPE vim_line_ul, "HCG never separate
    292
            tmp_texttab TYPE REF TO data,
    293
            w_tmp_texttab TYPE REF TO data.
    294
    *        tmp_texttab TYPE vim_tab_ul WITH HEADER LINE.
    295
      FIELD-SYMBOLS: <tmp_texttab> TYPE STANDARD TABLE,
    296
                     <w_tmp_texttab> TYPE ANY,
    297
                     <h_texttab_wa> TYPE x, <h_texttab_fields> TYPE x,
    298
                     <texttab_fields> TYPE ANY, <texttab_action>.
    299
    300
      CLEAR texttab_modified.
    301
      CHECK x_header-texttbexst <> space.
    302
      IF x_header-delmdtflag <> space AND  "zeitabh. & part. Fremdschl.
    303
         x_header-ptfrkyexst  = 'X'.       "      -> zeitunabh. Texttab.
    304
        keylen = x_header-after_keyc
    305
                 - vim_datum_length * cl_abap_char_utilities=>charsize.
    306
      ELSE.
    307
        keylen = x_header-after_keyc.
    308
      ENDIF.
    309
    310
      CREATE DATA: tmp_texttab TYPE STANDARD TABLE OF (x_header-texttab),
    311
                   w_tmp_texttab TYPE (x_header-texttab).
    312
      ASSIGN: tmp_texttab->* TO <tmp_texttab>,
    313
              w_tmp_texttab->* TO <w_tmp_texttab>,
    314
              texttab_wa TO <h_texttab_wa> CASTING,
    315
              <h_texttab_wa>+keylen(x_header-texttablen)
    316
               TO <h_texttab_fields>,
    317
              <h_texttab_fields> TO <texttab_fields>
    318
               CASTING TYPE (x_header-texttab).
    319
      offset = ( keylen + x_header-aft_txttbc )
    320
               / cl_abap_char_utilities=>charsize.
    321
      ASSIGN texttab_wa+offset(1) TO <texttab_action>.
    322
    323
    * DELETE: nur in interner Texttabelle, in DB schon bisher für alle Spr.
    324
      LOOP AT <vim_texttab> INTO texttab_wa.
    325
        CHECK <texttab_action> EQ geloescht OR
    326
              <texttab_action> EQ neuer_geloescht OR
    327
              <texttab_action> EQ update_geloescht.
    328
        DELETE <vim_texttab>.
    329
        texttab_modified = 'X'.
    330
      ENDLOOP.                             "<VIM_TEXTTAB>
    331
    332
    * UPDATE
    333
      CLEAR modified_entries. REFRESH <tmp_texttab>.
    334
      LOOP AT <vim_texttab> INTO texttab_wa.
    335
        CHECK <texttab_action> EQ aendern.
    336
        APPEND <texttab_fields> TO <tmp_texttab>.
    337
    *    tmp_texttab  = <texttab_fields>.
    338
    *    APPEND tmp_texttab.
    339
        modified_entries = modified_entries + 1.
    340
        <texttab_action> = original.
    341
        MODIFY <vim_texttab> FROM texttab_wa.
    342
      ENDLOOP.                             "<VIM_TEXTTAB>
    343
      IF modified_entries > 0.
    344
        UPDATE (x_header-texttab) FROM TABLE <tmp_texttab>.
    345
        texttab_modified = 'X'.
    346
      ENDIF.
    347
    348
    * INSERT
    349
      CLEAR modified_entries. REFRESH <tmp_texttab>.
    350
      LOOP AT <vim_texttab> INTO texttab_wa.
    351
        CHECK <texttab_action> EQ neuer_eintrag.
    352
        APPEND <texttab_fields> TO <tmp_texttab>.
    353
    *    tmp_texttab = <texttab_fields>.
    354
    *    APPEND tmp_texttab.
    355
        modified_entries = modified_entries + 1.
    356
        <texttab_action> = original.
    357
        MODIFY <vim_texttab> FROM texttab_wa.
    358
      ENDLOOP.                             "<VIM_TEXTTAB>
    359
      IF modified_entries > 0.
    360
        INSERT (x_header-texttab) FROM TABLE <tmp_texttab>
    361
               ACCEPTING DUPLICATE KEYS. "um RABAX bei unzulässigem
    362
        "Texttab-Aufbau zu vermeiden
    363
        texttab_modified = 'X'.
    364
      ENDIF.
    365
    366
      IF texttab_modified = 'X'.
    367
        MODIFY vim_texttab_container INDEX vim_texttab_container_index.
    368
      ENDIF.
    369
    ENDFORM.                               "VIM_TEXTTAB_DB_UPDATE
    370
    371
    * Import für Texte in anderen Sprachen                      "Textimp ...
    372
    *---------------------------------------------------------------------*
    373
    *       FORM VIM_READ_TEXTTAB_ALL_LANGUS                              *
    374
    *---------------------------------------------------------------------*
    375
    * Texteinträge von der DB für alle Sprachen einlesen.                 *
    376
    *---------------------------------------------------------------------*
    377
    FORM vim_read_texttab_all_langus.
    378
      DATA: langus_selected(1) TYPE c,
    379
            curr_sptxt LIKE t002t-sptxt,
    380
            sel_langus LIKE h_t002 OCCURS 0 WITH HEADER LINE.
    381
    382
      CALL FUNCTION 'VIEW_GET_LANGUAGES'
    383
           EXPORTING
    384
                all_without_selection = 'X'
    385
           IMPORTING
    386
                languages_selected    = langus_selected
    387
                curr_sptxt            = curr_sptxt
    388
           TABLES
    389
                languages             = sel_langus.
    390
      IF x_header-frm_tl_get NE space.
    391
        PERFORM (x_header-frm_tl_get) IN PROGRAM (x_header-fpoolname)
    392
                                      TABLES sel_langus.
    393
      ELSE.
    394
        PERFORM vim_read_texttab_for_langus TABLES sel_langus USING ' '.
    395
      ENDIF.
    396
    ENDFORM.                               "VIM_READ_TEXTTAB_ALL_LANGUS
    397
    398
    ************************************************************************
    399
    * SW Langtext
    400
    *    Absprung in Langtextpflege über Userexit vom Übersetzungsscreen aus
    401
    *    ermöglichen
    402
    *---------------------------------------------------------------------*
    403
    *       FORM VIM_CALL_LTEXT_EXIT                                      *
    404
    *---------------------------------------------------------------------*
    405
    * ->  MAINT_MODE      'U'/'R' (Update/Read)
    406
    * ->  EXITFORM        Name der Userexit-Routine für Langtextpflege
    407
    * <-> TEXTTABLE_ENTRY Zeile, für die Langtextpflege aufgerufen wurde
    408
    * <-  MODIFIED        'X' -> Zeile wurde modifiziert
    409
    *---------------------------------------------------------------------*
    410
    * Aufruf des Userexits für Langtextpflege                             *
    411
    *---------------------------------------------------------------------*
    412
    FORM vim_call_ltext_exit
    413
                 USING    maint_mode TYPE c
    414
                          exitform TYPE vimfrmname
    415
                 CHANGING texttable_entry TYPE vimty_textmaint_record
    416
                          modified TYPE c.
    417
      DATA: text_wa TYPE vim_line_ul,
    418
            textmaint_field TYPE vimty_textfield,
    419
            pgm_name LIKE sy-repid,
    420
            offset LIKE sy-fdpos.
    421
    422
      FIELD-SYMBOLS: <text_wa> TYPE x, <text_wa_struc> TYPE ANY,
    423
                     <texttabkey> TYPE x, <txtfld> TYPE ANY.
    424
    425
      CLEAR modified.
    426
      IF vim_internal_ltext_call = space.
    427
        PERFORM (exitform) IN PROGRAM (sy-repid).
    428
      ELSE.
    429
        READ TABLE x_header INDEX 1.
    430
        ASSIGN: text_wa TO <text_wa> CASTING,
    431
                <text_wa> TO <text_wa_struc>
    432
                 CASTING TYPE (x_header-texttab),
    433
                texttable_entry-keys TO <texttabkey> CASTING.
    434
    435
        PERFORM map_viewkey_to_texttabkey TABLES x_namtab
    436
                                    USING x_header
    437
                                          texttable_entry-spras
    438
                                          <texttabkey>
    439
                                 CHANGING <text_wa>.
    440
    *    PERFORM VIM_FILL_TEXTTAB_KEY USING TEXTTABLE_ENTRY-KEYS
    441
    *                                       TEXTTABLE_ENTRY-SPRAS
    442
    *                                       X_HEADER-SPRASFDPOS
    443
    *                              CHANGING TEXT_WA.
    444
        LOOP AT texttable_entry-texttab INTO textmaint_field.
    445
          READ TABLE x_namtab INDEX textmaint_field-namtab_idx.
    446
    *      offset = x_namtab-texttabpos.
    447
          IF x_namtab-lowercase = space.
    448
            TRANSLATE textmaint_field-text TO UPPER CASE.
    449
          ENDIF.
    450
          IF x_namtab-txttabfldn = space.
    451
    * tab + texttab
    452
            ASSIGN COMPONENT x_namtab-bastabfld
    453
             OF STRUCTURE <text_wa_struc> TO <txtfld>.
    454
          ELSE.
    455
    * view
    456
            ASSIGN COMPONENT x_namtab-txttabfldn
    457
             OF STRUCTURE <text_wa_struc> TO <txtfld>.
    458
          ENDIF.
    459
          <txtfld> = textmaint_field-text.
    460
    *      text_wa+offset(x_namtab-flength) =
    461
    *         textmaint_field-text(x_namtab-flength).
    462
        ENDLOOP.
    463
        PERFORM (exitform) IN PROGRAM (x_header-fpoolname)
    464
                              USING maint_mode
    465
                              CHANGING text_wa modified.
    466
        IF modified = 'X'.
    467
          IF maint_mode = 'U'.
    468
            LOOP AT texttable_entry-texttab INTO textmaint_field.
    469
              READ TABLE x_namtab INDEX textmaint_field-namtab_idx.
    470
              ASSIGN COMPONENT x_namtab-txttabfldn
    471
               OF STRUCTURE <text_wa_struc> TO <txtfld>.
    472
              textmaint_field-text = <txtfld>.
    473
    *          offset = x_namtab-texttabpos.
    474
    *          textmaint_field-text(x_namtab-flength) =
    475
    *            text_wa+offset(x_namtab-flength).
    476
              MODIFY texttable_entry-texttab FROM textmaint_field.
    477
            ENDLOOP.
    478
            texttable_entry-action = 'X'.
    479
          ELSE.
    480
            CLEAR modified.
    481
          ENDIF.
    482
        ENDIF.
    483
      ENDIF.
    484
    ENDFORM.                               " VIM_CALL_LTEXT_EXIT