Probleme bei Mehrsprachigkeit

Formulare können übersetzt werden. Dazu gibt es in den Attributen zum Formular die Möglichkeit, genau zu definieren, ob und in welche Sprachen eine Übersetzung notwendig ist. Leider kann es hierbei Probleme geben…

War ein Formular zwischenzeitlich mal übersetzt und soll nun “nicht übersetzungsrelevant” eingestellt werden, so sind weiterhin die Übersetzungen vorhanden und werden nicht gelöscht!!

Problem

Wird die Übersetzungsrelevanz umgestellt auf “nicht übersetzungsrelevant” und das Formular wird verständlicher- und logischerweise weiter entwickelt, dann bleiben die alten Übersetzungen, die auch Variablen enthalten, bestehen und können zu einem Programmabbruch führen.

Verwenden Sie z.B. einen Feldnamen einer Struktur und übersetzen das Formular, dann ist der Feldname logischerweise in der Übersetzung enthalten. Wird das Formular nun auf “nicht übersetzungsrelevant” umgestellt und die Struktur geändert – das verwendete Feld wird gelöscht -, dann wird das Formular beim Druck abbrechen, weil der Feldname nicht mehr bekannt ist.

Die SAP hat hierfür einen Korrekturreport zur Verfügung gestellt:

Coding

report zdelete_sf_translation.

parameter formname type STXFADM-FORMNAME.
parameter language type sy-langu.
parameter delete.

data wstxfadm type stxfadm.
data number type i.

if delete = ‘ ‘.
   write / ‘Only display without delete’.
else.
   write / ‘Delete table entries’.
endif.
skip 1.

select single * from stxfadm into wstxfadm
           where FORMNAME = formname.

if sy-subrc <> 0.
   write / ‘Form does not exist!’.
elseif wstxfadm-masterlang = language.
   write / ‘Language is Master language of the form!’.
   write / ‘Language cannot be deleted!’.
else.
   select count( * ) from stxfadmt into number
        where langu = language and formname = formname.
   write :/ number, ‘entries from STXFADMT’.
   if delete = ‘X’.
       delete from stxfadmt
          where langu = language and formname = formname.
   endif.

   select count( * ) from stxfobjt into number
        where langu = language and formname = formname.
   write :/ number, ‘entries from STXFOBJT’.
   if delete = ‘X’.
       delete from stxfobjt
          where langu = language and formname = formname.
   endif.

   select count( * ) from stxfvart into number
        where langu = language and formname = formname.
   write :/ number, ‘entries from STXFVART’.
   if delete = ‘X’.
       delete from stxfvart
          where langu = language and formname = formname.
   endif.

   select count( * ) from stxftxt into number
        where spras = language and txtype = ‘F’
                  and formname = formname.
   write :/ number, ‘entries from STXFTXT’.
   if delete = ‘X’.
       delete from stxftxt
          where spras = language and txtype = ‘F’
                  and formname = formname.
   endif.

   select count( * ) from stxftxta into number
        where spras = language and txtype = ‘F’
                  and formname = formname.
   write :/ number, ‘entries from STXFTXTA’.
   if delete = ‘X’.
       delete from stxftxta
          where spras = language and txtype = ‘F’
                  and formname = formname.
   endif.

   select count( * ) from stxftxtv into number
        where spras = language and txtype = ‘F’
                  and formname = formname.
   write :/ number, ‘entries from STXFTXTV’.
   if delete = ‘X’.
       delete from stxftxtv
          where spras = language and txtype = ‘F’
                  and formname = formname.
   endif.

   if delete = ‘X’.
      skip 1.
      write / ‘Entries were deleted’.
      commit work.
   endif.
endif.

 

Enno Wulff