Erstellen der SAP ECC 7.51 Webdienst Connector-Vorlage für die ECMA2Host
Dieser Leitfaden führt Sie durch den Prozess des Erstellens einer Vorlage für den Webdienst Extensibility Connectivity Management Agent (ECMA)-Connector zum Verwalten von SAP ECC-Benutzenden.
Einschränkungen und Voraussetzungen
Diese Vorlage veranschaulicht, wie Benutzende verwaltet werden. Andere Objekttypen wie lokale Aktivitätsgruppen, Rollen und Profile werden von diesem Leitfaden nicht abgedeckt, da der ECMA2Host derzeit keine mehrwertigen Verweise unterstützt. Kennwortvorgänge sind ebenfalls nicht Gegenstand dieser Anleitung.
Diese Anleitung behandelt nicht die Erstellung des Dienstkontos innerhalb von SAP, das zum Aufrufen der exponierten BAPI-Funktionen verwendet wird. Es wird davon ausgegangen, dass ein vorab erstelltes Demokonto Developer mit einem Profil RFC_ALL verwendet wird, das Berechtigungen für die in diesem Artikel erwähnten BAPIs gewährt.
Das Webdienstkonfigurationstool unterstützt standardmäßig nicht die folgenden Features, die in SAP verfügbar gemacht werden: WSP-Richtlinien und mehrere Bindungen pro Endpunkt. Es wird erwartet, dass eine WSDL nur mit SOAP 1.1, all-in-one-Dokumentformatvorlagenbindung ohne Richtlinien, verwendet wird.
SAP ECC BAPI-Funktionen, die in dieser Vorlage verwendet werden:
- BAPI_USER_GETLIST – Abrufen einer Liste aller Benutzenden, die mit diesem System verbunden sind.
- BAPI_USER_GETDETAIL – Abrufen von Details zu bestimmten Benutzenden.
- BAPI_USER_CREATE1 – erstellt einen Benutzenden.
- BAPI_USER_DELETE – löscht einen Benutzenden.
- BAPI_USER_CHANGE – aktualisiert einen Benutzenden.
Alle SAP-Benutzereigenschaften in dieser Anleitung werden als einzelwertige Eigenschaften behandelt.
Die verwendete Programmiersprache ist Visual Basic.
Definieren eines Webdienstendpunkts und Erstellen eines Schemas
Bevor Sie Import- und Exportworkflows entwerfen können, müssen Sie eine Vorlage erstellen und einen Endpunkt mit den SAP-BAPI-Funktionen definieren, die über eine SOAP-Schnittstelle verfügbar gemacht werden. Erstellen Sie dann ein Schema der ECMA2-Objekte, und ihre Eigenschaften sind in dieser Vorlage verfügbar.
- Starten Sie im Ordner „C:\Programme\Microsoft ECMA2Host\Web Service Configuration Tool“ das Webdienst Konfigurationstool wsconfigTool.exe
- Wählen Sie im Menü File-New die Option "Neues SOAP-Projekt erstellen" aus.
- Wählen Sie im SOAP-Projekt die Option "Neuen Webdienst hinzufügen" aus.
- Benennen Sie Ihren Webdienst SAPECC, geben Sie eine URL zum Herunterladen von WSDL veröffentlicht an, geben Sie SAPECC als Namespace ein. Der Webdienstname hilft Ihnen, diesen Webdienst in Ihrer Vorlage von anderen zu unterscheiden. Namespace definiert einen Namen des Microsoft .NET-Namespace, der zum Generieren von Klassen verwendet wird. Wählen Sie den Modus Standardauthentifizierung aus, sofern der SAP-Administrierende keine anderen Anweisungen gibt. Wählen Sie "Weiter" aus.
- Stellen Sie Anmeldeinformationen bereit, um eine Verbindung mit dem SAP ECC-Endpunkt herzustellen. Wählen Sie "Weiter" aus.
- Stellen Sie auf der Seite Endpunkte und Vorgänge sicher, dass die BAPIs angezeigt werden, und wählen Sie „Fertig stellen“
Hinweis
Wenn mehrere Endpunkte angezeigt werden, sind sowohl SOAP 1.2- als auch SOAP 1.1-Bindungen aktiviert. Dies führt dazu, dass der Connector fehlschlägt. Ändern Sie Ihre Bindungsdefinition in SOAMANAGER, und behalten Sie nur eine. Fügen Sie dann einen Webdienst erneut hinzu.
- Speichern Sie das Projekt im Ordner C:\Program Files\Microsoft ECMA2Host\Service\ECMA.
- Wählen Sie die Registerkarte „Objekttypen“ und fügen Sie den Benutzerobjekttyp hinzu. Wählen Sie "OK" aus.
- Erweitern Sie die Registerkarte "Objekttypen", und wählen Sie die Benutzertypdefinition aus.
- Fügen Sie die folgenden Attribute in das Schema ein und wählen Sie Benutzername als Anker.
- Speichern Sie das Projekt.
Name | type | Anchor |
---|---|---|
city | Zeichenfolge | |
company | Zeichenfolge | |
department | Zeichenfolge | |
Zeichenfolge | ||
expirationTime | Zeichenfolge | |
firstName | Zeichenfolge | |
lastName | Zeichenfolge | |
middleName | Zeichenfolge | |
telephoneNumber | Zeichenfolge | |
jobTitle | Zeichenfolge | |
userName | Zeichenfolge | checked |
Erstellen eines vollständigen Importworkflows
Der Import-Workflow ist in ECMA2Host zwar optional, ermöglicht aber den Import bestehender SAP-Benutzender in den In-Memory-Cache von ECMA2Host und verhindert, dass bei der Bereitstellung doppelte Benutzende angelegt werden.
Wenn Sie keinen Import-Workflow erstellen, arbeitet Ihr Connector im Nur-Export-Modus und veranlasst den ECMA2Host, immer Operationen Benutzende erstellen durchzuführen, auch für bestehende Benutzer*innen. Dies kann zu Fehlern oder Duplikaten führen, wenn standardmäßige SAP-BAPIs verwendet werden, es sei denn, Duplikate werden vom Exportworkflow behandelt.
SAP ECC bietet keinen integrierten Mechanismus zum Lesen von Änderungen, die seit dem letzten Lesen vorgenommen wurden.
Daher implementieren wir nur den vollständigen Import-Workflow. Wenn Sie Delta-Importe aus Leistungsgründen implementieren müssen, wenden Sie sich an Ihren SAP-Administrierenden, um eine Liste der BAPIs zu erhalten und sie als SOAP-Webdienst zu veröffentlichen. Implementieren Sie dann den Delta-Importworkflow mithilfe des folgenden Ansatzes wie beschrieben und eine customData-Eigenschaft, die einen Zeitstempel der vorherigen erfolgreichen Ausführung enthält.
SAP ECC bietet mehrere BAPI-Funktionen, um eine Liste der Benutzenden mit ihren Eigenschaften abzurufen:
- BAPI_USER_GETLIST – Abrufen einer Liste aller Benutzenden, die mit diesem System verbunden sind.
- BAPI_USER_GETDETAIL – Abrufen von Details zu bestimmten Benutzenden.
In dieser Vorlage werden nur diese beiden BAPIs verwendet, um vorhandene Benutzende aus SAP ECC abzurufen.
- Navigieren Sie zu Objekttypen -> Benutzende-> Import -> Vollständiger Import-Workflow und ziehen Sie aus der Toolbox auf der rechten Seite die Aktivität Sequenz in den Workflow-Designerbereich.
- Suchen Sie unten links die Schaltfläche "Variablen", und wählen Sie sie aus, um eine Liste der variablen zu erweitern, die in dieser Sequenz definiert sind.
- Fügen Sie die folgenden Variablen hinzu: Um einen aus der SAP WSDL generierten Variablentyp auszuwählen, wählen Sie „Nach Typen suchen“ aus und erweitern Sie generiert und dann den SAPECC-Namespace.
Name | Variablentyp | `Scope` | Standard |
---|---|---|---|
selRangeTable | SAPECC. TABLE_OF_BAPIUSSRGE | Sequence | new TABLE_OF_BAPIUSSRGE mit {.item = new BAPIUSSRGE(){new BAPIUSSRGE}} |
getListRetTable | SAPECC.TABLE_OF_BAPIRET2 | Sequence | new TABLE_OF_BAPIRET2 |
pageSize | Int32 | Sequence | 200 |
returnedSize | Int32 | Sequence | |
usersTable | SAPECC.TABLE_OF_BAPIUSNAME | Sequence | neue TABLE_OF_BAPIUSNAME() |
- Ziehen Sie aus der Toolbox vier Zuweisungsaktivitäten in Ihre Sequenzaktivität und legen Sie diese Werte fest:
selRangeTable.item(0).PARAMETER = "USERNAME"
selRangeTable.item(0).SIGN = "I" selRangeTable.item(0).OPTION = "GT" selRangeTable.item(0).LOW = ""
Diese Parameter werden für den Aufruf der Funktion BAPI_USER_GETLIST und für die Implementierung der Paginierung verwendet.
- Um die Paginierung zu implementieren, ziehen Sie die DoWhile-Aktivität aus der Toolbox in Ihre Sequenzaktivität nach dem letzten Zuweisungsvorgang und legen sie dort ab.
- Wechseln Sie auf der rechten Seite zur Registerkarte "Eigenschaften" und geben Sie diese Bedingung für die DoWhile ein
- cycle:
returnedSize = pageSize
- Wählen Sie die Variablen aus und fügen Sie die Eigenschaft „currentPageNumber“ vom Typ „int32“ im DoWhile-Zyklus mit dem Standardwert 0 hinzu.
- Optionaler Schritt: Wenn Sie vorhaben, den Delta-Import-Workflow zu implementieren, dann ziehen Sie aus der Toolbox die Aktivität "Zuweisen" in Ihre Sequenzaktivität nach dem DoWhile-Zyklus und legen sie dort ab. Legen Sie diesen Wert fest:
customData(schemaType.Name + "_lastImportTime") = DateTimeOffset.UtcNow.Ticks.ToString()
Dies speichert das Datum und die Uhrzeit des letzten vollständigen Importlaufs. Dieser Zeitstempel kann später im Delta-Import-Workflow verwendet werden.
- Ziehen Sie die Sequenzaktivität aus der Toolbox in Ihre DoWhile-Aktivität und legen Sie sie dort ab. Ziehen Sie die Aktivität WebServiceCall in diese Sequenzaktivität und wählen Sie den SAPECC-Dienstnamen, den Endpunkt ZSAPCONNECTORWS und die Operation BAPI_USER_GETLIST aus.
- Klicken Sie auf die Schaltfläche "Argumente", um die Parameter für den Webdienstaufruf wie folgt zu definieren:
Name | Direction | type | Wert |
---|---|---|---|
MAX_ROWS | In | Int32 | pageSize |
MAX_ROWSSpecified | In | Boolesch | True |
RETURN | Ein/Aus | TABLE_OF_BAPIRET2 | getListRetTable |
SELECTION_EXP | Ein/Aus | TABLE_OF_BAPIUSSEXP | |
SELECTION_RANGE | Ein/Aus | TABLE_OF_BAPIUSSRGE | selRangeTable |
BENUTZERLISTE | Ein/Aus | TABLE_OF_BAPIUSNAME | usersTable |
WITH_USERNAME | In | String | |
ROWS | aus | Int32 | returnedSize |
- Wählen Sie "OK" aus. Das Warnzeichen wird ausgeblendet. Die Liste der in der Variablen usersTable gespeicherten Benutzer. Da SAP keine vollständige Liste der Benutzer in einer einzigen Antwort zurückgibt, müssen wir eine Paginierung implementieren und diese Funktion beim Seitenwechsel mehrmals aufrufen. Dann müssen Sie für jeden importierten Benutzenden einen separaten Anruf durchführen, um seine Daten zu erhalten. Das bedeutet, dass für eine Umgebung mit 1.000 Benutzern und einer Seitengröße von 200 der Webdienstkonnektor 5 Aufrufe zum Abrufen einer Liste von Benutzern und 1.000 einzelne Aufrufe zum Abrufen der Benutzerdetails macht. Um die Leistung zu verbessern, bitten Sie Ihr SAP-Team, ein benutzerdefiniertes BAPI-Programm zu entwickeln, das alle Verwendungen mit ihren Eigenschaften auflistet. Dies vermeidet die Notwendigkeit, 1.000 einzelne Aufrufe zu tätigen und diese BAPI-Funktion über SOAP-WS-Endpunkt verfügbar zu machen.
- Ziehen Sie die IF-Aktivität aus der Toolbox in Ihre DoWhile-Aktivität nach der WebServiceCall-Aktivität und legen Sie sie dort ab. Geben Sie diese Bedingung an, um zu überprüfen, ob die Antwort nicht leer ist und keine Fehler vorliegen:
IsNothing(getListRetTable.item) OrElse getListRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
- Ziehen Sie aus der Toolbox die Throw-Aktivität in den Else-Zweig Ihrer WENN-Aktivität, um bei einem fehlgeschlagenen Import einen Fehler zu melden. Wechseln Sie zur Registerkarte "Eigenschaften“ und geben Sie diesen Ausdruck für die Eigenschaft "Ausnahme“ der Aktivität "Werfen“ ein:
New Exception(getListRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")).MESSAGE)
- Um eine Liste der importierten Benutzenden zu verarbeiten, ziehen Sie die Aktivität ForEachWithBodyFactory aus der Toolbox in den Zweig Then Ihrer IF-Aktivität. Wechseln Sie zur Registerkarte "Eigenschaften", und wählen Sie "SAPECC" aus. BAPIUSNAME als TypeArgument. Wählen Sie die Schaltfläche „...“ und geben Sie diesen Ausdruck für die Eigenschaft Werte ein:
if(usersTable.item,Enumerable.Empty(of BAPIUSNAME)())
- Ziehen Sie die Sequenzaktivität aus der Toolbox in die ForEach-Aktivität und legen Sie sie dort ab. Wählen Sie bei aktivemSequenzaktivitätsfenster die Schaltfläche „Variablen“ aus und definieren Sie diese Variablen:
Name | Variablentyp | `Scope` | Standard |
---|---|---|---|
company | SAPECC.BAPIUSCOMP | Sequence | neue BAPIUSCOMP() |
address | SAPECC.BAPIADDR3 | Sequence | neue BAPIADDR3() |
Standardwerte | SAPECC.BAPIDEFAUL | Sequence | neue BAPIDEFAUL() |
logondata | SAPECC.BAPILOGOND | Sequence | neue BAPILOGOND() |
getDetailRetTable | SAPECC.TABLE_OF_BAPIRET2 | Sequence | neue TABLE_OF_BAPIRET2() |
Ihre IF-Aktivität sieht folgendermaßen aus:
- Ziehen Sie die Aktivität CreateCSEntryChangeScope in Ihre Sequenzaktivität und legen Sie sie dort ab. Geben Sie in der DN-Eigenschaft schemaType.Name & item.USERNAME ein. In das Feld CreateAnchorAttribute AnchorValue geben Sie item.username ein.
- Um die Details der einzelnen Benutzer abzurufen, ziehen Sie die Aktivität WebServiceCall aus der Toolbox in die Aktivität Sequence, direkt vor die Aktivität CreateAnchorAttribute. Wählen Sie den SAPECC-Dienstnamen, den Endpunkt ZSAPCONNECTORWS und die Operation BAPI_USER_GET_DETAIL. Wählen Sie die Schaltfläche "Argumente", um Parameter für den Webdienstaufruf wie folgt festzulegen:
Name | Direction | type | Wert |
---|---|---|---|
RETURN | Ein/Aus | TABLE_OF_BAPIRET2 | getDetailRetTable |
USERNAME | In | String | item.username |
ADRESSE | aus | BAPIADDR3 | address |
COMPANY | aus | BAPIUSCOMP | company |
STANDARDWERTE | aus | BAPIUSDEFAUL | Standardwerte |
LOGONDATA | aus | BAPILOGOND | logonData |
WITH_USERNAME | In | String | |
ROWS | aus | Int32 | returnedSize |
- Wählen Sie "OK" aus. Das Warnzeichen wird ausgeblendet. Die Details der Benutzenden werden in den oben aufgeführten Variablen gespeichert. Ihre IF-Aktivität sieht folgendermaßen aus:
- Um die Ergebnisse des BAPI_USER_GET_DETAIL-Vorgangs zu überprüfen, ziehen Sie die WENN-Aktivität aus der Toolbox, und legen Sie sie in die Sequence-Aktivität zwischen WebServiceCall- und CreateAnchorAttribute-Aktivitäten. Geben Sie diese Bedingung ein:
IsNothing(getDetailRetTable.item) OrElse getDetailRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
Da fehlende Benutzerdetails nicht wie eine Katastrophe behandelt werden sollten, sollten wir auf diesen Fehler hinweisen und mit der Verarbeitung anderer Benutzender fortfahren. Ziehen Sie die Sequenzaktivität in die Else-Verzweigung Ihrer WENN-Aktivität, und legen Sie sie dort ab. Fügen Sie „Protokollaktivität“ innerhalb dieser neuen Sequence-Aktivität hinzu. Wechseln Sie zur Registerkarte „Eigenschaften“, und ändern Sie die Eigenschaft „Level“ in „Hoch“ und „Tag“ in „Trace“. Geben Sie Folgendes in die LogText-Eigenschaft ein: string.Join("\n", getDetailRetTable.item.Select (Function(item) item.MESSAGE ))
- Ziehen Sie die Sequence-Aktivität in die Then-Verzweigung der WENN-Aktivität. Ziehen Sie die vorhandene CreateAnchorAttribute-Aktivität in die Sequence-Aktivität innerhalb der Then-Verzweigung der WENN-Aktivität. Ihre ForEach-Aktivität sieht nun wie folgt aus:
- Fügen Sie für jede Eigenschaft von Benutzernden wie Stadt, Firma, Abteilung, E-Mail die WENN-Aktivität nach der CreateAnchorAttribute-Aktivität hinzu, und suchen Sie nach nicht leeren Werten, indem Sie Bedingungen wie
Not string.IsNullOrEmpty(address.city)
eingeben und CreateAttributeChange-Aktivitäten in der Then-Verzweigung dieser WENN-Aktivität hinzufügen.
Beispiel: Hinzufügen von CreateAttributeChange-Aktivitäten für alle Benutzereigenschaften mithilfe dieser Zuordnungstabelle:
ECMA-Benutzereigenschaft | SAP-Eigenschaft |
---|---|
city | address.city |
department | address.department |
company | company.company |
address.e_mail | |
firstName | address.firstName |
lastName | address.lastName |
middleName | address.middleName |
jobTitle | address.function |
expirationTime | logonData.GLTGB |
telephoneNumber | adress.TEL1_NUMBR |
- Fügen Sie schließlich die SetImportStatusCode-Aktivität nach der letzten CreateAttributeChange-Aktivität hinzu. Legen Sie ErrorCode in der then-Verzweigung auf „Erfolg“ fest. Fügen Sie in der Else-Verzweigung eine weitere SetImportStatus-Codeaktivität hinzu, und legen Sie ErrorCode auf ImportErrorCustomContinueRun fest.
- Reduzieren Sie die Sequenzaktivität innerhalb der ForEach-Aktivität, damit Ihr DoWhile-Zyklus wie folgt aussieht:
- Aktualisieren Sie die
selRangeTable.item(0).LOW
-Eigenschaft, um die nächste Seite von Benutzenden abzurufen. Ziehen Sie die WENN-Aktivität in die Sequenzaktivität innerhalb von „DoWhile“ und legen Sie sie dort ab. Platzieren Sie dies nach der vorhandenen WENN-Aktivität. Geben Sie „returnedSize>0“ als Bedingung ein. Fügen Sie die Assign-Aktivität in der Then-Verzweigung der WENN-Aktivität hinzu, und setzen SieselRangeTable.item(0).LOW
aufusersTable.item(returnedSize-1).username
.
Sie haben die Definition des vollständigen Import-Workflows abgeschlossen.
Erstellen eines Workflows zum Hinzufügen von Exporten
Um Benutzende in SAP ECC zu erstellen, können Sie das BAPI_USER_CREATE1-Programm aufrufen und alle Parameter bereitstellen, einschließlich eines Kontonamens und eines anfänglichen Kennworts. Wenn Sie einen Kontonamen benötigen, der auf der SAP-Seite generiert werden soll, wenden Sie sich an die bzw. den SAP-Admin, und verwenden Sie eine benutzerdefinierte BAPI-Funktion, die eine UserName-Eigenschaft eines neu erstellten Benutzerkontos zurückgibt.
In diesem Handbuch wird keine Zuweisung von Lizenzen, lokalen oder globalen Aktivitätsgruppen, Systemen oder Profilen veranschaulicht. Wenden Sie sich an die bzw. den SAP-Admin, und ändern Sie diesen Workflow entsprechend.
Es ist nicht erforderlich, eine Paginierung in Exportworkflows zu implementieren. Im Workflowkontext ist nur ein „objektToExport“-Objekt verfügbar.
- Navigieren Sie zu Objekttypen -> Benutzende-> Exportieren -> Workflow hinzufügen und ziehen Sie aus der Toolbox auf der rechten Seite die Aktivität Sequenz in den Workflow-Designerbereich.
- Suchen Sie unten links die Schaltfläche "Variablen", und wählen Sie sie aus, um eine Liste der variablen zu erweitern, die in dieser Sequenz definiert sind.
- Fügen Sie die folgenden Variablen hinzu: Um einen aus der SAP WSDL generierten Variablentyp auszuwählen, wählen Sie „Nach Typen suchen“ aus und erweitern Sie generiert und dann den SAPECC-Namespace. Dadurch werden die Datenstrukturen initialisiert, die von BAPI_USER_CREATE1 Programm verwendet werden.
Name | Variablentyp | `Scope` | Standard |
---|---|---|---|
address | SAPECC.BAPIADDR3 | Sequence | neue BAPIADDR3() |
userName | String | Sequence | |
Kennwort | SAPECC. BAPIPWD | Sequence | new BAPIPWD() |
company | SAPECC.BAPIUSCOMP | Sequence | neue BAPIUSCOMP() |
Standardwerte | SAPECC.BAPIDEFAUL | Sequence | neue BAPIDEFAUL() |
logOnData | SAPECC.BAPILOGOND | Sequence | neue BAPILOGOND() |
bapiret2Table | SAPECC.TABLE_OF_BAPIRET2 | Sequence | neue TABLE_OF_BAPIRET2() |
- Da wir die Eigenschaft "userName" als unveränderliche ID definiert haben, müssen wir den UserName-Wert aus einer Sammlung von Ankern unseres Exportobjekts extrahieren. Ziehen Sie die Aktivität ForEachWithBodyFactory aus der Toolbox in Ihre Sequenz-Aktivität und legen Sie sie dort ab. Ersetzen Sie den Variablennamen item durch Anker, wechseln Sie zu Eigenschaften und wählen Sie TypeArgument von
Microsoft.MetadirectoryServices.AnchorAttribute
. Geben Sie in das Feld „Wert“objectToExport.AnchorAttributes
ein.
- Um einen Zeichenfolgewert eines Benutzernamen-Ankers zu extrahieren, ziehen Sie die Aktivität Switch in die Aktivität ForEach und legen sie dort ab. Wählen Sie im Popupfenster
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
den Typ eines Wechsels aus. Geben Sie den Ausdruckswert ein: New AnchorAttributeNameWrapper(anchor.Name). - Wählen Sie im Bereich „Neuen Fall hinzufügen“ die Aktivität „Wechseln“ aus. Geben Sie Benutzername als Fallwert ein. Ziehen Sie die Aktivität Zuweisen in den Fallkörper Benutzerame und weisen Sie die Variable anchor.Value.ToString() der Variablen Benutzername zu.
- Nachdem wir den Wert „userName“ aus der Anker-Eigenschaft des exportierten Objekts extrahiert haben, müssen wir nun andere Strukturen wie Unternehmen, Standardwerte, Adresse und Anmeldedaten auffüllen, die andere SAP-Benutzerdetails enthalten. Dazu durchlaufen wir eine Sammlung von Attributänderungen.
- Klappen Sie Ihre ForEach-Aktivität zu und ziehen Sie eine weitere ForEachWithBothFactory-Aktivität innerhalb Ihrer Sequence-Aktivität nach der bestehenden ForEach-Aktivität. Ersetzen Sie den Variablennamen item durch attributeChange, wechseln Sie zu Eigenschaften und wählen Sie TypeArgument von
Microsoft.MetadirectoryServices.AttributeChange
. Geben Sie in das Feld „Wert“objectToExport.AttributeChanges
ein.
- Ziehen Sie die Aktivität Switch in den Körper Ihrer ForEach-Aktivität und legen Sie sie dort ab.
- Wählen Sie im Popupmenü
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
aus, und wählen Sie "OK" aus. - Geben Sie den folgenden Ausdruck ein: New AttributeNameWrapper(attributeChange.Name). In der oberen rechten Ecke Ihrer Switch-Aktivität wird ein Warnsymbol zu unbehandelten Attributen angezeigt, die im Schema definiert sind und keiner Eigenschaft zugewiesen sind.
- Wählen Sie im Bereich „Neuen Fall hinzufügen“ die Aktivität „Wechseln“ aus und geben Sie einen Fallwert Stadt ein.
- Ziehen Sie die Aktivität Zuordnen per Ziehen und Ablegen in den Hauptteil des Falles. Zuweisen
attributeChange.ValueChanges(0).Value.ToString()
zu address.city.
- Fügen Sie weitere fehlende Fälle und Zuordnungen hinzu. Verwenden Sie diese Mapping-Tabelle als Richtlinie:
Case | Zuweisung |
---|---|
city | address.city = attributeChange.ValueChanges(0)Value.ToString() |
company | company = attributeChange.ValueChanges(0)Value.ToString() |
department | address.department = attributeChange.ValueChanges(0)Value.ToString() |
address.e_mail = attributeChange.ValueChanges(0)Value.ToString() | |
expirationTime | logOnData.GLTGB = attributeChange.ValueChanges(0)Value.ToString() |
firstname | address.firstname = attributeChange.ValueChanges(0)Value.ToString() |
lastName | address.lastname = attributeChange.ValueChanges(0)Value.ToString() |
middleName | address.middlename = attributeChange.ValueChanges(0)Value.ToString() |
telephoneNumber | Adresse. TEL1_Numbr = attributeChange.ValueChanges(0)Value.ToString() |
jobTitle | address.function = attributeChange.ValueChanges(0)Value.ToString() |
export_password | password.BAPIPWD1 = attributeChange.ValueChanges(0)Value.ToString() |
Hier ist export_password ein spezielles virtuelles Attribut, das immer im Schema definiert ist und verwendet werden kann, um ein anfängliches Kennwort des erstellten Benutzers zu übergeben.
- Klappen Sie Ihre ForEach-Aktivität zu und ziehen Sie die IF-Aktivität nach der zweiten ForEach-Aktivität in die Sequenz-Aktivität, um die Benutzereigenschaften zu validieren, bevor Sie die Anforderung zum Erstellen eines Benutzenden übermitteln. Wir benötigen mindestens 3 nicht leere Werte: Benutzername, Nachname, Anfangskennwort. Geben Sie diese Bedingung ein:
(String.IsNullOrEmpty(address.lastname) = False ) AND (String.IsNullOrEmpty(userName) = False) AND (String.IsNullOrEmpty(password.BAPIPWD1) = False)
- Fügen Sie im Else-Zweig der WENN-Aktivität eine weitere WENN-Aktivität hinzu, da verschiedene Fehler ausgelöst werden sollen, je nachdem, was fehlt. Geben Sie den Bedingungswert ein: String.IsNullOrEmpty(userName). Ziehen und Ablegen
CreateCSEntryChangeResult
von Aktivitäten in beide Zweige der zweiten WENN-Aktivität und Einrichten von ErrorCode vonExportErrorMissingAnchorComponent
undExportErrorMissingProvisioningAttribute
.
- Ziehen sie die Sequenzaktivität in der leeren Then-Verzweigung der ersten WENN-Aktivität, und legen Sie sie ab. Ziehen sie die WebSeviceCall-Aktivität innerhalb der Sequenz-Aktivität, und legen Sie sie ab. Wählen Sie den SAPECC-Dienstnamen, den ZSAPCONNECTORWS-Endpunkt und BAPI_USER_CREATE1 Vorgang aus. Klicken Sie auf die Schaltfläche "Argumente", um die Parameter für den Webdienstaufruf wie folgt zu definieren:
Name | Direction | type | Wert |
---|---|---|---|
ADRESSE | In | BAPIADDR3 | address |
COMPANY | In | BAPIUSCOMP | company |
STANDARDWERTE | In | BAPIDEFAUL | Standardwerte |
LOGONDATA | In | BAPILOGOND | logOnData |
PASSWORD | In | BAPIPWD | Kennwort |
RETURN | Ein/Aus | TABLE_OF_BAPIRET2 | bapiret2Table |
SELF_REGISTER | In | String | "X" |
USERNAME | In | String | userName |
- Wählen Sie "OK" aus. Das Warnzeichen wird ausgeblendet.
- Um das Erstellen von Benutzeranforderungsergebnissen zu verarbeiten, ziehen Sie die WENN-Aktivität innerhalb der Sequenzaktivität nach der WebServiceCall-Aktivität, und legen Sie sie ab. Geben Sie die folgende Bedingung ein:
IsNothing (bapiret2Table.item) OrElse bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Wenn wir keine Fehler erhalten, gehen wir davon aus, dass der Exportvorgang erfolgreich abgeschlossen wurde, und wir wollen den erfolgreichen Export dieses Objekts durch die Erstellung von CSEntryChangeResult mit dem Status Success anzeigen. Ziehen Sie die CreateCSEntryChangeResult-Aktivität in die Else-Verzweigung Ihrer WENN-Aktivität, und wählen Sie den Fehlercode „Erfolg“ aus.
- Optional: Wenn der Webdienstaufruf einen generierten Kontonamen der Benutzenden zurückgibt, müssen wir einen Ankerwert des exportierten Objekts aktualisieren. Ziehen Sie dazu die
CreateAttrubuteChange
Aktivität per Ziehen und Ablegen in dieCreateCSEntryChangeResult
Aktivität und wählen Sie Benutzernamen hinzufügen. Ziehen Sie dieCreateValueChange
-Aktivität innerhalb derCreateAttributeChange
-Aktivität, und geben Sie den Variablennamen ein, der von einer Webdienstaufrufaktivität ausgefüllt wird. In diesem Handbuch verwenden Sie die UserName-Variable, die beim Export nicht aktualisiert wird.
- Der letzte Schritt im Workflow Export hinzufügen besteht darin, Exportfehler zu behandeln und zu protokollieren. Ziehen Sie die Aktivität Sequenz in den leeren Then-Zweig Ihrer IF-Aktivität und legen Sie sie dort ab.
- Ziehen Sie die Aktivität Protokoll in die Aktivität Sequenz und legen Sie sie dort ab. Wechseln Sie auf die Registerkarte Eigenschaften und geben Sie den Wert LogText von:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E"))
.NACHRICHT. Behalten Sie den hohen Protokolliergrad und das Überwachungs-Tag bei. Dadurch wird eine Fehlermeldung in ConnectorsLog oder im ECMA2Host-Ereignisprotokoll protokolliert, wenn die ausführliche Ablaufverfolgung aktiviert ist. - Ziehen Sie die Switch-Aktivität innerhalb der Sequenzaktivität nach der Protokollaktivität, und legen Sie sie ab. Wählen Sie im Popupfenster den Zeichenfolgentyp des Wechselwerts aus. Geben Sie den folgenden Ausdruck ein:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Wählen Sie den Standardfall aus und ziehen Sie die CreateCSEntryChangeResult-Aktivität per Drag & Drop in den Inhalt dieses Falles. Wählen Sie den Fehlercode ExportErrorInvalidProvisioningAttributeValue.
- Wählen Sie im Bereich "Neuen Fall hinzufügen" aus, und geben Sie einen Fallwert von 224 ein. Ziehen Sie die Aktivität
CreateCSEntryChangeResult
in den Körper dieses Falles und legen Sie sie dort ab. Wählen SieExportErrorCustomContinueRun
Fehlercode aus.
Sie haben die Definition des Workflows Export hinzufügen abgeschlossen.
Workflow Export löschen erstellen
Um einen Benutzer in SAP ECC zu löschen, können Sie BAPI_USER_DELETE Programm aufrufen und einen Kontonamen angeben, der im verbundenen System gelöscht werden soll. Wenden Sie sich an Ihren SAP-Administrator, um festzustellen, ob dieses Szenario obligatorisch ist. Meistens werden SAP ECC-Konten nicht gelöscht, sondern so festgelegt, dass sie ablaufen und Verlaufsaufzeichnungen beibehalten werden.
Dieser Anleitung deckt keine Szenarien ab, die sich auf das SAP Common User Administration System, das Aufheben von Bereitstellungen von Benutzenden aus angeschlossenen Systemen, den Entzug von Lizenzen usw. beziehen.
Es ist nicht erforderlich, eine Paginierung in Exportworkflows zu implementieren. Im Workflowkontext ist nur ein „objektToExport“-Objekt verfügbar.
- Navigieren Sie zu Objekttypen -> Benutzende -> Exportieren -> Workflow löschen und ziehen Sie aus der Toolbox auf der rechten Seite die Aktivität Sequenz in den Workflow-Designer-Bereich.
- Suchen Sie unten links die Schaltfläche "Variablen", und wählen Sie sie aus, um eine Liste der variablen zu erweitern, die in dieser Sequenz definiert sind.
- Fügen Sie die folgenden Variablen hinzu: Um einen aus der SAP WSDL generierten Variablentyp auszuwählen, wählen Sie „Nach Typen suchen“ aus und erweitern Sie generiert und dann den SAPECC-Namespace. Dadurch werden die Datenstrukturen initialisiert, die von BAPI_USER_DELETE Programm verwendet werden.
Name | Variablentyp | `Scope` | Standard |
---|---|---|---|
userName | String | Sequence | |
bapiret2Table | SAPECC.TABLE_OF_BAPIRET2 | Sequence | neue TABLE_OF_BAPIRET2() |
- Da wir die Eigenschaft "userName" als unveränderliche ID definiert haben, müssen wir den UserName-Wert aus einer Sammlung von Ankern unseres Exportobjekts extrahieren. Ziehen Sie die Aktivität ForEachWithBodyFactory aus der Toolbox in Ihre Sequenz-Aktivität und legen Sie sie dort ab. Ersetzen Sie den Variablennamen item durch Anker, wechseln Sie zu Eigenschaften und wählen Sie TypeArgument von
Microsoft.MetadirectoryServices.AnchorAttribute
. Geben Sie in das Feld „Wert“objectToExport.AnchorAttributes
ein.
- Um einen Zeichenfolgewert eines Benutzernamen-Ankers zu extrahieren, ziehen Sie die Aktivität Switch in die Aktivität ForEach und legen sie dort ab. Wählen Sie im Popupfenster
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
den Typ eines Wechsels aus. Geben Sie Ausdruckswert von ein: NeuAnchorAttributeNameWrapper(anchor.Name)
. Wählen Sie im Bereich „Neuen Fall hinzufügen“ die Aktivität „Wechseln“ aus. Geben Sie Benutzername als Fallwert ein. Ziehen Sie die Aktivität Zuweisen in den Fallkörper Benutzername und weisen Sie der Variablen Benutzernameanchor.Value.ToString()
zu. - Ziehen Sie die Aktivität WebSeviceCall in die Aktivität Sequenz nach der Aktivität ForEach und legen Sie sie dort ab. Wählen Sie den SAPECC-Dienstnamen, den ZSAPCONNECTORWS-Endpunkt und BAPI_USER_DELETE Vorgang aus. Wählen Sie die Schaltfläche "Argumente", um Parameter für den Webdienstaufruf folgendermaßen festzulegen:
Name | Direction | type | Wert |
---|---|---|---|
RETURN | Ein/Aus | TABLE_OF_BAPIRET2 | bapiret2Table |
USERNAME | In | String | userName |
- Wählen Sie "OK" aus. Das Warnzeichen wird ausgeblendet.
- Um die Ergebnisse von Löschanfragen zu verarbeiten, ziehen Sie die Aktivität IF in die Aktivität Sequenz nach der Aktivität WebServiceCall und legen Sie sie dort ab. Geben Sie die folgende Bedingung ein:
If(bapiRet2Table.item, Enumerable.Empty(Of BAPIRET2)()).Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Wenn wir keine Fehler erhalten, gehen wir davon aus, dass der Löschvorgang erfolgreich abgeschlossen wurde, und wir wollen den erfolgreichen Export dieses Objekts durch die Erstellung von
CSEntryChangeResult
mit dem Status Erfolg anzeigen. Ziehen Sie die AktivitätCreateCSEntryChangeResult
in den Zweig „Else“ Ihrer IF-Aktivität und wählen Sie den Fehlercode Erfolg.
- Der letzte Schritt im Workflow Export löschen besteht darin, Exportfehler zu behandeln und zu protokollieren. Ziehen Sie die Aktivität Sequenz in den leeren Then-Zweig Ihrer IF-Aktivität und legen Sie sie dort ab.
- Ziehen Sie die Aktivität Protokoll in die Aktivität Sequenz und legen Sie sie dort ab. Wechseln Sie auf die Registerkarte Eigenschaften und geben Sie den Wert LogText von:
bapiRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")= True).MESSAGE
. Behalten Sie den hohen Protokolliergrad und das Überwachungs-Tag bei. Dies protokolliert eine Fehlermeldung im ConnectorsLog oder ECMA2Host-Ereignisprotokoll, wenn die ausführliche Ablaufverfolgung aktiviert ist. - Ziehen Sie die Switch-Aktivität innerhalb der Sequenzaktivität nach der Protokollaktivität, und legen Sie sie ab. Wählen Sie im Popupfenster den Zeichenfolgentyp des Wechselwerts aus. Geben Sie den folgenden Ausdruck ein:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Wählen Sie den Standardfall aus und ziehen Sie die CreateCSEntryChangeResult-Aktivität per Drag & Drop in den Inhalt dieses Falles. Wählen Sie ExportErrorSyntaxViolation-Fehlercode aus.
- Wählen Sie im Bereich "Neuen Fall hinzufügen" aus, und geben Sie einen Fallwert von 124 ein. Ziehen Sie die Aktivität
CreateCSEntryChangeResult
in den Körper dieses Falles und legen Sie sie dort ab. Wählen SieExportErrorCustomContinueRun
Fehlercode aus.
Sie haben die Definition des Workflows Export löschen abgeschlossen.
Workflow zum Erstellen des Exportersetzungsworkflows
Um einen Benutzer in SAP ECC zu aktualisieren, können Sie das Programm BAPI_USER_CHANGE aufrufen und alle Parameter einschließlich eines Kontonamens und aller Benutzerdetails bereitstellen, einschließlich solcher, die nicht geändert werden. Der ECMA2-Exportmodus, wenn alle Benutzereigenschaften bereitgestellt werden sollen, wird als Ersetzen bezeichnet. Im Vergleich dazu bietet der Exportmodus von AttributeUpdate nur Attribute, die geändert werden, und dies kann dazu führen, dass einige Benutzereigenschaften mit leeren Werten überschrieben werden. Daher verwendet der Webdienst-Connektor immer den Exportmodus "Objekt ersetzen" und erwartet, dass der Konnektor für "Export Typ" konfiguriert ist: Ersetzen.
Der Workflow Export ersetzen ist fast identisch mit dem Workflow Export hinzufügen. Der einzige Unterschied besteht darin, dass Sie zusätzliche Parameter wie addressX oder companyX für das BAPI_USER_CHANGE Programm angeben müssen. Das X am Ende von AddressX gibt an, dass die Struktur der Adresse eine Änderung enthält.
- Navigieren Sie zu Objekttypen -> Benutzende -> Exportieren -> Workflow ersetzen und ziehen Sie aus der Toolbox auf der rechten Seite die Aktivität Sequenz in den Workflow-Designerbereich.
- Suchen Sie unten links die Schaltfläche "Variablen", und wählen Sie sie aus, um eine Liste der variablen zu erweitern, die in dieser Sequenz definiert sind.
- Fügen Sie die folgenden Variablen hinzu: Um einen aus der SAP WSDL generierten Variablentyp auszuwählen, wählen Sie „Nach Typen suchen“ aus und erweitern Sie generiert und dann den SAPECC-Namespace. Damit werden die vom Programm BAPI_USER_CHANGE verwendeten Datenstrukturen initialisiert.
Name | Variablentyp | `Scope` | Standard |
---|---|---|---|
userName | String | Sequence | |
bapiret2Table | SAPECC.TABLE_OF_BAPIRET2 | Sequence | neue TABLE_OF_BAPIRET2() |
addressX | SAPECC. BAPIADDR3X | Sequence | neue BAPIADDR3X() |
address | SAPECC.BAPIADDR3 | Sequence | neue BAPIADDR3() |
companyX | SAPECC. BAPIUSCOMX | Sequence | new BAPIUSCOMX() |
company | SAPECC.BAPIUSCOMP | Sequence | neue BAPIUSCOMP() |
defaultsX | SAPECC. BAPIDEFAX | Sequence | new BAPIDEFAX() |
Standardwerte | SAPECC.BAPIDEFAUL | Sequence | neue BAPIDEFAUL() |
logOnDataX | SAPECC. BAPILOGONX | Sequence | new BAPILOGONX() |
logOnData | SAPECC.BAPILOGOND | Sequence | neue BAPILOGOND() |
Ihr Workflow zum Ersetzen von Export sieht wie folgt aus:
- Da wir die Eigenschaft "userName" als unveränderliche ID definiert haben, müssen wir den UserName-Wert aus einer Sammlung von Ankern unseres Exportobjekts extrahieren. Ziehen Sie die Aktivität ForEachWithBodyFactory aus der Toolbox in Ihre Sequenz-Aktivität und legen Sie sie dort ab. Ersetzen Sie den Variablennamen item durch Anker, wechseln Sie zu Eigenschaften und wählen Sie TypeArgument von
Microsoft.MetadirectoryServices.AnchorAttribute
. Geben Sie in das Feld „Wert“objectToExport.AnchorAttributes
ein.
- Um einen Zeichenfolgewert eines Benutzernamen-Ankers zu extrahieren, ziehen Sie die Aktivität Switch in die Aktivität ForEach und legen sie dort ab. Wählen Sie im Popupfenster
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
den Typ eines Wechsels aus. Geben Sie Ausdruckswert von ein: NeuAnchorAttributeNameWrapper(anchor.Name)
. Wählen Sie im Bereich „Neuen Fall hinzufügen“ die Aktivität „Wechseln“ aus. Geben Sie Benutzername als Fallwert ein. Ziehen Sie die Aktivität Zuweisen in den Fallkörper Benutzername und weisen Sie der Variablen Benutzernameanchor.Value.ToString()
zu. Ihr Workflow zum Ersetzen von Export sieht wie folgt aus:
- Nachdem wir den Wert „userName“ aus der Anker-Eigenschaft des exportierten Objekts extrahiert haben, müssen wir nun andere Strukturen wie Unternehmen, Standardwerte, Adresse und Anmeldedaten auffüllen, die andere SAP-Benutzerdetails enthalten. Dazu wird die Sammlung aller im Schema definierten Attribute durchlaufen.
- Klappen Sie Ihre ForEach-Aktivität zu und ziehen Sie eine weitere ForEachWithBothFactory-Aktivität innerhalb Ihrer Sequence-Aktivität nach der bestehenden ForEach-Aktivität. Ersetzen Sie den Variablennamen item durch schemaAttr, wechseln Sie zu Eigenschaften und wählen Sie TypeArgument von
Microsoft.MetadirectoryServices.SchemaAttribute
. Geben Sie im "Wert"-FeldschemaType.Attributes
ein.
- Ziehen Sie die Sequenzaktivität in den Textkörper Ihrer ForEach-Aktivität, und legen Sie sie ab. Suchen Sie unten links die Schaltfläche "Variablen", und wählen Sie sie aus, um eine Liste der variablen zu erweitern, die in dieser Sequenz definiert sind. Fügen Sie die folgende Variable hinzu: xValue des Zeichenfolgentyps. Ziehen Sie die Aktivität Zuweisen per Ziehen und Ablegen in Ihre Sequenzaktivität. Weisen Sie xValue den Ausdruck von zu:
If(objectToExport.AttributeChanges.Contains(schemaAttr.Name), objectToExport.AttributeChanges(schemaAttr.Name).ValueChanges(0).Value.ToString(), String.Empty)
Es werden entweder die für den Export bereitgestellten Änderungen für dieses Attribut extrahiert oder es wird mit einer leeren Zeichenfolge initialisiert. Ihr Workflow zum Ersetzen von Export sieht wie folgt aus:
- Ziehen Sie die Aktivität Wechseln nach der Aktivität Zuweisen und legen Sie sie ab. Wählen Sie im Popupmenü
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
aus, und wählen Sie "OK" aus. Geben Sie den folgenden Ausdruck ein: NeuAttributeNameWrapper(schemaAttr.Name)
In der oberen rechten Ecke Ihrer Switch-Aktivität wird ein Warnsymbol angezeigt, das Sie auf unbehandelte Attribute hinweist, die im Schema definiert und keiner Eigenschaft zugewiesen sind. Wählen Sie im Bereich „Neuen Fall hinzufügen“ die Aktivität „Wechseln“ aus und geben Sie einen Fallwert Stadt ein. Ziehen Sie Sequenz-Aktivität in den Körper dieses Falls, und legen Sie sie ab. Ziehen Sie die Aktivität Zuweisen per Ziehen und Ablegen in den Körper des Falles. Weisen Sie der AdresseX.city den Wert „X“ zu. Ziehen Sie eine weitere Zuweisungsaktivität in den Körper dieses Falles und legen Sie sie dort ab. Weisen Sie xValue adress.city zu. Ihr Workflow zum Ersetzen von Export sieht wie folgt aus:
10.Fügen Sie weitere fehlende Fälle und Zuweisungen hinzu. Verwenden Sie diese Mapping-Tabelle als Richtlinie:
Case | Zuweisung |
---|---|
city | addressX.city = "X" address.city = xValue |
company | companyX.company = "X" company.company = xValue |
department | address.departmentX = "X" address.department = xValue |
addressX.e_mail = "X" address.e_mail = xValue | |
expirationTime | logOnDataX.GLTGB = "X" logOnData.GLTGB = xValue |
firstname | addressX.firstname = "X" address.firstname = xValue |
lastName | addressX.lastname = "X" address.lastname = xValue |
middleName | addressX.middlename = "X" address.middlename = xValue |
telephoneNumber | addressX.TEL1_Numbr = "X"-Adresse. TEL1_Numbr = xValue |
jobTitle | addressX.function = "X" address.function = xValue |
Ihr Workflow zum Ersetzen von Export sieht wie folgt aus:
Bevor wir das Programm BAPI_USER_CHANGE aufrufen, müssen wir prüfen, ob der Benutzername nicht leer ist. Klappen Sie beide ForEach-Aktivitäten aus und ziehen Sie die IF-Aktivität nach der zweiten ForEach-Aktivität per Ziehen und Ablegen. Geben Sie die folgende Bedingung ein:
String.IsNullOrEmpty(userName ) = False
Wenn der Benutzername leer ist, möchten wir angeben, dass der Vorgang nicht erfolgreich war. Ziehen Sie die
CreateCSEntryChangeResult
-Aktivität in den „Else“-Zweig Ihrer WENN-Aktivität, und wählen Sie den Fehlercode „ExportErrorCustomContinueRun
“ aus. Ihr Workflow zum Ersetzen von Export sieht wie folgt aus:Ziehen Sie die Sequenzaktivität in der leeren Then-Verzweigung der ersten WENN-Aktivität, und legen Sie sie ab. Ziehen sie die WebSeviceCall-Aktivität innerhalb der Sequenz-Aktivität, und legen Sie sie ab. Wählen Sie den SAPECC-Dienstnamen, den ZSAPCONNECTORWS-Endpunkt und BAPI_USER_CHANGE Vorgang aus. Wählen Sie die Schaltfläche "Argumente", um die Parameter für den Webdienstaufruf wie folgt zu definieren:
Name | Direction | type | Wert |
---|---|---|---|
ADRESSE | In | BAPIADDR3 | address |
ADDRESSX | In | BAPIADDR3X | addressX |
COMPANY | In | BAPIUSCOMP | company |
COMPANYX | In | BAPIUSCOMX | company |
STANDARDWERTE | In | BAPIDEFAUL | Standardwerte |
DEFAULTSX | In | BAPIDEFAX | defaultsX |
LOGONDATA | In | BAPILOGOND | logOnData |
LOGONDATAX | In | BAPILOGONX | logOnDataX |
RETURN | Ein/Aus | TABLE_OF_BAPIRET2 | bapiret2Table |
USERNAME | In | String | userName |
- Wählen Sie "OK" aus. Das Warnzeichen wird ausgeblendet. Ihr Workflow zum Ersetzen von Export sieht wie folgt aus:
- Um die Ergebnisse von Benutzeranfragen zu verarbeiten, ziehen Sie die Aktivität IF in die Aktivität Sequenz nach der Aktivität WebServiceCall. Geben Sie die folgende Bedingung ein:
Not IsNothing(bapiret2Table.item) AndAlso bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Wenn wir keine Fehler erhalten, gehen wir davon aus, dass der Exportvorgang erfolgreich abgeschlossen wurde, und wir wollen den erfolgreichen Export dieses Objekts durch die Erstellung von
CSEntryChangeResult
mit dem Status Erfolg anzeigen. Ziehen Sie die AktivitätCreateCSEntryChangeResult
in den Zweig „Else“ Ihrer IF-Aktivität und wählen Sie den Fehlercode Erfolg. - Ziehen sie die Sequenzaktivität in die Then-Verzweigung Ihrer WENN-Aktivität. Fügen Sie die Aktivität Protokoll mit dem Wert LogText von
string.Join("\n",bapiret2Table.item.Where(Function(retItem) retItem.TYPE.Equals("E")).Select(Function(r) r.MESSAGE))
und dem Fehlertag hinzu. Fügen Sie die AktivitätCreateCSEntryChangeResult
nach der Protokollaktivität mit dem FehlercodeExportErrorCustomContinueRun
hinzu. Ihr Workflow zum Ersetzen von Export sieht wie folgt aus:
Sie haben die Definition des Workflows zum Ersetzen von Export abgeschlossen.
Der nächste Schritt ist die Konfiguration des ECMA2Host Webdienst Connectors unter Verwendung dieser Vorlage.