Delen via


De sjabloon voor de SAP ECC 7.51-webserviceconnector voor de ECMA2Host ontwerpen

Deze handleiding begeleidt u bij het maken van een sjabloon voor de ECMA-connector (Web Service Extensibility Connectivity Management Agent) voor het beheren van SAP ECC-gebruikers.

Beperkingen en veronderstellingen

Deze sjabloon laat zien hoe u gebruikers beheert. Andere objecttypen, zoals lokale activiteitsgroepen, rollen en profielen, vallen niet onder deze handleiding, omdat ECMA2Host momenteel geen verwijzingen met meerdere waarden ondersteunt. Wachtwoordbewerkingen vallen ook buiten het bereik van deze handleiding.

Deze handleiding heeft geen betrekking op het maken van het serviceaccount in SAP dat wordt gebruikt om de weergegeven BAPI-functies aan te roepen. Hierbij wordt ervan uitgegaan dat een vooraf gemaakt demo-account Developer wordt gebruikt met een profiel RFC_ALL die machtigingen verleent aan de IN dit artikel genoemde BAP's.

Het hulpprogramma voor webserviceconfiguratie biedt geen ondersteuning voor de volgende functies die standaard beschikbaar zijn in SAP: WSP-beleid en meerdere bindingen per eindpunt. Er wordt wel een WSDL met SOAP 1.1 verwacht, all-in-one documentstijlbinding zonder beleid.

SAP ECC BAPI-functies die in deze sjabloon worden gebruikt:

  • BAPI_USER_GETLIST : een lijst ophalen met alle gebruikers die zijn verbonden met dit systeem.
  • BAPI_USER_GETDETAIL - details van specifieke gebruiker ophalen.
  • BAPI_USER_CREATE1 : maakt een gebruiker.
  • BAPI_USER_DELETE : hiermee verwijdert u een gebruiker.
  • BAPI_USER_CHANGE : werkt een gebruiker bij.

Alle SAP-gebruikerseigenschappen in deze handleiding worden behandeld als eigenschappen met één waarde.

De gebruikte programmeertaal is Visual Basic.

Een webservice-eindpunt definiëren en een schema maken

Voordat u import- en exportwerkstromen kunt ontwerpen, moet u een sjabloon maken en een eindpunt definiëren met de SAP BAPI-functies die worden weergegeven via een SOAP-interface. Maak vervolgens een schema van de ECMA2-objecten en de bijbehorende eigenschappen zijn beschikbaar in deze sjabloon.

  1. Start het hulpprogramma Web Service Configuration in de map C:\Program Files\Microsoft ECMA2Host\Web Service Configuration Tool wsconfigTool.exe
  2. Kies een nieuw SOAP-project maken in het menu File-New

Schermopname van het SOAP-project maken.

  1. Selecteer SOAP Project en kies Nieuwe webservice toevoegen.

Schermopname van het toevoegen van een nieuwe webservice.

  1. Geef de naam van uw webservice SAPECC op, geef een URL op voor het downloaden van WSDL gepubliceerd, voer SAPECC in als naamruimte. Met de naam van de webservice kunt u deze webservice in uw sjabloon onderscheiden van anderen. Naamruimte definieert een naam van de Microsoft .NET-naamruimte die wordt gebruikt voor het genereren van klassen. Kies de basisverificatiemodus, tenzij anders wordt aangegeven door SAP-beheerder. Selecteer Volgende.

Schermopname van de naamgevingswebservice.

  1. Geef referenties op om verbinding te maken met het SAP ECC-eindpunt. Selecteer Volgende.
  2. Controleer op de pagina eindpunten en operaties of de BAPI's worden weergegeven en selecteer Voltooien

Notitie

als u meer dan één eindpunt ziet, zijn zowel SOAP 1.2- als SOAP 1.1-bindingen ingeschakeld. Dit zorgt ervoor dat de connector mislukt. Wijzig uw bindingsdefinitie in SOAMANAGER en bewaar er slechts één. Voeg vervolgens een webservice opnieuw toe.

Schermopname van API's.

  1. Sla het project op in de map C:\Program Files\Microsoft ECMA2Host\Service\ECMA.
  2. Selecteer op het tabblad Objecttypen en kies ervoor om het objecttype Gebruiker toe te voegen. Selecteer OK.
  3. Vouw het tabblad Objecttypen uit en selecteer de definitie van het gebruikerstype.

Schermopname van objecttypen.

  1. Voeg de volgende kenmerken toe aan het schema en kies userName als anker.

Schermopname van het toevoegen van kenmerken.

  1. Sla uw project op.
Name Type Anker
plaats tekenreeks
bedrijf tekenreeks
afdeling tekenreeks
e-mail tekenreeks
expirationTime tekenreeks
firstName tekenreeks
lastName tekenreeks
middleName tekenreeks
telephoneNumber tekenreeks
jobTitle tekenreeks
gebruikersnaam tekenreeks geselecteerd

Een volledige importwerkstroom maken

Met de importwerkstroom, terwijl u optioneel bent in ECMA2Host, kunt u bestaande SAP-gebruikers importeren in de cache van ECMA2Host in het geheugen en voorkomen dat er dubbele gebruikers worden gemaakt tijdens het inrichten.

Wanneer u geen importwerkstroom maakt, werkt uw connector in de modus Alleen-exporteren en zorgt ervoor dat de ECMA2Host altijd Maak gebruiker bewerkingen uitvoert, zelfs voor bestaande gebruikers. Dit kan leiden tot fouten of duplicaten wanneer standaard SAP-API's worden gebruikt, tenzij duplicaten worden verwerkt door de exportwerkstroom.

SAP ECC biedt geen ingebouwd mechanisme voor het lezen van wijzigingen die zijn aangebracht sinds de laatste leesbewerking.

Daarom implementeren we alleen de volledige importwerkstroom. Als u Delta Imports wilt implementeren om prestatieredenen, raadpleegt u uw SAP-beheerder voor een lijst met BAP's en laat u deze publiceren als een SOAP-webservice. Implementeer vervolgens de Delta Import-werkstroom met behulp van de volgende benadering, zoals beschreven en een customData-eigenschap die een tijdstempel van de vorige geslaagde uitvoering bevat.

SAP ECC biedt verschillende BAPI-functies om een lijst met gebruikers met hun eigenschappen op te halen:

  • BAPI_USER_GETLIST : een lijst ophalen met alle gebruikers die zijn verbonden met dit systeem.
  • BAPI_USER_GETDETAIL - details van specifieke gebruiker ophalen.

Alleen deze twee BAP's worden gebruikt om bestaande gebruikers op te halen uit SAP ECC in deze sjabloon.

  1. Navigeer naar Objecttypen -> Gebruiker -> Importeren -> Werkstroom volledig importeren en vanuit de Werkset aan de rechterkant sleept en zet u de reeksactiviteit neer in het deelvenster Werkstroomontwerper.
  2. Zoek linksonder de knop Variabelen en selecteer deze om een lijst met variabelen uit te vouwen die in deze reeks zijn gedefinieerd.
  3. Voeg de volgende variabelen toe. Als u een variabeletype wilt selecteren dat is gegenereerd op basis van de SAP WSDL, selecteert u bladeren naar typen en vouwt u gegenereerde uit en vouwt u vervolgens SAPECC-naamruimte uit.
Name Type variabele Bereik Standaardinstelling
selRangeTable SAPECC. TABLE_OF_BAPIUSSRGE Sequence nieuwe TABLE_OF_BAPIUSSRGE met {.item = new BAPIAPIAPI URLGE(){new BAPI URLGE}}
getListRetTable SAPECC. TABLE_OF_BAPIRET2 Sequence nieuwe TABLE_OF_BAPIRET2
Pagesize Int32 Sequence 200
returnedSize Int32 Sequence
usersTable SAPECC. TABLE_OF_BAPIUSNAME Sequence nieuwe TABLE_OF_BAPIUSNAME()

Schermopname van de werkstroom voor de volledige importbewerking.

  1. Sleep vier Assign-activiteiten van de gereedschapskist in uw sequentie-activiteit en stel deze waarden in:
selRangeTable.item(0).PARAMETER = "USERNAME" 
selRangeTable.item(0).SIGN = "I" selRangeTable.item(0).OPTION = "GT" selRangeTable.item(0).LOW = ""   

Deze parameters die worden gebruikt om de BAPI_USER_GETLIST-functie aan te roepen en paginering te implementeren.

Schermopname van de volledige importwerkstroom.

  1. Als u paginering wilt implementeren, sleept u de DoWhile-activiteit vanuit de werkset naar uw reeksactiviteit na de laatste toewijzingsbewerking.
  2. Ga in het rechterdeelvenster naar het tabblad Eigenschappen en voer deze voorwaarde in voor DoWhile
  • cyclus: returnedSize = pageSize

Schermopname van het scherm Returnedsize.

  1. Selecteer de variabelen en voeg de eigenschap currentPageNumber van het int32-type in DoWhile-cyclus toe met de standaardwaarde 0.

Schermopname van het scherm DoWhile.

  1. Optionele stap: als u van plan bent om een Delta Import-werkstroom te implementeren, sleept u vanuit de werkset de activiteit Toewijzen binnen uw reeksactiviteit na dowhile-cyclus. Stel deze waarde in:
  • customData(schemaType.Name + "_lastImportTime") = DateTimeOffset.UtcNow.Ticks.ToString() Hiermee wordt de datum en tijd van de laatste volledige importuitvoering opgeslagen. Deze tijdstempel kan later worden gebruikt in de Delta Import-werkstroom.

Schermopname van het customdata-scherm.

  1. Sleep vanuit de werkset de reeksactiviteit in uw DoWhile-activiteit. Sleep de WebServiceCall-activiteit binnen die reeksactiviteit en selecteer de NAAM van de SAPECC-service, het ZSAPCONNECTORWS-eindpunt en BAPI_USER_GETLIST bewerking.

Schermopname van dowhile sequence.

  1. Selecteer op ... Knop Argumenten om parameters voor webservice-aanroep als volgt te definiëren:
Name Richting Type Weergegeven als
MAX_ROWS In Int32 Pagesize
MAX_ROWSSpecified In Booleaanse waarde Waar
TERUGKEREN In/Out TABLE_OF_BAPIRET2 getListRetTable
SELECTION_EXP In/Out TABLE_OF_BAPIUSSEXP
SELECTION_RANGE In/Out TABLE_OF_BAPIUSSRGE selRangeTable
USERLIST In/Out TABLE_OF_BAPIUSNAME usersTable
WITH_USERNAME In String
RIJEN Out Int32 returnedSize
  1. Selecteer OK. Het waarschuwingsteken verdwijnt. De lijst met gebruikers die zijn opgeslagen in de variabele usersTable. Omdat SAP geen volledige lijst met gebruikers in één antwoord retourneert, moeten we paginering implementeren en deze functie meerdere keren aanroepen tijdens het schakelen tussen pagina's. Vervolgens moet u voor elke geïmporteerde gebruiker de gegevens van die gebruiker ophalen door een afzonderlijke aanroep te maken. Dat betekent dat voor een landschap met 1000 gebruikers en een paginagrootte van 200 webserviceconnector vijf aanroepen maakt om een lijst met gebruikers en 1000 afzonderlijke aanroepen op te halen om de details van gebruikers op te halen. Om de prestaties te verbeteren, vraagt u uw SAP-team om een aangepast BAPI-programma te ontwikkelen waarin alle toepassingen met hun eigenschappen worden vermeld. Dit voorkomt dat er 1000 afzonderlijke aanroepen moeten worden uitgevoerd en dat de BAPI-functie via HET SOAP WS-eindpunt wordt weergegeven.
  2. Sleep en plaats vanuit de Hulpmiddelen de IF-activiteit in uw DoWhile-activiteit na de WebServiceCall-activiteit. Geef deze voorwaarde op om te controleren op niet-lege reacties en afwezigheid van fouten: IsNothing(getListRetTable.item) OrElse getListRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
  3. Sleep de activiteit Throw vanuit de werkset naar de Else-vertakking van uw IF-activiteit om een fout te veroorzaken bij mislukte import. Ga naar het tabblad Eigenschappen en voer deze expressie in voor de eigenschap Uitzondering van de activiteit Throw: New Exception(getListRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")).MESSAGE)

Schermopname van uitzonderingseigenschap.

  1. Als u een lijst met geïmporteerde gebruikers wilt verwerken, sleept en zet u ForEachWithBodyFactory-activiteit uit de Werkset naar de branch Then van uw IF-activiteit. Ga naar het tabblad Eigenschappen en selecteer SAPECC. BAPIUSNAME als TypeArgument. Selecteer de knop ... en typ deze expressie voor de eigenschap 'waarden': if(usersTable.item,Enumerable.Empty(of BAPIUSNAME)())

Schermopname van IF-activiteit.

  1. Sleep vanuit de gereedschapskist de sequentie-activiteit in uw ForEach-activiteit. Als dit activiteitsvenster van de reeks actief is, selecteert u de knop Variabelen en definieert u deze variabelen:
Name Type variabele Bereik Standaardinstelling
bedrijf SAPECC. BAPIUSCOMP Sequence nieuwe BAPIUSCOMP()
adres SAPECC. BAPIADDR3 Sequence nieuwe BAPIADDR3()
standaardwaarden SAPECC. BAPIDEFAUL Sequence nieuwe BAPIDEFAUL()
aanmeldingsgegevens SAPECC. BAPILOGOND Sequence nieuwe BAPILOGOND()
getDetailRetTable SAPECC. TABLE_OF_BAPIRET2 Sequence nieuwe TABLE_OF_BAPIRET2()

Uw ALS-activiteit ziet er als volgt uit:

Schermopname van IF-activiteit met foreach.

  1. Sleep de activiteit CreateCSEntryChangeScope in uw reeksactiviteit en zet deze neer. Voer in de DN-eigenschap schemaType.Name & item.GEBRUIKERSNAAM in. Voer in het veld CreateAnchorAttribute AnchorValue item.username in.

Schermopname van CreateCSEntryChangeScope.

  1. Als u details van elke gebruiker wilt ophalen, sleept u de WebServiceCall-activiteit in de werkset rechtstreeks vóór createAnchorAttribute-activiteit. Selecteer de naam van de SAPECC-service, het ZSAPCONNECTORWS-eindpunt en BAPI_USER_GET_DETAIL bewerking. Selecteer op ... Knop Argumenten om parameters voor webservice-aanroep als volgt te definiëren:
Name Richting Type Weergegeven als
TERUGKEREN In/Out TABLE_OF_BAPIRET2 getDetailRetTable
GEBRUIKERSNAAM In String item.username
ADRES Out BAPIADDR3 adres
BEDRIJF Out BAPIUSCOMP bedrijf
STANDAARDINSTELLINGEN Out BAPIUSDEFAUL standaardwaarden
LOGONDATA Out BAPILOGOND logonData
WITH_USERNAME In String
RIJEN Out Int32 returnedSize
  1. Selecteer OK. Het waarschuwingsteken verdwijnt. De details van een gebruiker worden opgeslagen in de bovenstaande vermelde variabelen. Uw ALS-activiteit ziet er als volgt uit:

Schermopname van parameters.

  1. Als u de resultaten van de BAPI_USER_GET_DETAIL-bewerking wilt controleren, sleept u de IF-activiteit en zet u deze neer in de activiteit Reeks tussen WebServiceCall en CreateAnchorAttribute-activiteiten. Voer deze voorwaarde in: IsNothing(getDetailRetTable.item) OrElse getDetailRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0

Omdat ontbrekende gebruikersgegevens niet als een catastrofale gebeurtenis moeten worden behandeld, willen we deze fout aangeven en de verwerking van andere gebruikers voortzetten. Sleep de reeksactiviteit naar de Else-vertakking van uw IF-activiteit. Voeg logboekactiviteit toe binnen die nieuwe reeksactiviteit. Ga naar het tabblad Eigenschappen en wijzig de eigenschap Niveau in Hoog, Tag naar Trace. Voer het volgende in de eigenschap LogText in: string.Join("\n", getDetailRetTable.item.Select (Function(item) item.MESSAGE ))

  1. Sleep de reeksactiviteit naar de vertakking ALS-activiteit en zet deze neer. Sleep en zet bestaande CreateAnchorAttribute-activiteit neer op Sequence-activiteit in then branch of IF-activiteit. Uw ForEach-activiteit ziet er nu als volgt uit:

Schermopname van ForEach.

  1. Voor elke eigenschap van een gebruiker, zoals plaats, bedrijf, afdeling, e-mail voegt u ALS-activiteit toe na CreateAnchorAttribute-activiteit en controleert u op niet-lege waarden door voorwaarden in te voeren, zoals Not string.IsNullOrEmpty(address.city) en CreateAttributeChange-activiteiten toe te voegen aan die IF-activiteit.

Schermopname van CreateAttributeChange.

Bijvoorbeeld: CreateAttributeChange-activiteiten toevoegen voor alle gebruikerseigenschappen met behulp van deze toewijzingstabel:

ECMA-gebruikerseigenschap SAP-eigenschap
plaats address.city
afdeling address.department
bedrijf company.company
e-mail address.e_mail
firstName address.firstName
lastName address.lastName
middleName address.middleName
jobTitle address.function
expirationTime logonData.GLTGB
telephoneNumber adres. TEL1_NUMBR
  1. Voeg ten slotte SetImportStatusCode-activiteit toe na de laatste CreateAttributeChange-activiteit. Stel ErrorCode in op Geslaagd in de then branch. Voeg nog een SetImportStatus-codeactiviteit toe aan else-vertakking en stel ErrorCode in op ImportErrorCustomContinueRun.

Schermopname van SetImportStatusCode.

  1. Sequentieactiviteit samenvouwen binnen ForEach-activiteit, zodat uw DoWhile-cyclus er als volgt uitziet:

Schermopname van DoWhile-cyclus.

  1. Werk de eigenschap bij om de volgende pagina van gebruikers selRangeTable.item(0).LOW op te halen. Sleep en plaats de IF-activiteit in de Sequence-activiteit binnen DoWhile. Plaats deze na bestaande IF-activiteit. Enter returnedSize>0 as Condition. Voeg de activiteit Toewijzen toe aan de then branch of IF-activiteit en stel deze in op selRangeTable.item(0).LOWusersTable.item(returnedSize-1).username.

Schermopname van DoWhile final.

U hebt de definitie van de volledige importwerkstroom voltooid.

De werkstroom Exporteren toevoegen maken

Als u een gebruiker in SAP ECC wilt maken, kunt u BAPI_USER_CREATE1 programma aanroepen en alle parameters opgeven, waaronder een accountnaam en een eerste wachtwoord. Als u een accountnaam aan de SAP-zijde wilt genereren, neem dan contact op met uw SAP-beheerder en gebruik een aangepaste BAPI-functie die een eigenschap userName van een nieuw gemaakt gebruikersaccount retourneert.

Deze handleiding demonstreert niet de toewijzing van licenties, lokale of globale activiteitsgroepen, systemen of profielen. Neem contact op met uw SAP-beheerder en pas deze werkstroom dienovereenkomstig aan.

U hoeft paginering niet te implementeren in exportwerkstromen. Er is slechts één objectobjectToExport beschikbaar in de werkstroomcontext.

  1. Navigeer naar Objecttypen -> Gebruiker -> Exporteren -> Werkstroom toevoegen en vanuit de Werkset aan de rechterkant slepen en neerzetten Reeksactiviteit naar het deelvenster Werkstroomontwerper.
  2. Zoek linksonder de knop Variabelen en selecteer deze om een lijst met variabelen uit te vouwen die in deze reeks zijn gedefinieerd.
  3. Voeg de volgende variabelen toe. Als u een variabeletype wilt selecteren dat is gegenereerd op basis van de SAP WSDL, selecteert u bladeren naar typen en vouwt u gegenereerde uit en vouwt u vervolgens SAPECC-naamruimte uit. Hiermee initialiseert u de gegevensstructuren die door BAPI_USER_CREATE1 programma worden gebruikt.
Name Type variabele Bereik Standaardinstelling
adres SAPECC. BAPIADDR3 Sequence nieuwe BAPIADDR3()
gebruikersnaam String Sequence
password SAPECC. BAPIPWD Sequence nieuwe BAPIPWD()
bedrijf SAPECC. BAPIUSCOMP Sequence nieuwe BAPIUSCOMP()
standaardwaarden SAPECC. BAPIDEFAUL Sequence nieuwe BAPIDEFAUL()
logOnData SAPECC. BAPILOGOND Sequence nieuwe BAPILOGOND()
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 Sequence nieuwe TABLE_OF_BAPIRET2()

Schermopname van de werkstroom voor het toevoegen van een export.

  1. Omdat we de eigenschap userName hebben gedefinieerd als onveranderbare id, een anker, moeten we de waarde userName extraheren uit een verzameling ankers van ons exportobject. Sleep forEachWithBodyFactory-activiteit van de Werkset naar uw reeksactiviteit en zet deze neer. Vervang de naam van de itemvariabele door anker, schakel over naar eigenschappen en kies TypeArgument van Microsoft.MetadirectoryServices.AnchorAttribute. Typ objectToExport.AnchorAttributesin het veld Waarde.

Schermopname van het toevoegen van een exportvolgorde.

  1. Als u een tekenreekswaarde van een userName-anker wilt extraheren, sleept u switchactiviteit naar de ForEach-activiteit. Selecteer in het pop-upvenster het type schakelaar Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper. Voer de expressiewaarde in van: New AnchorAttributeNameWrapper(anchor). Naam).
  2. Klik op Nieuw casegebied toevoegen in de Switch-activiteit. Typ userName als casewaarde. Sleep de activiteit Toewijzen naar de hoofdtekst van de userName-case en wijs anker toe. Value.ToString() naar userName-variabele.

Schermopname van nieuwe case.

  1. Nu we de userName-waarde hebben geëxtraheerd uit de geëxporteerde objectankereigenschap, moeten we andere structuren vullen, zoals bedrijf, standaardinstellingen, adresgegevens, aanmeldingsgegevens die andere SAP-gebruikersgegevens bevatten. Dit doen we door het verzamelen van kenmerkwijzigingen te doorlopen.
  2. Vouw uw ForEach-activiteit samen en sleep een andere ForEachWithBothFactory-activiteit binnen uw reeksactiviteit na de bestaande ForEach-activiteit. Vervang de naam van de itemvariabele door attributeChange, schakel over naar eigenschappen en kies TypeArgument van Microsoft.MetadirectoryServices.AttributeChange. Typ objectToExport.AttributeChangesin het veld Waarde.

Schermopname van nieuwe reeks.

  1. Sleep de schakelactiviteit naar de hoofdtekst van uw ForEach-activiteit en zet deze neer.
  2. Selecteer Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper in het pop-upmenu en selecteer OK.
  3. Voer de volgende expressie in: New AttributeNameWrapper(attributeChange.Name). U ziet een waarschuwingspictogram in de rechterbovenhoek van uw Switch-activiteit over niet-verwerkte kenmerken die zijn gedefinieerd in het schema en niet zijn toegewezen aan een eigenschap.
  4. Selecteer het gebied 'Nieuwe case toevoegen' binnen de Switch-activiteit en typ een casewaarde van plaats.
  5. Sleep de activiteit Toewijzen naar de hoofdtekst van dit geval en zet deze neer. Toewijzen attributeChange.ValueChanges(0).Value.ToString() aan address.city.

Schermopname van de nieuwe exportwerkstroom toevoegen.

  1. Voeg andere ontbrekende cases en toewijzingen toe. Gebruik deze toewijzingstabel als richtlijn:
Case Toewijzing
plaats address.city = attributeChange.ValueChanges(0)Value.ToString()
bedrijf company.company = attributeChange.ValueChanges(0)Value.ToString()
afdeling address.department = attributeChange.ValueChanges(0)Value.ToString()
e-mail 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 adres. TEL1_Numbr = attributeChange.ValueChanges(0)Value.ToString()
jobTitle address.function = attributeChange.ValueChanges(0)Value.ToString()
export_password wachtwoord. BAPIPWD1 = attributeChange.ValueChanges(0)Value.ToString()

Hier is export_password een speciaal virtueel kenmerk dat altijd in het schema is gedefinieerd en kan worden gebruikt om een eerste wachtwoord door te geven van de gebruiker die wordt gemaakt.

Schermopname van cases.

  1. Vouw uw ForEach-activiteit samen en sleep de IF-activiteit naar de reeksactiviteit, na de tweede ForEach-activiteit, om de gebruikerseigenschappen te valideren voordat u de aanvraag voor het maken van de gebruiker indient. We hebben ten minste 3 niet-lege waarden nodig: gebruikersnaam, achternaam, initiële wachtwoord. Voer deze voorwaarde in: (String.IsNullOrEmpty(address.lastname) = False ) AND (String.IsNullOrEmpty(userName) = False) AND (String.IsNullOrEmpty(password.BAPIPWD1) = False)
  2. Voeg in de Else-vertakking van ALS-activiteit nog een IF-activiteit toe, omdat we verschillende fouten willen genereren, afhankelijk van wat er ontbreekt. Voorwaardewaarde invoeren: String.IsNullOrEmpty(userName). Sleep en zet CreateCSEntryChangeResult activiteiten neer in beide vertakkingen van de tweede IF-activiteit en stel ErrorCode van ExportErrorMissingAnchorComponent en ExportErrorMissingProvisioningAttribute.

Schermopname van de tweede IF-activiteit.

  1. Sleep en zet de reeksactiviteit neer in de lege vertakking Then van de eerste IF-activiteit. Sleep de WebSeviceCall-activiteit binnen de reeksactiviteit en zet deze neer. Selecteer de naam van de SAPECC-service, het ZSAPCONNECTORWS-eindpunt en BAPI_USER_CREATE1 bewerking. Selecteer op ... Knop Argumenten om parameters voor webservice-aanroep als volgt te definiëren:
Name Richting Type Weergegeven als
ADRES In BAPIADDR3 adres
BEDRIJF In BAPIUSCOMP bedrijf
STANDAARDINSTELLINGEN In BAPIDEFAUL standaardwaarden
LOGONDATA In BAPILOGOND logOnData
WACHTWOORD In BAPIPWD password
TERUGKEREN In-out TABLE_OF_BAPIRET2 bapiret2Table
SELF_REGISTER In String "X"
GEBRUIKERSNAAM In String gebruikersnaam
  1. Klik op OK. Het waarschuwingsteken verdwijnt.

Schermopname van de werkstroom na parameters.

  1. Om resultaten van gebruikersaanmaakverzoeken te verwerken, sleept en plaatst u de IF-activiteit in de Sequentieactiviteit na de WebServiceCall-activiteit. Voer de volgende voorwaarde in: IsNothing (bapiret2Table.item) OrElse bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
  2. Als er geen fouten optreden, gaan we ervan uit dat de exportbewerking is voltooid en we willen aangeven dat het exporteren van dit object is geslaagd door CSEntryChangeResult te maken met de status Geslaagd. Sleep de activiteit CreateCSEntryChangeResult naar else branch van uw IF-activiteit en selecteer de foutcode Geslaagd.
  3. Optioneel: Als de webserviceaanroep een gegenereerde accountnaam van een gebruiker retourneert, moeten we een ankerwaarde van het geëxporteerde object bijwerken. Hiervoor sleept u de activiteit en zet u deze CreateAttrubuteChange neer CreateCSEntryChangeResulten selecteert u om een gebruikersnaam toe te voegen. Sleep vervolgens CreateValueChange de activiteit binnen de CreateAttributeChange activiteit en voer de naam van de variabele in die is ingevuld door een aanroepactiviteit voor een webservice. In deze handleiding gebruikt u de userName-variabele die niet wordt bijgewerkt bij het exporteren.

Schermopname van bijgewerkte sequentiestroom.

  1. De laatste stap in de werkstroom Exporteren toevoegen is het afhandelen en vastleggen van exportfouten. Sleep de sequence-activiteit naar de lege vertakking Then van uw IF-activiteit.
  2. Sleep de logboekactiviteit naar de reeksactiviteit en zet deze neer. Ga naar het tabblad Eigenschappen en voer de LogText-waarde in van: bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")). BERICHT. Hoog logboekregistratieniveau en traceringstag behouden. Hiermee wordt een foutbericht vastgelegd in ConnectorsLog of het ECMA2Host-gebeurtenislogboek wanneer uitgebreide tracering is ingeschakeld.
  3. Sleep en zet schakelactiviteit neer in de reeksactiviteit na logboekactiviteit. Selecteer in het pop-upvenster het tekenreekstype van de schakelwaarde. Voer de volgende expressie in: bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
  4. Selecteer de standaard case en sleep en zet de activiteit CreateCSEntryChangeResult neer in het lichaam van deze case. Kies de foutcode ExportErrorInvalidProvisioningAttributeValue.

Schermopname van nieuwe update naar werkstroom.

  1. Selecteer het gebied Nieuwe case toevoegen en typ een casewaarde van 224. Sleep de CreateCSEntryChangeResult activiteit naar de hoofdtekst van dit geval. Kies ExportErrorCustomContinueRun foutcode.

Schermopname van de laatste update naar de werkstroom.

U hebt de definitie van de werkstroom Exporteren toevoegen voltooid.

De werkstroom Exporteren verwijderen maken

Als u een gebruiker in SAP ECC wilt verwijderen, kunt u BAPI_USER_DELETE programma aanroepen en een accountnaam opgeven die moet worden verwijderd in het verbonden systeem. Neem contact op met uw SAP-beheerder om te bepalen of dit scenario verplicht is. Sap ECC-accounts worden meestal niet verwijderd, maar verlopen om historische records te bewaren.

Deze handleiding behandelt geen scenario's met betrekking tot het SAP Common User Administration-systeem, het ongedaan maken van de inrichting van gebruikers van verbonden systemen, het intrekken van licenties, enzovoort.

U hoeft paginering niet te implementeren in exportwerkstromen. Er is slechts één objectobjectToExport beschikbaar in de werkstroomcontext.

  1. Navigeer naar Objecttypen -> Gebruiker -> Exporteren -> Werkstroom verwijderen en uit de Werkset aan de rechterkant slepen en neerzetten Reeksactiviteit naar het deelvenster Werkstroomontwerper.
  2. Zoek linksonder de knop Variabelen en selecteer deze om een lijst met variabelen uit te vouwen die in deze reeks zijn gedefinieerd.
  3. Voeg de volgende variabelen toe. Als u een variabeletype wilt selecteren dat is gegenereerd op basis van de SAP WSDL, selecteert u bladeren naar typen en vouwt u gegenereerde uit en vouwt u vervolgens SAPECC-naamruimte uit. Hiermee initialiseert u de gegevensstructuren die door BAPI_USER_DELETE programma worden gebruikt.
Name Type variabele Bereik Standaardinstelling
gebruikersnaam String Sequence
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 Sequence nieuwe TABLE_OF_BAPIRET2()
  1. Omdat we de eigenschap userName hebben gedefinieerd als onveranderbare id, een anker, moeten we de waarde userName extraheren uit een verzameling ankers van ons exportobject. Sleep forEachWithBodyFactory-activiteit van de Werkset naar uw reeksactiviteit en zet deze neer. Vervang de naam van de itemvariabele door anker, schakel over naar eigenschappen en kies TypeArgument van Microsoft.MetadirectoryServices.AnchorAttribute. Typ objectToExport.AnchorAttributesin het veld Waarde.

Schermopname van de werkstroom voor het exporteren van verwijderbewerkingen.

  1. Als u een tekenreekswaarde van een userName-anker wilt extraheren, sleept u switchactiviteit naar de ForEach-activiteit. Selecteer in het pop-upvenster het Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper type schakelaar. Voer de expressiewaarde in van: Nieuw AnchorAttributeNameWrapper(anchor.Name). Selecteer op Nieuwe case toevoegen in het Switch-activiteitsgebied. Typ userName als casewaarde. Sleep de activiteit Toewijzen naar de hoofdtekst van de userName-case en wijs deze toe aan anchor.Value.ToString() de variabele UserName.
  2. Sleep de WebSeviceCall-activiteit binnen de reeksactiviteit na forEach-activiteit en zet deze neer. Selecteer de naam van de SAPECC-service, het ZSAPCONNECTORWS-eindpunt en BAPI_USER_DELETE bewerking. Selecteer op ... Knop Argumenten om parameters voor webservice-aanroep als volgt te definiëren:
Name Richting Type Weergegeven als
TERUGKEREN In/Out TABLE_OF_BAPIRET2 bapiret2Table
GEBRUIKERSNAAM In String gebruikersnaam
  1. Selecteer OK. Het waarschuwingsteken verdwijnt.

Schermopname van de bijgewerkte werkstroom voor het verwijderen van bewerkingen.

  1. Als u de resultaten van het verwijderen van gebruikersaanvragen wilt verwerken, sleept u IF-activiteit naar de reeksactiviteit na de WebServiceCall-activiteit. Voer de volgende voorwaarde in: If(bapiRet2Table.item, Enumerable.Empty(Of BAPIRET2)()).Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
  2. Als er geen fouten optreden, gaan we ervan uit dat de verwijderbewerking is voltooid en dat we een geslaagde export van dit object willen aangeven door de status Geslaagd te maken CSEntryChangeResult . Sleep de activiteit naar de CreateCSEntryChangeResult Else-vertakking van uw IF-activiteit en selecteer foutcode geslaagd.

Schermopname van de exportwerkstroom voor verwijderen.

  1. De laatste stap in de werkstroom Exporteren verwijderen is het afhandelen en vastleggen van exportfouten. Sleep de sequence-activiteit naar de lege vertakking Then van uw IF-activiteit.
  2. Sleep de logboekactiviteit naar de reeksactiviteit en zet deze neer. Ga naar het tabblad Eigenschappen en voer de LogText-waarde in van: bapiRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")= True).MESSAGE. Hoog logboekregistratieniveau en traceringstag behouden. Hiermee wordt een foutbericht vastgelegd in het gebeurtenislogboek ConnectorsLog of ECMA2Host wanneer uitgebreide tracering is ingeschakeld.
  3. Sleep en zet schakelactiviteit neer in de reeksactiviteit na logboekactiviteit. Selecteer in het pop-upvenster het tekenreekstype van de schakelwaarde. Voer de volgende expressie in: bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
  4. Selecteer de standaardcase en sleep en zet de activiteit CreateCSEntryChangeResult neer in het hoofdgedeelte van deze case. Kies de foutcode ExportErrorSyntaxViolation.

Schermopname van de update voor het exporteren van de werkstroom voor het verwijderen van bewerkingen.

  1. Selecteer het gebied Nieuwe case toevoegen en typ een casewaarde van 124. Sleep de CreateCSEntryChangeResult activiteit naar de hoofdtekst van dit geval. Kies ExportErrorCustomContinueRun foutcode.

Schermopname van de uiteindelijke werkstroom voor het verwijderen van de exportbewerking.

U hebt de definitie van de werkstroom Exporteren verwijderen voltooid.

Werkstroom Exporteren vervangen maken

Als u een gebruiker in SAP ECC wilt bijwerken, kunt u BAPI_USER_CHANGE programma aanroepen en alle parameters opgeven, inclusief een accountnaam en alle gebruikersgegevens, inclusief de parameters die niet worden gewijzigd. De ECMA2-exportmodus wanneer alle gebruikerseigenschappen moeten worden opgegeven, wordt Replace genoemd. Ter vergelijking: de exportmodus van AttributeUpdate biedt alleen kenmerken die worden gewijzigd en dit kan ertoe leiden dat sommige gebruikerseigenschappen worden overschreven met lege waarden. De webserviceconnector maakt daarom altijd gebruik van de exportmodus Object Replace en verwacht dat de connector wordt geconfigureerd voor exporttype: Vervangen.

De werkstroom Export Replace is bijna identiek aan de werkstroom Export Add. Het enige verschil is dat u extra parameters moet opgeven, zoals addressX of companyX voor het BAPI_USER_CHANGE-programma. De X aan het einde van addressX geeft aan dat de structuur van het adres wel een wijziging bevat.

  1. Navigeer naar Objecttypen -> Gebruiker -> Exporteren -> Werkstroom vervangen en vanuit de Werkset aan de rechterkant slepen en neerzetten Reeksactiviteit naar het deelvenster Werkstroomontwerper.
  2. Zoek linksonder de knop Variabelen en selecteer deze om een lijst met variabelen uit te vouwen die in deze reeks zijn gedefinieerd.
  3. Voeg de volgende variabelen toe. Als u een variabeletype wilt selecteren dat is gegenereerd op basis van de SAP WSDL, selecteert u bladeren naar typen en vouwt u gegenereerde uit en vouwt u vervolgens SAPECC-naamruimte uit. Hiermee initialiseert u de gegevensstructuren die door BAPI_USER_CHANGE programma worden gebruikt.
Name Type variabele Bereik Standaardinstelling
gebruikersnaam String Sequence
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 Sequence nieuwe TABLE_OF_BAPIRET2()
addressX SAPECC. BAPIADDR3X Sequence nieuwe BAPIADDR3X()
adres SAPECC. BAPIADDR3 Sequence nieuwe BAPIADDR3()
companyX SAPECC. BAPIUSCOMX Sequence nieuwe BAPIUSCOMX()
bedrijf SAPECC. BAPIUSCOMP Sequence nieuwe BAPIUSCOMP()
defaultsX SAPECC. BAPIDEFAX Sequence nieuwe BAPIDEFAX()
standaardwaarden SAPECC. BAPIDEFAUL Sequence nieuwe BAPIDEFAUL()
logOnDataX SAPECC. BAPILOGONX Sequence nieuwe BAPILOGONX()
logOnData SAPECC. BAPILOGOND Sequence nieuwe BAPILOGOND()

De werkstroom Export Replace ziet er als volgt uit:

Schermopname van het begin van de werkstroom voor het vervangen van bewerkingen.

  1. Omdat we de eigenschap userName hebben gedefinieerd als onveranderbare id, een anker, moeten we de waarde userName extraheren uit een verzameling ankers van ons exportobject. Sleep forEachWithBodyFactory-activiteit van de Werkset naar uw reeksactiviteit en zet deze neer. Vervang de naam van de itemvariabele door anker, schakel over naar eigenschappen en kies TypeArgument van Microsoft.MetadirectoryServices.AnchorAttribute. Typ objectToExport.AnchorAttributesin het veld Waarde.

Schermopname van update voor het vervangen van de werkstroom voor bewerkingen.

  1. Als u een tekenreekswaarde van een userName-anker wilt extraheren, sleept u switchactiviteit naar de ForEach-activiteit. Selecteer in het popupvenster een schakelaar van het type Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper. Voer de expressiewaarde in van: Nieuw AnchorAttributeNameWrapper(anchor.Name). Selecteer de optie Nieuwe casegebied van Switch-activiteit toevoegen. Typ userName als casewaarde. Sleep de activiteit Toewijzen naar de hoofdtekst van de userName-case en wijs deze toe aan anchor.Value.ToString() de variabele UserName. De werkstroom Export Replace ziet er als volgt uit:

Schermopname van een andere update om de werkstroom voor bewerkingen te vervangen.

  1. Nu we de userName-waarde hebben geëxtraheerd uit de geëxporteerde objectankereigenschap, moeten we andere structuren vullen, zoals bedrijf, standaardinstellingen, adresgegevens, aanmeldingsgegevens die andere SAP-gebruikersgegevens bevatten. Dit doen we door te fietsen door de verzameling van alle kenmerken die in het schema zijn gedefinieerd.
  2. Vouw uw ForEach-activiteit samen en sleep een andere ForEachWithBothFactory-activiteit binnen uw reeksactiviteit na de bestaande ForEach-activiteit. Vervang de naam van de itemvariabele door schemaAttr, schakel over naar eigenschappen en kies TypeArgument van Microsoft.MetadirectoryServices.SchemaAttribute. Typ schemaType.Attributesin het veld Waarde.

Schermopname van de bewerkingsreeksactiviteit vervangen.

  1. Sleep de reeksactiviteit naar de hoofdtekst van uw ForEach-activiteit en zet deze neer. Zoek linksonder de knop Variabelen en selecteer deze om een lijst met variabelen uit te vouwen die in deze reeks zijn gedefinieerd. Voeg de volgende variabele toe: xValue van het tekenreekstype. Sleep de toewijzingsactiviteit naar uw reeksactiviteit en zet deze neer. Wijs xValue de expressie toe van: If(objectToExport.AttributeChanges.Contains(schemaAttr.Name), objectToExport.AttributeChanges(schemaAttr.Name).ValueChanges(0).Value.ToString(), String.Empty) Het extraheert ofwel de wijzigingen die voor export zijn klaargezet voor dit kenmerk, of initialiseert het met een lege string. De werkstroom Export Replace ziet er als volgt uit:

Schermopname van het bijwerken naar de vervangingsvolgorde.

  1. Sleep de schakelactiviteit en zet deze neer na de toewijzingsactiviteit. Selecteer Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper in het pop-upmenu en selecteer OK. Voer de volgende expressie in: Nieuw AttributeNameWrapper(schemaAttr.Name). U ziet een waarschuwingspictogram in de rechterbovenhoek van uw Switch-activiteit over niet-verwerkte kenmerken die zijn gedefinieerd in het schema en niet zijn toegewezen aan een eigenschap. Selecteer het gebied Nieuwe case van Switch-activiteit toevoegen en typ een casewaarde van plaats. Sleep de reeksactiviteit naar de hoofdtekst van dit geval en zet deze neer. Sleep de activiteit Toewijzen naar de hoofdtekst van dit geval en zet deze neer. Wijs de waarde X toe aan addressX.city. Sleep een andere toewijzingsactiviteit naar de hoofdtekst van dit geval en zet deze neer. Wijs xValue toe aan address.city. De werkstroom Export Replace ziet er als volgt uit:

Schermopname van activiteit voor slepen en neerzetten.

10.Voeg andere ontbrekende aanvragen en toewijzingen toe. Gebruik deze toewijzingstabel als richtlijn:

Case Toewijzing
plaats addressX.city = "X" address.city = xValue
bedrijf companyX.company = "X" company.company = xValue
afdeling address.departmentX = "X" address.department = xValue
e-mail 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'-adres. TEL1_Numbr = xValue
jobTitle addressX.function = "X" address.function = xValue

De werkstroom Export Replace ziet er als volgt uit:

Schermopname van de activiteit tweede sleep- en neerzetoptie.

  1. Voordat u BAPI_USER_CHANGE-programma aanroept, moeten we controleren op niet-lege gebruikersnaam. Vouw beide ForEach-activiteiten samen en sleep en zet IF-activiteit neer na de tweede ForEach-activiteit. Voer de volgende voorwaarde in: String.IsNullOrEmpty(userName ) = False

  2. Wanneer de gebruikersnaam leeg is, willen we aangeven dat de bewerking is mislukt. Sleep de activiteit naar CreateCSEntryChangeResult de Else-vertakking van uw IF-activiteit en selecteer ExportErrorCustomContinueRun foutcode. De werkstroom Export Replace ziet er als volgt uit: Schermopname van de activiteit CreateCSEntryChangeResult.

  3. Sleep de reeksactiviteit in de lege vertakking Then van de eerste IF-activiteit en zet deze neer. Sleep de WebSeviceCall-activiteit binnen de reeksactiviteit en zet deze neer. Selecteer de naam van de SAPECC-service, het ZSAPCONNECTORWS-eindpunt en BAPI_USER_CHANGE bewerking. Selecteer op ... Knop Argumenten om parameters voor webservice-aanroep als volgt te definiëren:

Name Richting Type Weergegeven als
ADRES In BAPIADDR3 adres
ADDRESSX In BAPIADDR3X addressX
BEDRIJF In BAPIUSCOMP bedrijf
COMPANYX In BAPIUSCOMX bedrijf
STANDAARDINSTELLINGEN In BAPIDEFAUL standaardwaarden
DEFAULTSX In BAPIDEFAX defaultsX
LOGONDATA In BAPILOGOND logOnData
LOGONDATAX In BAPILOGONX logOnDataX
TERUGKEREN In/Out TABLE_OF_BAPIRET2 bapiret2Table
GEBRUIKERSNAAM In String gebruikersnaam
  1. Selecteer OK. Het waarschuwingsteken verdwijnt. De werkstroom Export Replace ziet er als volgt uit:

Schermopname van BAPI_USER_CHANGE bewerking.

  1. Als u de resultaten van de wijzigingsaanvraag wilt verwerken, sleept u de IF-activiteit binnen de reeksactiviteit na de WebServiceCall-activiteit. Voer de volgende voorwaarde in: Not IsNothing(bapiret2Table.item) AndAlso bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
  2. Als er geen fouten optreden, gaan we ervan uit dat de exportbewerking is voltooid en we willen aangeven dat het exporteren van dit object is geslaagd door de status Geslaagd te maken CSEntryChangeResult . Sleep de activiteit naar de CreateCSEntryChangeResult Else-vertakking van uw IF-activiteit en selecteer foutcode geslaagd.
  3. Sleep de reeksactiviteit naar de vertakking Then van uw IF-activiteit. Voeg logboekactiviteit toe met de LogText-waarde van string.Join("\n",bapiret2Table.item.Where(Function(retItem) retItem.TYPE.Equals("E")).Select(Function(r) r.MESSAGE)) en de fouttag. Activiteit toevoegen CreateCSEntryChangeResult na logboekactiviteit met foutcode van ExportErrorCustomContinueRun. De werkstroom Export Replace ziet er als volgt uit:

Schermopname van de laatste werkstroom voor het vervangen van de export.

U hebt de definitie van de werkstroom Export Replace voltooid.

De volgende stap bestaat uit het configureren van de ECMA2Host-webserviceconnector met behulp van deze sjabloon.

Volgende stappen