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 mit einem Profil RFC_ALL verwendet wird, das Berechtigungen für die unten genannten 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ü Datei-Neu die Option Neues SOAP-Projekt erstellen
- Klicken Sie auf SOAP-Projekt, und wählen Sie 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. Klicken Sie auf Weiter.
- Stellen Sie Anmeldeinformationen bereit, um eine Verbindung mit dem SAP ECC-Endpunkt herzustellen. Klicken Sie auf Weiter.
- Stellen Sie auf der Seite Endpunkte und Vorgänge sicher, dass die BAPIs angezeigt werden, und klicken Sie auf Fertigstellen
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.
- Klicken Sie auf die Registerkarte Objekttypen und fügen Sie den Objekttyp Benutzende hinzu. Klicken Sie auf OK.
- Erweitern Sie die Registerkarte Objekttypen und klicken Sie auf Benutzertypdefinition.
- 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 Connektor im Nur-Export-Modus und veranlasst den ECMA2Host, immer Operationen Benutzende erstellen durchzuführen, auch für bestehende Benutzende. 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 unten beschriebenen Ansatzes und einer 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.
- Klicken Sie unten links auf die Schaltfläche Variablen, um eine Liste der in dieser Sequenz definierten Variablen anzuzeigen.
- Fügen Sie die folgenden Variablen hinzu: Um einen aus der SAP WSDL generierten Variablentyp auszuwählen, klicken Sie auf Nach Typen suchen und erweitern Sie generiert und dann den SAPECC-Namespace.
Name | Variablentyp | Bereich | 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
- Klicken Sie auf die Variablen 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.
- Anklicken... Schaltfläche "Argumente", um Parameter für den Webdienstaufruf wie folgt zu definieren:
Name | Direction | Typ | 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 | Geben Sie in | String | |
ROWS | aus | Int32 | returnedSize |
- Klicken Sie auf OK. 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 der Konnektor für eine Landschaft mit 1.000 Benutzenden und einer Seitengröße von 200 5 Aufrufe tätigt, um eine Liste der Benutzenden abzurufen, und 1.000 Einzelaufrufe, um die Benutzerdetails abzurufen. Um die Leistung zu verbessern, bitten Sie Ihr SAP-Team, ein benutzerdefiniertes BAPI-Programm zu entwickeln, das alle Verwendungen mit ihren Eigenschaften auflistet, um die Notwendigkeit von 1000 einzelnen Aufrufen zu vermeiden, und diese BAPI-Funktion über einen SOAP WS-Endpunkt bereitzustellen.
- Ziehen Sie die Aktivität IF aus der Toolbox in Ihre DoWhile-Aktivität nach der Aktivität WebServiceCall 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 Aktivität „Throw“ in den Else-Zweig Ihrer IF-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. Klicken Sie auf die Schaltfläche ... und geben Sie diesen Ausdruck für die Eigenschaft Werte ein:
if(usersTable.item,Enumerable.Empty(of BAPIUSNAME)())
- Ziehen Sie die Aktivität Sequence aus der Toolbox in die Aktivität ForEach und legen Sie sie dort ab. Klicken Sie bei aktivem Aktivitätsfenster "Sequenz“ auf die Schaltfläche "Variablen“ und definieren Sie diese Variablen:
Name | Variablentyp | Bereich | 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. In der Eigenschaft DN geben Sie 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. Anklicken... Schaltfläche "Argumente", um Parameter für den Webdienstaufruf wie folgt zu definieren:
Name | Direction | Typ | Wert |
---|---|---|---|
RETURN | Ein/Aus | TABLE_OF_BAPIRET2 | getDetailRetTable |
USERNAME | Geben Sie in | String | item.username |
ADRESSE | aus | BAPIADDR3 | address |
COMPANY | aus | BAPIUSCOMP | company |
STANDARDWERTE | aus | BAPIUSDEFAUL | Standardwerte |
LOGONDATA | aus | BAPILOGOND | logonData |
WITH_USERNAME | Geben Sie in | String | |
ROWS | aus | Int32 | returnedSize |
- Klicken Sie auf OK. 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 |
---|---|
Ort | 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 Sequence-Aktivität in DoWhile, und legen Sie sie nach der vorhandenen WENN-Aktivität ab. 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.
- Klicken Sie unten links auf die Schaltfläche Variablen, um eine Liste der in dieser Sequenz definierten Variablen anzuzeigen.
- Fügen Sie die folgenden Variablen hinzu: Um einen aus der SAP WSDL generierten Variablentyp auszuwählen, klicken Sie auf Nach Typen suchen und erweitern Sie generiert und dann den SAPECC-Namespace. Dadurch werden die Datenstrukturen initialisiert, die von BAPI_USER_CREATE1 Programm verwendet werden.
Name | Variablentyp | Bereich | 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 Benutzername als eine unveränderliche ID, einen Anker, definiert haben, müssen wir den Wert Benutzername 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 WertobjectToExport.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 Popup-Fenster
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
den Typ eines Wechsels. Geben Sie den Ausdruckswert ein: New AnchorAttributeNameWrapper(anchor.Name). - Klicken Sie auf den Bereich Neuen Fall hinzufügen der Aktivität Wechseln. 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 WertobjectToExport.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 Popup-Menü
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
und klicken Sie auf Ok. - 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.
- Klicken Sie auf den Bereich Neuen Fall hinzufügen der Aktivität Wechseln und geben Sie einen Fallwert von 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 |
---|---|
Ort | 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 Anfangspasswort für den zu erstellenden Benutzenden 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 IF-Aktivität eine weitere IF-Aktivität hinzu, da wir verschiedene Fehler auslösen wollen, 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. Anklicken... Schaltfläche "Argumente", um Parameter für den Webdienstaufruf wie folgt zu definieren:
Name | Direction | Typ | 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 | Geben Sie in | String | "X" |
USERNAME | Geben Sie in | String | userName |
- Klicken Sie auf OK. 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 dieser Anleitung verwenden Sie die Variable Benutzername, 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 Swicht-Werts aus. Geben Sie den folgenden Ausdruck ein:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Klicken Sie auf Standardfall und ziehen Sie die Aktivität CreateCSEntryChangeResult per ZIehen und Ablegen in den Körper dieses Falles. Wählen Sie den Fehlercode ExportErrorInvalidProvisioningAttributeValue.
- Klicken Sie auf den Bereich Neuen Fall hinzufügen 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 Benutzenden 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-Administrierenden, ob dieses Szenario obligatorisch ist, da die meisten SAP ECC-Konten nicht gelöscht werden müssen, sondern abgelaufen sind, um historische Datensätze aufzubewahren.
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.
- Klicken Sie unten links auf die Schaltfläche Variablen, um eine Liste der in dieser Sequenz definierten Variablen anzuzeigen.
- Fügen Sie die folgenden Variablen hinzu: Um einen aus der SAP WSDL generierten Variablentyp auszuwählen, klicken Sie auf Nach Typen suchen und erweitern Sie generiert und dann den SAPECC-Namespace. Dadurch werden die Datenstrukturen initialisiert, die von BAPI_USER_DELETE Programm verwendet werden.
Name | Variablentyp | Bereich | Standard |
---|---|---|---|
userName | String | Sequence | |
bapiret2Table | SAPECC.TABLE_OF_BAPIRET2 | Sequence | neue TABLE_OF_BAPIRET2() |
- Da wir die Eigenschaft Benutzername als eine unveränderliche ID, einen Anker, definiert haben, müssen wir den Wert Benutzername 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 WertobjectToExport.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 Popup-Fenster
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
den Typ eines Wechsels. Geben Sie Ausdruckswert von ein: NeuAnchorAttributeNameWrapper(anchor.Name)
. Klicken Sie auf den Bereich Neuen Fall hinzufügen der Aktivität Wechseln. 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. Anklicken... Schaltfläche "Argumente", um Parameter für den Webdienstaufruf wie folgt zu definieren:
Name | Direction | Typ | Wert |
---|---|---|---|
RETURN | Ein/Aus | TABLE_OF_BAPIRET2 | bapiret2Table |
USERNAME | Geben Sie in | String | userName |
- Klicken Sie auf OK. 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 Swicht-Werts aus. Geben Sie den folgenden Ausdruck ein:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Klicken Sie auf Standardfall und ziehen Sie die Aktivität CreateCSEntryChangeResult per ZIehen und Ablegen in den Körper dieses Falles. Wählen Sie ExportErrorSyntaxViolation-Fehlercode aus.
- Klicken Sie auf den Bereich Neuen Fall hinzufügen 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 Benutzenden in SAP ECC zu aktualisieren, können Sie das Programm BAPI_USER_CHANGE aufrufen und alle Parameter, einschließlich eines Kontonamens und aller Benutzerdetails, einschließlich derer, die nicht geändert werden, angeben. 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 BAPI_USER_CHANGE Programm angeben müssen, wobei X, das auf addressX endet, angibt, 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.
- Klicken Sie unten links auf die Schaltfläche Variablen, um eine Liste der in dieser Sequenz definierten Variablen anzuzeigen.
- Fügen Sie die folgenden Variablen hinzu: Um einen aus der SAP WSDL generierten Variablentyp auszuwählen, klicken Sie auf Nach Typen suchen und erweitern Sie generiert und dann den SAPECC-Namespace. Damit werden die vom Programm BAPI_USER_CHANGE verwendeten Datenstrukturen initialisiert.
Name | Variablentyp | Bereich | 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 Benutzername als eine unveränderliche ID, einen Anker, definiert haben, müssen wir den Wert Benutzername 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 WertobjectToExport.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 Popup-Fenster
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
den Typ eines Wechsels. Geben Sie Ausdruckswert von ein: NeuAnchorAttributeNameWrapper(anchor.Name)
. Klicken Sie auf den Bereich Neuen Fall hinzufügen der Aktivität Wechseln. 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 in das Feld WertschemaType.Attributes
ein.
- Ziehen Sie die Sequenzaktivität in den Textkörper Ihrer ForEach-Aktivität, und legen Sie sie ab. Klicken Sie unten links auf die Schaltfläche Variablen, um eine Liste der in dieser Sequenz definierten Variablen anzuzeigen. 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 Popup-Menü
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
und klicken Sie auf Ok. 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. Klicken Sie auf den Bereich Neuen Fall hinzufügen der Aktivität Wechseln und geben Sie einen Fallwert von 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 |
---|---|
Ort | 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. Anklicken... Schaltfläche "Argumente", um Parameter für den Webdienstaufruf wie folgt zu definieren:
Name | Direction | Typ | 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 | Geben Sie in | String | userName |
- Klicken Sie auf OK. 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.