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.
- Start het hulpprogramma Web Service Configuration in de map C:\Program Files\Microsoft ECMA2Host\Web Service Configuration Tool wsconfigTool.exe
- Kies een nieuw SOAP-project maken in het menu File-New
- Selecteer SOAP Project en kies Nieuwe webservice toevoegen.
- 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.
- Geef referenties op om verbinding te maken met het SAP ECC-eindpunt. Selecteer Volgende.
- 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.
- Sla het project op in de map C:\Program Files\Microsoft ECMA2Host\Service\ECMA.
- Selecteer op het tabblad Objecttypen en kies ervoor om het objecttype Gebruiker toe te voegen. Selecteer OK.
- Vouw het tabblad Objecttypen uit en selecteer de definitie van het gebruikerstype.
- Voeg de volgende kenmerken toe aan het schema en kies userName als anker.
- Sla uw project op.
Name | Type | Anker |
---|---|---|
plaats | tekenreeks | |
bedrijf | tekenreeks | |
afdeling | tekenreeks | |
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.
- 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.
- 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 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() |
- 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.
- Als u paginering wilt implementeren, sleept u de DoWhile-activiteit vanuit de werkset naar uw reeksactiviteit na de laatste toewijzingsbewerking.
- Ga in het rechterdeelvenster naar het tabblad Eigenschappen en voer deze voorwaarde in voor DoWhile
- cyclus:
returnedSize = pageSize
- Selecteer de variabelen en voeg de eigenschap currentPageNumber van het int32-type in DoWhile-cyclus toe met de standaardwaarde 0.
- 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.
- 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.
- 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 |
- 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.
- 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
- 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)
- 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)())
- 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:
- 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.
- 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 |
- 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:
- 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 ))
- 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:
- 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.
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 |
address.e_mail | |
firstName | address.firstName |
lastName | address.lastName |
middleName | address.middleName |
jobTitle | address.function |
expirationTime | logonData.GLTGB |
telephoneNumber | adres. TEL1_NUMBR |
- 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.
- Sequentieactiviteit samenvouwen binnen ForEach-activiteit, zodat uw DoWhile-cyclus er als volgt uitziet:
- 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 opselRangeTable.item(0).LOW
usersTable.item(returnedSize-1).username
.
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.
- Navigeer naar Objecttypen -> Gebruiker -> Exporteren -> Werkstroom toevoegen en vanuit de Werkset aan de rechterkant slepen en neerzetten Reeksactiviteit naar het deelvenster Werkstroomontwerper.
- 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 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() |
- 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
. TypobjectToExport.AnchorAttributes
in het veld Waarde.
- 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). - 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.
- 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.
- 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
. TypobjectToExport.AttributeChanges
in het veld Waarde.
- Sleep de schakelactiviteit naar de hoofdtekst van uw ForEach-activiteit en zet deze neer.
- Selecteer
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
in het pop-upmenu en selecteer OK. - 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.
- Selecteer het gebied 'Nieuwe case toevoegen' binnen de Switch-activiteit en typ een casewaarde van plaats.
- Sleep de activiteit Toewijzen naar de hoofdtekst van dit geval en zet deze neer. Toewijzen
attributeChange.ValueChanges(0).Value.ToString()
aan address.city.
- 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() |
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.
- 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)
- 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 vanExportErrorMissingAnchorComponent
enExportErrorMissingProvisioningAttribute
.
- 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 |
- Klik op OK. Het waarschuwingsteken verdwijnt.
- 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
- 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.
- 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
neerCreateCSEntryChangeResult
en selecteert u om een gebruikersnaam toe te voegen. Sleep vervolgensCreateValueChange
de activiteit binnen deCreateAttributeChange
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.
- 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.
- 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. - 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
- Selecteer de standaard case en sleep en zet de activiteit CreateCSEntryChangeResult neer in het lichaam van deze case. Kies de foutcode ExportErrorInvalidProvisioningAttributeValue.
- Selecteer het gebied Nieuwe case toevoegen en typ een casewaarde van 224. Sleep de
CreateCSEntryChangeResult
activiteit naar de hoofdtekst van dit geval. KiesExportErrorCustomContinueRun
foutcode.
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.
- Navigeer naar Objecttypen -> Gebruiker -> Exporteren -> Werkstroom verwijderen en uit de Werkset aan de rechterkant slepen en neerzetten Reeksactiviteit naar het deelvenster Werkstroomontwerper.
- 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 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() |
- 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
. TypobjectToExport.AnchorAttributes
in het veld Waarde.
- 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: NieuwAnchorAttributeNameWrapper(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 aananchor.Value.ToString()
de variabele UserName. - 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 |
- Selecteer OK. Het waarschuwingsteken verdwijnt.
- 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
- 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 deCreateCSEntryChangeResult
Else-vertakking van uw IF-activiteit en selecteer foutcode geslaagd.
- 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.
- 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. - 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
- Selecteer de standaardcase en sleep en zet de activiteit CreateCSEntryChangeResult neer in het hoofdgedeelte van deze case. Kies de foutcode ExportErrorSyntaxViolation.
- Selecteer het gebied Nieuwe case toevoegen en typ een casewaarde van 124. Sleep de
CreateCSEntryChangeResult
activiteit naar de hoofdtekst van dit geval. KiesExportErrorCustomContinueRun
foutcode.
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.
- Navigeer naar Objecttypen -> Gebruiker -> Exporteren -> Werkstroom vervangen en vanuit de Werkset aan de rechterkant slepen en neerzetten Reeksactiviteit naar het deelvenster Werkstroomontwerper.
- 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 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:
- 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
. TypobjectToExport.AnchorAttributes
in het veld Waarde.
- 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: NieuwAnchorAttributeNameWrapper(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 aananchor.Value.ToString()
de variabele UserName. De werkstroom Export Replace ziet er als volgt uit:
- 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.
- 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
. TypschemaType.Attributes
in het veld Waarde.
- 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:
- 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: NieuwAttributeNameWrapper(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:
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 |
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:
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
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 selecteerExportErrorCustomContinueRun
foutcode. De werkstroom Export Replace ziet er als volgt uit: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 |
- Selecteer OK. Het waarschuwingsteken verdwijnt. De werkstroom Export Replace ziet er als volgt uit:
- 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
- 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 deCreateCSEntryChangeResult
Else-vertakking van uw IF-activiteit en selecteer foutcode geslaagd. - 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 toevoegenCreateCSEntryChangeResult
na logboekactiviteit met foutcode vanExportErrorCustomContinueRun
. De werkstroom Export Replace ziet er als volgt uit:
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.