Ansicht
Dokumentation

BAPI_ADDRESSPERS_CHANGE - BAPI zum Ändern von Personenadressen

BAPI_ADDRESSPERS_CHANGE - BAPI zum Ändern von Personenadressen

Addresses (Business Address Services)   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Anhand des angegebenen Objekttyps und des Objektschlüssels wird die zugehörige Personenadresse bestimmt und mit den angegebenen Adreß- und Kommunkikationsdaten aktualisiert, soweit dies erwünscht ist.
Dieser Baustein weicht insofern von einem Standard-Change-BAPI ab, als daß nicht nur vorhandene Einträge geändert sondern auch Telefonnummern, Faxnummern usw., welche als Attribute an einer Adresse hängen, gelöscht bzw. hinzugefügt werden können.
Es werden Referenzstrukturleisten (Ankreuzleisten) benutzt, um zu ändernde Einträge zu markieren.

Beispiel

* Ändern einer Personenadresse:
* Ändern einer Telefonnummer, Löschen einer Telefonnummer
* und Hinzufügen einer Telefonummer

  DATA: objtype LIKE bapi4002_1-objtype,
        obj_id LIKE bapi4002_1-objkey,
        obj_id_ext LIKE bapi4002_1-extension,
        context LIKE bapi4002_1-context,
        address_number LIKE adrc-addrnumber,
        person_number LIKE adrp-persnumber,
        bapiadtel LIKE bapiadtel OCCURS 0 WITH HEADER LINE,
        bapiadtel_x LIKE bapiadtelx OCCURS 0 WITH HEADER LINE,
        return LIKE bapiret2 OCCURS 0.

* Bei der Zuweisung des Objekttyps und des Objektschlüssels der
* Privatadresse eines Kundenansprechpartners sind
* folgende Werte zu wählen
  objtype    = 'BUS1006001'
  obj_id     =
  obj_id_ext = ' '
  context    = '0004'

* Besorgen der vorhandenen Daten durch Aufuf von z.B.
* FB 'BAPI_ADDRESSPERS_GETDETAIL'
  ...

* Füllen der Referenzstrukturleisten und der dazugehörigen Daten
* Die Telefonnummer mit laufender Nummer '002' soll gelöscht werden,
* die Durchwahl der Telefonnummer mit laufender Nummer '003'
* soll aktualisiert werden.
  CLEAR: bapiadtel[], bapiadtel_x[].

  CLEAR: bapiadtel, bapiadtel_x.
  bapiadtel_x-updateflag = 'D'.
  APPEND: bapiadtel, bapiadtel_x. "Eintrag löschen

  CLEAR: bapiadtel, bapiadtel_x.
  bapiadtel-extension = '77733'.
  bapiadtel_x-extension = 'X'.
  bapiadtel_x-updateflag = 'U'.
  APPEND: bapiadtel, bapiadtel_x. "Eintrag aktualisieren

  CLEAR: bapiadtel, bapiadtel_x.
  bapiadtel-telephone = '06227'.
  bapiadtel-extension = '11111'.
  bapiadtel_x-updateflag = 'I'.
  APPEND: bapiadtel, bapiadtel_x. "Einen neuen Eintrag hinzufügen

* Aufruf des Change-Bausteins
  CALL FUNCTION 'BAPI_ADDRESSPERS_CHANGE'
     EXPORTING
          obj_type       = objtype
          obj_id         = obj_id
          obj_id_ext     = obj_id_ext
          context        = context
     IMPORTING
         address_number = address_number
         person_number  = person_number
     TABLES
         bapiadtel      = bapiadtel
         bapiadtel_x    = bapiadtel_x
         return         = return.

* Fehler und Warnungen können nun aus der Tabelle RETURN entnommen
* werden. Sollte alles gut gegangen sein, ist die Personenadresse
* mitsamt Kommunikationsdaten jetzt mit den neuen Werten aktualisiert
* im System vorhanden.
* Die Adreßnummer steht im Feld ADDRESS_NUMBER, die Personennummer ist
* im Feld PERSON_NUMBER.

Hinweise

Zum Löschen von z.B. einer Telefonnummer in der Tabelle der schon
vorhandenen Telefonnummern zu einer Adresse muß das Feld 'UPDATEFLAG' in der Referenzstrukturleiste der entsprechenden Zeile ein 'D' enthalten.
Zum Einfügen eines Eintrags muß dieses Feld mit einem 'I' gefüllt sein. Dabei ist darauf zu achten, daß zu einer mit einem 'I' gekennzeichneten Referenzstrukturleiste auch entsprechende Daten zum Einfügen mitgegeben werden.
Alle neu einzufügenden (I) zeilenartigen Einträge mitsamt zugehörigen Referenzstrukturleisten müssen hinter allen zu ändernden (U) und zu löschenden (D) Einträgen stehen.

Schlüsselfelder müssen bei den Änderungsdaten immer gefüllt sein und werden soweit wie möglich berücksichtigt. Daher ist es unerheblich ob z.B. zuerst alle Bemerkungen zu den Telefonnummern und dann die Bemerkungen zu den Faxnummern oder umgekehrt als Änderungsdaten aufgeführt werden, es sei denn man läßt die laufenden Nummern bei den Kommunikationsadressen oder den Bemerkungen ganz weg oder gibt sie nur teilweise an. Dann spielt die Reihenfolge der Daten eine sehr wesentliche Rolle.
Folgende Felder werden hier als Schlüsselfelder betrachtet:

Struktur | Felder
---------------------------------
BAPIAD2VL | ADDR_VERS, FROM_DATE
BAPIAD_REM | ADDR_VERS, LANGU
BAPIADTEL | CONSNUMBER
... | ...
BAPIADPAG | CONSNUMBER
BAPICOMREM | COMM_TYPE, CONSNUMBER, LANGU

Es ist möglich, die laufenden Nummern bei den Kommunikationsadressen und den Bemerkungen leer zu übergeben. In diesem Fall zählt die Reihenfolge der übergebenen Daten, das heißt zum Beispiel, wenn man von den in aufsteigender Reihenfolge nach laufenden Nummern sortierten schon angelegten Telefonnummern die an zweiter Stelle stehende Telefonnummer löschen möchte, muß man mit diesem Funktionsbaustein an erster Stelle eine Dummy-Telefonnummernzeile mit Aktualisierungskennzeichen (U) übergeben, ohne dabei Felder zum Aktualisieren zu markieren, und an zweiter Stelle eine Telefonnummernzeile mit Löschkennzeichen (D) übergeben.
Man muß dabei beachten, daß die auf der Datenbank stehenden Kommunikationsadressen in der Regel nicht nach laufenden Nummern sortiert sind. Deshalb muß man zunächst die Reihenfolge der nach laufenden Nummern sortierten Kommunikationsadressen ermitteln.
Von obiger Vorgehensweise ist allerdings abzuraten, da man sehr leicht Fehler bei der Zuordnung der Daten machen kann. Die Angabe der laufenden Nummern als Schlüssel ist wesentlich sicherer.

Bei den zum Anlegen (I) vorgesehenen Kommunikationsadressen und den Adressen dazu sollte man eigene laufende Nummern vergeben, damit die Zuordnung Kommunikationsadresse - Bemerkung klar ist. Achten muß man in diesem Fall nur darauf, daß die laufenden Nummern noch nicht auf der Datenbank verwendet werden, es sei denn man möchte eine Bemerkung explizit einer schon vorhandenen Kommunikationsadresse zuordnen. Unterläßt man die Nummernvergabe, so wird davon ausgegangen, daß alle einzufügenden Bemerkungen auch zu einzufügenden Kommunikationsadressen gehören und nicht etwa zu schon vorhandenen Kommunikationsadressen hinzugefügt werden sollen (dies würde Sinn machen, wenn eine Bemerkung in einer anderen als der Anlegesprache einer Kommunikationsadresse zu dieser hinzugefügt werden soll).
Die Zuordnung erfolgt dann einzig und allein über die Reihenfolge der übergebenen Daten. Also die erste angegebene Bemerkung zu einer Telefonnummer in deutscher Sprache, die zum Anlegen (I) gekennzeichnet ist, wird auch der ersten angegebenen zum Einfügen vorgesehenen Telefonummer zugeordnet. die dritte Bemerkung in englischer Sprache mit Einfüge-Kennzeichen (I) zu einer Faxnummer wird der dritten angegebenen zum Einfügen vorgesehenen Faxnummer zugeordnet.
Es ist in diesem Fall nicht möglich eine Bemerkung zu einer schon vorhandenen Kommunikationsadresse hinzuzufügen. Dafür benötigt man immer die richtige laufende Nummer.

Werden bei einem Typ von Kommunikationsadressen und deren Bemerkungen die laufenden Nummern gefüllt und bei einem anderen Typ nicht, so hat dies keine Auswirkungen auf die Gesamtfunktionalität. Alle Kommunikationsarten werden separat verarbeitet, d.h. sind bei einer Kommunikationsart vollständig laufende Nummern angegeben, so werden diese auch berücksichtigt, auch wenn bei einer anderen Kommunikationsart vollständig oder teilweise die laufenden Nummern fehlen. In den letzteren beiden Fällen wird die Reihenfolge der Daten zur Verarbeitung verwendet.

Es ist erlaubt, bei den einzufügenden (I) Kommunikationsadressen die laufenden Nummern anzugeben und sie bei den zu aktualisierenden (U) und zu löschenden (D) Kommunikationsadressen wegzulassen und umgekehrt. Die Verarbeitung erfolgt getrennt je nach Fall mit laufenden Nummern oder über die Reihenfolge der Daten. Lediglich zu aktualisierende (U) und zu löschende (D) Kommunikationsadressen müssen beide gemeinsam entweder vollständig mit oder vollständig ohne laufende Nummern übergeben werden.
Auf der sicheren Seite ist man auf jeden Fall immer, wenn bei allen Daten vollständig die laufenden Nummern angegeben werden.

Ein vorheriges Nachlesen der zu ändernden Daten ist erforderlich (z.B. mittels FB BAPI_ADDRESSPERS_GETDETAIL), falls auch Kommunikationsdaten geändert werden sollen, damit man die laufenden Nummern der Kommunikationsdaten kennt.

Die Adreßnummer der zum Objekttyp und zum Objektschlüssel zugehörigen Personenadresse wird im Export-Parameter ADDRESS_NUMBER zurückgegeben, die Personennummer im Feld PERSON_NUMBER.

Eventuelle Warnungen und Fehler bei der Verarbeitung können in der Tabelle RETURN nachgelesen werden.

Um mit diesem Funktionsbaustein arbeiten zu können, muß das System wissen, wie es die Zuordnung zwischen dem zu verarbeitenden BOR-Objekttyp und den Referenzen auf die abgelegte zugehörige Adresse ermitteln soll.
Dazu muß Tabelle TSADOBJ zum BOR-Objekttyp die Namen der Anwendungstabellen und Felder enthalten, in denen die Adreßreferenzen abgelegt sind. Außerdem muß in Tabelle TSADRV der Name des Callback-Funktionsbausteins vermerkt sein, mit welchem diese Adreßreferenzen ausgelesen werden können.
Sind die entsprechenden Tabelleneinträge in TSADOBJ und TSADRV nicht vorhanden, so gibt der Funktionsbaustein eine Meldung in der Fehlertabelle RETURN zurück und die Adresse des BOR-Objektes kann nicht weiter verarbeitet werden.

In dieser Funktion wird kein COMMIT-Befehl abgesetzt, welches den Programmierrichtlinien für BAPIs ab Release 4.0 entspricht.
Bitte beachten Sie hierzu den OSS-Hinweis 131838.

In die Übergabestrukturen BAPIADTEL, BAPIADFAX, ... , BAPIADPAG für die Kommunikationsdaten und BAPICOMREM für die Bemerkungen dazu wird das Ergebnis der Verarbeitung zurückgestellt, sofern nicht ein Ausnahmefehler ('E') während der BAPI-Verarbeitung aufgetreten ist.
Das heißt, konnte eine Kommunikationsadresse verarbeitet werden, stehen in BAPIAD* nach der Verarbeitung die Daten so, wie sie dann auf der Datenbank vorhanden sind bzw. nach einem anschließenden COMMIT auf der Datenbank stehen würden.
Bei einer Telefonnummer wird zum Beispiel das Feld 'TEL_NO' für die vollständige Telefonnummer gefüllt. Wichtiger ist, daß auch die verwendeten laufenden Nummern der Kommunikationsadressen zurückgegeben werden. Dies spielt insbesondere eine Rolle bei Kommunikationsadressen, die neu eingefügt wurden.
Konnte eine Kommunikationsadresse oder eine Bemerkung dazu nicht verarbeitet werden, so wird in der entsprechenden Zeile der zugehörigen BAPIAD*-Struktur das Fehlerkennzeichen 'ERRORFLAG' auf 'X' gesetzt und die laufende Nummer 'CONSNUMBER' erhält den Wert '000'.

Wenn Sie mit diesem BAPI auch Kommunikationsdaten zur Adresse pflegen möchten, so müssen Sie folgende Punkte beachten:

Achten Sie darauf, daß beim Anlegen von Kommunikationsdaten immer genau eine Nummer als Standardnummer (Feld STD_NO = 'X') gekennzeichnet ist.
Beim Ändern, Löschen oder Hinzufügen von Kommunikationsdaten muß ebenfalls sichergestellt sein, daß sich unter den resultierenden Daten genau eine Standardnummer befindet.

Geben Sie außerdem bei jeder Kommunikationsadresse eine laufende Nummer mit (Feld CONSNUMBER). Dies ist insbesondere dann notwendig, falls Sie zusätzlich noch Bemerkungen zu den Kommunikationsadressen, vielleicht sogar in mehreren Sprachen, pflegen wollen. Die Zuordnung zwischen Kommunikationsadressen und Bemerkungen erfolgt nämlich gerade über diese laufenden Nummern.
Beim Anlegen oder Hinzufügen sind diese laufenden Nummern frei wählbar, es kann jedoch sein, daß diese beim Sichern auf andere Werte geändert werden, wenn zum Beispiel die Nummern schon verwendet werden.
Beim Ändern oder Löschen von Kommunikationsadressen sind natürlich die laufenden Nummern zu verwenden, mit denen die Daten auf der Datenbank angelegt wurden.





Parameter

ACCEPT_ERROR
ADDRESS_NUMBER
BAPIAD2VL
BAPIAD2VL_X
BAPIADFAX
BAPIADFAX_X
BAPIADPAG
BAPIADPAG_X
BAPIADPRT
BAPIADPRT_X
BAPIADRFC
BAPIADRFC_X
BAPIADRML
BAPIADRML_X
BAPIADSMTP
BAPIADSMT_X
BAPIADSSF
BAPIADSSF_X
BAPIADTEL
BAPIADTEL_X
BAPIADTLX
BAPIADTLX_X
BAPIADTTX
BAPIADTTX_X
BAPIADURI
BAPIADURI_X
BAPIADUSE
BAPIADUSE_X
BAPIADX400
BAPIADX40_X
BAPIAD_REM
BAPIAD_RE_X
BAPICOMREM
BAPICOMRE_X
CONTEXT
IV_CHECK_ADDRESS
IV_TIME_DEPENDENT_COMM_DATA
OBJ_ID
OBJ_ID_EXT
OBJ_TYPE
PERSON_NUMBER
RETURN
SAVE_ADDRESS

Ausnahmen

Funktionsgruppe

SZAL

BAL Application Log Documentation   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 16254 Date: 20240523 Time: 090145     sap01-206 ( 281 ms )