Stammdaten über das SMD Tool verteilen 
Das Shared Master Data Tool (SMD-Tool) protokolliert Änderungen an Stammdatenobjekten in der Form von Änderungszeigern. Es ist an die Änderungsbelegschnittstelle angeschlossen. Um Stammdaten über das SMD-Tool verteilen zu können, müssen beim Ändern, Neuanlegen und Löschen eines Stammdatenobjekts Änderungsbelege erzeugt werden. Das Stammdatenobjekt muss an die Änderungsbelegschnittstelle angeschlossen sein.
Änderungszeiger werden zum Ermitteln und Verteilen von Änderungen an Stammdatenobjekten verwendet.
Das Erzeugen von Änderungszeigern läuft wie folgt ab:
Das Anwendungsprogramm ruft die Änderungsbelegschnittstelle zu einem sogenannten Änderungsbelegobjekt auf. Hierfür wird ein generierter Funktionsbaustein xyz_DOCUMENT_WRITE aufgerufen. In seiner Schnittstelle befinden sich für jede Tabelle und Struktur, für die Deltas als Änderungsbelege ermittelt werden sollen, zwei Parameter - die alten Sätze und die neuen Sätze. Die Änderungsbelegschnittstelle erzeugt daraus eine Liste von Änderungen (Tabellenname, Tabellenschlüssel, Feldname, Änderungsart, alter Wert, neuer Wert).
Im wesentlichen gibt es drei Änderungsarten:
Insert
Beim Einfügen wird genau ein Satz geschrieben (Tabellenname, Tabellenschlüssel, Feldname = "KEY", Änderungsart = Insert, Alter Wert = leer, Neuer Wert=leer). Die Feldwerte werden nicht dokumentiert, da sie auf der Datenbank zu finden sind. Wichtig ist hierbei, dass in diesem Fall der spezielle Feldname KEY verwendet wird.
Update
Beim Ändern wird für jedes geänderte Feld ein Satz geschrieben (Tabellenname, Tabellenschlüssel, Feldname = <Feldname> , Änderungsart = Update, alter Wert = ABC, neuer Wert=DEF).
Hierbei gibt es noch eine Variante:
In der Definition des Änderungsbelegobjekts kann auch noch bestimmt werden, dass nicht ein Update-Satz, sondern ein Delete- und ein Insert-Satz geschrieben werden. Daher ist auch die Änderungsart ein Schlüsselfeld in der CDPOS-Tabelle. Somit können zu einem Tabellennamen, Tabellenschlüssel und Feldnamen zwei Sätze für Delete und Insert geschrieben werden.
Delete
Beim Löschen wird genau ein Satz geschrieben (analog zum Einfügen). In der Definition des Änderungsbelegobjekts kann auch angegeben werden, dass alle Werte gespeichert werden, dann gibt es je Feld einen Satz.
Beim Schreiben der Änderungsbelege wird auch die Schnittstelle zum Schreiben von Änderungszeigern aufgerufen. Hier wird aus der Tabelle TBD62 ermittelt, ob zu Tabellenname, Tabellenschlüssel, Feldname Sätze mit zu versendenden Nachrichtentypen gefunden werden. TBD62 besteht aus Tabellenname, Tabellenschlüssel, Feldname, Nachrichtentyp. Für jeden Nachrichtentyp, der in der Tabelle TBDA2 als aktiv gekennzeichnet ist, wird ein Änderungszeiger geschrieben. Dabei wird in die Tabelle BDCP ein Satz mit den eigentlichen Änderungsinformationen und in die Tabelle BDCPS für jeden Nachrichtentyp ein Statussatz geschrieben.
Daher müssen Sie in die Tabelle TBD62 alle Felder aufnehmen, deren Änderung das Versenden einer Nachricht (IDoc) bewirken soll.
Für bestimmte Nachrichtentypen wurde aus Gründen einer besseren Performance eine neue Ablage BDCP2 für Änderungszeiger implementiert. Um eine Nutzung der neuen Ablage zu ermöglichen, müssen folgende Voraussetzungen erfüllt sein:
Der Zugriff auf die Änderungszeiger erfolgt ausschließlich über folgende Schnittstellen und das Löschprogramm RBDCPCLR:
CHANGE_POINTERS_CREATE
CHANG E_POINTERS_CREATE_DIRECT
CHANGE_POINTERS_READ
CHANGE_POINTERS_STATUS_WRITE
Wenn diese Voraussetzungen jeweils für einen Nachrichtentyp erfüllt sind, kann dieser unter als BDCP2-fähig markiert werden.
Einzelheiten zur Durchführung der Migration finden Sie im Einführungsleitfaden.
Damit das Schreiben der Änderungszeiger über das SMD-Tool für Ihr Stammdatenobjekt aktiviert werden kann, müssen Sie folgende Schritte ausführen:
Änderungszeiger pro Nachrichtenyp aktivieren
Änderungsrelevante Felder für Nachrichtentypen pflegen
Änderungszeiger generell aktivieren
Darüber hinaus müssen Sie folgende Schritte ausführen:
Funktionsbaustein für Auswertung der Änderungszeiger implementieren
ALE-Objekttyp MSGFN definieren und als Filterobjekttyp pflegen
Hinweis
Wenn Sie die Stammdaten über ein asynchrones BAPI verteilen, dann gelten alle nachfolgend beschriebenen Einstellungen für den generierten Nachrichtentyp der BAPI-ALE-Schnittstelle.
Durch einen Eintrag in Tabelle TBDA2 können Sie das Schreiben der Änderungszeiger für ein bestimmtes Stammdatenobjekt aktivieren bzw. deaktivieren.
Die Pflege der Tabelle TDBA2 erreichen Sie im Customizing über folgenden Pfad:
(Transaktion BD50).
Nehmen Sie in der Tabelle TBDA2 einen Eintrag mit dem Nachrichtentyp für Ihr Stammdatenobjekt auf. Für die Auslieferung zum Kunden soll das Kennzeichen "Aktiv" bei dem Eintrag nicht gesetzt werden. Falls zu Testzwecken das Schreiben der Änderungszeiger für Ihr Stammdatenobjekt aktiviert wird, muss im TBDA2-Eintrag für Ihren Nachrichtentyp das Kennzeichen "Aktiv" gesetzt werden.
Beispiel
Sehen Sie sich als Beispiel den TBDA2-Eintrag für den Nachrichtentyp MATMAS des Materialstamms an.
In Tabelle TBD62 werden die Änderungsbelegfelder aus dem Änderungsbelegobjekt beschrieben, deren Protokollierung über die Änderungsbelegschnittstelle zum Schreiben der Änderungszeiger führen soll.
Hinweis
Zur Pflege der Tabelle TBD62 wählen Sie in der ALE-Entwicklung (Transaktion BD52).
Definieren Sie in der Tabelle TBD62 für Ihren Nachrichtentyp alle Änderungsbelegfelder, für die die Änderungszeiger geschrieben werden sollen, damit Sie die entsprechenden Änderungen an Ihrem Stammdatenobjekt an andere Systeme verteilen können.
Beim Hinzufügen eines Eintrages in eine Tabelle zu Ihrem Stammdatenobjekt wird zur Protokollierung solcher Änderung das Änderungsbelegfeld mit dem imaginären Feldnamen KEY benutzt (z.B. MATERIAL MARA KEY bei der Neuanlage eines Materials oder MATERIAL MARC KEY beim Hinzufügen der Werksdaten zu einem Werk). Solche Einträge müssen Sie auch in die Tabelle TBD62 aufnehmen, und zwar für alle Tabellen aus dem Änderungsbelegobjekt für Ihr Stammdatenobjekt.
Das Hinzufügen bzw. Ändern eines Langtextes wird in der Änderungsbelegposition mit einem Eintrag protokolliert. Dieser besitzt als Tabellenname das Textobjekt und als Feldname einen Wert, der sich aus der Text-ID und dem Sprachenschlüssel zusammensetzt. Falls Änderungen an Langtexten zu einem Stammdatenobjekt verteilt werden sollen, müssen solche Einträge in die Tabelle TBD62 aufgenommen werden. Es ist aber nicht notwendig, dies für jeden möglichen Sprachenschlüssel zu tun. Es genügt, für die betroffene Text-ID einen Eintrag in die Tabelle TBD62 aufzunehmen, der als Feldname einen Wert hat, der aus der Text-ID und dem Zeichen * zusammengesetzt ist (z.B. MATERIAL MATERIAL BEST* für den Einkaufsbestelltext im Materialstamm).
Beispiel
Sehen Sie sich die TBD62-Einträge für den Nachrichtentyp MATMAS für den Materialstamm im SAP-System an.
Zur generellen Aktivierung der Stammdatenverteilung über Änderungszeiger wählen Sie im Customizing folgenden Pfad:
(Transaktion BD61).
Bei der Auswertung der Änderungszeiger werden die IDocs für die geänderten Stammdatenobjekte aufgebaut und versendet. Die Auswertung der Änderungszeiger mit dem anschließenden Aufbau und Versand der IDocs erfolgt pro Nachrichtentyp (z.B. MATMAS für den Materialstamm) und wird über einen Funktionsbaustein (z.B. MASTERIDOC_CREATE_SMD_MATMAS für den Materialstamm) realisiert.
Der Funktionsbaustein ist für jeden Nachrichtentyp zu implementieren. Die Namenskonvention für den Funktionsbaustein ist MASTERIDOC_CREATE_SMD_xxxxxx, wobei xxxxxx der Name des Nachrichtentyps ist.
Die folgende Beschreibung der Implementierung des Funktionsbausteins für die Änderungszeigerauswertung mit dem anschließenden Aufbau und Versand der IDocs können Sie am Beispiel des Funktionsbausteins MASTERIDOC_CREATE_SMD_MATMAS für den Materialstamm nachvollziehen. Sie können aber auch den Funktionsbaustein MASTERIDOC_CREATE_SMD_MATCOR für den Core Materialstamm als Vorlage für Ihren Funktionsbaustein nehmen. Der IDoc-Typ MATCOR01 für den Core-Materialstamm besteht lediglich aus den beiden Segmenten E1MARAC und E1MAKTC und enthält nur die Core-Daten aus dem Materialstamm. Daher ist der Funktionsbaustein MASTERIDOC_CREATE_SMD_MATCOR für den Core Materialstamm übersichtlicher und einfacher gestaltet als der Funktionsbaustein MASTERIDOC_CREATE_SMD_MATMAS für den kompletten Materialstamm.
Legen Sie also einen Funktionsbaustein für Ihren Nachrichtentyp an. Die Schnittstelle des Funktionsbausteins ist vorgegeben und besteht aus dem Parameter für den Nachrichtentyp.
Hinweis
Zum Aufruf des Funktionsbausteins wählen Sie im Bildschirm der ALE-Administration Auswerten (Transaktion BD21).
Bevor Sie die Transaktion für Ihren Nachrichtentyp starten können, müssen Sie die Zuordnung vom Nachrichtentyp zum Funktionsbaustein in der Steuertabelle TBDME pflegen. Definieren Sie für Ihren Nachrichtentyp einen Eintrag in der Tabelle TBDME mit dem Referenznachrichtentyp gleich Ihrem Nachrichtentyp und ordnen Sie den Funktionsbaustein zu. Als Beispiel können Sie die Einträge für Nachrichtentyp MATMAS (Master Material) und MATCOR (Core Master Material) ansehen.
Hinweis
Die Pflege der Tabelle TBDME erreichen Sie im Bildschirm der ALE-Entwicklung über (BD60).
In Ihrem Funktionsbaustein für die Änderungszeigerauswertung mit dem anschließenden Aufbau und Versand der IDocs müssen Sie folgende Schritte implementieren:
Lesen Sie alle noch nicht abgearbeiteten Änderungszeiger für Ihren Nachrichtentyp mittels des Funktionsbausteins CHANGE_POINTERS_READ.
Für jedes geänderte Stammdatenobjekt bauen Sie ein IDoc auf. Füllen Sie im IDoc nur die Segmente, die laut der Änderungszeiger geändert wurden. Das erste Feld MSGFN in jedem Segment ist folgendermaßen zu füllen:
009, wenn das Segment hinzugefügt wurde
004, falls Segmentfelder geändert wurden
003, wenn das Segment gelöscht wurde
018, falls Segmentfelder nicht geändert wurden, das Segment aber im IDoc stehen muss, da hierarchisch untergeordnete Segmente im IDoc versendet werden.
Übergeben Sie das IDoc an die ALE-Schicht durch den Aufruf des Funktionsbausteins MASTER_IDOC_DISTRIBUTE.
Die Änderungszeiger für das gerade abgearbeitete Stammdatenobjekt auf "Erledigt" setzen. Dies geschieht über den Aufruf des Funktionsbausteins CHANGE_POINTERS_STATUS_WRITE.
Setzen Sie den Befehl COMMIT WORK ab und rufen Sie den Funktionsbaustein DEQUEUE_ALL auf. Aus Performance-Gründen sollte man diesen Schritt nicht nach jedem IDoc durchführen, sondern z.B. erst nach 50 aufgebaute IDocs.
Bei der Empfängerermittlung zu Nachrichtentypen, die nicht durch die BAPI-ALE-Schnittstelle generiert wurden, kann es vorkommen, dass IDoc-Segmente, die geänderte Daten enthalten, weggefiltert werden. Es bleiben unter Umständen an den Enden der Segmentketten IDoc-Segmente übrig, die keine geänderten Daten enthalten und nur aufgrund der Segmenthierarchie in das IDoc aufgenommen wurden.
Um der ALE-Ausgangsverarbeitung zu ermöglichen, solche hängenden Segmente zu unterdrücken, muss ihnen beim Aufbau des IDocs im Feld MSGFN den Wert 018 zugewiesen werden.
Zusätzlich müssen Sie folgende Einstellungen treffen:
MSGFN muss als ALE-Objekttyp definiert sein. Wählen sie dazu im Menü der ALE-Entwicklung (Transaktion BD95). Im allgemeinen ist MSGFN bereits als ALE-Objekt definiert und ihm das Feld MSGFN der Tabelle BDIPARAM zugeordet.
MSGFN muss in Tabelle TBD21 als Filterobjekttyp des neuen Nachrichtentyps und der neuen IDoc-Segmente eingetragen werden. Der vollständige Eintrag in TBD21 besteht aus dem Namen des Nachrichtentyps unter MESTYP, des Segmenttyps unter SEGTYP und dem Feldnamen MSGFN unter FLDNAM. Wählen sie dazu im Menü der ALE-Entwicklung (Transaktion BD59).
Hinweis
Bei der Verteilung von Änderungen mit asynchronen BAPIs sollten Sie aus Gründen der Kompatibilität das Feld FUNCTION mit dem Datenelement BAPIFN und den Festwerten INS, DEL, UPD, REF und IGN verwenden. Dadurch kennzeichnen Sie die Art der Änderung, die mit dem BAPI verteilt wird.
Nehmen Sie das Feld FUNCTION in jeden strukturierten Parameter auf. So ist es z.B. auch möglich, das Löschen eines Datensatzes zu verteilen.