Tworzenie szablonu łącznika usługi internetowej SAP ECC 7.51 dla hosta ECMA2Host
Ten przewodnik przeprowadzi Cię przez proces tworzenia szablonu dla łącznika agenta zarządzania łącznością rozszerzalności usług sieci Web (ECMA) w celu zarządzania użytkownikami programu SAP ECC.
Ograniczenia i założenia
Ten szablon przedstawia sposób zarządzania użytkownikami. Inne typy obiektów, takie jak lokalne grupy działań, role i profile, nie są objęte tym przewodnikiem, ponieważ host ECMA2Host nie obsługuje obecnie odwołań wielowartych. Operacje na hasłach są również poza zakresem tego przewodnika.
Ten przewodnik nie obejmuje tworzenia konta usługi w oprogramowaniu SAP, które jest używane do wywoływania uwidocznionych funkcji BAPI. Przyjęto założenie, że wstępnie utworzone konto demonstracyjne Developer jest używane z profilem RFC_ALL, który przyznaje uprawnienia do interfejsów BAPI wymienionych w tym artykule.
Narzędzie konfiguracji usługi sieci Web nie obsługuje następujących funkcji uwidocznionych w oprogramowaniu SAP domyślnie: Zasady programu WSP i wiele powiązań na punkt końcowy. Oczekuje to, że WSDL tylko z protokołu SOAP 1.1, powiązanie stylu dokumentu all-in-one bez zasad.
Funkcje BAPI sap ECC używane w tym szablonie:
- BAPI_USER_GETLIST — uzyskaj listę wszystkich użytkowników połączonych z tym systemem.
- BAPI_USER_GETDETAIL — uzyskaj szczegółowe informacje o określonym użytkowniku.
- BAPI_USER_CREATE1 — tworzy użytkownika.
- BAPI_USER_DELETE — usuwa użytkownika.
- BAPI_USER_CHANGE — aktualizuje użytkownika.
Wszystkie właściwości użytkownika sap w tym przewodniku są traktowane jako właściwości o pojedynczej wartości.
Używany język programowania to Visual Basic.
Definiowanie punktu końcowego usługi internetowej i tworzenie schematu
Zanim będzie można zaprojektować przepływy pracy importowania i eksportowania, należy utworzyć szablon i zdefiniować punkt końcowy za pomocą funkcji SAP BAPI uwidocznionych za pośrednictwem interfejsu PROTOKOŁU SOAP. Następnie utwórz schemat obiektów ECMA2 i ich właściwości są dostępne w tym szablonie.
- W folderze "C:\Program Files\Microsoft ECMA2Host\Web Service Configuration Tool" uruchom narzędzie konfiguracji usługi sieci Web wsconfigTool.exe
- Z menu File-New wybierz pozycję Utwórz nowy projekt SOAP
- Wybierz Projekt SOAP i wybierz Dodaj nową usługę internetową.
- Nazwij swoją usługę internetową SAPECC, podaj adres URL do pobrania opublikowanego pliku WSDL, wprowadź wartość SAPECC jako przestrzeń nazw. Nazwa usługi sieci Web pomaga odróżnić tę usługę internetową od innych. Przestrzeń nazw definiuje nazwę przestrzeni nazw microsoft .NET używanej do generowania klas. Wybierz opcję Tryb uwierzytelniania podstawowego, chyba że administrator SAP w inny sposób nie poinstruuje. Wybierz pozycję Dalej.
- Podaj poświadczenia, aby nawiązać połączenie z punktem końcowym usługi SAP ECC. Wybierz pozycję Dalej.
- Na stronie sekcji punkty końcowe i operacje upewnij się, że BAPI są wyświetlane i kliknij Zakończ
Uwaga
Jeśli widzisz więcej niż jeden punkt końcowy, włączono powiązania protokołu SOAP 1.2 i SOAP 1.1. Powoduje to niepowodzenie łącznika. Zmodyfikuj definicję powiązania w programie SOAMANAGER i zachowaj tylko jedną definicję. Następnie ponownie dodaj usługę internetową.
- Zapisz projekt w folderze C:\Program Files\Microsoft ECMA2Host\Service\ECMA.
- Przejdź do karty Typy obiektów i dodaj typ obiektu Użytkownik. Wybierz przycisk OK.
- Rozwiń kartę Typy obiektów i wybierz definicję typu użytkownika.
- Dodaj następujące atrybuty do schematu i wybierz pozycję userName jako kotwicę.
- Zapisz projekt.
Nazwisko | Typ | Kotwica |
---|---|---|
miejscowość | string | |
company | string | |
department | string | |
adres e-mail | string | |
expirationTime | string | |
firstName | string | |
lastName | string | |
middleName | string | |
telephoneNumber | string | |
jobTitle | string | |
userName | string | checked |
Tworzenie przepływu pracy pełnego importu
Przepływ pracy Importuj, będąc opcjonalnym elementem ECMA2Host, umożliwia importowanie istniejących użytkowników sap do pamięci podręcznej ECMA2Host i unikanie tworzenia duplikatów użytkowników podczas aprowizacji.
Jeśli nie utworzysz przepływu pracy importu, łącznik działa w trybie tylko eksport, co powoduje, że host ECMA2Host zawsze wystawia operacje tworzenia użytkownika , nawet dla istniejących użytkowników. Może to prowadzić do awarii lub duplikatów, gdy standardowe interfejsy BAPI sap są używane, chyba że duplikaty są obsługiwane przez przepływ pracy eksportowania.
System SAP ECC nie oferuje wbudowanego mechanizmu odczytywania zmian wprowadzonych od ostatniego odczytu.
W związku z tym implementujemy tylko przepływ pracy pełnego importu. Jeśli musisz zaimplementować importy różnicowe ze względu na wydajność, skontaktuj się z administratorem SAP, aby uzyskać listę interfejsów BAPI i opublikować je jako usługę internetową protokołu SOAP. Następnie zaimplementuj przepływ pracy importowania różnicowego zgodnie z poniższym podejściem i z użyciem właściwości customData, która zawiera znacznik czasu poprzedniego pomyślnego uruchomienia.
Rozwiązanie SAP ECC oferuje kilka funkcji BAPI umożliwiających uzyskanie listy użytkowników z ich właściwościami:
- BAPI_USER_GETLIST — uzyskaj listę wszystkich użytkowników połączonych z tym systemem.
- BAPI_USER_GETDETAIL — uzyskaj szczegółowe informacje o określonym użytkowniku.
Tylko te dwa interfejsy BAPI są używane do pobierania istniejących użytkowników z usługi SAP ECC w tym szablonie.
- Przejdź do obszaru Typy obiektów —> Użytkownik —> Importowanie —> pełny przepływ pracy importu i z przybornika po prawej stronie przeciągnij i upuść działanie Sekwencja w okienku projektanta przepływu pracy.
- W lewym dolnym rogu znajdź przycisk Zmienne i wybierz go, aby rozwinąć listę zmiennych zdefiniowanych w ramach tej sekwencji.
- Dodaj następujące zmienne. Aby wybrać typ zmiennej wygenerowany z SAP WSDL, wybierz pozycję Przeglądaj typy i rozwiń wygenerowany przez, a następnie rozwiń przestrzeń nazw SAPECC.
Nazwisko | Typ zmiennej | Scope | Wartość domyślna |
---|---|---|---|
selRangeTable | SAPECC. TABLE_OF_BAPIUSSRGE | Sequence | new TABLE_OF_BAPIUSSRGE with {.item = new BAPIUSSRGE(){new BAPIUSSRGE}} |
getListRetTable | SAPECC. TABLE_OF_BAPIRET2 | Sequence | nowa TABLE_OF_BAPIRET2 |
Pagesize | Int32 | Sequence | 200 |
returnedSize | Int32 | Sequence | |
usersTable | SAPECC. TABLE_OF_BAPIUSNAME | Sequence | new TABLE_OF_BAPIUSNAME() |
- Z narzędziownika przeciągnij i upuść cztery czynności przypisania wewnątrz czynności sekwencji i ustaw następujące wartości:
selRangeTable.item(0).PARAMETER = "USERNAME"
selRangeTable.item(0).SIGN = "I" selRangeTable.item(0).OPTION = "GT" selRangeTable.item(0).LOW = ""
Te parametry używane do wywoływania funkcji BAPI_USER_GETLIST i implementowania stronicowania.
- Aby zaimplementować stronicowanie, przeciągnij i upuść działanie DoWhile wewnątrz działania Sekwencja po ostatniej operacji Przypisywanie.
- W okienku po prawej stronie przejdź do karty Właściwości i wprowadź ten warunek w obszarze DoWhile
- cykl:
returnedSize = pageSize
- Wybierz zmienne i dodaj właściwość currentPageNumber typu int32 w cyklu DoWhile z wartością domyślną 0.
- Opcjonalny krok: jeśli planujesz zaimplementować przepływ pracy importowania różnicowego, przeciągnij i upuść działanie Assign w przyborniku wewnątrz działania Sekwencja po cyklu DoWhile. Ustaw tę wartość:
-
customData(schemaType.Name + "_lastImportTime") = DateTimeOffset.UtcNow.Ticks.ToString()
Spowoduje to zapisanie daty i godziny ostatniego pełnego uruchomienia importu, a ten znacznik czasu może być później używany w przepływie pracy usługi Delta Import.
- Z przybornika przeciągnij i upuść aktywność Sequence w aktywności DoWhile. Przeciągnij i upuść działanie WebServiceCall wewnątrz tego działania sekwencji i wybierz nazwę usługi SAPECC, punkt końcowy ZSAPCONNECTORWS i operację BAPI_USER_GETLIST.
- Kliknij przycisk argumenty, aby zdefiniować parametry wywołania usługi internetowej w następujący sposób:
Nazwisko | Kierunek | Typ | Wartość |
---|---|---|---|
MAX_ROWS | W | Int32 | Pagesize |
MAX_ROWSSpecified | W | Wartość logiczna | Prawda |
WRÓCIĆ | We/Wy | TABLE_OF_BAPIRET2 | getListRetTable |
SELECTION_EXP | We/Wy | TABLE_OF_BAPIUSSEXP | |
SELECTION_RANGE | We/Wy | TABLE_OF_BAPIUSSRGE | selRangeTable |
LISTA UŻYTKOWNIKÓW | We/Wy | TABLE_OF_BAPIUSNAME | usersTable |
WITH_USERNAME | W | String | |
WIERSZE | Out | Int32 | returnedSize |
- Wybierz przycisk OK. Znak ostrzegawczy zniknie. Lista użytkowników przechowywanych w zmiennej usersTable. Ponieważ system SAP nie zwraca pełnej listy użytkowników w jednej odpowiedzi, musimy zaimplementować stronicowanie i wywołać tę funkcję kilka razy podczas przełączania stron. Następnie dla każdego zaimportowanego użytkownika musisz uzyskać szczegóły tego użytkownika, wykonując oddzielne wywołanie. Oznacza to, że w przypadku środowiska z 1000 użytkownikami i rozmiarem strony 200 łącznik usługi sieci Web wykonuje 5 wywołań w celu pobrania listy użytkowników i 1000 pojedynczych wywołań w celu pobrania szczegółów użytkowników. Aby zwiększyć wydajność, poproś zespół SAP o opracowanie niestandardowego programu BAPI zawierającego listę wszystkich zastosowań z ich właściwościami. Pozwala to uniknąć konieczności wykonywania 1000 pojedynczych wywołań i uwidaczniania funkcji BAPI za pośrednictwem punktu końcowego protokołu SOAP WS.
- Z przybornika przeciągnij i upuść działanie IF wewnątrz działania DoWhile po działaniu WebServiceCall. Określ ten warunek, aby sprawdzić, czy niepusta odpowiedź i brak błędów:
IsNothing(getListRetTable.item) OrElse getListRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
- Z przybornika przeciągnij i upuść działanie Throw w gałęzi Else działania IF, aby zgłosić błąd podczas nieudanego importowania. Przejdź do karty Właściwości i wprowadź to wyrażenie dla właściwości Exception działania Throw:
New Exception(getListRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")).MESSAGE)
- Aby przetworzyć listę zaimportowanych użytkowników, przeciągnij i upuść działanie ForEachWithBodyFactory z przybornika do gałęzi Then działania IF. Przejdź do karty Właściwości i wybierz pozycję SAPECC. BAPIUSNAME jako TypeArgument. Kliknij przycisk ... i wpisz to wyrażenie w pole wartości:
if(usersTable.item,Enumerable.Empty(of BAPIUSNAME)())
- Z przybornika przeciągnij i upuść aktywność Sekwencja wewnątrz aktywności ForEach. Mając aktywne okno działania Sekwencja, kliknij przycisk Zmienne i zdefiniuj następujące zmienne:
Nazwisko | Typ zmiennej | Scope | Wartość domyślna |
---|---|---|---|
company | SAPECC. BAPIUSCOMP | Sequence | nowy BAPIUSCOMP() |
adres | SAPECC. BAPIADDR3 | Sequence | new BAPIADDR3() |
Wartości domyślne | SAPECC. BAPIDEFAUL | Sequence | nowy BAPIDEFAUL() |
logndata | SAPECC. BAPILOGOND | Sequence | nowy BAPILOGOND() |
getDetailRetTable | SAPECC. TABLE_OF_BAPIRET2 | Sequence | new TABLE_OF_BAPIRET2() |
Działanie IF wygląda następująco:
- Przeciągnij i upuść działanie CreateCSEntryChangeScope wewnątrz działania Sekwencja. We właściwości DN wprowadź schemaType.Name & element. NAZWA UŻYTKOWNIKA. W polu CreateAnchorAttribute AnchorValue wprowadź wartość item.username.
- Aby pobrać szczegóły każdego użytkownika, przeciągnij i upuść działanie WebServiceCall przybornika wewnątrz działania sekwencji bezpośrednio przed działaniem CreateAnchorAttribute. Wybierz nazwę usługi SAPECC, punkt końcowy ZSAPCONNECTORWS i operację BAPI_USER_GET_DETAIL. Wybierz przycisk Argumenty, aby zdefiniować parametry wywołania usługi internetowej w następujący sposób:
Nazwisko | Kierunek | Typ | Wartość |
---|---|---|---|
WRÓCIĆ | We/Wy | TABLE_OF_BAPIRET2 | getDetailRetTable |
NAZWA UŻYTKOWNIKA | W | String | item.username |
ADRES | Out | BAPIADDR3 | adres |
FIRMA | Out | BAPIUSCOMP | company |
USTAWIENIA DOMYŚLNE | Out | BAPIUSDEFAUL | Wartości domyślne |
LOGONDATA | Out | BAPILOGOND | logonData |
WITH_USERNAME | W | String | |
WIERSZE | Out | Int32 | returnedSize |
- Wybierz przycisk OK. Znak ostrzegawczy zniknie. Szczegóły użytkownika są przechowywane w powyższych zmiennych. Działanie IF wygląda następująco:
- Aby sprawdzić wyniki operacji BAPI_USER_GET_DETAIL, z przybornika przeciągnij i upuść działanie IF i umieść je wewnątrz działania Sekwencja między działaniami WebServiceCall i CreateAnchorAttribute. Wprowadź następujący warunek:
IsNothing(getDetailRetTable.item) OrElse getDetailRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
Ponieważ brakujące szczegóły użytkownika nie powinny być traktowane jako katastrofalne zdarzenie, chcemy wskazać ten błąd i kontynuować przetwarzanie innych użytkowników. Przeciągnij i upuść działanie Sekwencja do gałęzi Else działania IF. Dodaj działanie dziennika wewnątrz tego nowego działania sekwencji. Przejdź do karty Właściwości i zmień właściwość Poziom na Wysoki, Tag na Trace. Wprowadź następujące informacje we właściwości LogText: string.Join("\n", getDetailRetTable.item.Select (Function(item) item.MESSAGE ))
- Przeciągnij i upuść działanie Sekwencja do gałęzi Następnie działania IF. Przeciągnij i upuść istniejące działanie CreateAnchorAttribute do działania sekwencji wewnątrz gałęzi Następnie działania IF. Działanie ForEach wygląda teraz następująco:
- Dla każdej właściwości użytkownika, takiego jak miasto, firma, dział, poczta e-mail, dodaj działanie IF po działaniu CreateAnchorAttribute i sprawdź, czy niepuste wartości, wprowadzając warunki, takie jak
Not string.IsNullOrEmpty(address.city)
i dodając działania CreateAttributeChange do gałęzi Następnie tego działania IF.
Na przykład: Dodaj działania CreateAttributeChange dla wszystkich właściwości użytkownika przy użyciu tej tabeli mapowania:
Właściwość użytkownika ECMA | Właściwość SAP |
---|---|
miejscowość | address.city |
department | address.department |
company | company.company |
adres e-mail | address.e_mail |
firstName | address.firstName |
lastName | address.lastName |
middleName | address.middleName |
jobTitle | address.function |
expirationTime | logonData.GLTGB |
telephoneNumber | adres. TEL1_NUMBR |
- Na koniec dodaj działanie SetImportStatusCode po ostatnim działaniu CreateAttributeChange. Ustaw wartość ErrorCode na Powodzenie w gałęzi Następnie. Dodaj jeszcze jedno działanie kodu SetImportStatus do gałęzi Else i ustaw wartość ErrorCode na ImportErrorCustomContinueRun.
- Zwiń działanie sekwencji wewnątrz działania ForEach, aby cykl DoWhile wyglądał następująco:
- Aby pobrać następną stronę użytkowników, zaktualizuj
selRangeTable.item(0).LOW
właściwość. Przeciągnij i upuść działanie IF do działania Sekwencja w obszarze DoWhile. Umieść go po istniejącym działaniu IF. Wprowadź wartość returnedSize>0 jako Warunek. Dodaj działanie Assign do gałęzi Then działania IF i ustaw wartośćselRangeTable.item(0).LOW
usersTable.item(returnedSize-1).username
.
Ukończono definicję pełnego przepływu pracy importu.
Tworzenie przepływu pracy eksportu Dodaj
Aby utworzyć użytkownika w programie SAP ECC, możesz wywołać program BAPI_USER_CREATE1 i podać wszystkie parametry, w tym nazwę konta i początkowe hasło. Jeśli potrzebujesz nazwy konta, która ma być generowana po stronie systemu SAP, skontaktuj się z administratorem SAP i użyj niestandardowej funkcji BAPI zwracającej właściwość userName nowo utworzonego konta użytkownika.
Ten przewodnik nie demonstruje przypisywania licencji, lokalnych lub globalnych grup działań, systemów ani profilów. Skontaktuj się z administratorem sap i odpowiednio zmodyfikuj ten przepływ pracy.
Nie ma potrzeby implementowania stronicowania w przepływach pracy eksportowania. W kontekście przepływu pracy jest dostępny tylko jeden obiekt objectToExport.
- Przejdź do pozycji Typy obiektów —> Użytkownik —> Eksportowanie —> Dodaj przepływ pracy i z przybornika po prawej stronie przeciągnij i upuść działanie Sekwencja w okienku projektanta przepływu pracy.
- W lewym dolnym rogu znajdź przycisk Zmienne i wybierz go, aby rozwinąć listę zmiennych zdefiniowanych w ramach tej sekwencji.
- Dodaj następujące zmienne. Aby wybrać typ zmiennej wygenerowany na podstawie języka SAP WSDL, wybierz pozycję Przeglądaj dla typów i rozwiń węzeł wygenerowany, a następnie rozwiń węzeł Przestrzeń nazw SAPECC. Inicjuje struktury danych używane przez program BAPI_USER_CREATE1.
Nazwisko | Typ zmiennej | Scope | Wartość domyślna |
---|---|---|---|
adres | SAPECC. BAPIADDR3 | Sequence | new BAPIADDR3() |
userName | String | Sequence | |
hasło | SAPECC. BAPIPWD | Sequence | nowy BAPIPWD() |
company | SAPECC. BAPIUSCOMP | Sequence | nowy BAPIUSCOMP() |
Wartości domyślne | SAPECC. BAPIDEFAUL | Sequence | nowy BAPIDEFAUL() |
logOnData | SAPECC. BAPILOGOND | Sequence | nowy BAPILOGOND() |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Sequence | new TABLE_OF_BAPIRET2() |
- Ponieważ zdefiniowaliśmy właściwość userName jako niezmienny identyfikator, czyli kotwicę, musimy wyodrębnić wartość userName z kolekcji kotwic naszego obiektu eksportowanego. Przeciągnij i upuść działanie ForEachWithBodyFactory z przybornika do działania Sekwencja. Zastąp nazwę zmiennej elementu kotwicą, przejdź do właściwości i wybierz typArgument elementu
Microsoft.MetadirectoryServices.AnchorAttribute
. W polu Wartość wpiszobjectToExport.AnchorAttributes
.
- Aby wyodrębnić wartość ciągu kotwicy userName, przeciągnij i upuść działanie Switch wewnątrz działania ForEach. W oknie podręcznym wybierz typ przełącznika
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
. Wprowadź wartość wyrażenia: New AnchorAttributeNameWrapper(anchor. Nazwa). - Wybierz pozycję Dodaj nowy obszar przypadku działania Przełącz. Wpisz userName jako wartość wielkości liter. Przeciągnij i upuść działanie Assign do treści sprawy userName i przypisz kotwicę. Value.ToString() do zmiennej userName.
- Teraz, gdy wyodrębniliśmy wartość userName z wyeksportowanej właściwości kotwicy obiektu, musimy wypełnić inne struktury, takie jak firma, wartości domyślne, adres, dane logowania zawierające inne szczegóły użytkownika SAP. Robimy to przez przechodzenie na rowerze przez kolekcję zmian atrybutów.
- Zwiń działanie ForEach i przeciągnij i upuść kolejne działanie ForEachWithBothFactory wewnątrz działania sekwencji po istniejącym działaniu ForEach. Zastąp nazwę zmiennej elementu atrybutemChange, przejdź do właściwości i wybierz pozycję TypeArgument of
Microsoft.MetadirectoryServices.AttributeChange
. W polu Wartość wpiszobjectToExport.AttributeChanges
.
- Przeciągnij i upuść działanie Switch w treści działania ForEach.
- W menu podręcznym wybierz pozycję
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
i wybierz przycisk OK. - Wprowadź następujące wyrażenie: New AttributeNameWrapper(attributeChange.Name). W prawym górnym rogu działania Przełącznik zobaczysz ikonę ostrzeżenia o nieobsługiwanych atrybutach zdefiniowanych w schemacie i nieprzypisanych do żadnej właściwości.
- Wybierz Dodaj nowy przypadek w obszarze działania Przełącznika i wpisz wartość przypadku dla miasta.
- Przeciągnij i upuść działanie Przypisz do treści tego przypadku. Przypisz
attributeChange.ValueChanges(0).Value.ToString()
do adresu.city.
- Dodaj inne brakujące przypadki i przypisania. Użyj tej tabeli mapowania jako przewodnika:
Przypadek | Przypisywanie |
---|---|
miejscowość | address.city = attributeChange.ValueChanges(0)Value.ToString() |
company | company.company = attributeChange.ValueChanges(0)Value.ToString() |
department | address.department = attributeChange.ValueChanges(0)Value.ToString() |
adres e-mail | address.e_mail = attributeChange.ValueChanges(0)Value.ToString() |
expirationTime | logOnData.GLTGB = attributeChange.ValueChanges(0)Value.ToString() |
firstname | address.firstname = attributeChange.ValueChanges(0)Value.ToString() |
lastName | address.lastname = attributeChange.ValueChanges(0)Value.ToString() |
middleName | address.middlename = attributeChange.ValueChanges(0)Value.ToString() |
telephoneNumber | adres. TEL1_Numbr = attributeChange.ValueChanges(0)Value.ToString() |
jobTitle | address.function = attributeChange.ValueChanges(0)Value.ToString() |
export_password | hasło. BAPIPWD1 = attributeChange.ValueChanges(0)Value.ToString() |
W tym miejscu export_password jest specjalnym atrybutem wirtualnym, który jest zawsze zdefiniowany w schemacie i może służyć do przekazywania początkowego hasła tworzonego użytkownika.
- Zwiń działanie ForEach i przeciągnij i upuść działanie IF do działania Sekwencja, po drugim działaniu ForEach, aby zweryfikować właściwości użytkownika przed przesłaniem żądania tworzenia użytkownika. Potrzebujemy co najmniej 3 wartości niepustych: nazwa użytkownika, nazwisko, początkowe hasło. Wprowadź następujący warunek:
(String.IsNullOrEmpty(address.lastname) = False ) AND (String.IsNullOrEmpty(userName) = False) AND (String.IsNullOrEmpty(password.BAPIPWD1) = False)
- W gałęzi Else działania IF dodaj jeszcze jedno działanie IF, ponieważ chcemy zróżnicować błędy w zależności od tego, co brakuje. Wprowadź wartość warunku: String.IsNullOrEmpty(userName). Przeciągnij i upuść
CreateCSEntryChangeResult
działania do obu gałęzi drugiego działania IF i skonfiguruj wartość ErrorCode ofExportErrorMissingAnchorComponent
iExportErrorMissingProvisioningAttribute
.
- Przeciągnij i upuść działanie Sekwencja w pustej gałęzi Następnie pierwszego działania IF. Przeciągnij i upuść działanie WebSeviceCall wewnątrz działania Sekwencja. Wybierz nazwę usługi SAPECC, punkt końcowy ZSAPCONNECTORWS i operację BAPI_USER_CREATE1. Aby zdefiniować parametry dla wywołania usługi sieciowej, kliknij przycisk "Argumenty" w następujący sposób:
Nazwisko | Kierunek | Typ | Wartość |
---|---|---|---|
ADRES | W | BAPIADDR3 | adres |
FIRMA | W | BAPIUSCOMP | company |
USTAWIENIA DOMYŚLNE | W | BAPIDEFAUL | Wartości domyślne |
LOGONDATA | W | BAPILOGOND | logOnData |
HASŁO | W | BAPIPWD | hasło |
WRÓCIĆ | Wyjście | TABLE_OF_BAPIRET2 | bapiret2Table |
SELF_REGISTER | W | String | "X" |
NAZWA UŻYTKOWNIKA | W | String | userName |
- Wybierz przycisk OK. Znak ostrzegawczy zniknie.
- Aby przetworzyć tworzenie wyników żądania użytkownika, przeciągnij i upuść działanie IF wewnątrz działania Sekwencja po działaniu WebServiceCall. Wprowadź następujący warunek:
IsNothing (bapiret2Table.item) OrElse bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Jeśli nie wystąpią żadne błędy, zakładamy, że operacja eksportowania została ukończona pomyślnie i chcemy wskazać pomyślne wyeksportowanie tego obiektu przez utworzenie pliku CSEntryChangeResult ze stanem Powodzenie. Przeciągnij i upuść działanie CreateCSEntryChangeResult do gałęzi Else działania IF i wybierz pozycję Kod błędu powodzenia.
- Opcjonalnie: Jeśli wywołanie usługi internetowej zwraca wygenerowaną nazwę konta użytkownika, musimy zaktualizować wartość kotwicy wyeksportowanego obiektu. Aby to zrobić, przeciągnij i upuść
CreateAttrubuteChange
działanie wewnątrzCreateCSEntryChangeResult
działania i wybierz pozycję Dodaj nazwę użytkownika. Następnie przeciągnij i upuśćCreateValueChange
działanie wewnątrzCreateAttributeChange
działania i wprowadź nazwę zmiennej wypełnianą przez działanie wywołania usługi internetowej. W tym przewodniku użyjesz zmiennej userName, która nie jest aktualizowana podczas eksportowania.
- Ostatnim krokiem przepływu pracy Eksportowanie dodawania jest obsługa błędów eksportu i rejestrowania. Przeciągnij i upuść działanie Sekwencja do pustej gałęzi Następnie działania IF.
- Przeciągnij i upuść działanie Dziennika do działania sekwencji. Przejdź do karty Właściwości i wprowadź wartość LogText:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E"))
. KOMUNIKAT. Zachowaj wysoki poziom rejestrowania i tag śledzenia. Spowoduje to zarejestrowanie komunikatu o błędzie w dzienniku łączników lub dzienniku zdarzeń ECMA2Host po włączeniu pełnego śledzenia. - Przeciągnij i upuść działanie Switch wewnątrz działania Sekwencja po działaniu dziennika. W oknie podręcznym wybierz typ ciągu dla wartości przełącznika. Wprowadź następujące wyrażenie:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Wybierz domyślny scenariusz i przeciągnij oraz upuść czynność CreateCSEntryChangeResult wewnątrz tego przypadku. Wybierz pozycję ExportErrorInvalidProvisioningAttributeValue kod błędu.
- Wybierz obszar Dodaj nową sprawę i wpisz wartość sprawy równą 224. Przeciągnij i upuść
CreateCSEntryChangeResult
działanie do treści tego przypadku. WybierzExportErrorCustomContinueRun
kod błędu.
Ukończono definicję eksportu Dodaj przepływ pracy.
Tworzenie przepływu pracy eksportowania usuwania
Aby usunąć użytkownika w programie SAP ECC, możesz wywołać program BAPI_USER_DELETE i podać nazwę konta, która ma zostać usunięta w połączonym systemie. Skontaktuj się z administratorem SAP, aby ustalić, czy ten scenariusz jest obowiązkowy. Najczęściej konta usługi SAP ECC nie są usuwane, ale są ustawione na wygaśnięcie w celu przechowywania rekordów historycznych.
Ten przewodnik nie obejmuje scenariuszy związanych z systemem SAP Common User Administration, anulowaniem aprowizacji użytkowników z połączonych systemów, odwoływaniem licencji itp.
Nie ma potrzeby implementowania stronicowania w przepływach pracy eksportowania. W kontekście przepływu pracy jest dostępny tylko jeden obiekt objectToExport.
- Przejdź do obszaru Typy obiektów —> Użytkownik —> Eksport —> Usuń przepływ pracy i z przybornika po prawej stronie, przeciągnij i upuść działanie Sekwencja w okienku projektanta przepływu pracy.
- W lewym dolnym rogu znajdź przycisk Zmienne i wybierz go, aby rozwinąć listę zmiennych zdefiniowanych w ramach tej sekwencji.
- Dodaj następujące zmienne. Aby wybrać typ zmiennej wygenerowany z SAP WSDL, wybierz opcję Przeglądaj typy i rozwiń węzeł wygenerowany, a następnie rozwiń przestrzeń nazw SAPECC. Inicjuje struktury danych używane przez program BAPI_USER_DELETE.
Nazwisko | Typ zmiennej | Scope | Wartość domyślna |
---|---|---|---|
userName | String | Sequence | |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Sequence | new TABLE_OF_BAPIRET2() |
- Ponieważ zdefiniowaliśmy właściwość userName jako niezmienny identyfikator, czyli kotwicę, musimy wyodrębnić wartość userName z kolekcji kotwic naszego obiektu eksportu. Przeciągnij i upuść działanie ForEachWithBodyFactory z przybornika do działania Sekwencja. Zastąp nazwę zmiennej elementu kotwicą, przejdź do właściwości i wybierz typArgument elementu
Microsoft.MetadirectoryServices.AnchorAttribute
. W polu Wartość wpiszobjectToExport.AnchorAttributes
.
- Aby wyodrębnić wartość ciągu kotwicy userName, przeciągnij i upuść działanie Switch wewnątrz działania ForEach. W oknie podręcznym wybierz typ przełącznika
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
. Wprowadź wartość wyrażenia: NowyAnchorAttributeNameWrapper(anchor.Name)
. Wybierz pozycję Dodaj nowy obszar przypadku działania Przełącz. Wpisz userName jako wartość wielkości liter. Przeciągnij i upuść działanie Assign do treści sprawy userName i przypiszanchor.Value.ToString()
do zmiennej userName. - Przeciągnij i upuść działanie WebSeviceCall wewnątrz działania Sekwencja po działaniu ForEach. Wybierz nazwę usługi SAPECC, punkt końcowy ZSAPCONNECTORWS i operację BAPI_USER_DELETE. Wybierz przycisk Argumenty, aby zdefiniować parametry wywołania usługi internetowej w następujący sposób:
Nazwisko | Kierunek | Typ | Wartość |
---|---|---|---|
WRÓCIĆ | We/Wy | TABLE_OF_BAPIRET2 | bapiret2Table |
NAZWA UŻYTKOWNIKA | W | String | userName |
- Wybierz przycisk OK. Znak ostrzegawczy zniknie.
- Aby przetworzyć usuwanie wyników żądania użytkownika, przeciągnij i upuść działanie IF wewnątrz działania Sekwencja po działaniu WebServiceCall. Wprowadź następujący warunek:
If(bapiRet2Table.item, Enumerable.Empty(Of BAPIRET2)()).Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Jeśli nie wystąpią żadne błędy, zakładamy, że operacja usuwania została ukończona pomyślnie i chcemy wskazać pomyślne wyeksportowanie tego obiektu przez utworzenie
CSEntryChangeResult
stanu Powodzenie. Przeciągnij i upuśćCreateCSEntryChangeResult
działanie do gałęzi Else działania IF i wybierz pozycję Kod błędu powodzenia.
- Ostatnim krokiem przepływu pracy eksportowania usuwania jest obsługa błędów eksportu i rejestrowania. Przeciągnij i upuść działanie Sekwencja do pustej gałęzi Następnie działania IF.
- Przeciągnij i upuść działanie Dziennika do działania sekwencji. Przejdź do karty Właściwości i wprowadź wartość LogText:
bapiRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")= True).MESSAGE
. Zachowaj wysoki poziom rejestrowania i tag śledzenia. Spowoduje to zarejestrowanie komunikatu o błędzie w dzienniku zdarzeń ConnectorsLog lub ECMA2Host po włączeniu pełnego śledzenia. - Przeciągnij i upuść działanie Switch wewnątrz działania Sekwencja po działaniu dziennika. W oknie podręcznym wybierz pozycję Typ ciągu wartości przełącznika. Wprowadź następujące wyrażenie:
bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
- Wybierz przypadek domyślny i przeciągnij i upuść aktywność CreateCSEntryChangeResult do treści tego przypadku. Wybierz pozycję ExportErrorSyntaxViolation error code (Kod błędu ExportErrorSyntaxViolation).
- Wybierz obszar Dodaj nową sprawę i wpisz wartość sprawy 124. Przeciągnij i upuść
CreateCSEntryChangeResult
działanie do treści tego przypadku. WybierzExportErrorCustomContinueRun
kod błędu.
Ukończono definicję przepływu pracy Eksportowanie usuwania.
Tworzenie przepływu pracy eksportowania zamień
Aby zaktualizować użytkownika w programie SAP ECC, możesz wywołać program BAPI_USER_CHANGE i podać wszystkie parametry, w tym nazwę konta i wszystkie szczegóły użytkownika, w tym te, które nie ulegają zmianie. Tryb eksportu ECMA2, gdy wszystkie właściwości użytkownika mają być udostępniane, nosi nazwę Replace. Dla porównania tryb eksportu AtrybutUpdate zapewnia tylko atrybuty, które są zmieniane i może to spowodować zastąpienie niektórych właściwości użytkownika pustymi wartościami. W związku z tym łącznik usługi sieci Web zawsze używa trybu eksportowania zamień obiektów i oczekuje, że łącznik zostanie skonfigurowany dla typu eksportu: Zastąp.
Przepływ pracy Eksportuj zamień jest prawie identyczny z przepływem pracy Eksportuj dodaj. Jedyną różnicą jest to, że należy określić dodatkowe parametry, takie jak addressX lub companyX dla programu BAPI_USER_CHANGE. Znak X na końcu adresuX wskazuje, że struktura adresu zawiera zmianę.
- Przejdź do pozycji Typy obiektów —> Użytkownik —> Eksport —> zamień przepływ pracy i z przybornika na działanie przeciągania i upuszczania sekwencji po prawej stronie do okienka projektanta przepływu pracy.
- W lewym dolnym rogu znajdź przycisk Zmienne i wybierz go, aby rozwinąć listę zmiennych zdefiniowanych w ramach tej sekwencji.
- Dodaj następujące zmienne. Aby wybrać typ zmiennej wygenerowany na podstawie SAP WSDL, wybierz pozycję Przeglądaj typy i rozwiń węzeł wygenerowany, a następnie rozwiń przestrzeń nazw SAPECC. Spowoduje to zainicjowanie struktur danych używanych przez program BAPI_USER_CHANGE.
Nazwisko | Typ zmiennej | Scope | Wartość domyślna |
---|---|---|---|
userName | String | Sequence | |
bapiret2Table | SAPECC. TABLE_OF_BAPIRET2 | Sequence | new TABLE_OF_BAPIRET2() |
addressX | SAPECC. BAPIADDR3X | Sequence | new BAPIADDR3X() |
adres | SAPECC. BAPIADDR3 | Sequence | new BAPIADDR3() |
companyX | SAPECC. BAPIUSCOMX | Sequence | nowy BAPIUSCOMX() |
company | SAPECC. BAPIUSCOMP | Sequence | nowy BAPIUSCOMP() |
defaultsX | SAPECC. BAPIDEFAX | Sequence | nowy BAPIDEFAX() |
Wartości domyślne | SAPECC. BAPIDEFAUL | Sequence | nowy BAPIDEFAUL() |
logOnDataX | SAPECC. BAPILOGONX | Sequence | nowy BAPILOGONX() |
logOnData | SAPECC. BAPILOGOND | Sequence | nowy BAPILOGOND() |
Przepływ pracy Eksportuj zamień wygląda następująco:
- Ponieważ zdefiniowaliśmy właściwość userName jako niezmienny identyfikator i kotwicę, musimy wyodrębnić wartość userName z kolekcji kotwic naszego obiektu eksportu. Przeciągnij i upuść działanie ForEachWithBodyFactory z przybornika do działania Sekwencja. Zastąp nazwę zmiennej elementu kotwicą, przejdź do właściwości i wybierz typArgument elementu
Microsoft.MetadirectoryServices.AnchorAttribute
. W polu Wartość wpiszobjectToExport.AnchorAttributes
.
- Aby wyodrębnić wartość ciągu kotwicy userName, przeciągnij i upuść działanie Switch wewnątrz działania ForEach. W oknie podręcznym wybierz
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper
typ przełącznika. Wprowadź wartość wyrażenia: NowyAnchorAttributeNameWrapper(anchor.Name)
. Wybierz obszar 'Dodaj nową sprawę' w działaniu typu 'Przełącz'. Wpisz userName jako wartość wielkości liter. Przeciągnij i upuść działanie Assign do treści sprawy userName i przypiszanchor.Value.ToString()
do zmiennej userName. Przepływ pracy Eksportuj zamień wygląda następująco:
- Teraz, gdy wyodrębniliśmy wartość userName z wyeksportowanej właściwości kotwicy obiektu, musimy wypełnić inne struktury, takie jak firma, wartości domyślne, adres, dane logowania zawierające inne szczegóły użytkownika SAP. Robimy to przez przechodzenie na rowerze przez kolekcję wszystkich atrybutów zdefiniowanych w schemacie.
- Zwiń działanie ForEach i przeciągnij i upuść kolejne działanie ForEachWithBothFactory wewnątrz działania sekwencji po istniejącym działaniu ForEach. Zamień nazwę zmiennej elementu na schemaAttr, przejdź do właściwości i wybierz typArgument elementu
Microsoft.MetadirectoryServices.SchemaAttribute
. W polu Wartość wpiszschemaType.Attributes
.
- Przeciągnij i upuść działanie Sekwencja w treści działania ForEach. W lewym dolnym rogu znajdź przycisk Zmienne i wybierz go, aby rozwinąć listę zmiennych zdefiniowanych w ramach tej sekwencji. Dodaj następującą zmienną: xValue typu Ciąg. Przeciągnij i upuść działanie Przypisz do działania Sekwencja. Przypisz xValue wyrażenie:
If(objectToExport.AttributeChanges.Contains(schemaAttr.Name), objectToExport.AttributeChanges(schemaAttr.Name).ValueChanges(0).Value.ToString(), String.Empty)
Wyodrębnia zmiany przygotowane do eksportu dla tego atrybutu lub inicjuje go pustym ciągiem. Przepływ pracy Eksportuj zamień wygląda następująco:
- Przeciągnij i upuść działanie Switch po przypisaniu działania. W menu podręcznym wybierz pozycję
Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper
i wybierz przycisk OK. Wprowadź następujące wyrażenie: NewAttributeNameWrapper(schemaAttr.Name)
. W prawym górnym rogu działania Przełącznik zobaczysz ikonę ostrzeżenia o nieobsługiwanych atrybutach zdefiniowanych w schemacie i nieprzypisanych do żadnej właściwości. Wybierz pozycję Dodaj nowy obszar przypadku działania Przełącz i wpisz wartość przypadku miasta. Przeciągnij i upuść działanie Sekwencja w treści tego przypadku. Przeciągnij i upuść działanie Przypisywanie do treści tego przypadku. Przypisz wartość "X" do adresuX.city. Przeciągnij i upuść kolejne działanie Assign w treści tego przypadku. Przypisz wartość xValue do adresu.city. Przepływ pracy Eksportuj zamień wygląda następująco:
10.Dodaj inne brakujące przypadki i przypisania. Użyj tej tabeli mapowania jako przewodnika:
Przypadek | Przypisywanie |
---|---|
miejscowość | addressX.city = "X" address.city = xValue |
company | companyX.company = "X" company.company = xValue |
department | address.departmentX = "X" address.department = xValue |
adres e-mail | addressX.e_mail = "X" address.e_mail = xValue |
expirationTime | logOnDataX.GLTGB = "X" logOnData.GLTGB = xValue |
firstname | addressX.firstname = "X" address.firstname = xValue |
lastName | addressX.lastname = "X" address.lastname = xValue |
middleName | addressX.middlename = "X" address.middlename = xValue |
telephoneNumber | addressX.TEL1_Numbr = "X" adres. TEL1_Numbr = xValue |
jobTitle | addressX.function = "X" address.function = xValue |
Przepływ pracy Eksportuj zamień wygląda następująco:
Przed wywołaniem programu BAPI_USER_CHANGE musimy sprawdzić, czy nie jest pusta nazwa użytkownika. Zwiń zarówno działania ForEach, jak i przeciągnij i upuść działanie IF po drugim działaniu ForEach. Wprowadź następujący warunek:
String.IsNullOrEmpty(userName ) = False
Gdy nazwa użytkownika jest pusta, chcemy wskazać, że operacja nie powiodła się. Przeciągnij i upuść
CreateCSEntryChangeResult
działanie do gałęzi Else działania IF i wybierzExportErrorCustomContinueRun
kod błędu. Przepływ pracy Eksportuj zamień wygląda następująco:Przeciągnij i upuść działanie Sekwencja w pustej gałęzi Następnie pierwszego działania IF. Przeciągnij i upuść działanie WebSeviceCall wewnątrz działania Sekwencja. Wybierz nazwę usługi SAPECC, punkt końcowy ZSAPCONNECTORWS i operację BAPI_USER_CHANGE. Kliknij przycisk Argumenty, aby zdefiniować parametry dla wywołania usługi internetowej w następujący sposób:
Nazwisko | Kierunek | Typ | Wartość |
---|---|---|---|
ADRES | W | BAPIADDR3 | adres |
ADDRESSX | W | BAPIADDR3X | addressX |
FIRMA | W | BAPIUSCOMP | company |
COMPANYX | W | BAPIUSCOMX | company |
USTAWIENIA DOMYŚLNE | W | BAPIDEFAUL | Wartości domyślne |
DEFAULTSX | W | BAPIDEFAX | defaultsX |
LOGONDATA | W | BAPILOGOND | logOnData |
LOGONDATAX | W | BAPILOGONX | logOnDataX |
WRÓCIĆ | We/Wy | TABLE_OF_BAPIRET2 | bapiret2Table |
NAZWA UŻYTKOWNIKA | W | String | userName |
- Wybierz przycisk OK. Znak ostrzegawczy zniknie. Przepływ pracy Eksportuj zamień wygląda następująco:
- Aby przetworzyć zmiany wyników żądania użytkownika, przeciągnij i upuść działanie IF wewnątrz działania Sekwencja po działaniu WebServiceCall. Wprowadź następujący warunek:
Not IsNothing(bapiret2Table.item) AndAlso bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
- Jeśli nie wystąpią żadne błędy, zakładamy, że operacja eksportowania została ukończona pomyślnie i chcemy wskazać pomyślne wyeksportowanie tego obiektu przez utworzenie
CSEntryChangeResult
stanu Powodzenie. Przeciągnij i upuśćCreateCSEntryChangeResult
działanie do gałęzi Else działania IF i wybierz pozycję Kod błędu powodzenia. - Przeciągnij i upuść działanie Sekwencja do gałęzi Następnie działania IF. Dodaj aktywność dziennika z wartością
string.Join("\n",bapiret2Table.item.Where(Function(retItem) retItem.TYPE.Equals("E")).Select(Function(r) r.MESSAGE))
LogText i tagiem Error. DodajCreateCSEntryChangeResult
działanie po działaniu dziennika z kodem błędu .ExportErrorCustomContinueRun
Przepływ pracy Eksportuj zamień wygląda następująco:
Ukończono definicję przepływu pracy Eksportuj zamień.
Następnym krokiem jest skonfigurowanie łącznika ECMA2Host Webservice przy użyciu tego szablonu.