Dela via


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.

  1. Starta konfigurationsverktyget för webbtjänsten från mappen "C:\Program Files\Microsoft ECMA2Host\Web Service Configuration Tool" wsconfigTool.exe
  2. På menyn File-New väljer du Skapa nytt SOAP-projekt

Skärmbild av skapa SOAP-projekt.

  1. Välj i SOAP-projekt och välj Lägg till ny webbtjänst.

Skärmbild av lägg till ny webbtjänst.

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

Skärmbild av namngivning av webbtjänst.

  1. Ange autentiseringsuppgifter för att ansluta till SAP ECC-slutpunkten. Välj Nästa.
  2. 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.

Skärmbild av BAPI:er.

  1. Spara projektet i mappen C:\Program Files\Microsoft ECMA2Host\Service\ECMA.
  2. Välj på fliken Objekttyper och välj att lägga till användarobjekttyp. Välj Ok.
  3. Expandera fliken Objekttyper och välj användartypsdefinition.

Skärmbild av objekttyper.

  1. Lägg till följande attribut i schemat och välj userName som fästpunkt.

Skärmbild av att lägga till attribut.

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

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

Skärmbild av arbetsflödet för fullständig importåtgärd.

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

Skärmbild av fullständigt importarbetsflöde.

  1. För att implementera sidnumrering, dra och släpp DoWhile-aktiviteten från Verktygslådan inuti din sekvensaktivitet efter den senaste tilldelningsåtgärden.
  2. Växla till fliken Egenskaper i den högra rutan och ange det här villkoret för DoWhile
  • cykel: returnedSize = pageSize

Skärmbild av skärmen Returnedsize.

  1. Välj variabler och lägg till egenskapen currentPageNumber av int32-typ i DoWhile-cykeln med standardvärdet 0.

Skärmbild av dowhile-skärmen.

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

Skärmbild av customdata-skärmen.

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

Skärmbild av dowhile-sekvens.

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

Skärmbild av undantagsegenskap.

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

Skärmbild av IF-aktivitet.

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

Skärmbild av IF-aktivitet med foreach.

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

Skärmbild av CreateCSEntryChangeScope.

  1. 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
  1. Välj OK. Varningstecknet försvinner. Information om en användare lagras i ovanstående variabler. IF-aktiviteten ser ut så här:

Skärmbild av parametrar.

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

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

Skärmbild av ForEach.

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

Skärmbild av CreateAttributeChange.

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

Skärmbild av SetImportStatusCode.

  1. Fäll ihop sekvensaktiviteten i ForEach-aktiviteten så att DoWhile-cykeln ser ut så här:

Skärmbild av DoWhile-cykeln.

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

Skärmbild av DoWhile final.

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.

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

Skärmbild av arbetsflödet för att lägga till export.

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

Skärmbild av lägg till sekvens för export.

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

Skärmbild av nytt ärende.

  1. 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.
  2. 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 du objectToExport.AttributeChanges.

Skärmbild av ny sekvens.

  1. Dra och släpp Switch-aktiviteten i huvudsektionen för ForEach-aktiviteten.
  2. I popup-menyn väljer du Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper och väljer Ok.
  3. 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.
  4. Välj Lägg till nytt fallområde i Switch-aktivitet och skriv ett fallvärde av city.
  5. Dra och släpp Tilldela aktivitet i brödtexten i det här fallet. Tilldela attributeChange.ValueChanges(0).Value.ToString() till address.city.

Skärmbild av det nya arbetsflödet för att lägga till export.

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

Skärmbild av ärenden.

  1. 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)
  2. 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ör ExportErrorMissingAnchorComponent och ExportErrorMissingProvisioningAttribute.

Skärmbild av den andra IF-aktiviteten.

  1. 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
  1. Välj OK. Varningstecknet försvinner.

Skärmbild av arbetsflöde efter parametrar.

  1. 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
  2. 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.
  3. 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 CreateAttrubuteChangeaktiviteten i CreateCSEntryChangeResult aktiviteten och välja Lägg till ett användarnamn. Dra och släpp CreateValueChange aktivitet i CreateAttributeChange 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.

Skärmbild av uppdaterat sekvensflöde.

  1. 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.
  2. 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.
  3. 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
  4. Välj i Standardfall och dra och släpp aktiviteten CreateCSEntryChangeResult i brödtexten i det här fallet. Välj ExportErrorInvalidProvisioningAttributeValue-felkod.

Skärmbild av ny uppdatering av arbetsflödet.

  1. 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älj ExportErrorCustomContinueRun felkod.

Skärmbild av den slutliga uppdateringen av arbetsflödet.

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.

  1. 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.
  2. 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.
  3. 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()
  1. 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 du objectToExport.AnchorAttributes.

Skärmbild av arbetsflödet för exportborttagningsåtgärden.

  1. 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: Ny AnchorAttributeNameWrapper(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 tilldela anchor.Value.ToString() till variabeln userName.
  2. 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
  1. Välj OK. Varningstecknet försvinner.

Skärmbild av uppdaterat arbetsflöde för borttagningsåtgärd.

  1. 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
  2. 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äpp CreateCSEntryChangeResult aktivitet i Else-grenen av IF-aktiviteten och välj Felkod för lyckad åtgärd.

Skärmbild av arbetsflödet för att ta bort export.

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

Skärmbild av uppdateringen för att exportera arbetsflödet för borttagningsåtgärden.

  1. 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älj ExportErrorCustomContinueRun felkod.

Skärmbild av arbetsflödet för slutlig exportborttagning.

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.

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

Skärmbild av starten för arbetsflödet för ersättningsoperation.

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

Skärmbild av uppdatering för att ersätta åtgärdsarbetsflödet.

  1. 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: Ny AnchorAttributeNameWrapper(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 tilldela anchor.Value.ToString() till variabeln userName. Arbetsflödet Exportera ersätt ser ut så här:

Skärmbild av en annan uppdatering för att ersätta åtgärdsarbetsflödet.

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

Skärmbild av ersättningssekvens för operationer.

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

Skärmbild av uppdatering av ersättningssekvensen.

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

Skärmbild av dra och släpp växelaktivitet.

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:

Skärmbild av den andra dra och släpp-växelaktiviteten.

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

  2. 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älj ExportErrorCustomContinueRun felkod. Arbetsflödet Exportera ersätt ser ut så här: Skärmbild av aktiviteten CreateCSEntryChangeResult.

  3. 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
  1. Välj OK. Varningstecknet försvinner. Arbetsflödet Exportera ersätt ser ut så här:

Skärmbild av BAPI_USER_CHANGE åtgärd.

  1. 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
  2. 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 i Else-grenen av din IF-aktivitet och välj Felkod för framgång.
  3. 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 till CreateCSEntryChangeResult aktivitet efter loggaktivitet med felkoden ExportErrorCustomContinueRun. Arbetsflödet Exportera ersätt ser ut så här:

Skärmbild av arbetsflödet för att ersätta slutlig export.

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.

Nästa steg