Überprüfung der Sprachpflege

Getting started ... Alles für einen gelungenen Start.
37 Beiträge • Vorherige Seite 2 von 3 (current) Nächste
37 Beiträge Vorherige Seite 2 von 3 (current) Nächste

Re: Überprüfung der Sprachpflege

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
hi!

Von seiten ABAP und SAP sind meines Wissens nur Tabellen die im Primary Key (DDFIES-KEYFLAG = 'X') ein Feld vom Datentyp 'LANG' (DDFIES-DATATYPE = 'LANG') besitzen, jene die an die Sprachpflege angebunden sind. Das Datenelement (DFIES-ROLLNAME bzw. DFIES-DOMNAME) ist wie du schon gesagt hast leider nicht eindeutig, also mußt du noch eine Ebene höher gehen und das ist der interne Datentyp 'LANG'. Es gibt auch ein eigenes Sprachenflag (DD03L-LANGUFLAG) je Tabellenfeld, das ist aber leider nicht im DFIES enthalten. Du könntest also demnach, um ganz sicher zu gehen, zuerst mit DDIF_FIELDINFO_GET prüfen ob die Tabelle Felder mit Datentyp 'LANG' besitzt und dannach die Tabelle DD03L abfragen ob zu diesem Feld auch das Sprachenflag gesetzt ist.

lg
ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Spookykid

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Überprüfung der Sprachpflege

Beitrag von black_adept (Top Expert / 4117 / 129 / 952 ) »
Hallo spookykid,

du hast doch inzw. alles beisammen. Die Anzahl/Art der Nichtschlüsselfelder kann dir doch inzwischen ziemlich egal sein - dich interessiert doch nur, ob der portugiesische Eintrag vorhanden und ungleich dem englischen ist.

Ich hänge mal kurz ein Coding an, dass deinen Vergleich beispielhaft für die Tabelle MAKT durchführt. ( Das ist eine Texttabelle - wenn auch nicht zu einer Customizingtabelle - aber das ist egal, da das Prinzip für dich das selbe ist. Und ich mache den Vergleich auch nur für deutsch und englisch )

Code: Alles auswählen.

REPORT.

DATA: dref TYPE REF TO data,
      keys TYPE STANDARD TABLE OF fieldname,
      where_en TYPE string,
      where_de TYPE string.

FIELD-SYMBOLS: <t_en>   TYPE HASHED TABLE,
               <t_de>   TYPE HASHED TABLE,
               <row_en> TYPE ANY,
               <row_de> TYPE ANY.

*parameters: p_table type tabname OBLIGATORY DEFAULT 'MAKT'.
DATA: p_table TYPE tabname VALUE 'MAKT'.


START-OF-SELECTION.
* ALLE Schlüsselfelder von der zu suchenden Tabelle einfügen AUSSER dem Sprachfeld
  APPEND 'MANDT' TO keys.
  APPEND 'MATNR' TO keys.
*  APPEND 'SPRAS' TO keys.

  CREATE DATA dref TYPE HASHED TABLE OF (p_table) WITH UNIQUE KEY (keys).
  ASSIGN dref->* TO <t_en>.
  where_en = `SPRAS = 'E'`.

  CREATE DATA dref TYPE HASHED TABLE OF (p_table) WITH UNIQUE KEY (keys).
  ASSIGN dref->* TO <t_de>.
  where_de = `SPRAS = 'D'`.

  SELECT *
    INTO TABLE <t_en>
    FROM (p_table)
    WHERE (where_en).

  SELECT *
    INTO TABLE <t_de>
    FROM (p_table)
    WHERE (where_de).

* Prüfen ob zu jedem deutschen Eintrag ein engl. da ist
  LOOP AT <t_de> ASSIGNING <row_de>.
    READ TABLE <t_en> FROM <row_de> ASSIGNING <row_en>.
    IF sy-subrc <> 0.
      WRITE:/ 'Eintrag fehlt',
              <row_de>.
    ELSE.
* Löschen der Schlüsselfelder in <row_en> und <row_de> ( diesmal inkl. Sprachfeld )
* Schauen, ob der Rest nun gleich ist, da du das ja auch nicht haben willst
*        if gleich.
*        write:/ 'Eintrag identisch',
*                <row_de>.
*        endif.
    ENDIF.
  ENDLOOP.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Spookykid

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Überprüfung der Sprachpflege

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
vielen Dank euch Beiden. Ihr habt natürlich wie immer Recht. :D Ich hoffe, ich komme jetzt zum Ergebnis.

Merkwürdiges Programmverhalten

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Hallo zusammen,

ich habe den Code, der die Tabelle erstellt, befüllt und auswertet in folgende Methode implementiert.

Def:

Code: Alles auswählen.

class-methods filltable importing t_name type tabname
                                      REFERENCE(otab) type abap_sortorder_tab
                                      REFERENCE(ls_lang) type tabname.
Impl.

Code: Alles auswählen.

  method filltable.

    data:     dref type ref to data,
              keys TYPE STANDARD TABLE OF fieldname,
              key TYPE  fieldname,
              where_rlang type string,
              where_clang type string.

    data      error type ref to cx_root.


    field-symbols:  <t_rlang> type hashed table,
                    <t_clang>   type hashed table,
                    <row_rlang> type any,
                    <keys> type abap_sortorder,
                    <row_clang> type any.




* Wenn kein Sprachfeld vorhanden, muss die Tabelle nicht überprüft werden.
if ls_lang is INITIAL.
  return.
endif.

* Tabelle mit Keyfields befüllen.
  loop at otab ASSIGNING <keys>.
    key =  <keys>-name.
    append key to keys.
    clear key.
  endloop.




    call selection-screen 100.
    if sy-subrc ne 0.
      leave program.
    else.


*Referenzsprache-Tabelle erstellen, befüllen und sortieren.
  create data dref type hashed table of (t_name) with unique key (keys).
  assign dref->* to <t_rlang>.
  concatenate ls_lang ` = ` p_rlang into where_rlang. ""Sprachstring für select Statement zusammensetzen.

try.

  select *
    into table <t_rlang>
    from (t_name)
    where (where_rlang).


catch CX_SY_DYNAMIC_OSQL_SEMANTICS into error.

message error type 'I' DISPLAY LIKE 'E'.

endtry.

* Sollte die Tabelle leer sein, kann die nächste aufgerufen werden.
    if sy-subrc = 4.
       return.
    endif.

sort <t_rlang> by (otab).

*Customizingsprach-Tabelle erstellen, befüllen und sortieren.
  create data dref type hashed table of (t_name) with unique key (keys).
  assign dref->* to <t_clang>.

  concatenate ls_lang ` = ` p_clang into where_clang. ""Sprachstring für select Statement zusammensetzen.

try.


  select *
    into table <t_clang>
    from (t_name)
    where (where_clang).

catch CX_SY_DYNAMIC_OSQL_SEMANTICS into error.

message error type 'I' DISPLAY LIKE 'E'.

endtry.

 sort <t_clang> by (otab).

* Prüfen ob zu jedem deutschen Eintrag ein engl. da ist
  loop at <t_clang> assigning <row_clang>.
    read table <t_rlang> from <row_clang> assigning <row_rlang>.
    if sy-subrc <> 0.
      write:/ 'Eintrag fehlt',
              <row_clang>.
    else.
* Löschen der Schlüsselfelder in <row_en> und <row_de> ( diesmal inkl. Sprachfeld )
* Schauen, ob der Rest nun gleich ist, da du das ja auch nicht haben willst
*        if gleich.
*        write:/ 'Eintrag identisch',
*                <row_de>.
*        endif.
    endif.
  endloop.

endif.

endmethod.   
Komischerweise wird das Select nur ausgeführt, wenn ich bei der Sprachauswahl ZH auswähle, also z.B 'where SPRAS = 1'. Bei allen anderen Sprachen catched der die Exception und wirft mir folgende Message z.B
Could not interpret the value 'D
' <- Conversions Routine ISOLA wird korrekt angewendet.

Wieso funktioniert es nur bei der Sprache ZH?

Re: Überprüfung der Sprachpflege

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
hi!

Versuchen den Sprachenschlüssel in deiner Where-Klausel unter Hochkomma zu setzten

Code: Alles auswählen.

concatenate ls_lang ` = '` p_clang `'` into where_clang.
Möglicherweise hast auch ein Problem mit der einstelligen internen Darstellung und der zweistelligen ISO-Darstellung.

lg ADT

EDIT: Juhuuu... Das war mein 100er Post und damit bin ich "Specialist" 8)

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Spookykid

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Überprüfung der Sprachpflege

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
jo, dank dir... funktioniert ;-) In der Art hab ich auch schon gedacht. Wie war das?

`` sind für chars und ' ' für Strings?

Grüße und Dank
Spookykid

Re: Überprüfung der Sprachpflege

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
Jein!

' und ` haben grundsätzlich die gleiche Funktion. Meistens verwend ich ` um ein ' in einen String reinzupacken.
Großer unterschied zwischen den beiden ist, dass bei ` die schließenden Leerzeichen bei einem String-Concatenate erhalten bleiben. Etwas das man auch mit RESPECTING BLANKS erreicht.

Code: Alles auswählen.

concatenate `  ...  ` 'test' `  ...  ` into ld_string. 
* ==> '  ...  test  ...  ' 
concatenate '  ...  ' 'test' '  ...  ' into ld_string. 
* ==> '  ...test  ...'
concatenate '  ...  ' 'test' '  ...  ' into ld_string respecting blanks. 
* ==> '  ...  test  ...  ' 
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Überprüfung der Sprachpflege

Beitrag von black_adept (Top Expert / 4117 / 129 / 952 ) »
Spookykid hat geschrieben:jo, dank dir... funktioniert ;-) In der Art hab ich auch schon gedacht. Wie war das?

`` sind für chars und ' ' für Strings?

Grüße und Dank
Spookykid
Eigentlich genau umgekehrt.
' ' definiert ein Char-Literal, ` `ein Stringliteral
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Überprüfung der Sprachpflege

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Hallo zusammen,

kein Ende in Sicht.... :D

Ich will mal kurz weitere Schritte diskutieren:

Code: Alles auswählen.

* Prüfen ob zu jedem deutschen Eintrag ein engl. da ist
  LOOP AT <t_de> ASSIGNING <row_de>.
    READ TABLE <t_en> FROM <row_de> ASSIGNING <row_en>.
    IF sy-subrc <> 0.
      WRITE:/ 'Eintrag fehlt',
              <row_de>.
    ELSE.
* Löschen der Schlüsselfelder in <row_en> und <row_de> ( diesmal inkl. Sprachfeld )
* Schauen, ob der Rest nun gleich ist, da du das ja auch nicht haben willst
*        if gleich.
*        write:/ 'Eintrag identisch',
*                <row_de>.
*        endif.
    ENDIF.
  ENDLOOP.
Zum ersten Teil des Codes:

Die Logik dient ja weniger um herauszufinden, welcher Eintrag fehlt, als dass identische Datensätze herausgefunden werden können.
<row_de> enthält den kompletten Datensatz inkl. Text, dieser sollte ja in den beiden Tabellen auf Grund des Sprachenschlüssels identisch sein. Wird beim bei read Befehl das field-symbol assigned muss ja quatsch gecustomized worden sein.

Um zu überprüfen, ob ein Gegenstück zur gewählten Basissprache besteht darf man ja eigentlich nur die Schlüsselfelder vergleichen. Ich habe versucht dies so zu erreichen:

Code: Alles auswählen.

* Tabelle mit Keyfields (zur Sortierung) befüllen und zusäzlich das Spaltenstatement zur Datenbankabfrage befüllen.
    loop at otab assigning <keys>.
      key =  <keys>-name.
      concatenate keycolstring <keys>-name into keycolstring separated by space.
      append key to keys.
      clear key.
    endloop.


Diesen keycolstring habe ich dann bei der Spaltenauswahl im Select -Befehl eingetragen. Leider bekomme ich immer eine SQL Exception.
Löschen der Schlüsselfelder in <row_en> und <row_de> ( diesmal inkl. Sprachfeld )
* Schauen, ob der Rest nun gleich ist, da du das ja auch nicht haben willst
Wie kann ich denn aus einer bestehenden Tabelle ganze Felder löschen?

Sorry für die Umstände

Spookykid

Re: Überprüfung der Sprachpflege

Beitrag von black_adept (Top Expert / 4117 / 129 / 952 ) »
Spookykid hat geschrieben: [...]
Zum ersten Teil des Codes:

Die Logik dient ja weniger um herauszufinden, welcher Eintrag fehlt, als dass identische Datensätze herausgefunden werden können.
<row_de> enthält den kompletten Datensatz inkl. Text, dieser sollte ja in den beiden Tabellen auf Grund des Sprachenschlüssels identisch sein. Wird beim bei read Befehl das field-symbol assigned muss ja quatsch gecustomized worden sein.
[...]
Am Di 17 Mai 11 10:44 hast du genau diese Gleichheit als 2. Merkmal des "Nichtübersetzseins" definiert.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Überprüfung der Sprachpflege

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Ja richtig, es geht um den Code, den du einige Posts zuvor geschrieben hast. Dies soll keine Kritik sein, wollte nur darauf aufmerksam machen ;-)

Kannst du mir sagen, wie ich teile (Spalten) einer bestehenden ITAB lösche?

Re: Überprüfung der Sprachpflege

Beitrag von black_adept (Top Expert / 4117 / 129 / 952 ) »
DELETE
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Überprüfung der Sprachpflege

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
black_adept hat geschrieben:DELETE
Sorry, ich war etwas verwirrt wie der READ TABLE <itab> FROM <wa> <result> Befehl funktioniert. Ich dachte er würde sich einen eigenen Schlüssel aus dem kompletten Datensatz bilden. Diesen haben wir jedoch bei der Erstellung der Tabelle als unique key mitgegeben. :up:

Re: Überprüfung der Sprachpflege

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Spookykid hat geschrieben:Kannst du mir sagen, wie ich teile (Spalten) einer bestehenden ITAB lösche?
Nur so aus Neugier: Welchen praktischen Grund gibt es, Spalten in einer internen Tabelle zu löschen?

Re: Überprüfung der Sprachpflege

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Wie bereits im Post drüber geschrieben, dachte ich, der Schlüssel (READ TABLE ....FROM) würde sich aus der kompletten Zeile zusammensetzen. Die Ansicht der Zeile im Debugger war ein zusammenhängendes Literal aus allen Spalten der Tabelle. Ich bin diesem Denkfehler erst auf die Spur gekommen, als beim READ Befehl eine - vermeindlich unterschiedliche Zeile - gelesen und assigned wurde.

Vergleichbare Themen

12
Antw.
11987
Views
URL Überprüfung
von Luigi91 » 28.03.2014 07:55 • Verfasst in ABAP Objects®
0
Antw.
967
Views
Überprüfung von Feldinhalten
von KLeinerj » 01.12.2005 07:58 • Verfasst in ABAP® Core
0
Antw.
1169
Views
1
Antw.
1609
Views
Überprüfung ob FUBA vorhanden ist
von nkuhn » 02.02.2007 07:40 • Verfasst in Basis
2
Antw.
2009
Views
Überprüfung der Materialreservierung für Kundenauftrag
von cuncon » 07.11.2017 08:16 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Mahnung erstellen
vor 11 Stunden von wreichelt 2 / 33
Absprung VA02 Position
vor 13 Stunden von gs3rr4 gelöst 3 / 42
OPD Druck im SPOOL
vor 15 Stunden von Manfred K. 1 / 26

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Mahnung erstellen
vor 11 Stunden von wreichelt 2 / 33
Absprung VA02 Position
vor 13 Stunden von gs3rr4 gelöst 3 / 42
OPD Druck im SPOOL
vor 15 Stunden von Manfred K. 1 / 26

Unbeantwortete Forenbeiträge

OPD Druck im SPOOL
vor 15 Stunden von Manfred K. 1 / 26
Export von Spools in XLSX
vor 5 Tagen von abapamateur 1 / 431