Änderungsparameter 

Verwendung

In BAPIs, die Änderungen auf der Datenbank hervorrufen, z.B. Change()- und Create()-BAPIs, muß man zwischen den Parameterfeldern unterscheiden können, die geändert werden sollen (den "änderungsrelevanten Feldern"), und denen, die unverändert bleiben sollen.

Zu diesem Zweck genügt die Verwendung eines Initialwerts nicht, da es sich bei dem Initialwert auch um einen gültigen, neuen Wert handeln kann. Ebensowenig kann in der ABAP-Programmiersprache und auch auf anderen Entwicklungsplattformen einem Datentyp der Wert "NULL" zugewiesen werden um ein Feld als nicht belegt zu markieren.

Um in einem Change()- oder Create()-BAPI die Felder mit änderungsrelevanten Informationen zu identifizieren, werden deshalb standardisierte Änderungsparameter eingesetzt. Sie können hierbei zwei unterschiedliche Strategien verwenden:

Identifizieren der änderungsrelevanten Felder durch Markierung

In diesem Ansatz werden änderungsrelevante Felder in einem Parameter durch eine entsprechende Markierung in einem zusätzlichen Änderungs-Parameter identifiziert:

Auf diese Weise kann das BAPI genau identifizieren, welche Felder des Parameters modifizierte Daten enthalten, und in welchen Feldern keine Änderungen vorgenommen wurden.

Beachten Sie folgende Konventionen, wenn Sie Änderungs-Parameter anlegen:

Dieser Wert bedeutet, daß das zugehörige Feld im Parameter einen änderungsrelevanten Wert enthält.

Kein Wert bedeutet, daß das entsprechende Feld des Parameters nicht aktualisiert werden muß.

Mit einem Change()-BAPI soll der bestehende Vertriebsweg Distr_Chan auf den neuen Wert Distr_Chan="US" geändert werden. Die änderungsrelevanten Felder sollen dabei durch Markierung identifiziert werden.

Die von dieser Änderung betroffenen Programmierobjekte im R/3-System sind:

Programmierobjekt

Bezeichnung

SAP-Business-Objekttyp

PieceOfEquipment

BAPI

Change

Parameter

EquiSales

Felder des Parameters EquiSales

SalesOrg=0001'

 

Distr_Chan='US'

 

Division='Marketing'

Änderungs-Parameter, der die änderungsrelevanten Felder identifiziert

EquiSalesX

Felder des Parameters EquiSalesX

SalesOrg=' '

 

Distr_Chan='X'

 

Division=' '

 

Im Parameter EquiSalesX hat das Feld Distr_Chan den Wert 'X'. Dies signalisiert, daß das Feld Distr_Chan des Original-Parameters EquiSales einen Wert enthält ('US'), der änderungsrelevant ist.

Das BAPI Change() wird dadurch veranlaßt, den bestehenden Wert des Feldes Distr_Chan mit dem aktuellen Wert des Feldes Distr_Chan im Original-Parameter EquiSales zu überschreiben.

Identifizieren der änderungsrelevanten Felder durch Vergleich

In diesem Ansatz werden änderungsrelevante Felder durch den Vergleich zweier Parameter identifiziert, von denen der eine die aktuell gültigen Daten und der andere die neuen, geänderten Daten enthält.

Beim Aufruf des Change()-BAPIs müssen die aktuellen Daten aus der Datenbank sowie die neuen, geänderten Daten in die entsprechenden Parameter eingetragen werden. Der aktuelle Datenbestand kann dabei beispielsweise aus dem vorausgegangenen Aufruf eines GetDetail()-BAPIs übernommen werden.

Folgende Vergleiche sind nun möglich:

Beachten Sie folgendes, wenn Sie änderungsrelevante Felder durch Vergleich identifizieren:

Heißt der Parameter mit den aktuell gültigen Daten beispielsweise EquiSales, ist der Name des Parameters mit den geänderten Daten EquiSalesNew.

Mit einem Change()-BAPI soll der bestehende Vertriebsweg Distr_Chan="US" auf den neuen Wert Distr_Chan="EN" geändert werden. Die änderungsrelevanten Felder sollen dabei durch Vergleich identifiziert werden.

Die von dieser Änderung betroffenen Programmierobjekte im R/3-System sind:

Programmierobjekt

Bezeichnung

SAP-Business-Objekttyp

PieceOfEquipment

BAPI

Change

Parameter

EquiSales

Felder des Parameters EquiSales

SalesOrg='0001'

 

Distr_Chan='US'

 

Division='Marketing'

Parameter für die neuen Daten

EquiSalesNew

Felder des Parameters EquiSalesNew

SalesOrg=' 0001'

 

Distr_Chan='EN'

 

Division=' Marketing'

 

Der Vergleich kann folgendermaßen geschehen:

    1. Füllen des Parameters EquiSales mit den Daten aus dem Aufruf des entsprechenden GetDetail()-BAPIs.
    2. Initialisieren des Parameters EquiSalesNew mit den Werten aus dem Parameter EquiSales.
    3. Ändern der gewünschten Parameterwerte im Parameter EquiSalesNew, z.B. EquiSalesNew-Distr_Chan='EN'.

Vergleich der beiden Ansätze

Folgende Tabelle vergleicht die oben beschriebenen Möglichkeiten, änderungsrelevante Felder in BAPIs zu identifizieren und soll als Entscheidungshilfe dienen.

Bereich

Bemerkung

Performance

Identifikation durch Markierung: Die Flag-Tabelle ist gut komprimierbar. Kein Lesen von Vergleichsdaten ist nötig.

Bei der Verwendung im verteilten Umfeld (ALE) wird durch 'Markierung' der Umfang der zu transportierenden Datenmenge nur unwesentlich vergrößert.

Programmierung

Identifikation durch Markierung: Einfachere Programmierung des BAPIs.

Prüfmöglichkeiten

Identifikation durch Vergleich: Möglichkeit, gegen den aktuellen Datenbankbestand zu prüfen, um so Inkonsistenzen erkennen und verhindern zu können.

Verständlichkeit

Identifikation durch Markierung: Änderungsrelevante Felder werden markiert, d.h. weniger Disziplin wird vom Aufrufer gefordert.

Abstimmung mit verwandten Methoden

Identifikation durch Vergleich: Abgleich mit der entsprechenden GetDetail()-Methode des Business-Objekttyps nötig, da alle Felder im Change()-BAPI vom aufrufenden Programm versorgt werden müssen.

Anwendung

Identifikation durch Markierung: Besser für performance-kritische Anwendungen.

Identifikation durch Vergleich: Besser für dialogorientierte Anwendungen mit kritischen Daten.