Vytvoření šablony konektoru webové služby SAP ECC 7.51 pro ECMA2Host
Tato příručka vás provede procesem vytvoření šablony pro konektor ECMA (Web Service Extensibility Connectivity Management Agent) pro správu uživatelů SAP ECC.
Omezení a předpoklady
Tato šablona ukazuje, jak spravovat uživatele. Ostatní typy objektů, jako jsou místní skupiny aktivit, role a profily, nejsou touto příručkou pokryty, protože ECMA2Host v současné době nepodporuje odkazy s více hodnotami. Operace s heslem jsou také mimo rozsah tohoto průvodce.
Tato příručka nepokrývá vytvoření účtu služby v rámci SAP, který se používá k volání vystavených funkcí BAPI. Předpokládá se, že předpřipravený ukázkový účet vývojářský se používá s profilem RFC_ALL, který uděluje oprávnění pro rozhraní BAPI uvedená v tomto článku.
Nástroj pro konfiguraci webové služby ve výchozím nastavení nepodporuje následující funkce zveřejněné v SAP: Zásady WSP a více vazeb na koncový bod. Očekává pouze WSDL s vazbou stylu dokumentu PROTOKOLU SOAP 1.1, která je typu all-in-one bez zásad.
Funkce SAP ECC BAPI použité v této šabloně:
- BAPI_USER_GETLIST – získejte seznam všech uživatelů připojených k tomuto systému.
- BAPI_USER_GETDETAIL – získejte podrobnosti o konkrétním uživateli.
- BAPI_USER_CREATE1 – vytvoří uživatele.
- BAPI_USER_DELETE – odstraní uživatele.
- BAPI_USER_CHANGE – aktualizuje uživatele.
Všechny vlastnosti uživatele SAP v této příručce se považují za vlastnosti s jednou hodnotou.
Použitý programovací jazyk je Visual Basic.
Definování koncového bodu webové služby a vytvoření schématu
Než budete moct navrhnout pracovní postupy importu a exportu, musíte vytvořit šablonu a definovat koncový bod s funkcemi SAP BAPI vystavenými přes rozhraní SOAP. Pak vytvořte schéma objektů ECMA2 a jejich vlastností je k dispozici v této šabloně.
- Ve složce C:\Program Files\Microsoft ECMA2Host\Web Service Configuration Tool spusťte nástroj Konfigurace webové služby wsconfigTool.exe
- V nabídce File-New zvolte Vytvořit nový projekt SOAP.
- Vyberte projekt SOAP a zvolte Přidat novou webovou službu.
- Pojmenujte webovou službu SAPECC, zadejte adresu URL pro stažení WSDL publikovaného souboru, zadejte SAPECC jako obor názvů. Název webové služby vám pomůže odlišit tuto webovou službu v šabloně od ostatních. Obor názvů definuje název oboru názvů Microsoft .NET, který se používá ke generování tříd. Zvolte režim základního ověřování, pokud není uvedeno jinak správcem SAP. Vyberte Další.
- Zadejte přihlašovací údaje pro připojení ke koncovému bodu SAP ECC. Vyberte Další.
- Na stránce koncových bodů a operací se ujistěte, že se zobrazují rozhraní BAPI, a vyberte Dokončit.
Poznámka:
Pokud se zobrazí více než jeden koncový bod, máte povolené vazby SOAP 1.2 i SOAP 1.1. To způsobí selhání konektoru. Upravte definici vazby v SOAMANAGER a ponechte pouze jednu. Pak znovu přidejte webovou službu.
- Uložte projekt do složky C:\Program Files\Microsoft ECMA2Host\Service\ECMA.
- Na kartě Typy objektů vyberte možnost přidat objekt typu Uživatel. Vyberte ok.
- Rozbalte kartu Typy objektů a vyberte definici typu uživatel.
- Do schématu přidejte následující atributy a jako ukotvení zvolte userName.
- Uložte projekt.
Name | Type | Záložka |
---|---|---|
city | string | |
company | string | |
department | string | |
string | ||
expirationTime | string | |
firstName | string | |
lastName | string | |
middleName | string | |
telephoneNumber | string | |
jobTitle | string | |
userName | string | checked |
Vytvoření pracovního postupu úplného importu
Pracovní postup importu, i když je volitelný v ECMA2Host, umožňuje importovat stávající uživatele SAP do mezipaměti ECMA2Host v paměti a vyhnout se vytváření duplicitních uživatelů během zřizování.
Pokud nevytvoříte pracovní postup importu, váš konektor funguje v režimu jen pro export a způsobí, že ECMA2Host vždy vydá Vytvořit operace uživatele i pro stávající uživatele. To může vést k selháním nebo duplicitám při použití standardních rozhraní SAP BAPI, pokud pracovní postup exportu nezpracuje duplicitní položky.
SAP ECC nenabízí integrovaný mechanismus pro čtení změn provedených od posledního čtení.
Proto implementujeme pouze pracovní postup úplného importu. Pokud potřebujete implementovat rozdílové importy z důvodů výkonu, požádejte správce SAP o seznam BAPI a požádejte je o publikování jako webovou službu SOAP. Pak implementujte pracovní postup Delta Import pomocí následujícího přístupu, jak je popsáno, a vlastnost customData, která obsahuje časové razítko předchozího úspěšného spuštění.
SAP ECC nabízí několik funkcí BAPI pro získání seznamu uživatelů s jejich vlastnostmi:
- BAPI_USER_GETLIST – získejte seznam všech uživatelů připojených k tomuto systému.
- BAPI_USER_GETDETAIL – získejte podrobnosti o konkrétním uživateli.
K načtení stávajících uživatelů ze SAP ECC v této šabloně se používají pouze tyto dvě rozhraní BAPI.
- Přejděte na Typy objektů –> Uživatel –> Import –> Úplný pracovní postup importu a z panelu nástrojů na pravém panelu nástrojů přetáhněte aktivitu sekvence do podokna návrháře pracovního postupu.
- V levém dolním rohu vyhledejte tlačítko Proměnné a vyberte ho, aby se rozbalil seznam proměnných definovaných v této sekvenci.
- Přidejte následující proměnné. Pokud chcete vybrat typ proměnné vygenerovaný ze SAP WSDL, vyberte možnost Procházet typy a rozbalte vygenerovaný a rozbalte obor názvů SAPECC.
Name | Typ proměnné | Obor | Výchozí |
---|---|---|---|
selRangeTable | SAPECC. TABLE_OF_BAPIUSSRGE | Sequence | new TABLE_OF_BAPIUSSRGE with {.item = new BAPIUSSRGE(){new BAPIUSSRGE}} |
getListRetTable | SAPECC. TABLE_OF_BAPIRET2 | Sequence | nový TABLE_OF_BAPIRET2 |
Pagesize | Int32 | Sequence | 200 |
returnSize | Int32 | Sequence | |
usersTable | SAPECC. TABLE_OF_BAPIUSNAME | Sequence | new TABLE_OF_BAPIUSNAME() |
- Z panelu nástrojů přetáhněte čtyři aktivity Přiřadit uvnitř aktivity Sequence a nastavte tyto hodnoty:
selRangeTable.item(0).PARAMETER = "USERNAME"
selRangeTable.item(0).SIGN = "I" selRangeTable.item(0).OPTION = "GT" selRangeTable.item(0).LOW = ""
Tyto parametry slouží k volání funkce BAPI_USER_GETLIST a k implementaci stránkování.
- Pokud chcete implementovat stránkování, přetáhněte z panelu nástrojů aktivitu DoWhile do vaší aktivity Sequence po poslední operaci Assign.
- V pravém podokně přepněte na kartu Vlastnosti a zadejte tuto podmínku pro DoWhile
- cyklus:
returnedSize = pageSize
- Vyberte proměnné a přidejte vlastnost currentPageNumber typu int32 v rámci cyklu DoWhile s výchozí hodnotou 0.
- Volitelný krok: Pokud plánujete implementovat pracovní postup rozdílového importu, přetáhněte z panelu nástrojů aktivitu Přiřadit do aktivity sekvence po cyklu DoWhile. Nastavte tuto hodnotu:
-
customData(schemaType.Name + "_lastImportTime") = DateTimeOffset.UtcNow.Ticks.ToString()
Tím se uloží datum a čas posledního úplného spuštění importu a toto časové razítko můžete později použít v pracovním postupu delta importu.
- Z panelu nástrojů přetáhněte aktivitu Sequence do aktivity Do While. Přetáhněte aktivitu WebServiceCall uvnitř této aktivity sekvence a vyberte název služby SAPECC, koncový bod ZSAPCONNECTORWS a operaci BAPI_USER_GETLIST.
- Vyberte tlačítko Argumenty pro nastavení parametrů volání webové služby takto:
Name | Směr | Type | Hodnota |
---|---|---|---|
MAX_ROWS | V | Int32 | Pagesize |
MAX_ROWSSpecified | V | Logická hodnota | True |
VRÁTIT | 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 | V | String | |
řádky | Ven | Int32 | returnSize |
- Vyberte OK. Znaménko upozornění zmizí. Seznam uživatelů uložených v proměnné usersTable. Vzhledem k tomu, že SAP nevrací úplný seznam uživatelů v jedné odpovědi, musíme při přepínání stránek implementovat stránkování a volat tuto funkci několikrát. Potom pro každého uživatele, kterého jste naimportovali, potřebujete získat podrobnosti o uživateli provedením samostatného volání. To znamená, že pro prostředí s 1 000 uživateli a velikostí stránky 200 konektor webové služby provádí 5 volání k načtení seznamu uživatelů a 1 000 individuálních volání k načtení podrobností uživatelů. Pokud chcete zvýšit výkon, požádejte tým SAP, aby vytvořil vlastní program BAPI, který obsahuje seznam všech použití se svými vlastnostmi. Tím se vyhnete nutnosti provádět 1 000 individuálních volání a zpřístupnit tuto funkci BAPI přes koncový bod WS PROTOKOLU SOAP.
- Z panelu nástrojů přetáhněte aktivitu IF do vaší aktivity DoWhile po aktivitě WebServiceCall. Zadejte tuto podmínku pro kontrolu neprázdné odpovědi a absence chyb:
IsNothing(getListRetTable.item) OrElse getListRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
- Z panelu nástrojů přetáhněte aktivitu Throw do větve Else aktivity IF, aby došlo k vyvolání chyby při neúspěšném importu. Přepněte na kartu Vlastnosti a zadejte tento výraz pro vlastnost Exception aktivity Throw:
New Exception(getListRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")).MESSAGE)
- Pokud chcete zpracovat seznam importovaných uživatelů, přetáhněte aktivitu ForEachWithBodyFactory ze sady nástrojů do větve aktivity IF. Přepněte na kartu Vlastnosti a vyberte SAPECC. BAPIUSNAME as TypeArgument. Vyberte možnost ... a zadejte tento výraz pro vlastnost hodnot:
if(usersTable.item,Enumerable.Empty(of BAPIUSNAME)())
- Z panelu nástrojů přetáhněte aktivitu Sequence do aktivity ForEach. Pokud je toto okno aktivity sekvence aktivní, vyberte na tlačítku Proměnné a definujte tyto proměnné:
Name | Typ proměnné | Obor | Výchozí |
---|---|---|---|
company | SAPECC. BAPIUSCOMP | Sequence | new BAPIUSCOMP() |
adresa | SAPECC. BAPIADDR3 | Sequence | new BAPIADDR3() |
výchozí hodnoty | SAPECC. BAPIDEFAUL | Sequence | nový BAPIDEFAUL() |
logondata | SAPECC. BAPILOGOND | Sequence | nový BAPILOGOND() |
getDetailRetTable | SAPECC. TABLE_OF_BAPIRET2 | Sequence | new TABLE_OF_BAPIRET2() |
Vaše aktivita KDYŽ vypadá takto:
- Přetáhněte aktivitu CreateCSEntryChangeScope do aktivity sekvence. Do vlastnosti DN zadejte schemaType.Name & položku.USERNAME. Do pole CreateAnchorAttribute AnchorValue zadejte item.username.
- Pokud chcete načíst podrobnosti o jednotlivých uživatelích, přetáhněte z panelu nástrojů aktivitu WebServiceCall uvnitř aktivity sequence přímo před aktivitou CreateAnchorAttribute. Vyberte název služby SAPECC, koncový bod ZSAPCONNECTORWS a operaci BAPI_USER_GET_DETAIL. Vyberte tlačítko Argumenty pro definování parametrů volání webové služby.
Name | Směr | Type | Hodnota |
---|---|---|---|
VRÁTIT | In/Out | TABLE_OF_BAPIRET2 | getDetailRetTable |
UŽIVATELSKÉ JMÉNO | V | String | item.username |
ADRESA | Ven | BAPIADDR3 | adresa |
SPOLEČNOST | Ven | BAPIUSCOMP | company |
VÝCHOZÍ HODNOTY | Ven | BAPIUSDEFAUL | výchozí hodnoty |
LOGONDATA | Ven | BAPILOGOND | logonData |
WITH_USERNAME | V | String | |
řádky | Ven | Int32 | returnSize |
- Vyberte OK. Znaménko upozornění zmizí. Podrobnosti o uživateli jsou uloženy ve výše uvedených proměnných. Vaše aktivita KDYŽ vypadá takto:
- Pokud chcete zkontrolovat výsledky operace BAPI_USER_GET_DETAIL, přetáhněte z panelu nástrojů aktivitu IF a umístěte ji do aktivity Sequence mezi WebServiceCall a CreateAnchorAttribute. Zadejte tuto podmínku:
IsNothing(getDetailRetTable.item) OrElse getDetailRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
Vzhledem k tomu, že chybějící podrobnosti o uživateli by neměly být považovány za katastrofickou událost, chceme tuto chybu indikovat a pokračovat ve zpracování ostatních uživatelů. Přetáhněte aktivitu sekvence do větve Else aktivity IF. Přidejte aktivitu protokolu do této nové aktivity sekvence. Přepněte na kartu Vlastnosti a změňte vlastnost Úroveň na Hodnotu Vysoká, Značka na Trasování. Do vlastnosti LogText zadejte následující: string.Join("\n", getDetailRetTable.item.Select (Function(item) item.MESSAGE ))
- Přetáhněte sekvenční aktivitu do větve aktivity KDYŽ. Přetáhněte existující aktivitu CreateAnchorAttribute do sekvenční aktivity uvnitř větve IF aktivity. Vaše aktivita ForEach teď vypadá takto:
- Pro každou vlastnost uživatele, jako je město, společnost, oddělení, e-mail přidat aktivitu KDYŽ za aktivitu CreateAnchorAttribute a kontrolovat neprázdné hodnoty zadáním podmínek jako
Not string.IsNullOrEmpty(address.city)
a přidáním aktivity CreateAttributeChange do větve této aktivity KDYŽ.
Příklad: Přidání aktivit CreateAttributeChange pro všechny vlastnosti uživatele pomocí této mapovací tabulky:
Vlastnost ECMA User | Sap – vlastnost |
---|---|
city | address.city |
department | address.department |
company | company.company |
address.e_mail | |
firstName | address.firstName |
lastName | address.lastName |
middleName | address.middleName |
jobTitle | address.function |
expirationTime | logonData.GLTGB |
telephoneNumber | adresa. TEL1_NUMBR |
- Nakonec za poslední aktivitu CreateAttributeChange přidejte aktivitu SetImportStatusCode. Nastavte errorCode na úspěch ve větvi Then. Přidejte do větve Else další aktivitu kódu SetImportStatus a nastavte ErrorCode na ImportErrorCustomContinueRun.
- Sbalení aktivity sekvence uvnitř aktivity ForEach tak, aby cyklus DoWhile vypadal takto:
- Pokud chcete načíst další stránku uživatelů, aktualizujte
selRangeTable.item(0).LOW
vlastnost. Přetáhněte aktivitu IF do aktivity Sekvence v rámci DoWhile. Umístěte ho za existující aktivitu 'IF'. Enter returnSize>0 as Condition. Přidat přiřadit aktivitu do větev IF aktivity a nastavitselRangeTable.item(0).LOW
nausersTable.item(returnedSize-1).username
.
Dokončili jste definici pracovního postupu úplného importu.
Vytvoření pracovního postupu Přidat export
Pokud chcete vytvořit uživatele v SAP ECC, můžete volat BAPI_USER_CREATE1 program a zadat všechny parametry, včetně názvu účtu a počátečního hesla. Pokud potřebujete vygenerovat název účtu na straně SAP, obraťte se na správce SAP a použijte vlastní funkci BAPI, která vrací vlastnost userName nově vytvořeného uživatelského účtu.
Tato příručka neukazuje přiřazení licencí, místních nebo globálních skupin aktivit, systémů nebo profilů. Obraťte se na správce SAP a upravte tento pracovní postup odpovídajícím způsobem.
V pracovních postupech exportu není potřeba implementovat stránkování. V kontextu pracovního postupu je k dispozici pouze jeden objekt objectToExport.
- Přejděte na Typy objektů –> Uživatel – Export –>> Přidat pracovní postup a z panelu nástrojů na pravém panelu nástrojů přetáhněte aktivitu sekvence do podokna návrháře pracovního postupu.
- V levém dolním rohu vyhledejte tlačítko Proměnné a vyberte ho, aby se rozbalil seznam proměnných definovaných v této sekvenci.
- Přidejte následující proměnné. Pokud chcete vybrat typ proměnné vygenerovaný ze SAP WSDL, zvolte Procházet typy, rozbalte generované, a poté rozbalte obor názvů SAPECC. Tím se inicializují datové struktury používané programem BAPI_USER_CREATE1.
Name | Typ proměnné | Obor | Výchozí |
---|---|---|---|
adresa | SAPECC. BAPIADDR3 | Sequence | new BAPIADDR3() |
userName | String | Sequence | |
Heslo | SAPECC. BAPIPWD | Sequence | new BAPIPWD() |
company | SAPECC. BAPIUSCOMP | Sequence | new BAPIUSCOMP() |
výchozí hodnoty | SAPECC. BAPIDEFAUL | Sequence | nový BAPIDEFAUL() |
logOnData | SAPECC. BAPILOGOND | Sequence | nový BAPILOGOND() |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Sequence | new TABLE_OF_BAPIRET2() |
- Když jsme definovali vlastnost userName jako neměnné ID a kotvicí bod, musíme extrahovat hodnotu userName z kolekce kotvicích bodů našeho exportního objektu. Přetáhněte aktivitu ForEachWithBodyFactory ze sady nástrojů do aktivity sekvence. Nahraďte název proměnné položky ukotveným , přepněte na vlastnosti a zvolte TypeArgument of
Microsoft.MetadirectoryServices.AnchorAttribute
. Do pole Hodnota zadejteobjectToExport.AnchorAttributes
.
- Chcete-li extrahovat řetězcovou hodnotu ukotvení userName, přetáhněte aktivitu Switch uvnitř aktivity ForEach. Ve vyskakovacím okně vyberte typ přepínače
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
. Zadejte hodnotu výrazu: New AnchorAttributeNameWrapper(anchor. Název). - Vyberte možnost Přidat nový případ v rámci aktivity Switch. Zadejte userName jako hodnotu velikosti písmen. Přetáhněte aktivitu Assign do textu případu userName a přiřaďte ukotvení. Value.ToString() na proměnnou userName.
- Teď, když jsme extrahovali hodnotu userName z exportované vlastnosti ukotvení objektu, musíme naplnit další struktury, jako jsou společnosti, výchozí hodnoty, adresa, přihlašovací data, která obsahují další podrobnosti o uživateli SAP. Provedeme to tak, že projdeme kolekcí změn atributů.
- Sbalte aktivitu ForEach a přetáhněte jinou aktivitu ForEachWithBothFactory uvnitř vaší aktivity Sequence za existující aktivitou ForEach. Nahraďte název proměnné položky atributEmChange, přepněte na vlastnosti a zvolte TypeArgument of
Microsoft.MetadirectoryServices.AttributeChange
. Do pole Hodnota zadejteobjectToExport.AttributeChanges
.
- Přetáhněte aktivitu Switch do těla aktivity ForEach.
- V místní nabídce vyberte
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
a pak vyberte OK. - Zadejte následující výraz: New AttributeNameWrapper(attributeChange.Name). V pravém horním rohu aktivity Switch se zobrazí ikona upozornění týkající se neošetřených atributů definovaných ve schématu a nepřiřazených k žádné vlastnosti.
- Vyberte možnost Přidat nový případ v oblasti aktivity Switch a zadejte hodnotu případu město.
- Přetáhněte aktivitu Assign do textu tohoto případu. Přiřaďte
attributeChange.ValueChanges(0).Value.ToString()
adresu.city.
- Přidejte další chybějící případy a přiřazení. Tuto tabulku mapování použijte jako vodítko:
Velikost písmen | Přiřazení |
---|---|
city | address.city = attributeChange.ValueChanges(0)Value.ToString() |
company | company.company = attributeChange.ValueChanges(0)Value.ToString() |
department | address.department = attributeChange.ValueChanges(0)Value.ToString() |
address.e_mail = attributeChange.ValueChanges(0)Value.ToString() | |
expirationTime | logOnData.GLTGB = attributeChange.ValueChanges(0)Value.ToString() |
Jméno | address.firstname = attributeChange.ValueChanges(0)Value.ToString() |
lastName | address.lastname = attributeChange.ValueChanges(0)Value.ToString() |
middleName | address.middlename = attributeChange.ValueChanges(0)Value.ToString() |
telephoneNumber | adresa. TEL1_Numbr = attributeChange.ValueChanges(0)Value.ToString() |
jobTitle | address.function = attributeChange.ValueChanges(0)Value.ToString() |
export_password | heslo. BAPIPWD1 = attributeChange.ValueChanges(0)Value.ToString() |
Zde export_password je speciální virtuální atribut, který je vždy definován ve schématu a lze jej použít k předání počátečního hesla uživatele, který se vytváří.
- Sbalte aktivitu ForEach a přetáhněte aktivitu IF do aktivity Sekvence po druhé aktivitě ForEach, abyste před odesláním žádosti o vytvoření uživatele ověřili vlastnosti uživatele. Potřebujeme alespoň 3 neprázdné hodnoty: uživatelské jméno, příjmení, počáteční heslo. Zadejte tuto podmínku:
(String.IsNullOrEmpty(address.lastname) = False ) AND (String.IsNullOrEmpty(userName) = False) AND (String.IsNullOrEmpty(password.BAPIPWD1) = False)
- Ve větvi Else aktivity KDYŽ přidejte jednu další aktivitu KDYŽ, protože chceme v závislosti na tom, co chybí, vyvolat různé chyby. Zadejte hodnotu podmínky: String.IsNullOrEmpty(userName).
CreateCSEntryChangeResult
Přetáhněte aktivity do obou větví druhé aktivity KDYŽ a nastavte ErrorCode ofExportErrorMissingAnchorComponent
aExportErrorMissingProvisioningAttribute
.
- Přetáhněte aktivitu sekvence do prázdné větve Potom první aktivity KDYŽ. Přetáhněte aktivitu WebSeviceCall uvnitř aktivity Sequence. Vyberte název služby SAPECC, koncový bod ZSAPCONNECTORWS a operaci BAPI_USER_CREATE1. Vyberte tlačítko Argumenty a definujte parametry pro volání webové služby takto:
Name | Směr | Type | Hodnota |
---|---|---|---|
ADRESA | V | BAPIADDR3 | adresa |
SPOLEČNOST | V | BAPIUSCOMP | company |
VÝCHOZÍ HODNOTY | V | BAPIDEFAUL | výchozí hodnoty |
LOGONDATA | V | BAPILOGOND | logOnData |
HESLO | V | BAPIPWD | Heslo |
VRÁTIT | In-Out | TABLE_OF_BAPIRET2 | bapiret2Table |
SELF_REGISTER | V | String | "X" |
UŽIVATELSKÉ JMÉNO | V | String | userName |
- Vyberte OK. Znaménko upozornění zmizí.
- Chcete-li zpracovat výsledky žádosti uživatele, přetáhněte aktivitu KDYŽ uvnitř aktivity Sequence za aktivitu WebServiceCall. Zadejte následující podmínku:
IsNothing (bapiret2Table.item) OrElse bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Pokud se zobrazí žádné chyby, předpokládáme, že operace exportu byla úspěšně dokončena a chceme označit úspěšný export tohoto objektu vytvořením CSEntryChangeResult se stavem Úspěch. Přetáhněte aktivitu CreateCSEntryChangeResult do větve Else aktivity IF a vyberte kód chyby úspěch.
- Volitelné: Pokud volání webové služby vrátí vygenerovaný název účtu uživatele, musíme aktualizovat hodnotu ukotvení exportovaného objektu. Uděláte to tak, že přetáhnete
CreateAttrubuteChange
aktivitu uvnitřCreateCSEntryChangeResult
aktivity a vyberete Přidat uživatelské jméno. Potom přetáhněteCreateValueChange
aktivitu uvnitřCreateAttributeChange
aktivity a zadejte název proměnné naplněné aktivitou volání webové služby. V této příručce použijete proměnnou userName, která se při exportu neaktualizuje.
- Posledním krokem v pracovním postupu Přidat export je zpracování chyb exportu a protokolování. Přetáhněte aktivitu sekvence do prázdné větve potom aktivity IF.
- Přetáhněte aktivitu protokolu do aktivity sekvence. Přepněte na kartu Vlastnosti a zadejte hodnotu LogText:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E"))
. ZPRÁVA. Udržujte vysokou úroveň protokolování a značku trasování. Tím se do protokolu událostí ConnectorsLog nebo ECMA2Host zapíše chybová zpráva, když je povolené podrobné trasování. - Přetáhněte aktivitu Switch do aktivity sekvence po aktivitě protokolu. V automaticky otevírajícím okně vyberte typ řetězce pro hodnotu přepínače. Zadejte následující výraz:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Vyberte výchozí případ a přetáhněte aktivitu CreateCSEntryChangeResult do těla tohoto případu. Zvolte Kód chyby ExportErrorInvalidProvisioningAttributeValue.
- Vyberte v oblasti Přidat nový případ a zadejte hodnotu případu 224.
CreateCSEntryChangeResult
Přetáhněte aktivitu do textu tohoto případu. ZvolteExportErrorCustomContinueRun
kód chyby.
Dokončili jste definici pracovního postupu Přidat export.
Vytvoření pracovního postupu odstranění exportu
Pokud chcete odstranit uživatele v SAP ECC, můžete volat BAPI_USER_DELETE program a zadat název účtu, který se má odstranit v připojeném systému. Obraťte se na správce SAP a zjistěte, jestli je tento scénář povinný. Účty SAP ECC se většinou neodstraní, ale nastaví se na vypršení platnosti, aby se zachovaly historické záznamy.
Tato příručka nepokrývá scénáře související se systémem SAP Common User Administration, zrušením zřízení uživatelů z připojených systémů, odvoláním licencí atd.
V pracovních postupech exportu není potřeba implementovat stránkování. V kontextu pracovního postupu je k dispozici pouze jeden objekt objectToExport.
- Přejděte na Typy objektů –> Uživatel –> Export –> Odstranit pracovní postup a z panelu nástrojů na pravém panelu nástrojů přetáhněte aktivitu sekvence do podokna návrháře pracovního postupu.
- V levém dolním rohu vyhledejte tlačítko Proměnné a vyberte ho, aby se rozbalil seznam proměnných definovaných v této sekvenci.
- Přidejte následující proměnné. Pokud chcete vybrat typ proměnné vygenerovaný ze SAP WSDL, vyberte možnost Procházet typy a rozbalte vygenerovaný a rozbalte obor názvů SAPECC. Tím se inicializují datové struktury používané programem BAPI_USER_DELETE.
Name | Typ proměnné | Obor | Výchozí |
---|---|---|---|
userName | String | Sequence | |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Sequence | new TABLE_OF_BAPIRET2() |
- Když jsme definovali vlastnost userName jako neměnné ID a ukotvení, musíme extrahovat hodnotu userName z kolekce ukotvení našeho exportního objektu. Přetáhněte aktivitu ForEachWithBodyFactory ze sady nástrojů do aktivity sekvence. Nahraďte název proměnné položky ukotveným , přepněte na vlastnosti a zvolte TypeArgument of
Microsoft.MetadirectoryServices.AnchorAttribute
. Do pole Hodnota zadejteobjectToExport.AnchorAttributes
.
- Chcete-li extrahovat řetězcovou hodnotu ukotvení userName, přetáhněte aktivitu Switch uvnitř aktivity ForEach. Ve vyskakovacím okně vyberte typ přepínače
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
. Zadejte hodnotu výrazu: NewAnchorAttributeNameWrapper(anchor.Name)
. Vyberte možnost Přidat novou oblast případu aktivity Switch. Zadejte userName jako hodnotu velikosti písmen. Přetáhněte aktivitu Assign do textu případu userName a přiřaďte jianchor.Value.ToString()
proměnné userName. - Přetáhněte aktivitu WebSeviceCall do aktivity Sequence po aktivitě ForEach. Vyberte název služby SAPECC, koncový bod ZSAPCONNECTORWS a operaci BAPI_USER_DELETE. Vyberte tlačítko argumenty k definování parametrů pro volání webové služby, a to následujícím způsobem:
Name | Směr | Type | Hodnota |
---|---|---|---|
VRÁTIT | In/Out | TABLE_OF_BAPIRET2 | bapiret2Table |
UŽIVATELSKÉ JMÉNO | V | String | userName |
- Vyberte OK. Znaménko upozornění zmizí.
- Pokud chcete zpracovat odstranění výsledků žádosti uživatele, přetáhněte aktivitu IF uvnitř aktivity Sequence za aktivitu WebServiceCall. Zadejte následující podmínku:
If(bapiRet2Table.item, Enumerable.Empty(Of BAPIRET2)()).Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Pokud nedojde k žádným chybám, předpokládáme, že operace odstranění byla úspěšně dokončena a chceme označit úspěšný export tohoto objektu vytvořením
CSEntryChangeResult
se stavem Úspěch.CreateCSEntryChangeResult
Přetáhněte aktivitu do větve Else aktivity IF a vyberte kód chyby Úspěch.
- Posledním krokem pracovního postupu Odstranění exportu je zpracování chyb exportu a protokolování. Přetáhněte aktivitu sekvence do prázdné větve potom aktivity IF.
- Přetáhněte aktivitu protokolu do aktivity sekvence. Přepněte na kartu Vlastnosti a zadejte hodnotu LogText:
bapiRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")= True).MESSAGE
. Udržujte vysokou úroveň protokolování a značku trasování. Protokoluje chybovou zprávu do protokolu událostí ConnectorsLog nebo ECMA2Host při povolení podrobného trasování. - Přetáhněte aktivitu Switch do aktivity sekvence po aktivitě protokolu. V automaticky otevíraných oknech vyberte Typ řetězce hodnoty přepínače. Zadejte následující výraz:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Vyberte výchozí případ a přetáhněte aktivitu CreateCSEntryChangeResult do textu tohoto případu. Zvolte kód chyby ExportErrorSyntaxViolation.
- Vyberte v oblasti Přidat nový případ a zadejte hodnotu případu 124.
CreateCSEntryChangeResult
Přetáhněte aktivitu do textu tohoto případu. ZvolteExportErrorCustomContinueRun
kód chyby.
Dokončili jste definici pracovního postupu exportu odstranění.
Vytvoření pracovního postupu Nahrazení exportu
Pokud chcete aktualizovat uživatele v SAP ECC, můžete volat BAPI_USER_CHANGE program a zadat všechny parametry včetně názvu účtu a všech podrobností o uživateli, včetně těch, které se nemění. Režim exportu ECMA2 při zadání všech vlastností uživatele se nazývá Nahradit. Ve srovnání režim exportu AtributUpdate poskytuje pouze atributy, které se mění, a to může způsobit, že některé vlastnosti uživatele budou přepsány prázdnými hodnotami. Konektor webové služby proto vždy používá režim exportu nahrazení objektu a očekává, že konektor bude nakonfigurovaný pro typ exportu: Nahradit.
Pracovní postup Nahrazení exportu je téměř stejný jako pracovní postup Pro přidání exportu. Jediným rozdílem je, že potřebujete zadat další parametry, jako je addressX nebo companyX pro BAPI_USER_CHANGE program. X na konci addressX označuje, že struktura adresy obsahuje změnu.
- Přejděte na Typy objektů –> Uživatel –> Export –> Nahradit pracovní postup a z panelu nástrojů na pravém panelu nástrojů přetáhněte aktivitu sekvence do podokna návrháře pracovního postupu.
- V levém dolním rohu vyhledejte tlačítko Proměnné a vyberte ho, aby se rozbalil seznam proměnných definovaných v této sekvenci.
- Přidejte následující proměnné. Pokud chcete vybrat typ proměnné vygenerovaný ze SAP WSDL, vyberte možnost Procházet typy a rozbalte vygenerovaný a rozbalte obor názvů SAPECC. Tím se inicializují datové struktury používané programem BAPI_USER_CHANGE.
Name | Typ proměnné | Obor | Výchozí |
---|---|---|---|
userName | String | Sequence | |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Sequence | new TABLE_OF_BAPIRET2() |
addressX | SAPECC. BAPIADDR3X | Sequence | new BAPIADDR3X() |
adresa | SAPECC. BAPIADDR3 | Sequence | new BAPIADDR3() |
companyX | SAPECC. BAPIUSCOMX | Sequence | nový BAPIUSCOMX() |
company | SAPECC. BAPIUSCOMP | Sequence | new BAPIUSCOMP() |
defaultsX | SAPECC. BAPIDEFAX | Sequence | nový BAPIDEFAX() |
výchozí hodnoty | SAPECC. BAPIDEFAUL | Sequence | nový BAPIDEFAUL() |
logOnDataX | SAPECC. BAPILOGONX | Sequence | nový BAPILOGONX() |
logOnData | SAPECC. BAPILOGOND | Sequence | nový BAPILOGOND() |
Pracovní postup Nahradit export vypadá takto:
- Když jsme definovali vlastnost userName jako neměnné ID, tedy jako kotvu, musíme extrahovat hodnotu userName z kolekce kotev našeho exportního objektu. Přetáhněte aktivitu ForEachWithBodyFactory ze sady nástrojů do aktivity sekvence. Nahraďte název proměnné položky ukotveným , přepněte na vlastnosti a zvolte TypeArgument of
Microsoft.MetadirectoryServices.AnchorAttribute
. Do pole Hodnota zadejteobjectToExport.AnchorAttributes
.
- Chcete-li extrahovat řetězcovou hodnotu ukotvení userName, přetáhněte aktivitu Switch uvnitř aktivity ForEach. Ve vyskakovacím okně vyberte
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
typ přepínače. Zadejte hodnotu výrazu: NewAnchorAttributeNameWrapper(anchor.Name)
. Vyberte možnost Přidat nový případ v rámci aktivity Switch. Zadejte userName jako hodnotu velikosti písmen. Přetáhněte aktivitu Assign do textu případu userName a přiřaďte jianchor.Value.ToString()
proměnné userName. Pracovní postup Nahradit export vypadá takto:
- Teď, když jsme extrahovali hodnotu userName z exportované vlastnosti ukotvení objektu, musíme naplnit další struktury, jako jsou společnosti, výchozí hodnoty, adresa, přihlašovací data, která obsahují další podrobnosti o uživateli SAP. Provedeme to tak, že projdeme kolekcí všech atributů definovaných ve schématu.
- Sbalte aktivitu ForEach a přetáhněte jinou aktivitu ForEachWithBothFactory uvnitř vaší aktivity Sequence za existující aktivitou ForEach. Nahraďte název proměnné položky schématemAttr, přepněte na vlastnosti a zvolte TypeArgument of
Microsoft.MetadirectoryServices.SchemaAttribute
. Do pole Hodnota zadejteschemaType.Attributes
.
- Přetáhněte aktivitu sekvence do těla aktivity ForEach. V levém dolním rohu vyhledejte tlačítko Proměnné a vyberte ho, aby se rozbalil seznam proměnných definovaných v této sekvenci. Přidejte následující proměnnou: xValue typu String. Přetáhněte aktivitu Assign (Přiřadit) do aktivity sekvence. Přiřaďte výraz xValue:
If(objectToExport.AttributeChanges.Contains(schemaAttr.Name), objectToExport.AttributeChanges(schemaAttr.Name).ValueChanges(0).Value.ToString(), String.Empty)
Buď extrahuje změny fázované pro export pro tento atribut, nebo inicializuje ho prázdným řetězcem. Pracovní postup Nahradit export vypadá takto:
- Přetáhněte aktivitu Switch po přiřazení aktivity. V místní nabídce vyberte
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
a vyberte OK. Zadejte následující výraz: NovýAttributeNameWrapper(schemaAttr.Name)
. V pravém horním rohu aktivity Switch se zobrazí ikona upozornění týkající se neošetřených atributů definovaných ve schématu a nepřiřazená k žádné vlastnosti. Vyberte možnost Přidat nový případ v aktivitě Switch a zadejte hodnotu případu pro město. Přetáhněte aktivitu sekvence do těla tohoto případu. Přetáhněte aktivitu Přiřadit do textu tohoto případu. Přiřaďte hodnotu X k addressX.city. Přetáhněte další aktivitu Assign do textu tohoto případu. Přiřaďte hodnotu xValue k address.city. Pracovní postup Nahradit export vypadá takto:
10.Přidejte další chybějící případy a přiřazení. Tuto tabulku mapování použijte jako vodítko:
Velikost písmen | Přiřazení |
---|---|
city | addressX.city = "X" address.city = xValue |
company | companyX.company = "X" company.company = xValue |
department | address.departmentX = "X" address.department = xValue |
addressX.e_mail = "X" address.e_mail = xValue | |
expirationTime | logOnDataX.GLTGB = "X" logOnData.GLTGB = xValue |
Jméno | 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" adresa. TEL1_Numbr = xValue |
jobTitle | addressX.function = "X" address.function = xValue |
Pracovní postup Nahradit export vypadá takto:
Před voláním BAPI_USER_CHANGE programu musíme zkontrolovat neprázdné uživatelské jméno. Sbalte obě aktivity ForEach a přetáhněte aktivitu KDYŽ po druhé aktivitě ForEach. Zadejte následující podmínku:
String.IsNullOrEmpty(userName ) = False
Když je uživatelské jméno prázdné, chceme označit, že operace nebyla úspěšná.
CreateCSEntryChangeResult
Přetáhněte aktivitu do větve Else aktivity IF a vyberteExportErrorCustomContinueRun
kód chyby. Pracovní postup Nahradit export vypadá takto:Přetáhněte aktivitu sekvence do prázdné větve potom první aktivity KDYŽ. Přetáhněte aktivitu WebSeviceCall uvnitř aktivity Sequence. Vyberte název služby SAPECC, koncový bod ZSAPCONNECTORWS a operaci BAPI_USER_CHANGE. Klikněte na tlačítko Argumenty k definování parametrů pro volání webové služby takto:
Name | Směr | Type | Hodnota |
---|---|---|---|
ADRESA | V | BAPIADDR3 | adresa |
ADDRESSX | V | BAPIADDR3X | addressX |
SPOLEČNOST | V | BAPIUSCOMP | company |
COMPANYX | V | BAPIUSCOMX | company |
VÝCHOZÍ HODNOTY | V | BAPIDEFAUL | výchozí hodnoty |
DEFAULTSX | V | BAPIDEFAX | defaultsX |
LOGONDATA | V | BAPILOGOND | logOnData |
LOGONDATAX | V | BAPILOGONX | logOnDataX |
VRÁTIT | In/Out | TABLE_OF_BAPIRET2 | bapiret2Table |
UŽIVATELSKÉ JMÉNO | V | String | userName |
- Vyberte OK. Znaménko upozornění zmizí. Pracovní postup Nahradit export vypadá takto:
- Chcete-li zpracovat výsledky žádosti o změnu uživatele, přetáhněte aktivitu IF uvnitř aktivity Sequence za aktivitu WebServiceCall. Zadejte následující podmínku:
Not IsNothing(bapiret2Table.item) AndAlso bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Pokud nedojde k žádným chybám, předpokládáme, že se operace exportu úspěšně dokončila a chceme označit úspěšný export tohoto objektu vytvořením
CSEntryChangeResult
se stavem Úspěch.CreateCSEntryChangeResult
Přetáhněte aktivitu do větve Else aktivity IF a vyberte kód chyby Úspěch. - Přetáhněte aktivitu sekvence do větve aktivity IF. Přidejte aktivitu protokolu s hodnotou
string.Join("\n",bapiret2Table.item.Where(Function(retItem) retItem.TYPE.Equals("E")).Select(Function(r) r.MESSAGE))
LogText a značkou Error. PřidejteCreateCSEntryChangeResult
aktivitu po aktivitě protokolu s kódemExportErrorCustomContinueRun
chyby . Pracovní postup Nahradit export vypadá takto:
Dokončili jste definici pracovního postupu Nahrazení exportu.
Dalším krokem je konfigurace konektoru webové služby ECMA2Host pomocí této šablony.