Redigera anslutningsmallen för SAP ECC 7.51 Web Service för ECMA2Host
Den här guiden beskriver hur du skapar en mall för ECMA-anslutningsappen (Web Service Extensibility Connectivity Management Agent) för att hantera SAP ECC-användare.
Begränsningar och antaganden
Den här mallen visar hur du hanterar användare. Andra objekttyper som lokala aktivitetsgrupper, roller och profiler omfattas inte av den här guiden eftersom ECMA2Host för närvarande inte stöder referenser med flera värden. Lösenordsåtgärder ligger också utanför omfånget för den här guiden.
Den här guiden beskriver inte skapandet av tjänstkontot i SAP som används för att anropa de exponerade BAPI-funktionerna. Det förutsätter att ett i förväg skapat demokonto Developer används med en profil RFC_ALL som ger behörighet till de BAPI:er som nämns i den här artikeln.
Webbtjänstkonfigurationsverktyget stöder inte följande funktioner som exponeras i SAP som standard: WSP-principer och flera bindningar per slutpunkt. Den förväntar sig en WSDL med enbart SOAP 1.1, en allt-i-ett-dokumentindelning utan policies.
SAP ECC BAPI-funktioner som används i den här mallen:
- BAPI_USER_GETLIST – hämta en lista över alla användare som är anslutna till det här systemet.
- BAPI_USER_GETDETAIL – få information om specifika användare.
- BAPI_USER_CREATE1 – skapar en användare.
- BAPI_USER_DELETE – tar bort en användare.
- BAPI_USER_CHANGE – uppdaterar en användare.
Alla SAP-användaregenskaper i den här guiden behandlas som egenskaper med ett ensamt värde.
Programmeringsspråket som används är Visual Basic.
Definiera en webbtjänstslutpunkt och skapa ett schema
Innan du kan utforma arbetsflöden för import och export måste du skapa en mall och definiera en slutpunkt med SAP BAPI-funktionerna som exponeras via ett SOAP-gränssnitt. Skapa sedan ett schema för ECMA2-objekten och deras egenskaper är tillgängliga i den här mallen.
- Starta konfigurationsverktyget för webbtjänsten från mappen "C:\Program Files\Microsoft ECMA2Host\Web Service Configuration Tool" wsconfigTool.exe
- På menyn File-New väljer du Skapa nytt SOAP-projekt
- Välj i SOAP-projekt och välj Lägg till ny webbtjänst.
- Ge webbtjänsten namnet SAPECC, ange en URL för att ladda ned publicerade WSDL och ange SAPECC som namnområde. Webbtjänstens namn hjälper dig att skilja den här webbtjänsten i mallen från andra. Namnområdet definierar ett namn på Microsoft .NET-namnområdet som används för att generera klasser. Välj Grundläggande autentiseringsläge om inget annat anges av SAP-administratören. Välj Nästa.
- Ange autentiseringsuppgifter för att ansluta till SAP ECC-slutpunkten. Välj Nästa.
- På sidan slutpunkter och åtgärder kontrollerar du att BAPI:erna visas och väljer Slutför
Kommentar
Om du ser fler än en slutpunkt har du både SOAP 1.2- och SOAP 1.1-bindningar aktiverade. Detta gör att anslutningsappen misslyckas. Ändra bindningsdefinitionen i SOAMANAGER och behåll bara en. Lägg sedan till en webbtjänst igen.
- Spara projektet i mappen C:\Program Files\Microsoft ECMA2Host\Service\ECMA.
- Välj på fliken Objekttyper och välj att lägga till användarobjekttyp. Välj Ok.
- Expandera fliken Objekttyper och välj användartypsdefinition.
- Lägg till följande attribut i schemat och välj userName som fästpunkt.
- Spara ditt projekt.
Namn | Typ | Fästpunkt |
---|---|---|
stad | sträng | |
Företag | sträng | |
Avdelning | string | |
E-post | sträng | |
utgångstid | sträng | |
förnamn | sträng | |
efternamn | string | |
mellannamn | sträng | |
telefonnummer | string | |
jobbtitel | string | |
userName | string | kontrollerad |
Skapa fullständigt importarbetsflöde
Med importarbetsflödet, som är valfritt i ECMA2Host, kan du importera befintliga SAP-användare till ECMA2Host minnesintern cache och undvika att duplicerade användare skapas under etableringen.
Om du inte skapar ett importarbetsflöde fungerar anslutningen i export-only-läge och gör att ECMA2Host alltid utfärdar Skapa användare-åtgärder, även för befintliga användare. Detta kan leda till fel eller dubbletter när standard-SAP BAPI:er används om inte dubbletter hanteras av exportarbetsflödet.
SAP ECC erbjuder inte någon inbyggd mekanism för att läsa ändringar som gjorts sedan den senaste läsningen.
Därför implementerar vi endast arbetsflödet fullständig import. Om du behöver implementera Delta-importer av prestandaskäl bör du kontakta SAP-administratören om du vill ha en lista över BAPI:er och få dem publicerade som en SOAP-webbtjänst. Implementera sedan arbetsflödet deltaimport med hjälp av följande metod enligt beskrivningen och en customData-egenskap som innehåller en tidsstämpel för den tidigare lyckade körningen.
SAP ECC erbjuder flera BAPI-funktioner för att få en lista över användare med sina egenskaper:
- BAPI_USER_GETLIST – hämta en lista över alla användare som är anslutna till det här systemet.
- BAPI_USER_GETDETAIL – få information om specifika användare.
Endast dessa två BAPI:er används för att hämta befintliga användare från SAP ECC i den här mallen.
- Gå till Objekttyper –> Användare –> Importera –> Fullständigt importarbetsflöde och från verktygslådan till höger dra och släpp sekvensaktivitet till arbetsflödesdesignerfönstret.
- Längst ned till vänster letar du upp knappen Variabler och väljer den för att expandera en lista med variabler som definierats i den här sekvensen.
- Lägg till följande variabler. Om du vill välja en variabeltyp som genererats från SAP WSDL väljer du Bläddra efter typer och expanderar genererade och expanderar sedan SAPECC-namnområdet.
Namn | Variabeltyp | Omfattning | Standardvärde |
---|---|---|---|
selRangeTable | SAPECC. TABLE_OF_BAPIUSSRGE | Sekvens | new TABLE_OF_BAPIUSSRGE med {.item = new BAPIUSSRGE(){new BAPIUSSRGE}} |
getListRetTable | SAPECC. TABLE_OF_BAPIRET2 | Sekvens | nya TABLE_OF_BAPIRET2 |
pageSize | Int32 | Sekvens | 200 |
returnedSize | Int32 | Sekvens | |
användartabell | SAPECC. TABLE_OF_BAPIUSNAME | Sekvens | ny TABLE_OF_BAPIUSNAME() |
- Från verktygslådan, dra och släpp fyra Tilldela-aktiviteter i sekvensaktiviteten och ange följande värden:
selRangeTable.item(0).PARAMETER = "USERNAME"
selRangeTable.item(0).SIGN = "I" selRangeTable.item(0).OPTION = "GT" selRangeTable.item(0).LOW = ""
Dessa parametrar används för att anropa funktionen BAPI_USER_GETLIST och implementera sidnumrering.
- För att implementera sidnumrering, dra och släpp DoWhile-aktiviteten från Verktygslådan inuti din sekvensaktivitet efter den senaste tilldelningsåtgärden.
- Växla till fliken Egenskaper i den högra rutan och ange det här villkoret för DoWhile
- cykel:
returnedSize = pageSize
- Välj variabler och lägg till egenskapen currentPageNumber av int32-typ i DoWhile-cykeln med standardvärdet 0.
- Valfritt steg: Om du planerar att implementera deltaimportarbetsflödet drar och släpper du sedan aktiviteten Tilldela i sekvensaktiviteten efter DoWhile-cykeln från Verktygslådan. Ange det här värdet:
-
customData(schemaType.Name + "_lastImportTime") = DateTimeOffset.UtcNow.Ticks.ToString()
Detta sparar datum och tid för den senaste fullständiga importkörningen, och den här tidsstämpeln kan senare användas i Deltaimportarbetsflödet.
- Från verktygslådan, dra och släpp in sekvensaktiviteten i din DoWhile-aktivitet. Dra och släpp WebServiceCall-aktivitet inuti sekvensaktiviteten och välj SAPECC-tjänstnamn, ZSAPCONNECTORWS-slutpunkt och BAPI_USER_GETLIST åtgärd.
- Välj på ... Knappen Argument för att definiera parametrar för webbtjänstanrop enligt följande:
Namn | Riktning | Typ | Värde |
---|---|---|---|
MAX_ROWS | I | Int32 | pageSize |
MAX_ROWSSpecified | I | Booleskt | Sant |
ÅTERVÄNDA | In/Ut | TABLE_OF_BAPIRET2 | getListRetTable |
Urvalserfarenhet | In/Ut | TABLE_OF_BAPIUSSEXP | |
SELECTION_RANGE | In/ut | TABLE_OF_BAPIUSSRGE | selRangeTable |
ANVÄNDARLISTA | In/ut | TABELL_AV_BAPIUSNAMN | användartabell |
MED_ANVÄNDARNAMN | I | Sträng | |
RADER | Ut | Int32 | returnedSize |
- Välj OK. Varningstecknet försvinner. Listan över användare som lagras i variabeln usersTable. Eftersom SAP inte returnerar en fullständig lista över användare i ett enda svar måste vi implementera sidnumrering och anropa den här funktionen flera gånger när du byter sida. För varje användare som importeras måste du sedan hämta användarens information genom att göra ett separat anrop. Det innebär att för ett landskap med 1 000 användare och en sidstorlek på 200 gör Web Service Connector 5 anrop för att hämta en lista över användare och 1 000 enskilda anrop för att hämta användarnas information. För att förbättra prestandan ber du SAP-teamet att utveckla ett anpassat BAPI-program som visar alla användningsområden med sina egenskaper. Detta undviker behovet av att göra 1 000 enskilda anrop och exponera den BAPI-funktionen över SOAP WS-slutpunkten.
- Från verktygslådan, dra och släpp IF-aktiviteten in i din DoWhile-aktivitet efter WebServiceCall-aktiviteten. Ange det här villkoret för att kontrollera att svaret inte är tomt och att inga fel finns:
IsNothing(getListRetTable.item) OrElse getListRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
- Dra och släpp Kasta aktivitet i Else-grenen av IF-aktiviteten från verktygslådan för att utlösa ett fel vid misslyckad import. Växla till fliken Egenskaper och ange det här uttrycket för undantagsegenskapen för aktiviteten Throw:
New Exception(getListRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")).MESSAGE)
- Om du vill bearbeta en lista över importerade användare drar och släpper du ForEachWithBodyFactory-aktiviteten från verktygslådan till Then-grenen i din IF-aktivitet. Växla till fliken Egenskaper och välj SAPECC. BAPIUSNAME som TypeArgument. Välj på ... -knappen och skriv det här uttrycket för egenskapen values:
if(usersTable.item,Enumerable.Empty(of BAPIUSNAME)())
- Från verktygslådan, dra och släpp Sequence-aktiviteten inuti din ForEach-aktivitet. Om du har det här sekvensaktivitetsfönstret aktivt väljer du på knappen Variabler och definierar dessa variabler:
Namn | Variabeltyp | Omfattning | Standardvärde |
---|---|---|---|
Företag | SAPECC.BAPIUSCOMP | Sekvens | new BAPIUSCOMP() |
adress | SAPECC. BAPIADDR3 | Sekvens | ny BAPIADDR3() |
standardvärden | SAPECC. BAPIDEFAUL | Sekvens | ny BAPIDEFAUL() |
inloggningsdata | SAPECC.BAPILOGOND | Sekvens | ny BAPILOGOND() |
getDetailRetTable | SAPECC. TABLE_OF_BAPIRET2 | Sekvens | ny TABLE_OF_BAPIRET2() |
Din IF-aktivitet ser ut så här:
- Dra och släpp aktiviteten CreateCSEntryChangeScope i sekvensaktiviteten. I egenskapen DN anger du schemaType.Name & objekt. ANVÄNDARNAMN. I fältet AnchorValue för CreateAnchorAttribute anger du item.username.
- För att hämta information om varje användare, dra och släpp WebServiceCall-aktiviteten från Verktygslådan till sekvensaktiviteten precis före CreateAnchorAttribute-aktiviteten. Välj SAPECC-tjänstnamn, ZSAPCONNECTORWS-slutpunkt och BAPI_USER_GET_DETAIL åtgärd. Välj på ... Knappen Argument för att definiera parametrar för webbtjänstanrop enligt följande:
Namn | Riktning | Typ | Värde |
---|---|---|---|
TILLBAKA | In/ut | TABLE_OF_BAPIRET2 | getDetailRetTable |
ANVÄNDARNAMN | I | Sträng | enhet.användarnamn |
ADRESS | Ut | BAPIADDR3 | adress |
FÖRETAG | Ut | BAPIUSCOMP | Företag |
STANDARDVÄRDEN | Ut | BAPIUSDEFAUL | standardvärden |
LOGONDATA | Ut | BAPILOGOND | inloggningsdata |
MED_ANVÄNDARNAMN | I | Sträng | |
RADER | Ut | Int32 | returnedSize |
- Välj OK. Varningstecknet försvinner. Information om en användare lagras i ovanstående variabler. IF-aktiviteten ser ut så här:
- För att kontrollera resultatet av BAPI_USER_GET_DETAIL-åtgärden, dra och släpp IF-aktiviteten från verktygslådan och placera den i sekvensaktiviteten, mellan webbtjänstanrop- och CreateAnchorAttribute-aktiviteterna. Ange det här villkoret:
IsNothing(getDetailRetTable.item) OrElse getDetailRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
Eftersom saknad användarinformation inte bör behandlas som en oåterkallelig händelse vill vi ange det här felet och fortsätta bearbetningen av andra användare. Dra och släpp sekvensaktivitet i Else-grenen av IF-aktiviteten. Lägg till loggaktivitet i den nya sekvensaktiviteten. Växla till fliken Egenskaper och ändra egenskapen Nivå till Hög, Tagga till Spårning. Ange följande i logtextegenskapen: string.Join("\n", getDetailRetTable.item.Select (Function(item) item.MESSAGE ))
- Dra och släpp Sekvensaktivitet i IF-aktivitetens Then-gren. Dra och släpp den befintliga CreateAnchorAttribute-aktiviteten till Sekvensaktiviteten där inuti Then-grenen av IF-aktiviteten. Din ForEach-aktivitet ser nu ut så här:
- För varje egenskap för en användare som stad, företag, avdelning, lägg till en IF-aktivitet efter CreateAnchorAttribute-aktivitet och kontrollera efter värden som inte är tomma genom att ange villkor som
Not string.IsNullOrEmpty(address.city)
och lägga till CreateAttributeChange-aktiviteter i "Then"-grenen för den IF-aktiviteten.
Till exempel: Lägg till CreateAttributeChange-aktiviteter för alla användaregenskaper med hjälp av den här mappningstabellen:
ECMA-användaregenskap | SAP-egenskap |
---|---|
stad | adress.stad |
Avdelning | adress.avdelning |
Företag | company.company |
E-post | address.e_mail |
förnamn | adress.förnamn |
efternamn | adress.efternamn |
mellannamn | adress.mellannamn |
jobbtitel | address.function |
Utgångstid | logonData.GLTGB |
telefonnummer | adress. TEL1_NUMBR |
- Lägg slutligen till Aktiviteten SetImportStatusCode efter den senaste CreateAttributeChange-aktiviteten. Ange ErrorCode till Lyckades i grenen Sedan. Lägg till ytterligare en SetImportStatus-kodaktivitet i Else-grenen och ange ErrorCode till ImportErrorCustomContinueRun.
- Fäll ihop sekvensaktiviteten i ForEach-aktiviteten så att DoWhile-cykeln ser ut så här:
- För att hämta nästa sida med användare, uppdatera egenskapen
selRangeTable.item(0).LOW
. Dra och släpp IF-aktivitet till Sekvensaktivitet inom DoWhile. Placera den efter befintlig IF-aktivitet. Ange returnedSize>0 som Villkor. Lägg till Tilldela-aktivitet i Sedan-grenen av IF-aktiviteten och angeselRangeTable.item(0).LOW
tillusersTable.item(returnedSize-1).username
.
Du har slutfört arbetsflödesdefinitionen för fullständig import.
Skapa arbetsflödet Export Add
Om du vill skapa en användare i SAP ECC kan du anropa BAPI_USER_CREATE1 program och ange alla parametrar, inklusive ett kontonamn och ett första lösenord. Om du behöver ett kontonamn som ska genereras på SAP-sidan kontaktar du SAP-administratören och använder en anpassad BAPI-funktion som returnerar en userName-egenskap för ett nyligen skapat användarkonto.
Den här guiden visar inte tilldelning av licenser, lokala eller globala aktivitetsgrupper, system eller profiler. Kontakta SAP-administratören och ändra arbetsflödet i enlighet med detta.
Du behöver inte implementera sidnumrering i exportarbetsflöden. Det finns bara ett objekt objectToExport tillgängligt i arbetsflödeskontexten.
- Gå till Objekttyper –> Användare –> Exportera –> Lägg till arbetsflöde och från verktygslådan till höger dra och släpp sekvensaktivitet till arbetsflödesdesignerfönstret.
- Längst ned till vänster letar du upp knappen Variabler och väljer den för att expandera en lista med variabler som definierats i den här sekvensen.
- Lägg till följande variabler. Om du vill välja en variabeltyp som genererats från SAP WSDL väljer du Bläddra efter typer och expanderar genererade och expanderar sedan SAPECC-namnområdet. Detta initierar de datastrukturer som används av BAPI_USER_CREATE1 program.
Namn | Variabeltyp | Omfattning | Standardvärde |
---|---|---|---|
adress | SAPECC. BAPIADDR3 | Sekvens | ny BAPIADDR3() |
userName | Sträng | Sekvens | |
lösenord | SAPECC.BAPIPWD | Sekvens | ny BAPIPWD() |
Företag | SAPECC.BAPIUSCOMP | Sekvens | ny BAPIUSCOMP() |
standardvärden | SAPECC. BAPIDEFAUL | Sekvens | ny BAPIDEFAUL() |
logOnData | SAPECC.BAPILOGOND | Sekvens | ny BAPILOGOND() |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Sekvens | ny TABLE_OF_BAPIRET2() |
- När vi har definierat egenskapen userName som ett oföränderligt ID, ett fästpunkt, måste vi extrahera userName-värdet från en samling fästpunkter för vårt exportobjekt. Dra och släpp ForEachWithBodyFactory-aktivitet från verktygslådan till din sekvensaktivitet. Ersätt objektvariabelns namn med fästpunkt, växla till egenskaper och välj TypeArgument för
Microsoft.MetadirectoryServices.AnchorAttribute
. I fältet Värde skriver duobjectToExport.AnchorAttributes
.
- Om du vill extrahera ett strängvärde för ett userName-fästpunkt drar och släpper du Switch-aktiviteten i ForEach-aktiviteten. I popup-fönstret väljer du
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
typ av växel. Ange uttrycksvärdet för: New AnchorAttributeNameWrapper(anchor.Name). - Välj på Lägg till nytt fallområde för Växlingsaktivitet. Ange userName som Case-värde. Dra och släpp tilldela uppgift i case-body för userName och tilldela anchor.Value.ToString() till userName-variabeln.
- Nu när vi har extraherat userName-värdet från den exporterade objektankaregenskapen måste vi fylla i andra strukturer som företag, standardvärden, adress, inloggningsdata som innehåller annan SAP-användarinformation. Vi gör detta genom att gå igenom en samling av attributändringar.
- Kollapsa din ForEach-aktivitet och dra och släpp en ny ForEachWithBothFactory-aktivitet i din sekvensaktivitet efter den befintliga ForEach-aktiviteten. Ersätt objektets variabelnamn med attributeChange, växla till egenskaper och välj TypeArgument för
Microsoft.MetadirectoryServices.AttributeChange
. I fältet Värde skriver duobjectToExport.AttributeChanges
.
- Dra och släpp Switch-aktiviteten i huvudsektionen för ForEach-aktiviteten.
- I popup-menyn väljer du
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
och väljer Ok. - Ange följande uttryck: New AttributeNameWrapper(attributeChange.Name). Du ser en varningsikon i det övre högra hörnet av din Switch-aktivitet om ohanterade attribut som definierats i schemat och inte tilldelats någon egenskap.
- Välj Lägg till nytt fallområde i Switch-aktivitet och skriv ett fallvärde av city.
- Dra och släpp Tilldela aktivitet i brödtexten i det här fallet. Tilldela
attributeChange.ValueChanges(0).Value.ToString()
till address.city.
- Lägg till andra saknade ärenden och tilldelningar. Använd den här mappningstabellen som en guide:
Ärende | Uppgift |
---|---|
stad | address.city = attributeChange.ValueChanges(0)Value.ToString() |
Företag | company.company = attributeChange.ValueChanges(0)Value.ToString() |
Avdelning | address.department = attributeChange.ValueChanges(0)Value.ToString() |
E-post | address.e_mail = attributeChange.ValueChanges(0)Value.ToString() |
utgångstid | logOnData.GLTGB = attributeChange.ValueChanges(0)Value.ToString() |
förnamn | address.firstname = attributeChange.ValueChanges(0)Value.ToString() |
efternamn | address.lastname = attributeChange.ValueChanges(0)Value.ToString() |
mellannamn | address.middlename = attributeChange.ValueChanges(0)Value.ToString() |
telefonnummer | adress.TEL1_Numbr = attributeChange.ValueChanges(0)Value.ToString() |
jobbtitel | address.function = attributeChange.ValueChanges(0)Value.ToString() |
exportera lösenord | lösenord. BAPIPWD1 = attributeChange.ValueChanges(0)Value.ToString() |
Här är export_password ett särskilt virtuellt attribut som alltid definieras i schemat och som kan användas för att skicka ett första lösenord för användaren som skapas.
- Dölj Din ForEach-aktivitet och dra och släpp IF-aktiviteten i sekvensaktiviteten, efter den andra ForEach-aktiviteten, för att verifiera användaregenskaperna innan du skickar begäran om att skapa användare. Vi behöver minst tre värden som inte är tomma: användarnamn, efternamn, initialt lösenord. Ange det här villkoret:
(String.IsNullOrEmpty(address.lastname) = False ) AND (String.IsNullOrEmpty(userName) = False) AND (String.IsNullOrEmpty(password.BAPIPWD1) = False)
- I else-grenen av IF-aktiviteten lägger du till ytterligare en IF-aktivitet eftersom vi vill utlösa olika fel beroende på vad som saknas. Ange villkorsvärde: String.IsNullOrEmpty(userName). Dra och släpp
CreateCSEntryChangeResult
-aktiviteter i båda grenarna av den andra IF-aktiviteten och ställ in “ErrorCode” förExportErrorMissingAnchorComponent
ochExportErrorMissingProvisioningAttribute
.
- Dra och släpp sekvensaktivitet i den tomma Därefter-grenen för den första IF-aktiviteten. Dra och släpp WebServiceCall-aktivitet i sekvensaktiviteten. Välj SAPECC-tjänstnamn, ZSAPCONNECTORWS-slutpunkt och BAPI_USER_CREATE1 åtgärd. Välj på ... Knappen Argument för att definiera parametrar för webbtjänstanrop enligt följande:
Namn | Riktning | Typ | Värde |
---|---|---|---|
ADRESS | I | BAPIADDR3 | adress |
FÖRETAG | I | BAPIUSCOMP | Företag |
STANDARDVÄRDEN | I | BAPIDEFAUL | standardvärden |
Inloggningsdata | I | BAPILOGOND | logOnData |
LÖSENORD | I | BAPIPWD | lösenord |
ÅTERVÄNDA | In-Ut | TABLE_OF_BAPIRET2 | bapiret2Table |
SJÄLVREGISTERA | I | Sträng | "X" |
ANVÄNDARNAMN | I | Sträng | userName |
- Välj OK. Varningstecknet försvinner.
- För att bearbeta resultaten av användarbegäran, dra och släpp IF-aktiviteten i sekvensaktiviteten efter WebServiceCall-aktiviteten. Ange följande villkor:
IsNothing (bapiret2Table.item) OrElse bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Om vi inte får några fel förutsätter vi att exportåtgärden har slutförts och vi vill ange lyckad export av det här objektet genom att skapa CSEntryChangeResult med statusen Lyckades. Dra och släpp CreateCSEntryChangeResult-aktiviteten till Else-grenen av IF-aktiviteten och välj framgångskod.
- Valfritt: Om webbtjänstanropet returnerar ett genererat kontonamn för en användare måste vi uppdatera ett ankarvärde för exporterade objekt. Det gör du genom att dra och släppa
CreateAttrubuteChange
aktiviteten iCreateCSEntryChangeResult
aktiviteten och välja Lägg till ett användarnamn. Dra och släppCreateValueChange
aktivitet iCreateAttributeChange
aktiviteten och ange variabelnamnet som fylls i av en webbtjänstanropsaktivitet. I den här guiden använder du variabeln userName som inte uppdateras vid export.
- Det sista steget i arbetsflödet Exportera lägg till är att hantera och logga exportfel. Dra och släpp Sekvensaktivitet i den tomma Then-grenen i din IF-aktivitet.
- Dra och släpp loggaktivitet till sekvensaktivitet. Växla till fliken Egenskaper och ange LogText-värdet för:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E"))
. MEDDELANDE. Behåll hög loggningsnivå och Trace-tagg. Detta loggar ett felmeddelande i ConnectorsLog eller ECMA2Host-händelseloggen när utförlig spårning är aktiverat. - Dra och släpp Switch-aktivitet i sekvensaktiviteten efter loggaktiviteten. I popup-fönstret väljer du Strängtyp för växelvärdet. Ange följande uttryck:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Välj i Standardfall och dra och släpp aktiviteten CreateCSEntryChangeResult i brödtexten i det här fallet. Välj ExportErrorInvalidProvisioningAttributeValue-felkod.
- Välj området Lägg till nytt fall och skriv ett fallvärde på 224. Dra och släpp
CreateCSEntryChangeResult
aktiviteten i huvuddelen av det här fallet. VäljExportErrorCustomContinueRun
felkod.
Du har slutfört definitionen av Exportera lägg till arbetsflöde.
Skapa arbetsflöde för exportborttagning
Om du vill ta bort en användare i SAP ECC kan du anropa BAPI_USER_DELETE program och ange ett kontonamn som ska tas bort i det anslutna systemet. Kontakta SAP-administratören för att avgöra om det här scenariot är obligatoriskt. Oftast tas SAP ECC-konton inte bort utan ställs in för att upphöra att gälla för att behålla historiska uppgifter.
Den här guiden omfattar inte scenarier som rör SAP Common User Administration-system, avetablering av användare från anslutna system, återkallande av licenser osv.
Du behöver inte implementera sidnumrering i exportarbetsflöden. Det finns bara ett objekt objectToExport tillgängligt i arbetsflödeskontexten.
- Gå till Objekttyper –> Användare –> Exportera –> Ta bort arbetsflöde och från verktygslådan till höger dra och släpp sekvensaktivitet till arbetsflödesdesignerfönstret.
- Längst ned till vänster letar du upp knappen Variabler och väljer den för att expandera en lista med variabler som definierats i den här sekvensen.
- Lägg till följande variabler. Om du vill välja en variabeltyp som genererats från SAP WSDL väljer du Bläddra efter typer och expanderar genererade och expanderar sedan SAPECC-namnområdet. Detta initierar de datastrukturer som används av BAPI_USER_DELETE program.
Namn | Variabeltyp | Omfattning | Standardvärde |
---|---|---|---|
userName | Sträng | Sekvens | |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Sekvens | ny TABLE_OF_BAPIRET2() |
- När vi har definierat egenskapen userName som ett oföränderligt ID, ett fästpunkt, måste vi extrahera userName-värdet från en samling fästpunkter för vårt exportobjekt. Dra och släpp ForEachWithBodyFactory-aktivitet från verktygslådan till din sekvensaktivitet. Ersätt objektvariabelns namn med fästpunkt, växla till egenskaper och välj TypeArgument för
Microsoft.MetadirectoryServices.AnchorAttribute
. I fältet Värde skriver duobjectToExport.AnchorAttributes
.
- Om du vill extrahera ett strängvärde för en userName-fästpunkt ska du dra och släppa en Switch-aktivitet inuti ForEach-aktiviteten. I popup-fönstret väljer du
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
typ av växel. Ange uttrycksvärdet för: NyAnchorAttributeNameWrapper(anchor.Name)
. Välj på Lägg till nytt fallområde för Växlingsaktivitet. Ange användarnamn som villkorsvärde. Dra och släpp Tilldela aktivitet i skiftlägestexten userName och tilldelaanchor.Value.ToString()
till variabeln userName. - Dra och släpp WebServiceCall-aktiviteten i sekvensaktiviteten efter ForEach-aktiviteten. Välj SAPECC-tjänstnamn, ZSAPCONNECTORWS-slutpunkt och BAPI_USER_DELETE åtgärd. Välj på ... Knappen Argument för att definiera parametrar för webbtjänstanrop enligt följande:
Namn | Riktning | Typ | Värde |
---|---|---|---|
TILLBAKA | In/Ut | TABLE_OF_BAPIRET2 | bapiret2Table |
ANVÄNDARNAMN | I | Sträng | userName |
- Välj OK. Varningstecknet försvinner.
- För att bearbeta resultatet av en begäran om att ta bort användare, dra och släpp IF-aktiviteten inuti sekvensaktiviteten efter WebServiceCall-aktiviteten. Ange följande villkor:
If(bapiRet2Table.item, Enumerable.Empty(Of BAPIRET2)()).Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Om vi inte får några fel förutsätter vi att borttagningsåtgärden har slutförts och vi vill visa att det här objektet har exporterats genom att skapa
CSEntryChangeResult
med statusen Lyckades. Dra och släppCreateCSEntryChangeResult
aktivitet i Else-grenen av IF-aktiviteten och välj Felkod för lyckad åtgärd.
- Det sista steget i arbetsflödet Exportera borttagning är att hantera och logga exportfel. Dra och släpp Sequence-aktivitet till den tomma då-grenen för IF-aktiviteten.
- Dra och släpp Loggaktivitet till Sekvensaktivitet. Växla till fliken Egenskaper och ange LogText-värdet för:
bapiRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")= True).MESSAGE
. Behåll hög loggningsnivå och trace-tagg. Detta loggar ett felmeddelande i händelseloggen ConnectorsLog eller ECMA2Host när utförlig spårning är aktiverat. - Dra och släpp switch-aktiviteten in i sekvensaktiviteten efter loggaktiviteten. I popup-fönstret väljer du Strängtyp för växelvärdet. Ange följande uttryck:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Välj i Standardfall och dra och släpp aktiviteten CreateCSEntryChangeResult i brödtexten i det här fallet. Välj Felkod för ExportErrorSyntaxViolation.
- Välj i området Lägg till nytt ärende och skriv ett ärendevärde på 124. Dra och släpp
CreateCSEntryChangeResult
-aktivitet i huvudavsnittet av det här fallet. VäljExportErrorCustomContinueRun
felkod.
Du har slutfört definitionen av arbetsflödet Exportera borttagning.
Skapa Export Replace-arbetsflöde
Om du vill uppdatera en användare i SAP ECC kan du anropa BAPI_USER_CHANGE program och ange alla parametrar, inklusive ett kontonamn och all användarinformation, inklusive de som inte ändras. ECMA2-exportläget när alla användaregenskaper ska anges kallas Ersätt. I jämförelse ger exportläget för AttributeUpdate endast attribut som ändras och detta kan leda till att vissa användaregenskaper skrivs över med tomma värden. Webbtjänstanslutningsappen använder därför alltid exportläget Object Replace och förväntar sig att anslutningsappen ska konfigureras för exporttyp: Ersätt.
Export Replace-arbetsflödet är nästan identiskt med arbetsflödet Exportera lägg till. Den enda skillnaden är att du behöver ange extra parametrar som addressX eller companyX för BAPI_USER_CHANGE-programmet. X i slutet av addressX anger att adressens struktur innehåller en ändring.
- Navigera till Objekttyper –> Användare –> Exportera –> Ersätt arbetsflöde och från verktygslådan till höger dra och släpp sekvensaktivitet till fönstret arbetsflödesdesigner.
- Längst ned till vänster letar du upp knappen Variabler och väljer den för att expandera en lista med variabler som definierats i den här sekvensen.
- Lägg till följande variabler. Om du vill välja en variabeltyp som genererats från SAP WSDL väljer du Bläddra efter typer och expanderar genererade och expanderar sedan SAPECC-namnområdet. Detta initierar de datastrukturer som används av BAPI_USER_CHANGE programmet.
Namn | Variabeltyp | Omfattning | Standardvärde |
---|---|---|---|
userName | Sträng | Sekvens | |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Sekvens | ny TABLE_OF_BAPIRET2() |
addressX | SAPECC. BAPIADDR3X | Sekvens | ny BAPIADDR3X() |
adress | SAPECC. BAPIADDR3 | Sekvens | ny BAPIADDR3() |
companyX | SAPECC. BAPIUSCOMX | Sekvens | ny BAPIUSCOMX() |
Företag | SAPECC.BAPIUSCOMP | Sekvens | ny BAPIUSCOMP() |
defaultsX | SAPECC. BAPIDEFAX | Sekvens | ny BAPIDEFAX() |
standardvärden | SAPECC. BAPIDEFAUL | Sekvens | ny BAPIDEFAUL() |
logOnDataX | SAPECC.BAPILOGONX | Sekvens | ny BAPILOGONX() |
logOnData | SAPECC.BAPILOGOND | Sekvens | ny BAPILOGOND() |
Arbetsflödet Exportera ersätt ser ut så här:
- När vi har definierat egenskapen userName som ett oföränderligt ID, ett fästpunkt, måste vi extrahera userName-värdet från en samling fästpunkter för vårt exportobjekt. Dra och släpp ForEachWithBodyFactory-aktivitet från verktygslådan till din sekvensaktivitet. Ersätt objektvariabelns namn med fästpunkt, växla till egenskaper och välj TypeArgument för
Microsoft.MetadirectoryServices.AnchorAttribute
. I fältet Värde skriver duobjectToExport.AnchorAttributes
.
- Om du vill extrahera ett strängvärde från ett userName-ankare, dra och släpp Switch-aktiviteten i ForEach-aktiviteten. I popup-fönstret väljer du
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
typ av växel. Ange uttrycksvärdet för: NyAnchorAttributeNameWrapper(anchor.Name)
. Välj på Lägg till nytt fallområde för Växlingsaktivitet. Skriv in userName som Case-värde. Dra och släpp Tilldela aktivitet i skiftlägestexten userName och tilldelaanchor.Value.ToString()
till variabeln userName. Arbetsflödet Exportera ersätt ser ut så här:
- Nu när vi har extraherat userName-värdet från den exporterade objektankaregenskapen måste vi fylla i andra strukturer som företag, standardvärden, adress, inloggningsdata som innehåller annan SAP-användarinformation. Det gör vi genom att cykla genom en samling av alla attribut som definierats i schemat.
- Fäll ihop din ForEach-aktivitet och dra och släpp en annan ForEachWithBothFactory-aktivitet i sekvensaktiviteten efter den befintliga ForEach-aktiviteten. Ersätt objektets variabelnamn med schemaAttr, växla till egenskaper och välj TypeArgument för
Microsoft.MetadirectoryServices.SchemaAttribute
. I fältet Värde skriver duschemaType.Attributes
.
- Dra och släpp sekvensaktiviteten i ForEach-aktivitetens inre del. Längst ned till vänster letar du upp knappen Variabler och väljer den för att expandera en lista med variabler som definierats i den här sekvensen. Lägg till följande variabel: xValue av strängtyp. Dra och släpp Tilldela aktivitet i sekvensaktiviteten. Tilldela xValue uttrycket:
If(objectToExport.AttributeChanges.Contains(schemaAttr.Name), objectToExport.AttributeChanges(schemaAttr.Name).ValueChanges(0).Value.ToString(), String.Empty)
Den antingen extraherar ändringarna som är mellanlagrade för export för det här attributet eller så initierar den det med en tom sträng. Arbetsflödet Exportera ersätt ser ut så här:
- Dra och släpp switch-aktiviteten efter Tilldela aktivitet. I popup-menyn väljer du
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
och väljer Ok. Ange följande uttryck: NyAttributeNameWrapper(schemaAttr.Name)
. Du ser en varningsikon i det övre högra hörnet av din Switch-funktion angående attribut som hanteras i schemat men inte har tilldelats någon egenskap. Välj Lägg till nytt fallområde i Switch-aktivitet och skriv ett fallvärde av city. Dra och släpp sekvensaktivitet i brödtexten i det här fallet. Dra och släpp aktiviteten Tilldela i brödtexten i det här fallet. Tilldela värdet "X" till addressX.city. Dra och släpp en annan Tilldela-aktivitet in i den här delen av ärendet. Tilldela xValue till address.city. Arbetsflödet Exportera ersätt ser ut så här:
10.Lägg till andra saknade ärenden och tilldelningar. Använd den här mappningstabellen som en guide:
Fall | Uppgift |
---|---|
stad | addressX.city = "X" address.city = xValue |
Företag | companyX.company = "X" company.company = xValue |
Avdelning | address.departmentX = "X" address.department = xValue |
E-post | addressX.e_mail = "X" address.e_mail = xValue |
utgångstid | logOnDataX.GLTGB = "X" logOnData.GLTGB = xValue |
förnamn | addressX.firstname = "X" address.firstname = xValue |
efternamn | addressX.lastname = "X" address.lastname = xValue |
mellannamn | addressX.middlename = "X" address.middlename = xValue |
telefonnummer | addressX.TEL1_Numbr = "X"-adress. TEL1_Numbr = xValue |
jobbtitel | addressX.function = "X" address.function = xValue |
Arbetsflödet Exportera ersätt ser ut så här:
Innan vi anropar BAPI_USER_CHANGE program måste vi söka efter användarnamn som inte är tomt. Dölj både ForEach-aktiviteter och dra och släpp IF-aktiviteten efter den andra ForEach-aktiviteten. Ange följande villkor:
String.IsNullOrEmpty(userName ) = False
När användarnamnet är tomt vill vi ange att åtgärden misslyckades. Dra och släpp
CreateCSEntryChangeResult
aktiviteten till else-grenen för din IF-aktivitet och väljExportErrorCustomContinueRun
felkod. Arbetsflödet Exportera ersätt ser ut så här:Dra och släpp Sequence-aktiviteten i den tomma Then-grenen för den första IF-aktiviteten. Dra och släpp aktiviteten WebServiceCall inuti sekvensaktiviteten. Välj SAPECC-tjänstnamn, ZSAPCONNECTORWS-slutpunkt och BAPI_USER_CHANGE åtgärd. Välj på ... Knappen Argument för att definiera parametrar för webbtjänstanrop enligt följande:
Namn | Riktning | Typ | Värde |
---|---|---|---|
ADRESS | I | BAPIADDR3 | adress |
ADDRESSX | I | BAPIADDR3X | addressX |
FÖRETAG | I | BAPIUSCOMP | Företag |
COMPANYX | I | BAPIUSCOMX | Företag |
STANDARDVÄRDEN | I | BAPIDEFAUL | standardvärden |
DEFAULTSX | I | BAPIDEFAX | defaultsX |
Inloggningsdata | I | BAPILOGOND | logOnData |
LOGONDATAX | I | BAPILOGONX | logOnDataX |
RETURNERA | In/ut | TABLE_OF_BAPIRET2 | bapiret2Table |
ANVÄNDARNAMN | I | Sträng | userName |
- Välj OK. Varningstecknet försvinner. Arbetsflödet Exportera ersätt ser ut så här:
- För att bearbeta resultat av användarändringsbegäran drar och släpper du IF-aktiviteten i sekvensaktiviteten efter WebServiceCall-aktiviteten. Ange följande villkor:
Not IsNothing(bapiret2Table.item) AndAlso bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Om vi inte får några fel förutsätter vi att exportåtgärden har slutförts och vi vill ange lyckad export av det här objektet genom att skapa
CSEntryChangeResult
med statusen Lyckades. Dra och släppCreateCSEntryChangeResult
aktiviteten i Else-grenen av din IF-aktivitet och välj Felkod för framgång. - Dra och släpp sekvensaktivitet i grenen Sedan för IF-aktiviteten. Lägg till loggaktivitet med LogText-värde
string.Join("\n",bapiret2Table.item.Where(Function(retItem) retItem.TYPE.Equals("E")).Select(Function(r) r.MESSAGE))
och fel-tagg. Lägg tillCreateCSEntryChangeResult
aktivitet efter loggaktivitet med felkodenExportErrorCustomContinueRun
. Arbetsflödet Exportera ersätt ser ut så här:
Du har slutfört definitionen av arbetsflödet Exportera ersätt.
Nästa steg är att konfigurera ECMA2Host Webservice Connector med hjälp av den här mallen.