Die DSGVO mit SAP ILM

SAP ILM, eigene Konstanten für Zeitbezüge der Aufbewahrungsregeln definieren

Wozu dienen Aufbewahrungsregeln?

Im Rahmen der EU-DSGVO werden Unternehmen unter anderem dazu verpflichtet Informationen, die sich auf identifizierbare oder identifizierte Personen beziehen nur so lange aufzubewahren, solange eine rechtliche Grundlage zur Aufbewahrung besteht.

In SAP Systemen können mit dem ILM (Information Lifecycle Management) Aufbewahrungsregeln definiert werden, die dazu dienen Informationen zu Personen, nach festgelegten Regeln zu löschen.

Im Standard des SAP ILM sind für die Aufbewahrungsregeln eines jeden ILM-Objekts Konstanten definiert, die sich auf bestimmte Felder einer Datenbanktabelle beziehen. Über diese kann das Löschdatum für die entsprechenden Datensätze bestimmt werden.

In unserem Beispiel aus dem SAP CRM für das ILM Objekt „CRM_ACT_ON“ (Aktivitäten) ist es das Vertragsendedatum. Dieses verweist auf das Feld DATE_2 der Tabelle CRMD_ORDER_INDEX. Da es sich bei dem Vertragsendedatum nicht um ein Pflichtfeld handelt, kann es vorkommen, dass für Aktivitäten dieser Wert nicht gefüllt ist. Kann für den Zeitbezug einer Aufbewahrungsregel kein Datum ermittelt werden, führt das im einem Löschlauf des ILM zu einem Fehler und die entsprechende Aktivität kann nicht gelöscht werden.
Aus diesem Grund kann es erforderlich werden eigene Konstanten für Zeitbezüge zu erstellen.

Erstellen einer IRM-Konstante für den Zeitbezug

Zunächst rufen wir die Transaktion „IRM_CUST“ (Einstellungen für ILM Objekte vornehmen) auf.
Nun führen wir einen Doppelklick auf den Ordner Zeitbezüge für Beginnermittlung aus.
Neue Einträge auswählen und einen Variablennamen (hier: Z_CED_LCD) nebst Bezeichner für die neue IRM Konstante eingeben.

Wir speichern unsere Änderung. Gegebenenfalls muss nun noch ein Transportauftrag angelegt oder angegeben werden

Konstante für Zeitbezug dem ILM-Objekt zuordnen

Im nächsten Schritt klicken wir auf den Ordner „Objektkategorien“ und selektieren den Eintrag OT_FOR_BS mit dem Bezeichner SAP Business Suite

Danach führen wir einen Doppelklick auf den Ordner ILM-Objekte aus und selektieren in dem Fenster, das sich dann öffnet das ILM Objekt, für das unsere neue Konstante für den Zeitbezug verwendet werden soll.

Nun wählen wir den Ordner verfügbare Zeitbezüge. Wir fügen einen neuen Eintrag hinzu. Hierzu können wir die Wertehilfe verwenden über die unsere neue Konstante für den Zeitbezug auswähbar sein sollte.

Wertermittlung der Konstante für Zeitbezug festlegen

Wir müssen nun wieder zum Ordner ILM-Objekte navigieren und sicherstellen, dass das richtige ILM-Objekt, hier „CRM_ACT_ON“, selektiert ist.
Danach einen Doppelklick auf den Ordner „Objektkategoriespezifische Einstellungen“ ausführen.
In dem neuen Bildschirm der sich öffnet, erneut unser ILM-Objekt selektieren.

Im folgenden Schritt legen wir über die Wertermittlung für Zeitbezüge fest, wie wir den Wert ermitteln möchten. Es stehen uns die indirekte oder die direkte Wertermittlung zur Verfügung. Die direkte Wertermittlung können wir verwenden, wenn der Wert des Feldes unserer Datenbanktabelle direkt übernommen werden kann.
In unserem Fall möchten wir die indirekte Wertermittlung verwenden. Dafür muss später noch das BADI „BADI_IRM_OT_STT“ mit der Methode „GET_START_DATE“ implementiert werden. Die indirekte Wertermittlung macht Sinn, wenn wir Werte berechnen müssen oder wie in unserem Fall initiale Werte vermieden werden müssen, da dies zu Fehlern beim Löschvorgang führen würde.

ILM Aufbewahrungsregel anpassen

Jetzt kümmern wir uns um die eigentliche ILM Aufbewahrungsregel. Hierzu starten wir die Transaktion „IRMPOL“ zur Definition der ILM Regelwerke. Es öffnet sich im Browser eine WebUI Transaktion.
Dort müssen wir zunächst einmal als Regelkategorie „Aufbewahrungsregeln“, als Objektkategorie „SAP Business Suite“, das für unser System definierte Prüfgebiet und das ILM-Objekt auswählen.

Wenn wir schon Regeln angelegt hatten, wovon wir in diesem Fall ausgehen, werden im folgenden Bildschirm alle Regeln für das ILM Objekt angezeigt. Dort wählen wir „Bearbeiten“ klicken danach auf „Status ändern“. Es öffnet sich ein Popup, ob der Status wirklich auf „nicht produktiv“ gesetzt werden soll, das wir mit „Ja“ bestätigen. Danach werden wir per Popup aufgefordert einen Transportauftrag auszuwählen oder neu anzulegen. Nachdem wir dies getan haben, können wir unser im Customizing angelegtes Feld „Vertragsende mit Fallback falls initial für die definierten Zeitbezüge auswählen.

Nun sichern wir unsere Arbeit und klicken erneut auf „Status ändern“. Wir bekommen wie im folgenden Screen ein Popup angezeigt in welchem gefragt wird, ob der Status auf „produktiv“ gesetzt werden soll. Hiermit haben wir dann alle notwendigen Customizing Einstellungen vorgenommen.

Implementierung „BADI_IRM_OT_STT“, Methode „GET_START_DATE“

Bei der Implementierung muss darauf geachtet werden die Filterwerte für das BADI richtig zu setzen.
Als Objektkategorie ist „OT_FOR_BS“ (SAP Business Suite) und als Objekttyp das ILM-Objekt, in diesem Fall „CRM_ACT_ON“, zu wählen.

Nun gilt es noch die Implementierung der Methode „GET_START_DATE“ auszuführen. Der Wert des Feldes, das wir im Customizing definiert haben, wird uns in der Datenreferenz IR_SOURCE_FIELDS übergeben.

Nachfolgend unser Beispielcoding aus einem SAP CRM System. In diesem Fall wird bei initialem Wert in der Tabelle CRMD_ORDER_INDEX für das Feld DATE_2 als Fallback ein Wert aus der Tabelle CRMD_ORDERADM_H aus dem Feld CHANGED_AT verwendet.

  DATA: lr_data       TYPE REF TO data,
        lv_date       TYPE comt_changed_at_usr,
        lv_zonlo      TYPE sy-zonlo.

  FIELD-SYMBOLS:
    <lt_source_fields> TYPE if_lrm_bs_types=>ty_th_tabname_fieldname_values,
    <ls_source_fields> TYPE if_lrm_bs_types=>ty_s_tabname_fieldname_values,
    <lv_guid>          TYPE crmt_object_guid.

  CASE iv_start_time_type.
    WHEN 'Z_CED_LCD'.
      ASSIGN ir_source_fields->* TO <lt_source_fields>.
      IF sy-subrc <> 0.
        RAISE EXCEPTION TYPE cx_irm_callback_int_error
          EXPORTING
            textid         = cx_irm_callback_int_error=>callback_fieldvalue_missing
            mv_class       = 'ZCL_IM_BADI_IRM_OT_STT_ACT_ON'       "#EC NOTEXT
            mv_method      = 'GET_START_DATE'               "#EC NOTEXT
            mv_object_type = 'CRM_ACT_ON'                    "#EC NOTEXT
            mv_field_name  = 'Z_CED_LCD'.                      "#EC NOTEXT
      ENDIF.
      READ TABLE <lt_source_fields> ASSIGNING <ls_source_fields>
        WITH KEY v_table_name = 'CRMD_ORDERADM_H' v_field_name = 'GUID'.

      IF sy-subrc IS INITIAL.
        READ TABLE <ls_source_fields>-t_field_value INDEX 1 INTO lr_data.
        IF sy-subrc = 0.
          ASSIGN lr_data->* TO <lv_guid>.
        ELSE.
          RAISE EXCEPTION TYPE cx_irm_callback_int_error
            EXPORTING
              textid         = cx_irm_callback_int_error=>callback_fieldvalue_missing
              mv_class       = 'ZCL_IM_BADI_IRM_OT_STT_ACT_ON'     "#EC NOTEXT
              mv_method      = 'GET_START_DATE'             "#EC NOTEXT
              mv_object_type = 'CRM_ACT_ON'                  "#EC NOTEXT
              mv_field_name  = 'Z_CED_LCD'.                    "#EC NOTEXT
        ENDIF.
      ELSE.
        RAISE EXCEPTION TYPE cx_irm_callback_int_error
          EXPORTING
            textid         = cx_irm_callback_int_error=>callback_fieldvalue_missing
            mv_class       = 'ZCL_IM_BADI_IRM_OT_STT_ACT_ON'       "#EC NOTEXT
            mv_method      = 'GET_START_DATE'               "#EC NOTEXT
            mv_object_type = 'CRM_ACT_ON'                   "#EC NOTEXT
            mv_field_name  = 'Z_CED_LCD'.                      "#EC NOTEXT
      ENDIF.
      SELECT SINGLE date_2 FROM crmd_order_index
        INTO lv_date
        WHERE header EQ <lv_guid>.
      IF sy-subrc NE 0.
        "should not happen
      ENDIF.
      IF lv_date IS INITIAL.
        SELECT SINGLE changed_at FROM crmd_orderadm_h
          INTO lv_date
          WHERE guid EQ <lv_guid>.
        IF sy-subrc NE 0.
          "should not happen.
        ENDIF.
      ENDIF.
      ev_start_date = lv_date.
  ENDCASE.
Jetzt haben wir alle notwendigen Einstellungen und Implementierungen zur Verwendung unseres eigenen Feldes in den Aufbewahrungsregel des ILM vorgenommen.

Ich hoffe es hat Spaß gemacht und Ihr schaut mal wieder vorbei.

Hinterlasse einen Kommentar