Schemaerweiterungsdatei erstellen
In der Schemaerweiterungsdatei werden alle Schematypen definiert, mit denen das Konnektorschema erweitert werden soll. Die Schemaerweiterungsdatei ist eine XML-Datei, die einen identischen Aufbau wie das Konnektorschema hat. Sie beschreibt die Definitionen für Tabellenabfragen und BAPI-Aufrufe für die neuen Schematypen. Wenn ein neuer Schematyp denselben Name hat, wie ein bereits vorhandener Schematyp, wird die Erweiterung ignoriert.
Die Datei gliedert sich in drei Hauptbereiche:
- Definitionsteil für Tabellen
- Definitionsteil für Funktionen
- Definitionsteil für Schematypen
Grundsätzlich müssen zuerst alle Tabellen und Funktionen, die zum Zugriff auf Daten für die zu definierenden Schematypen benötigt werden, deklariert werden. Anschließend können im Definitionsteil für Schematypen die neuen Schematypen definiert werden. Funktionen und Tabellen dürfen dabei in verschiedenen Schematypdefinitionen verwendet werden. Eine Schematypdefinition muss mindestens den Aufruf für eine Objektliste enthalten.
HINWEIS:
Ab One Identity Manager Version 8.2 wird ein aktualisierter BAPI-Transport SAPTRANSPORT_70.ZIP bereitgestellt. Dieser verwendet den Funktionsbaustein /VIAENET/READTABLE anstelle des SAP-Bausteins RFC_READ_TABLE. Beim Zugriff auf eine SAP R/3-Umgebung prüft der SAP R/3 Konnektor, ob der Funktionsbaustein /VIAENET/READTABLE vorhanden ist und verwendet diesen.
Ist der Funktionsbaustein nicht vorhanden, verwendet der Konnektor den SAP-Baustein RFC_READ_TABLE.
Struktur der Schemaerweiterungsdatei
<?xml version="1.0" encoding="utf-8" ?> |
<SAP> |
<Tables> |
... |
</Tables> |
<Functions> |
... |
</Functions> |
<SAPExtendedSchematypes> |
... |
</SAPExtendedSchematypes> |
</SAP> |
Vordefinierte Variablen
Im Definitionsteil für Tabellen und Funktionen können Variablen verwendet werden. Nutzbar sind alle Systemvariablen, die der Funktionsbaustein /VIAENET/READTABLE beziehungsweise der SAP-Baustein RFC_READ_TABLE kennt.
Tabelle 14: Beispiele für Systemvariablen
sy-langu |
Aktuell gewählte Anmeldesprache. |
sy–datum |
Aktuelles Datum. |
sy-mandant |
Aktueller Mandant der Anmeldung. |
Außerdem können Variablen genutzt werden, die der SAP R/3 Konnektor kennt, beispielsweise aus der Definition von Prozessparametern.
Tabelle 15: Vordefinierte Variablen des SAP R/3 Konnektors
$Value$ |
Eingabeparameter des One Identity Manager Service-Aufrufs. |
$Mandt$ |
Nummer des aktuellen Mandanten. |
$Date$ |
Aktuelles Datum. |
Detaillierte Informationen zum Thema
Tabellen definieren
Im Definitionsteil für Tabellen (Tables) werden die Tabellen und Spalten selektiert, die zum Zugriff auf die Daten für die zu definierenden Schematypen benötigt werden. Der SAP R/3 Konnektor benötigt für jede Tabelle eine Definition zum Laden der schlanken Objektliste. Dafür definieren Sie genau die Spalten, die der SAP R/3 Konnektor bereits beim Laden der zu synchronisierenden Objekte benötigt. Beim Einzelobjektzugriff werden immer alle Spalten der Tabelle geladen.
Tabelle 16: Tabellendefinition
Definition |
Symbolischer Name zur Verwendung der Definition. |
TableName |
Tabellenname in der SAP Datenbank. |
Key |
Schlüsselbegriffe zur Bildung eines definierten Namens. Die Angabe von mehreren Werten als kommagetrennte Liste ist möglich. |
X500 |
Kürzel für die Schlüsselbegriffe im Attribut Key. Die Angabe von mehreren Werten als kommagetrennte Liste ist möglich. |
SQL |
Einschränkende Where-Klausel.
HINWEIS: Es gibt einige Beschränkungen bei der Auswertung der SQL-Operatoren im SAP R/3-System. Für ein korrektes Ergebnis beachten Sie folgende Regeln:
|
Distinct |
Aufzählung der Spalten, über die insgesamt ein Distinct–Filter wirkt (als kommagetrennte Liste). |
Load |
Spalten, die zur Ladezeit der Objektliste bereits zu laden sind. Diese Spalten können beispielsweise zur Bildung des Anzeigenamens (DisplayPattern) des Schematyps, als Revisionszähler oder als Eingabeparameter in einer Funktion verwendet werden.
Wenn die Objektliste aus einer Tabelle, aber die Einzelobjekte aus einer Funktion geladen werden sollen, müssen hier alle Spalten angegeben werden, die innerhalb des Synchronisationsprojekts im Mapping verwendet werden sollen.
WICHTIG: Jede Spalte, die beim Laden der Objektliste zusätzlich geladen werden muss, erzeugt zusätzliche Last im One Identity Manager. Bei großen Datenmengen kann die Synchronisation dadurch deutlich langsamer werden. Geben Sie hier nur Spalten an, die für die weitere Verarbeitung der Objekte zwingend benötigt werden.
Für den Einzelobjektzugriff werden keine Angaben benötigt. |
Hinweise
-
Es können mehrere Tabellendefinitionen mit verschiedenen symbolischen Namen, die sich auf dieselbe Tabelle in der SAP Datenbank beziehen, definiert werden.
-
Schlüsselspalten werden immer geladen. Sie sollen daher nicht im Attribut Load angegeben werden.
-
Das Attribut Load wirkt nur beim Laden der Objektliste. Beim Einzelobjektzugriff über eine Tabelle werden immer alle Spalten der Tabelle geladen.
-
Als Operatoren in der Where-Klausel sind zulässig:
Tabelle 17: Zulässige Operatoren im SQL-Attribut
EQ |
= |
NE |
<> |
GT |
> |
LT |
< |
GE |
>= |
LE |
<= |
BETWEEN |
ENDDA BETWEEN '20090101' AND '20090131' |
-
Eine Tabellendefinition kann zusätzlich einen Mapping-Block enthalten. Dieser Block dient der Umsetzung von Parametern, die in Where-Klauseln verwendet werden sollen, aber in der Objektliste mit einem anderen Spaltennamen selektiert wurden.
Im Beispiel würde beim Laden von Einzelobjekten aus der Tabelle RSECUSERAUTH jedes Auftreten der Variable $BNAME$ mit dem aktuellen Wert der Spalte USERNAME ersetzt werden, bevor die SQL-Selektion ausgeführt wird. Die Spalte USERNAME muss zuvor in einer Objektliste geladen worden sein.
Tabellendefinitionen mit einem Mapping werden in erster Linie zum Laden von Einzelobjekten genutzt.
-
Neben den selbst definierten Parametern können in Where-Klauseln auch vordefinierte Variablen genutzt werden. Weitere Informationen finden Sie unter Schemaerweiterungsdatei erstellen.
<Tables> |
<TABLE Definition = "HRP1001-Table" TableName="HRP1001" Key="OTJID,SUBTY,BEGDA,ENDDA" X500="CN,OU,OU,OU" SQL="MANDT = sy-mandt" Load="VARYF" Distinct="OTJID,SUBTY,VARYF" /> |
<TABLE Definition = "HRP1000-Table" TableName="HRP1000" Key="OTJID,LANGU,BEGDA,ENDDA" X500="CN,OU,OU,OU" SQL="MANDT = sy-mandt" Load="" Distinct="OTJID" /> |
<TABLE Definition = "RSECUSERAUTH-SingleUser" TableName="RSECUSERAUTH" Key="AUTH" X500="CN" SQL="UNAME = '$BNAME$'" Load="" > |
<Mapping> |
<Data ParameterName = "$BNAME$" PropertyName = "USERNAME" /> |
</Mapping> |
</TABLE> |
</Tables> |
Verwandte Themen
Funktionen definieren
Im Definitionsteil für Funktionen (Functions) werden die Schnittstellen zu den BAPI-Funktionen beschrieben, die zum Zugriff auf die Daten für die zu definierenden Schematypen benötigt werden.
Tabelle 18: Funktionsdefinition
Definition |
Symbolischer Name zur Verwendung der Definition. |
FunctionName |
Funktionsname im SAP R/3-System. |
OutStructure |
Name einer SAP–Struktur, die als Rückgabewert geliefert wird. (Optional) |
Key |
Schlüsselbegriffe zur Bildung eines definierten Namens. Die Angabe von mehreren Werten als kommagetrennte Liste ist möglich. |
X500 |
Kürzel für die Schlüsselbegriffe im Attribut Key. Die Angabe von mehreren Werten als kommagetrennte Liste ist möglich. |
Im optionalen Mapping-Block wird definiert, wie die Werte an die Parameter des Funktionsaufrufs übergeben werden. Dazu muss vor dem Funktionsaufruf eine Objektliste erzeugt werden, aus deren Eigenschaften die Parameter für den Funktionsaufruf belegt werden können. Im Beispiel unten ist BNAME eine Eigenschaft, die über die Objektliste der Tabelle USR02 ermittelt wird.
An die Parameter können vordefinierte Variablen übergeben werden. Weitere Informationen finden Sie unter Schemaerweiterungsdatei erstellen. Außerdem ist es möglich, einem Funktionsparameter einen festen Wert zu übergeben. Dafür ist die folgende Notation vorgesehen.
<Data ParameterName = "<Name>" PropertyName = "VALUE=<fester Wert>" />
Beispiel
<Tables> |
<TABLE Definition = "USR02-Table" TableName="USR02" Key="BNAME" X500="CN" SQL="MANDT = '$MANDT$'" Load="" /> |
</Tables> |
<Functions> |
<Function Definition = "USER GET" FunctionName="BAPI_USER_GET_DETAIL" OutStructure = "" Key ="USERNAME" X500 ="CN"> |
<Mapping> |
<Data ParameterName = "USERNAME" PropertyName = "BNAME" /> |
</Mapping> |
</Function> |
</Functions> |
Verwandte Themen
Schematypen definieren
Im Definitionsteil für Schematypen (SAPExtendedSchematypes) werden die Schematypen definiert, die im SAP Schema vorhanden sind und mit denen das Konnektorschema erweitert werden soll. Als Name wird der im Attribut Name vergebene Bezeichner verwendet. Dieser Bezeichner muss im erweiterten Konnektorschema eindeutig sein.
Tabelle 19: Schematypdefinition
Bem |
Interne Beschreibung. |
Name |
Name des Schematyps im erweiterten Konnektorschema. |
DisplayPattern |
Definition eines Anzeigemusters für die Anzeige der Objekte im Synchronization Editor (beispielsweise im Zielsystembrowser oder bei der Definition der Schemaklassen). (Optional)
Es können nur die Spalten verwendet werden, die in der Tabellendefinition geladen wurden (Attribute Key oder Load).
Wenn kein DisplayPattern definiert ist, wird der definierte Name des Objekts als Anzeigewert verwendet.
HINWEIS: Mehrwertige Spalten (MVP) dürfen nicht im DisplayPattern verwendet werden.
WICHTIG: Jede Spalte, die beim Laden der Objektliste zusätzlich geladen werden muss, erzeugt zusätzliche Last im One Identity Manager. Bei großen Datenmengen kann die Synchronisation dadurch deutlich langsamer werden. Geben Sie hier nur Spalten an, die für die weitere Verarbeitung der Objekte zwingend benötigt werden. |
AddRevisionTimeOffset |
Gibt an, ob an den Revisionszähler die Uhrzeit 23:59:00 angefügt werden soll. (Optional)
Sie können das Attribut nutzen, wenn der Revisionszähler nur ein Änderungsdatum und keine Uhrzeit enthält. Damit werden bei der Synchronisation auch solche Objekte berücksichtigt, die nach dem vorherigen Synchronisationslauf, aber noch am selben Tag geändert wurden. |
RevisionProperty |
Name einer Eigenschaft, welche den Revisionszähler enthält. (Optional) |
ListObjectsDefinition |
Funktions- oder Tabellendefinition zum Aufruf einer Objektliste. |
ReadObjectDefinition |
Funktions- oder Tabellendefinition zum Aufruf eines Einzelobjekts. |
InsertObjectDefinition |
Funktionsaufruf zum Erzeugen des neuen Objekts. (Optional) |
InsertCommitDefinition |
Funktionsaufruf, der nach der Funktion zum Erzeugen des neuen Objekts ausgeführt werden soll. (Optional) |
WriteObjectDefinition |
Funktionsaufruf zum Schreiben des Objekts. (Optional) |
WriteCommitDefinition |
Funktionsaufruf, der nach der Funktion zum Schreiben des neuen Objekts ausgeführt werden soll. (Optional) |
DeleteObjectDefinition |
Funktionsaufruf zum Löschen des Objekts. (Optional) |
DeleteCommitDefinition |
Funktionsaufruf, der nach der Funktion zum Löschen des neuen Objekts ausgeführt werden soll. (Optional) |
ParentType |
Kontext, in dem der Schematyp gilt. (Optional)
Standardmäßig sind die Schematypen mandantenbezogen (ParentType="SAPMANDANT"). Wenn der neue Schematyp in allen Mandanten eines SAP R/3-Systems gilt, geben Sie den ParentType mit dem Wert SAPSYSTEM an.
Wenn das Attribut nicht definiert ist, ist der Schematyp mandantenbezogen. |
Eine Schematypdefinition muss mindestens den Aufruf einer Objektliste (Attribut ListObjectsDefinition) enthalten. Dabei kann eine Tabellen- oder eine Funktionsdefinition angegeben werden. Um ein Einzelobjekt aufzurufen (Attribut ReadObjectDefinition), muss zuvor die Objektliste geladen worden sein. Listenaufruf und Einzelobjektaufruf können sich auf unterschiedliche Tabellen beziehen, jedoch müssen die Schlüsselspalten für die Identifikation der Einzelobjekte entweder gleichnamig sein oder per Mapping in der Tabellendefinition für den Einzelobjektaufruf bekannt gegeben worden sein. Im Beispiel unten werden zu einem Objekt aus der Tabelle USR02 die Einzelobjekte aus der Tabelle RSECUSERAUTH ermittelt. Die Schlüsselspalten zur Identifikation der Objekte sind USR02.BNAME und RSECUSERAUTH.UNAME. Die Spalten haben unterschiedliche Namen und werden daher über den Parameter $BNAME$ gemappt.
Es ist möglich, einen Properties–Block zu definieren, in welchem beliebig viele weitere Eigenschaften eines Objekts und die Art des Zugriffs auf diese Eigenschaften deklariert werden können. Eine einzelne Eigenschaft wird mittels Property-Tag definiert, welches die folgenden Attribute haben kann.
Tabelle 20: Eigenschaftsdefinition
Name |
Name der Eigenschaft. Er muss innerhalb des Schematyps eindeutig sein. |
Description |
Beschreibung der Eigenschaft. |
ListFunction |
Funktion oder Tabelle zum Aufruf aller Werte. |
AddFunction |
Funktion zum Hinzufügen eines Wertes. (Optional) |
DelFunction |
Funktion zum Entfernen eines Wertes. (Optional) |
ReplaceFunction |
Ersetzen des gesamten Inhalts der Eigenschaft. (Optional) |
IsMultivalued |
Angabe, ob die Eigenschaft mehrwertig ist. (Optional)
Wenn das Attribut nicht definiert ist, ist die Eigenschaft nicht mehrwertig. |
<Tables> |
<TABLE Definition = "USR04-Table" TableName="USR04" Key="BNAME,MANDT" X500="CN,OU" SQL="MANDT = sy-mandt" Load="" /> |
<TABLE Definition = "USR02-Table" TableName="USR02" Key="BNAME" X500="CN" SQL="MANDT = sy-mandt" Load="MANDT,TRDAT" /> |
<TABLE Definition = "RSECUSERAUTH-SingleUser" TableName="RSECUSERAUTH" Key="AUTH" X500="CN" SQL="UNAME = '$BNAME$'" Load=""> |
<Mapping> |
<Data ParameterName = "$BNAME$" PropertyName = "BNAME" /> |
</Mapping> |
</TABLE> |
<TABLE Definition = "ANLA-Table" TableName="ANLA" Key="BUKRS,ANLN1" X500="CN,OU" SQL="MANDT = sy-mandt" Load="AEDAT" /> |
</Tables> |
<Functions> |
<Function Definition = "USER GET" FunctionName="BAPI_USER_GET_DETAIL" OutStructure = "" Key ="USERNAME" X500 ="CN"> |
<Mapping> |
<Data ParameterName = "USERNAME" PropertyName = "BNAME" /> |
</Mapping> |
</Function> |
<Function Definition = "USER SET" FunctionName="BAPI_USER_CHANGE" OutStructure ="" Key ="USERNAME" X500 ="CN"> |
<Mapping> |
<Data ParameterName = "USERNAME" PropertyName = "BNAME" /> |
</Mapping> |
</Function> |
<Function Definition = "USER DEL" FunctionName="BAPI_USER_DELETE" OutStructure ="" Key ="USERNAME" X500 ="CN" > |
<Mapping> |
<Data ParameterName = "USERNAME" PropertyName = "BNAME" /> |
</Mapping> |
</Function> |
<Function Definition = "USER PROFILE SET" FunctionName="BAPI_USER_PROFILES_ASSIGN" OutStructure ="" Key ="USERNAME" X500 ="CN"> |
<Mapping> |
<Data ParameterName = "USERNAME" PropertyName = "BNAME" /> |
<Data ParameterName = "BAPIPROF~BAPIPROF" PropertyName = "$Value$" /> |
</Mapping> |
</Function> |
<Function Definition = "BWProfileDelFkt" FunctionName="/VIAENET/SAPHR_RSECUSERAUT_DEL" OutStructure ="" Key ="ZUSRNAME,ZHIER" X500 ="CN,OU"> |
<Mapping> |
<Data ParameterName = "ZUSRNAME" PropertyName = "BNAME" /> |
<Data ParameterName = "ZHIER" PropertyName = "$VALUE$" /> |
</Mapping> |
</Function> |
<Function Definition = "BWProfileAddFkt" FunctionName="/VIAENET/SAPHR_RSECUSERAUT_ADD" OutStructure ="" Key ="ZUSRNAME,ZHIER" X500 ="CN,OU"> |
<Mapping> |
<Data ParameterName = "ZUSRNAME" PropertyName = "BNAME" /> |
<Data ParameterName = "ZHIER" PropertyName = "$VALUE$" /> |
</Mapping> |
</Function> |
</Functions> |
<SAPExtendedSchematypes> |
<SAPExtendedSchematype Bem = "all users" Name = "UserFunctionTable" DisplayPattern="%BNAME% (%MANDT%)" RevisionProperty="TRDAT" ListObjectsDefinition = "USR02-Table" ReadObjectDefinition ="USER GET" WriteObjectDefinition = "USER SET" DeleteObjectDefinition = "USER DEL"> |
<Properties> |
<Property Name = "SAPBWP" Description="all BW profiles of the user" ListFunction="RSECUSERAUTH-SingleUser" AddFunction="BWProfileAddFkt" DelFunction="BWProfileDelFkt" ReplaceFunction="" IsMultivalued = "true" /> |
<Property Name = "USERPROFILE" Description="all profiles of the user" ListFunction="USR04-Table" AddFunction="" DelFunction="" ReplaceFunction="USER PROFILE SET" IsMultivalued = "true" /> |
</Properties> |
</SAPExtendedSchematype> |
<SAPExtendedSchematype Bem = "Asset, asset values" Name = "Asset_ANLA" DisplayPattern="%ANLN1% %BUKRS%" AddRevisionTimeOffset="true" RevisionProperty="AEDAT" ListObjectsDefinition = "ANLA-Table" ReadObjectDefinition = "ANLA-Table" InsertObjectDefinition = "" WriteObjectDefinition = "" DeleteObjectDefinition = "" /> |
</SAPExtendedSchematypes> |
Erläuterungen:
Die Liste von Objekten des Schematyps UserFunctionTable wird unter Nutzung der Tabelle USR02 erstellt. Lesen, Schreiben und Löschen erfolgt mit den Funktionen des USER–BAPI, die jeweils als Function deklariert wurden.
Der Schematyp hat einen Properties-Block. Hier werden zwei weitere Eigenschaften definiert, die weder über die Tabellendefinition des Listenaufrufs noch über die Funktionsdefinition des Einzelobjektaufrufs zurückgegeben werden. Definiert wird eine mehrwertige Eigenschaft SAPBWP, deren Werte aus der Tabelle RSECUSERAUTH ermittelt werden. Die Einzelobjekte werden über die Spalten USR02.BNAME und RSECUSERAUTH.UNAME identifiziert. Zum Einfügen und Löschen von Werten werden BAPI-Aufrufe genutzt, die als Funktionen definiert wurden.
Die Eigenschaft Userprofile ist ein Beispiel für eine mehrwertige Eigenschaft, deren Werte beim Lesen aus einer Tabelle stammen (USR04) und die eine Replace–Funktion hat. Daher müssen immer alle Werte bei Änderungen angegeben werden, die in der Eigenschaft verbleiben sollen. Die Schreibfunktion ist die originale Funktion des USER-BAPI zum Setzen von Profilen am Benutzer (Funktionsdefinition für BAPI_USER_PROFILES_ASSIGN). Die Einzelobjekte werden über die Spalten USR02.BNAME und USR04.BNAME identifiziert. Da die Schlüsselspalten den gleichen Namen haben, wird an der Tabellendefinition kein Mapping benötigt.
Der Schematyp Asset_ANLA verwendet den Revisionszähler AEDAT, welcher nur ein Änderungsdatum enthält. An diesen Revisionszähler fügt der Konnektor die Uhrzeit 23:59:00 an (AddRevisionTimeOffset="true").
Verwandte Themen