Tabellen-Logs manuell auslesen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Tabellen-Logs manuell auslesen

Beitrag von Shaguar (ForumUser / 20 / 0 / 0 ) »
Hi zusammen,

ich habe bei meinem Tabellen die Protokollierung aktiviert ("Datenänderung Protokollieren") und wollte mir dann diese Protokolle einmal anschauen.
Doch zunächst habe ich über die Transaktion SCU3 keine Protokolle zu meiner Tabelle sehen können und habe dann gedacht das dann wohl der Parameter rec/client im SAP System nicht meinen Mandanten aktiviert ist. Dieser war aber korrekt gesetzt aber trotzdem konnte ich keine Logs für meine Tabelle einsehen. Habe dann in einem Forum Beitrag hier gelesen das zwar protokolliert wird wenn beide Punkte gesetzt sind (Haken bei Änderung protokollieren und rec/client Parameter richtig gesetzt) aber man kann die Logs nicht einsehen, zumindest nicht über SCU3, solange man in der Tabelle TDDAT keinen Eintrag hat in der der eigenen Tabelle ein Berechtigsobjekt zugewiesen wurde. Diese entscheidene Zeile soll wohl automatisch angelegt werden sobald man für die eigene Tabelle ein Pflegereport (SM30) automatisch genieren lässt. Da ich das aber nicht benötige habe ich mal manuell ein Eintrag in der TDDAT Tabelle angelegt und dann konnte ich plötzlich auch alle Protokolle über SCU3 einsehen. Aber das kann ja nicht so gedacht sein?! Wie ist denn da der "offizielle" Weg damit ich meine Änderungsprotokolle für meine Tabellen einsehen kann?

Dann würde mich noch interessieren ob es einen Funktionsbaustein oder ähnliches gibt mit dem ich auf die Protokolle gezielt zugreifen kann. Also ich möchte gerne die Protokolle auswerten und in SCU3 kann ich ja ausser dem Tabellennamen keine Selektionskriteren angeben. Hinterher kann ich im Grid natürlich ein Filter setzen aber ich möchte vorher schon das mir zB nur ein bestimmter Benutzer angezeigt wird und nur wenn ein anderes Feld einen bestimmten Wert hat etc. Gibt es dafür eine Lösung oder muss ich manuell auf die Protokolldatenbank zugreifen? und wenn ja in welcher DB Tabelle liegen denn die ganzen Protokolle? Ich habe in der SAP Hilfe gelesen das die Daten in der DBTABPRT Tabelle liegen, aber dort kann ich leider überhaupt nicht finden? Werden die Daten da eventuell irgendwie ausgeblendet? oder ist das einfach die falsche Tabelle?

Gruß

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


Re: Tabellen-Logs manuell auslesen

Beitrag von JHM (Top Expert / 1211 / 2 / 202 ) »
Shaguar hat geschrieben:Ich habe in der SAP Hilfe gelesen das die Daten in der DBTABPRT Tabelle liegen, aber dort kann ich leider überhaupt nicht finden? Werden die Daten da eventuell irgendwie ausgeblendet? oder ist das einfach die falsche Tabelle?
- ST05 -> Trace mit Filter einschalten für User und SCU3
- SCU3 aufrufen und Tabellenprotokolle auswerten
- ST05 -> Trace ausschalten, dann Trace anzeigen

Über die verwendeten Tabellen querlesen und sich die markanten anschauen. DB-Tabelle DBTABLOG springt ins Augen und hört sich gut an. SE16 liefert einige Millionen Einträge, mit SE16 kann man sich diese anschauen.
Mittels Verwendungsnachweis prüfen, ob die Tabelle in einem FuBa verwendet wird (scheint hier nicht der Fall, wo meine Suche relativ kurz war).
Gruß Hendrik

Re: Tabellen-Logs manuell auslesen

Beitrag von Tron (Top Expert / 1327 / 35 / 333 ) »
Moin,
ich denke Hendrik hat recht, die Tabellenänderungen werden in der Tabelle DBTABLOG abgelegt.
WICHTIG: Nachdem die Haken für die Tabellenänderungsaufzeichnung gesetzt wurden,
muß zusätzlich Deine Tabelle mit SE14 , Option "Aktivieren und Daten anpassen" aktiviert werden, sonst gehts nicht !
Beispiel zum lesen der RAW Daten:

Code: Alles auswählen.

DATA log TYPE dbtablog.
DATA ls_log TYPE ylog.  " struktur DBTABLOG + Deine Tabelle


DATA:
  buffer TYPE xstring,
  conv TYPE REF TO cl_abap_conv_in_ce.

*---------------------------------------------------------------------*
*       MAIN                                                          *
*---------------------------------------------------------------------*


PARAMETERS date TYPE sy-datum DEFAULT sy-datum.

SELECT * FROM dbtablog INTO log
WHERE
tabname = 'Deine Tabelle' AND
logdate GE date.

  CLEAR ls_log.
  MOVE-CORRESPONDING log TO ls_log.

  conv = cl_abap_conv_in_ce=>create(
           encoding = 'DEFAULT'
           endian = 'L'
           input = log-logdata
         ).

*MANDT 3 Character
  CALL METHOD conv->read(
    EXPORTING n    = 3
    IMPORTING data = ls_log-mandt
  ).
  
*TPLNR 30 Character
  CALL METHOD conv->read(
    EXPORTING n    = 30
    IMPORTING data = ls_log-tplnr
  ).  
  
  *BRGT Decimal Feld
  CALL METHOD conv->read(
    IMPORTING data = ls_log-brgt
  ).
  
  
     etc.
  
     etc.
  
  
    FREE conv.

  APPEND ls_log TO gt_log.

ENDSELECT.
lg Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Tabellen-Logs manuell auslesen

Beitrag von Shaguar (ForumUser / 20 / 0 / 0 ) »
Hi,

erstmal vielen Dank, das ist das was ich gesucht habe!
Aber ein kleines Problem hab ich da noch, diese Lesefunktionen

Code: Alles auswählen.

*MANDT 3 Character
  CALL METHOD conv->read(
    EXPORTING n    = 3
    IMPORTING data = ls_log-mandt
liefern mir zwischen jedem Zeichen eine Raute, also im Mandt Feld steht statt 060 -> #0#
oder in einem anderen Feld steht statt "Test" dann "#T#e#s#t#".
Ist das ein Problem der Zeichencodierung? oder woran könnte das noch liegen?

Gruß

Re: Tabellen-Logs manuell auslesen

Beitrag von Tron (Top Expert / 1327 / 35 / 333 ) »
Moin,
ja, das Beispiel stammt aus einem Non-Unicodesystem (4.7).
Sieh Dir mal den Rückgabewert in der Hex. Anzeige an.
gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Tabellen-Logs manuell auslesen

Beitrag von Shaguar (ForumUser / 20 / 0 / 0 ) »
Ok hab ich gemacht, aber das hilft mir grad nicht sonderlich. Das steht das gleiche in Hex drin. (Mit Rauten -> als Hex 00)

Re: Tabellen-Logs manuell auslesen

Beitrag von Shaguar (ForumUser / 20 / 0 / 0 ) »
Also ich bin auf dem Weg nicht weitergekommen, aber ich habe nochmal einen anderen Ansatz verfolgt.
Ich habe ein Programm gefunden welches die Transaktion SCU3 aufruft und dort geschaut wie da das logdata Feld ausgelesen wird.

Code: Alles auswählen.

*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(IM_LOGDATA) TYPE  ANY
*"     REFERENCE(IM_FIELDTAB) TYPE  DFIES
*"  CHANGING
*"     REFERENCE(IM_FIELD) TYPE  ANY
*"----------------------------------------------------------------------

   FIELD-SYMBOLS: <p_field_x> TYPE x, <field> TYPE x.

   ASSIGN <p_field_x> TO <field> CASTING.
   ASSIGN im_logdata+im_fieldtab-offset(im_fieldtab-intlen) TO <field> CASTING.
   <p_field_x> = <field>.
Das funktioniert bei mir auch mehr oder weniger, mit einem Haken allerdings.
Ich muss den FBS mit der Variablen im_field aufrufen, die den Typ der Variable haben muss welche ich in den Logdaten auslesen möchte.
Manuell könnte ich natürlich den richtigen DatenType setzen und übergeben, aber ich habe ja eine Art Fieldcatalog, ich iteriere also über die Felder meiner
Struktur, dort steht in einer bestimmten Spalte der Typ als String und aus diesem "String-Typen" muss ich jetzt eine echte Variable erzeugen. Habe leider keine Ahnung wie sowas geht.
(Nochmal zum Verständnis: Mal angenommen ich möchte als ersten den Mandanten aus dem Log-Feld auslesen. In meinem Fieldkatalog steht in der Spalte Datatype also 'MANDT' und nun möchte ich aus diesem Text eine echte Variable vom Typ MANDT erzeugen. Irgendwie soll das wohl mit ASSIGN COMPONENT gehen.. aber genaueres weiß ich nicht)

Gruß

Re: Tabellen-Logs manuell auslesen

Beitrag von JHM (Top Expert / 1211 / 2 / 202 ) »
Shaguar hat geschrieben: (Nochmal zum Verständnis: Mal angenommen ich möchte als ersten den Mandanten aus dem Log-Feld auslesen. In meinem Fieldkatalog steht in der Spalte Datatype also 'MANDT' und nun möchte ich aus diesem Text eine echte Variable vom Typ MANDT erzeugen. Irgendwie soll das wohl mit ASSIGN COMPONENT gehen.. aber genaueres weiß ich nicht)
Du kennst ja den Tabellennamen, für den du eine Struktur brauchst. Mittels CREATE DATA und ASSING COMPONENT kann man dann den Zugriff realisieren.
Beispiel:

Code: Alles auswählen.

REPORT  ztest.

PARAMETERS: p_tname TYPE dd02l-tabname VALUE CHECK DEFAULT 'MARA'.

DATA: gs_data TYPE REF TO data.
FIELD-SYMBOLS: <gs_data> TYPE ANY,
               <gv_field> TYPE ANY.

DATA: gt_fcat TYPE lvc_t_fcat,
      gs_fcat TYPE lvc_s_fcat.

START-OF-SELECTION.

* Struktur erzeugen
  CREATE DATA gs_data TYPE (p_tname).
* Dereferenzieren
  ASSIGN gs_data->* TO <gs_data>.

* FieldCat besorgen
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
   EXPORTING
*   I_BUFFER_ACTIVE              =
     i_structure_name             = p_tname
*   I_CLIENT_NEVER_DISPLAY       = 'X'
*   I_BYPASSING_BUFFER           =
*   I_INTERNAL_TABNAME           =
    CHANGING
      ct_fieldcat                  = gt_fcat
   EXCEPTIONS
     inconsistent_interface       = 1
     program_error                = 2
     OTHERS                       = 3
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

* Für jedes Feld der Struktur,  einen FuBa aufrufen
  LOOP AT gt_fcat INTO gs_fcat.
    ASSIGN COMPONENT gs_fcat-fieldname OF STRUCTURE <gs_data> TO <gv_field>.
* CALL FUNCTION für das Feld
  ENDLOOP.
Gruß Hendrik

Re: Tabellen-Logs manuell auslesen

Beitrag von Shaguar (ForumUser / 20 / 0 / 0 ) »
Super, Danke! Funktioniert einwandfrei.
Ein Frage hätte ich da jetzt noch: Mit dem FBS 'GET'_FIELDTAB' hol ich mir die Strukturinformationen zu meine Tabelle,
da steht dann alles zu den Tabellenfelder drin, wie Name, Länge, Offset etc pp
Aber natürlich nur so wie die Tabelle aktuell strukturiert ist, wenn ich jetzt aber aus der Logtabelle ein Log lade bei dem die Tabelle noch
eine andere Struktur hatte dann kommt beim auslesen natürlich nur Unsinn heraus. Kann ich mir die Struktur der Tabelle auch für einen
bestimmten Zeitpunkt holen? Ich bräuchte einen FBS nach dem Motto 'Gib mir mal die Tabelleninformation für den Zeitpunkt xx.xx.xxxx', also genau wie GET_FIELDTAB nur das man noch ein Datum mit übergeben kann für das dann die korrekten Informationen geladen werden.

Gruß

Re: Tabellen-Logs manuell auslesen

Beitrag von Shaguar (ForumUser / 20 / 0 / 0 ) »
Also das Problem mit der Historie besteht immer nocht.
Kennt dafür irgendjemand eine Lösung?

Gruß

Re: Tabellen-Logs manuell auslesen

Beitrag von edwin (Specialist / 306 / 11 / 68 ) »
Hi,
um die Strukturen zu einem bestimmten Zeitpunkt zu ermitteln, gibt es den FB:

DD_NTAB_HIST_GET


/Edwin

Re: Tabellen-Logs manuell auslesen

Beitrag von Shaguar (ForumUser / 20 / 0 / 0 ) »
Vielen Danke,
genau das habe ich gesucht!

Seite 1 von 1

Vergleichbare Themen

22
Antw.
10025
Views
Daten aus mehreren Tabellen auslesen
von phil1982 » 07.08.2007 15:13 • Verfasst in ABAP® für Anfänger
1
Antw.
2865
Views
interne Tabelle von 13 DB Tabellen auslesen
von oyosh » 11.08.2012 20:26 • Verfasst in ABAP® für Anfänger
1
Antw.
1956
Views
Tabellen-Spalten auslesen/anzeigen lassen
von Lamerman » 06.04.2006 14:10 • Verfasst in Web-Dynpro, BSP + BHTML
17
Antw.
8254
Views
Spalten Interner Tabellen nacheinander auslesen.
von JulDen » 13.02.2018 18:33 • Verfasst in ABAP® für Anfänger
5
Antw.
2328
Views
SPALTEN INTERNER TABELLEN NACHEINANDER AUSLESEN mit einer lOOP.
von Geny » 15.06.2020 15:47 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

RFC vs. ODATA
vor 10 Stunden von DeathAndPain 8 / 820
FUBA 'HR_INFOTYPES_OPERATION'
vor 10 Stunden von DeathAndPain 2 / 202
Frage zur redefinierten Methode
vor 2 Tagen von ralf.wenzel 12 / 1201

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.