Freigeben über


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.

  1. Starten Sie im Ordner „C:\Programme\Microsoft ECMA2Host\Web Service Configuration Tool“ das Webdienst Konfigurationstool wsconfigTool.exe
  2. Wählen Sie im Menü Datei-Neu die Option Neues SOAP-Projekt erstellen

Screenshot der Erstellung eines SOAP-Projekts.

  1. Klicken Sie auf SOAP-Projekt, und wählen Sie Neuen Webdienst hinzufügen aus.

Screenshot des Hinzufügens eines neuen Webdiensts.

  1. 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.

Screenshot der Bennenung des Webdienstes.

  1. Stellen Sie Anmeldeinformationen bereit, um eine Verbindung mit dem SAP ECC-Endpunkt herzustellen. Klicken Sie auf Weiter.
  2. 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.

Screenshot von BAPIs.

  1. Speichern Sie das Projekt im Ordner C:\Program Files\Microsoft ECMA2Host\Service\ECMA.
  2. Klicken Sie auf die Registerkarte Objekttypen und fügen Sie den Objekttyp Benutzende hinzu. Klicken Sie auf OK.
  3. Erweitern Sie die Registerkarte Objekttypen und klicken Sie auf Benutzertypdefinition.

Screenshot der Objekttypen.

  1. Fügen Sie die folgenden Attribute in das Schema ein und wählen Sie Benutzername als Anker.

Screenshot: Hinzufügen von benutzerdefinierten Attributen

  1. Speichern Sie das Projekt.
Name type Anchor
city Zeichenfolge
company Zeichenfolge
department Zeichenfolge
email 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.

  1. 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.
  2. Klicken Sie unten links auf die Schaltfläche Variablen, um eine Liste der in dieser Sequenz definierten Variablen anzuzeigen.
  3. 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()

Screenshot des Workflows für den vollständigen Importvorgang.

  1. 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.

Screenshot des vollständigen Import-Workflows.

  1. 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.
  2. Wechseln Sie auf der rechten Seite zur Registerkarte "Eigenschaften" und geben Sie diese Bedingung für die DoWhile ein
  • cycle: returnedSize = pageSize

Screenshot des Bildschirms für die Rückgabegröße.

  1. Klicken Sie auf die Variablen und fügen Sie die Eigenschaft currentPageNumber vom Typ int32 im DoWhile-Zyklus mit dem Standardwert 0 hinzu.

Screenshot des Bildschirms

  1. 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.

Screenshot des Bildschirms mit den benutzerdefinierten Daten.

  1. 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.

Screenshot der Dowhile-Sequenz.

  1. 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
  1. 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.
  2. 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
  3. 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)

Screenshot der Ausnahme-Eigenschaft.

  1. 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)())

Screenshot der IF-Aktivität.

  1. 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:

Screenshot der IF-Aktivität mit foreach.

  1. 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.

Screenshot von CreateCSEntryChangeScope.

  1. 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
  1. 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:

Screenshot der Parameter

  1. 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 ))

  1. 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:

Screenshot von ForEach.

  1. 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.

Screenshot von CreateAttributeChange.

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
email address.e_mail
firstName address.firstName
lastName address.lastName
middleName address.middleName
jobTitle address.function
expirationTime logonData.GLTGB
telephoneNumber adress.TEL1_NUMBR
  1. 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.

Screenshot von SetImportStatusCode

  1. Reduzieren Sie die Sequenzaktivität innerhalb der ForEach-Aktivität, damit Ihr DoWhile-Zyklus wie folgt aussieht:

Screenshot vom DoWhile-Zyklus

  1. 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 Sie selRangeTable.item(0).LOW auf usersTable.item(returnedSize-1).username.

Endgültiger Screenshot von „DoWhile“

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.

  1. 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.
  2. Klicken Sie unten links auf die Schaltfläche Variablen, um eine Liste der in dieser Sequenz definierten Variablen anzuzeigen.
  3. 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()

Screenshot des Workflows zum Hinzufügen von Export.

  1. 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 Wert objectToExport.AnchorAttributes ein.

Screenshot der Sequenz zum Hinzufügen von Exporten.

  1. 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).
  2. 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.

Screenshot des neuen Falls.

  1. 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.
  2. 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.

Screenshot der neuen Sequenz.

  1. Ziehen Sie die Aktivität Switch in den Körper Ihrer ForEach-Aktivität und legen Sie sie dort ab.
  2. Wählen Sie im Popup-Menü Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper und klicken Sie auf Ok.
  3. 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.
  4. Klicken Sie auf den Bereich Neuen Fall hinzufügen der Aktivität Wechseln und geben Sie einen Fallwert von Stadt ein.
  5. Ziehen Sie die Aktivität Zuordnen per Ziehen und Ablegen in den Hauptteil des Falles. Zuweisen attributeChange.ValueChanges(0).Value.ToString() zu address.city.

Screenshot des Workflows neuen Export hinzufügen.

  1. 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()
email 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.

Screenshot der Fälle.

  1. 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)
  2. 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 von ExportErrorMissingAnchorComponent und ExportErrorMissingProvisioningAttribute.

Screenshot der zweiten WENN-Aktivität.

  1. 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
  1. Klicken Sie auf OK. Das Warnzeichen wird ausgeblendet.

Screenshot des Workflows nach Parametern.

  1. 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
  2. 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.
  3. Optional: Wenn der Webdienstaufruf einen generierten Kontonamen der Benutzenden zurückgibt, müssen wir einen Ankerwert des exportierten Objekts aktualisieren. Ziehen Sie dazu die CreateAttrubuteChangeAktivität per Ziehen und Ablegen in die CreateCSEntryChangeResult Aktivität und wählen Sie Benutzernamen hinzufügen. Ziehen Sie die CreateValueChange-Aktivität innerhalb der CreateAttributeChange-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.

Screenshot des aktualisierten Sequenzflows.

  1. 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.
  2. 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.
  3. 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
  4. 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.

Screenshot des neuen Updates für Workflow.

  1. 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 Sie ExportErrorCustomContinueRun Fehlercode aus.

Screenshot der endgültigen Aktualisierung des Workflows.

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.

  1. 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.
  2. Klicken Sie unten links auf die Schaltfläche Variablen, um eine Liste der in dieser Sequenz definierten Variablen anzuzeigen.
  3. 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()
  1. 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 Wert objectToExport.AnchorAttributes ein.

Screenshot des Workflows zum Vorgang Export löschen.

  1. 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: Neu 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 Benutzername und weisen Sie der Variablen Benutzername anchor.Value.ToString() zu.
  2. 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
  1. Klicken Sie auf OK. Das Warnzeichen wird ausgeblendet.

Screenshot des Workflows für den aktualisierten Löschvorgang.

  1. 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
  2. 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ät CreateCSEntryChangeResult in den Zweig „Else“ Ihrer IF-Aktivität und wählen Sie den Fehlercode Erfolg.

Screenshot des Exportlöschworkflows.

  1. 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.
  2. 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.
  3. 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
  4. 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.

Screenshot des Arbeitsablaufs für die Aktualisierung des Export-Löschvorgangs.

  1. 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 Sie ExportErrorCustomContinueRun Fehlercode aus.

Screenshot des Workflows für den endgültigen Exportlöschvorgang.

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.

  1. 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.
  2. Klicken Sie unten links auf die Schaltfläche Variablen, um eine Liste der in dieser Sequenz definierten Variablen anzuzeigen.
  3. 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:

Screenshot des Workflow zum Starten des Ersetzungsvorgangs.

  1. 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 Wert objectToExport.AnchorAttributes ein.

Screenshot des Updates zum Ersetzen des Vorgangsworkflows.

  1. 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: Neu 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 Benutzername und weisen Sie der Variablen Benutzername anchor.Value.ToString() zu. Ihr Workflow zum Ersetzen von Export sieht wie folgt aus:

Screenshot eines weiteren Updates zum Ersetzen des Vorgangsworkflows.

  1. 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.
  2. 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 Wert schemaType.Attributes ein.

Screenshot der Aktivität zum Ersetzen der Vorgangssequenz.

  1. 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:

Screenshot der Aktualisierung der Ersetzungssequenz.

  1. 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: Neu AttributeNameWrapper(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:

Screenshot zum Ziehen und Ablegen der Switch-Aktivität

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
email 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:

Screenshot des zweiten Ziehen und Ablegens der Switch-Aktivität.

  1. 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

  2. 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: Screenshot der CreateCSEntryChangeResult-Aktivität.

  3. 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
  1. Klicken Sie auf OK. Das Warnzeichen wird ausgeblendet. Ihr Workflow zum Ersetzen von Export sieht wie folgt aus:

Screenshot des Vorgangs BAPI_USER_CHANGE.

  1. 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
  2. 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ät CreateCSEntryChangeResult in den Zweig „Else“ Ihrer IF-Aktivität und wählen Sie den Fehlercode Erfolg.
  3. 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ät CreateCSEntryChangeResult nach der Protokollaktivität mit dem Fehlercode ExportErrorCustomContinueRun hinzu. Ihr Workflow zum Ersetzen von Export sieht wie folgt aus:

Screenshot des endgültigen Exportersetzungsworkflows.

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.

Nächste Schritte