Mein Anteil, Dein Anteil

Im Umfeld der Systemadministration wird häufig die Forderung erhoben, Inhalte von SAP-Tabellen einem kontinuierlichen automatischen Monitoring zu unterziehen. Die Tabelleninhalte sind dabei Bestandteil verschiedenster Überwachungsperspektiven, z.B. zur Ermittlung von Fehleranteilen bzw. einfach nur zur Feststellung von bestimmten Verhältnissen oder die Gesamtanzahl von Datensätzen in einer Tabelle. Aus den Ergebnissen leiten sich dann Aktivitäten ab, z.B. ein Alarm der zu manuellen Aktionen führt oder einfach nur zum Versandt einer E-Mail.

Im Umfeld der Systemadministration wird häufig die Forderung erhoben, Inhalte von SAP-Tabellen einem kontinuierlichen automatischen Monitoring zu unterziehen. Die Tabelleninhalte sind dabei Bestandteil verschiedenster Überwachungsperspektiven, z.B. zur Ermittlung von Fehleranteilen bzw. einfach nur zur Feststellung von bestimmten Verhältnissen oder die Gesamtanzahl von Datensätzen in einer Tabelle. Aus den Ergebnissen leiten sich dann Aktivitäten ab, z.B. ein Alarm der zu manuellen Aktionen führt oder einfach nur zum Versandt einer E-Mail.

Der folgende Code ist ein remote-fähiger Funktionsbaustein (FM), dem als Argument ein Tabellenname und zwei optionale SQL-Bedingungen übergeben werden müssen. Die erste SQL-Bedingung kann zur Einschränkung der Basismenge genutzt werden. Wird hier keine SQL-Bedingung übergeben, so wird die gesamte Anzahl aller Datensätze des übergebenen Tabellennamens verwendet. Mit der zweiten SQL-Bedingung wird dann die Menge an Datensätzen ermittelt, deren Verhältnis ermittelt werden soll. Wird gar keine SQL-Bedingung übergeben, so wird einfach nur die Gesamtanzahl der Datensätze in der Tabelle ermittelt.


Wichtig: In den Eigenschaften Remote fähiger Baustein aktivieren


Importparameter

Die Rückgabewerte sind dann die entsprechende Gesamtanzahl, sowie die Anzahl der Datensätze die der zweiten SQL-Bedingung entsprechen und deren Verhältnis zueinander in Prozent.


Rückgabewerte

Mit diesem RFC-fähigen FM wird ein einfacher Ansatz geboten, ein externes Monitoring flexibel und simpel zu realisieren. So können nun z.B. via Java Connector (JCo) SAP-Tabellen periodisch abgefragt und aus den Ergebnissen Aktivitäten im Rechenzentrum abgeleitet werden.


Das Ergebnis einer Beispielverarbeitung

„-Begin—————————————————————–
Function zCountTableEntries.
*“———————————————————————-
*“*“Local Interface:
*“  IMPORTING
*“     VALUE(TABLENAME) TYPE  STRING
*“     VALUE(SQL_CONDITION_ALL) TYPE  STRING OPTIONAL
*“     VALUE(SQL_CONDITION_SEL) TYPE  STRING OPTIONAL
*“  EXPORTING
*“     VALUE(COUNT_ALL) TYPE  I
*“     VALUE(COUNT_SEL) TYPE  I
*“     VALUE(SEL_TO_ALL_PERCENT) TYPE  F
*“  EXCEPTIONS
*“      TABLE_NOT_EXISTS
*“      NO_TABLE_ENTRIES
*“      ERROR_IN_SQL_CONDITION
*“———————————————————————-  „-Important hint—————————————————-
„-
„- Don’t forget to set the Remote-Enabled Module attribute
„-
„——————————————————————-

    „-Interface———————————————————
    „-
    „- Importing
    „- TABLENAME = Name of the table
    „- SQL_CONDITION_ALL = SQL condition for the table
    „- SQL_CONDITION_SEL = SQL condition for the selection
    „-
    „- Exporting
    „- COUNT_ALL = Count of all table entries
    „- COUNT_SEL = Count of selected entries
    „- SEL_TO_ALL_PERCENT = Proportion of selected to all entries
    „-
    „——————————————————————-

    „-Variables———————————————————
      Data Count_Tab Type i Value 0.
      Data oRef Type Ref To cx_root.

    „-Main————————————————————–

      „-Hint————————————————————
      „-
      „- Don’t forget to implement Authority-Check Object
      „-
      „—————————————————————–

      Select Count( Distinct TABNAME ) Into Count_Tab From DD02L
        Where TABNAME = TABLENAME And TABCLASS = ‚TRANSP‘.
      If sy-subrc = 0 And Count_Tab = 1.

        If SQL_CONDITION_ALL Is Initial.
          Select Count(*) Into COUNT_ALL From (TABLENAME).
        Else.
          Select Count(*) Into COUNT_ALL From (TABLENAME)
            Where (SQL_CONDITION_ALL).
        EndIf.

        If SQL_CONDITION_SEL Is Not Initial.
          If sy-subrc = 0 And COUNT_ALL > 0.

            Try.
              Select Count(*) Into COUNT_SEL From (TABLENAME)
                Where (SQL_CONDITION_SEL).
              If sy-subrc = 0.
                SEL_TO_ALL_PERCENT = ( COUNT_SEL / COUNT_ALL ) * 100.
              EndIf.
            Catch cx_root Into oRef.
              Raise ERROR_IN_SQL_CONDITION.
            EndTry.

          Else.
            Raise NO_TABLE_ENTRIES.
          EndIf.
        EndIf.

      Else.
        Raise TABLE_NOT_EXISTS.
      EndIf.

  EndFunction.

„-End——————————————————————-

image_pdfimage_print